master/fsm_master.c
changeset 1380 c2b0ef67e829
parent 1363 11c0b2caa253
child 1385 241a7511eee9
equal deleted inserted replaced
1379:cbceb0e2f2a0 1380:c2b0ef67e829
   337 {
   337 {
   338     ec_master_t *master = fsm->master;
   338     ec_master_t *master = fsm->master;
   339     ec_phy_request_t *request;
   339     ec_phy_request_t *request;
   340 
   340 
   341     // search the first request to be processed
   341     // search the first request to be processed
   342     while (1) {
   342     while (!list_empty(&master->phy_requests)) {
   343         if (list_empty(&master->phy_requests))
       
   344             break;
       
   345 
   343 
   346         // get first request
   344         // get first request
   347         request = list_entry(master->phy_requests.next,
   345         request = list_entry(master->phy_requests.next,
   348                 ec_phy_request_t, list);
   346                 ec_phy_request_t, list);
   349         list_del_init(&request->list); // dequeue
   347         list_del_init(&request->list); // dequeue
   350         request->state = EC_INT_REQUEST_BUSY;
   348         request->state = EC_INT_REQUEST_BUSY;
   351 
   349 
   352         // found pending request; process it!
   350         // found pending request; process it!
   353         if (master->debug_level)
   351         if (master->debug_level)
   354             EC_DBG("Processing phy request for slave %u...\n",
   352             EC_DBG("Processing phy request for slave %u, "
   355                     request->slave->ring_position);
   353                     "offset 0x%04x, length %u...\n",
       
   354                     request->slave->ring_position,
       
   355                     request->offset, request->length);
   356         fsm->phy_request = request;
   356         fsm->phy_request = request;
   357 
   357 
   358         if (request->dir == EC_DIR_INPUT) {
   358         if (request->dir == EC_DIR_INPUT) {
   359             ec_datagram_fprd(fsm->datagram, request->slave->station_address,
   359             ec_datagram_fprd(fsm->datagram, request->slave->station_address,
   360                     request->offset, request->length);
   360                     request->offset, request->length);
   361             ec_datagram_zero(fsm->datagram);
   361             ec_datagram_zero(fsm->datagram);
   362         } else {
   362         } else {
   363             if (request->length > fsm->datagram->mem_size) {
   363             if (request->length > fsm->datagram->mem_size) {
   364                 EC_ERR("Request length (%u) exceeds maximum datagram size (%u)!\n",
   364                 EC_ERR("Request length (%u) exceeds maximum "
   365                         request->length, fsm->datagram->mem_size);
   365                         "datagram size (%u)!\n", request->length,
       
   366                         fsm->datagram->mem_size);
   366                 request->state = EC_INT_REQUEST_FAILURE;
   367                 request->state = EC_INT_REQUEST_FAILURE;
   367                 wake_up(&master->phy_queue);
   368                 wake_up(&master->phy_queue);
   368                 continue;
   369                 continue;
   369             }
   370             }
   370             ec_datagram_fpwr(fsm->datagram, request->slave->station_address,
   371             ec_datagram_fpwr(fsm->datagram, request->slave->station_address,