master/slave_config.c
changeset 1944 73896ef6d077
parent 1933 d11036537092
child 1952 7d9fb723fc4b
equal deleted inserted replaced
1943:7e9deec7742d 1944:73896ef6d077
   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);