937 } |
937 } |
938 |
938 |
939 /*****************************************************************************/ |
939 /*****************************************************************************/ |
940 |
940 |
941 int ecrt_slave_config_idn(ec_slave_config_t *sc, uint16_t idn, |
941 int ecrt_slave_config_idn(ec_slave_config_t *sc, uint16_t idn, |
942 const uint8_t *data, size_t size) |
942 ec_al_state_t state, const uint8_t *data, size_t size) |
943 { |
943 { |
944 ec_slave_t *slave = sc->slave; |
944 ec_slave_t *slave = sc->slave; |
945 ec_soe_request_t *req; |
945 ec_soe_request_t *req; |
946 int ret; |
946 int ret; |
947 |
947 |
948 EC_CONFIG_DBG(sc, 1, "%s(sc = 0x%p, idn = 0x%04X, " |
948 EC_CONFIG_DBG(sc, 1, "%s(sc = 0x%p, idn = 0x%04X, state = %u, " |
949 "data = 0x%p, size = %zu)\n", __func__, sc, idn, data, size); |
949 "data = 0x%p, size = %zu)\n", |
|
950 __func__, sc, idn, state, data, size); |
|
951 |
|
952 if (state != EC_AL_STATE_PREOP && state != EC_AL_STATE_SAFEOP) { |
|
953 EC_CONFIG_ERR(sc, "AL state for IDN config" |
|
954 " must be PREOP or SAFEOP!\n"); |
|
955 return -EINVAL; |
|
956 } |
950 |
957 |
951 if (slave && !(slave->sii.mailbox_protocols & EC_MBOX_SOE)) { |
958 if (slave && !(slave->sii.mailbox_protocols & EC_MBOX_SOE)) { |
952 EC_CONFIG_WARN(sc, "Attached slave does not support SoE!\n"); |
959 EC_CONFIG_WARN(sc, "Attached slave does not support SoE!\n"); |
953 } |
960 } |
954 |
961 |
959 return -ENOMEM; |
966 return -ENOMEM; |
960 } |
967 } |
961 |
968 |
962 ec_soe_request_init(req); |
969 ec_soe_request_init(req); |
963 ec_soe_request_set_idn(req, idn); |
970 ec_soe_request_set_idn(req, idn); |
|
971 req->al_state = state; |
964 |
972 |
965 ret = ec_soe_request_copy_data(req, data, size); |
973 ret = ec_soe_request_copy_data(req, data, size); |
966 if (ret < 0) { |
974 if (ret < 0) { |
967 ec_soe_request_clear(req); |
975 ec_soe_request_clear(req); |
968 kfree(req); |
976 kfree(req); |