Skip to content
Snippets Groups Projects
Commit 8397f485 authored by Florian Pose's avatar Florian Pose
Browse files

Better use enums in SoE code.

parent a5c92b84
No related branches found
No related tags found
No related merge requests found
...@@ -45,16 +45,21 @@ ...@@ -45,16 +45,21 @@
*/ */
#define EC_MBOX_TYPE_SOE 0x05 #define EC_MBOX_TYPE_SOE 0x05
#define EC_SOE_OPCODE_READ_REQUEST 0x01 /** SoE operations
#define EC_SOE_OPCODE_READ_RESPONSE 0x02 */
#define EC_SOE_OPCODE_WRITE_REQUEST 0x03 enum ec_soe_opcodes {
#define EC_SOE_OPCODE_WRITE_RESPONSE 0x04 OPCODE_READ_REQUEST = 0x01, /**< Read request. */
OPCODE_READ_RESPONSE = 0x02, /**< Read response. */
#define EC_SOE_READ_REQUEST_SIZE 0x04 OPCODE_WRITE_REQUEST = 0x03, /**< Write request. */
#define EC_SOE_READ_RESPONSE_SIZE 0x04 OPCODE_WRITE_RESPONSE = 0x04 /**< Write response. */
#define EC_SOE_WRITE_REQUEST_SIZE 0x04 };
#define EC_SOE_WRITE_RESPONSE_SIZE 0x04
/** Size of all SoE headers.
*/
#define EC_SOE_SIZE 0x04
/** SoE response timeout [ms].
*/
#define EC_SOE_RESPONSE_TIMEOUT 1000 #define EC_SOE_RESPONSE_TIMEOUT 1000
/*****************************************************************************/ /*****************************************************************************/
...@@ -209,20 +214,20 @@ void ec_fsm_soe_read_start(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -209,20 +214,20 @@ void ec_fsm_soe_read_start(ec_fsm_soe_t *fsm /**< finite state machine */)
} }
data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_SOE, data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_SOE,
EC_SOE_READ_REQUEST_SIZE); EC_SOE_SIZE);
if (IS_ERR(data)) { if (IS_ERR(data)) {
fsm->state = ec_fsm_soe_error; fsm->state = ec_fsm_soe_error;
ec_fsm_soe_print_error(fsm); ec_fsm_soe_print_error(fsm);
return; return;
} }
EC_WRITE_U8(data, EC_SOE_OPCODE_READ_REQUEST); EC_WRITE_U8(data, OPCODE_READ_REQUEST);
EC_WRITE_U8(data + 1, 1 << 6); // request value EC_WRITE_U8(data + 1, 1 << 6); // request value
EC_WRITE_U16(data + 2, request->idn); EC_WRITE_U16(data + 2, request->idn);
if (master->debug_level) { if (master->debug_level) {
EC_DBG("SCC read request:\n"); EC_DBG("SCC read request:\n");
ec_print_data(data, EC_SOE_READ_REQUEST_SIZE); ec_print_data(data, EC_SOE_SIZE);
} }
fsm->request->data_size = 0; fsm->request->data_size = 0;
...@@ -377,7 +382,7 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -377,7 +382,7 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */)
return; return;
} }
if (rec_size < EC_SOE_READ_RESPONSE_SIZE) { if (rec_size < EC_SOE_SIZE) {
fsm->state = ec_fsm_soe_error; fsm->state = ec_fsm_soe_error;
EC_ERR("Received currupted SoE read response" EC_ERR("Received currupted SoE read response"
" (%zu bytes)!\n", rec_size); " (%zu bytes)!\n", rec_size);
...@@ -391,7 +396,7 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -391,7 +396,7 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */)
incomplete = (header >> 3) & 1; incomplete = (header >> 3) & 1;
error_flag = (header >> 4) & 1; error_flag = (header >> 4) & 1;
if (opcode != EC_SOE_OPCODE_READ_RESPONSE) { if (opcode != OPCODE_READ_RESPONSE) {
EC_ERR("Received no read response (opcode %x).\n", opcode); EC_ERR("Received no read response (opcode %x).\n", opcode);
ec_print_data(data, rec_size); ec_print_data(data, rec_size);
ec_fsm_soe_print_error(fsm); ec_fsm_soe_print_error(fsm);
...@@ -418,9 +423,9 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -418,9 +423,9 @@ void ec_fsm_soe_read_response(ec_fsm_soe_t *fsm /**< finite state machine */)
return; return;
} }
data_size = rec_size - EC_SOE_READ_RESPONSE_SIZE; data_size = rec_size - EC_SOE_SIZE;
if (ec_soe_request_append_data(req, if (ec_soe_request_append_data(req,
data + EC_SOE_READ_RESPONSE_SIZE, data_size)) { data + EC_SOE_SIZE, data_size)) {
fsm->state = ec_fsm_soe_error; fsm->state = ec_fsm_soe_error;
ec_fsm_soe_print_error(fsm); ec_fsm_soe_print_error(fsm);
return; return;
...@@ -463,7 +468,7 @@ void ec_fsm_soe_write_next_fragment( ...@@ -463,7 +468,7 @@ void ec_fsm_soe_write_next_fragment(
size_t header_size, max_fragment_size, remaining_size, fragment_size; size_t header_size, max_fragment_size, remaining_size, fragment_size;
uint16_t fragments_left; uint16_t fragments_left;
header_size = EC_MBOX_HEADER_SIZE + EC_SOE_WRITE_REQUEST_SIZE; header_size = EC_MBOX_HEADER_SIZE + EC_SOE_SIZE;
if (slave->configured_rx_mailbox_size <= header_size) { if (slave->configured_rx_mailbox_size <= header_size) {
EC_ERR("Mailbox size (%u) too small for SoE write.\n", EC_ERR("Mailbox size (%u) too small for SoE write.\n",
slave->configured_rx_mailbox_size); slave->configured_rx_mailbox_size);
...@@ -482,14 +487,14 @@ void ec_fsm_soe_write_next_fragment( ...@@ -482,14 +487,14 @@ void ec_fsm_soe_write_next_fragment(
} }
data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_SOE, data = ec_slave_mbox_prepare_send(slave, datagram, EC_MBOX_TYPE_SOE,
EC_SOE_WRITE_REQUEST_SIZE + fragment_size); EC_SOE_SIZE + fragment_size);
if (IS_ERR(data)) { if (IS_ERR(data)) {
fsm->state = ec_fsm_soe_error; fsm->state = ec_fsm_soe_error;
ec_fsm_soe_print_error(fsm); ec_fsm_soe_print_error(fsm);
return; return;
} }
EC_WRITE_U8(data, EC_SOE_OPCODE_WRITE_REQUEST | incomplete << 3); EC_WRITE_U8(data, OPCODE_WRITE_REQUEST | incomplete << 3);
EC_WRITE_U8(data + 1, 1 << 6); // only value included EC_WRITE_U8(data + 1, 1 << 6); // only value included
EC_WRITE_U16(data + 2, incomplete ? fragments_left : req->idn); EC_WRITE_U16(data + 2, incomplete ? fragments_left : req->idn);
memcpy(data + 4, req->data + fsm->offset, fragment_size); memcpy(data + 4, req->data + fsm->offset, fragment_size);
...@@ -497,7 +502,7 @@ void ec_fsm_soe_write_next_fragment( ...@@ -497,7 +502,7 @@ void ec_fsm_soe_write_next_fragment(
if (master->debug_level) { if (master->debug_level) {
EC_DBG("SCC write request:\n"); EC_DBG("SCC write request:\n");
ec_print_data(data, EC_SOE_WRITE_REQUEST_SIZE + fragment_size); ec_print_data(data, EC_SOE_SIZE + fragment_size);
} }
req->jiffies_sent = jiffies; req->jiffies_sent = jiffies;
...@@ -682,7 +687,7 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -682,7 +687,7 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */)
return; return;
} }
if (rec_size < EC_SOE_WRITE_RESPONSE_SIZE) { if (rec_size < EC_SOE_SIZE) {
fsm->state = ec_fsm_soe_error; fsm->state = ec_fsm_soe_error;
EC_ERR("Received currupted SoE write response (%zu bytes)!\n", EC_ERR("Received currupted SoE write response (%zu bytes)!\n",
rec_size); rec_size);
...@@ -692,7 +697,7 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -692,7 +697,7 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */)
} }
opcode = EC_READ_U8(data) & 0x7; opcode = EC_READ_U8(data) & 0x7;
if (opcode != EC_SOE_OPCODE_WRITE_RESPONSE) { if (opcode != OPCODE_WRITE_RESPONSE) {
EC_ERR("Received no write response (opcode %x).\n", opcode); EC_ERR("Received no write response (opcode %x).\n", opcode);
ec_print_data(data, rec_size); ec_print_data(data, rec_size);
ec_fsm_soe_print_error(fsm); ec_fsm_soe_print_error(fsm);
...@@ -711,11 +716,11 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */) ...@@ -711,11 +716,11 @@ void ec_fsm_soe_write_response(ec_fsm_soe_t *fsm /**< finite state machine */)
error_flag = (EC_READ_U8(data) >> 4) & 1; error_flag = (EC_READ_U8(data) >> 4) & 1;
if (error_flag) { if (error_flag) {
if (rec_size < EC_SOE_WRITE_RESPONSE_SIZE + 2) { if (rec_size < EC_SOE_SIZE + 2) {
EC_ERR("Received corrupted error response - error flag set," EC_ERR("Received corrupted error response - error flag set,"
" but received size is %zu.\n", rec_size); " but received size is %zu.\n", rec_size);
} else { } else {
req->error_code = EC_READ_U16(data + EC_SOE_WRITE_RESPONSE_SIZE); req->error_code = EC_READ_U16(data + EC_SOE_SIZE);
EC_ERR("Received error response:\n"); EC_ERR("Received error response:\n");
ec_print_soe_error(req->error_code); ec_print_soe_error(req->error_code);
} }
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment