equal
deleted
inserted
replaced
199 ec_slave_t *slave = fsm->slave; |
199 ec_slave_t *slave = fsm->slave; |
200 ec_master_t *master = slave->master; |
200 ec_master_t *master = slave->master; |
201 ec_soe_request_t *request = fsm->request; |
201 ec_soe_request_t *request = fsm->request; |
202 uint8_t *data; |
202 uint8_t *data; |
203 |
203 |
204 EC_SLAVE_DBG(slave, 1, "Reading IDN 0x%04X.\n", request->idn); |
204 EC_SLAVE_DBG(slave, 1, "Reading IDN 0x%04X of drive %u.\n", request->idn, |
|
205 request->drive_no); |
205 |
206 |
206 if (!(slave->sii.mailbox_protocols & EC_MBOX_SOE)) { |
207 if (!(slave->sii.mailbox_protocols & EC_MBOX_SOE)) { |
207 EC_SLAVE_ERR(slave, "Slave does not support SoE!\n"); |
208 EC_SLAVE_ERR(slave, "Slave does not support SoE!\n"); |
208 fsm->state = ec_fsm_soe_error; |
209 fsm->state = ec_fsm_soe_error; |
209 ec_fsm_soe_print_error(fsm); |
210 ec_fsm_soe_print_error(fsm); |
216 fsm->state = ec_fsm_soe_error; |
217 fsm->state = ec_fsm_soe_error; |
217 ec_fsm_soe_print_error(fsm); |
218 ec_fsm_soe_print_error(fsm); |
218 return; |
219 return; |
219 } |
220 } |
220 |
221 |
221 EC_WRITE_U8(data, OPCODE_READ_REQUEST); |
222 EC_WRITE_U8(data, OPCODE_READ_REQUEST | (request->drive_no & 0x07) << 5); |
222 EC_WRITE_U8(data + 1, 1 << 6); // request value |
223 EC_WRITE_U8(data + 1, 1 << 6); // request value |
223 EC_WRITE_U16(data + 2, request->idn); |
224 EC_WRITE_U16(data + 2, request->idn); |
224 |
225 |
225 if (master->debug_level) { |
226 if (master->debug_level) { |
226 EC_SLAVE_DBG(slave, 0, "SCC read request:\n"); |
227 EC_SLAVE_DBG(slave, 0, "SCC read request:\n"); |
490 fsm->state = ec_fsm_soe_error; |
491 fsm->state = ec_fsm_soe_error; |
491 ec_fsm_soe_print_error(fsm); |
492 ec_fsm_soe_print_error(fsm); |
492 return; |
493 return; |
493 } |
494 } |
494 |
495 |
495 EC_WRITE_U8(data, OPCODE_WRITE_REQUEST | incomplete << 3); |
496 EC_WRITE_U8(data, OPCODE_WRITE_REQUEST | incomplete << 3 | |
|
497 (req->drive_no & 0x07) << 5); |
496 EC_WRITE_U8(data + 1, 1 << 6); // only value included |
498 EC_WRITE_U8(data + 1, 1 << 6); // only value included |
497 EC_WRITE_U16(data + 2, incomplete ? fragments_left : req->idn); |
499 EC_WRITE_U16(data + 2, incomplete ? fragments_left : req->idn); |
498 memcpy(data + 4, req->data + fsm->offset, fragment_size); |
500 memcpy(data + 4, req->data + fsm->offset, fragment_size); |
499 fsm->offset += fragment_size; |
501 fsm->offset += fragment_size; |
500 |
502 |
515 void ec_fsm_soe_write_start(ec_fsm_soe_t *fsm /**< finite state machine */) |
517 void ec_fsm_soe_write_start(ec_fsm_soe_t *fsm /**< finite state machine */) |
516 { |
518 { |
517 ec_slave_t *slave = fsm->slave; |
519 ec_slave_t *slave = fsm->slave; |
518 ec_soe_request_t *req = fsm->request; |
520 ec_soe_request_t *req = fsm->request; |
519 |
521 |
520 EC_SLAVE_DBG(slave, 1, "Writing IDN 0x%04X (%zu byte).\n", |
522 EC_SLAVE_DBG(slave, 1, "Writing IDN 0x%04X of drive %u (%zu byte).\n", |
521 req->idn, req->data_size); |
523 req->idn, req->drive_no, req->data_size); |
522 |
524 |
523 if (!(slave->sii.mailbox_protocols & EC_MBOX_SOE)) { |
525 if (!(slave->sii.mailbox_protocols & EC_MBOX_SOE)) { |
524 EC_SLAVE_ERR(slave, "Slave does not support SoE!\n"); |
526 EC_SLAVE_ERR(slave, "Slave does not support SoE!\n"); |
525 fsm->state = ec_fsm_soe_error; |
527 fsm->state = ec_fsm_soe_error; |
526 ec_fsm_soe_print_error(fsm); |
528 ec_fsm_soe_print_error(fsm); |