master/fsm_slave_config.c
branch1.4-foe
changeset 1711 2b017fcc1c6d
parent 1710 4522459bb5a4
equal deleted inserted replaced
1710:4522459bb5a4 1711:2b017fcc1c6d
   371         sync.control_register = 0x26;
   371         sync.control_register = 0x26;
   372         sync.enable = 1;
   372         sync.enable = 1;
   373         ec_sync_page(&sync, 0, slave->sii.boot_rx_mailbox_size,
   373         ec_sync_page(&sync, 0, slave->sii.boot_rx_mailbox_size,
   374                 EC_DIR_INVALID, // use default direction
   374                 EC_DIR_INVALID, // use default direction
   375                 datagram->data);
   375                 datagram->data);
       
   376         slave->configured_rx_mailbox_offset =
       
   377             slave->sii.boot_rx_mailbox_offset;
       
   378         slave->configured_rx_mailbox_size =
       
   379             slave->sii.boot_rx_mailbox_size;
   376 
   380 
   377         ec_sync_init(&sync, slave);
   381         ec_sync_init(&sync, slave);
   378         sync.physical_start_address = slave->sii.boot_tx_mailbox_offset;
   382         sync.physical_start_address = slave->sii.boot_tx_mailbox_offset;
   379         sync.control_register = 0x22;
   383         sync.control_register = 0x22;
   380         sync.enable = 1;
   384         sync.enable = 1;
   381         ec_sync_page(&sync, 1, slave->sii.boot_tx_mailbox_size,
   385         ec_sync_page(&sync, 1, slave->sii.boot_tx_mailbox_size,
   382                 EC_DIR_INVALID, // use default direction
   386                 EC_DIR_INVALID, // use default direction
   383                 datagram->data + EC_SYNC_PAGE_SIZE);
   387                 datagram->data + EC_SYNC_PAGE_SIZE);
       
   388         slave->configured_tx_mailbox_offset =
       
   389             slave->sii.boot_tx_mailbox_offset;
       
   390         slave->configured_tx_mailbox_size =
       
   391             slave->sii.boot_tx_mailbox_size;
       
   392 
   384     } else if (slave->sii.sync_count >= 2) { // mailbox configuration provided
   393     } else if (slave->sii.sync_count >= 2) { // mailbox configuration provided
   385         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
   394         ec_datagram_fpwr(datagram, slave->station_address, 0x0800,
   386                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
   395                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
   387         memset(datagram->data, 0x00,
   396         memset(datagram->data, 0x00,
   388                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
   397                 EC_SYNC_PAGE_SIZE * slave->sii.sync_count);
   391             ec_sync_page(&slave->sii.syncs[i], i,
   400             ec_sync_page(&slave->sii.syncs[i], i,
   392                     slave->sii.syncs[i].default_length,
   401                     slave->sii.syncs[i].default_length,
   393                     EC_DIR_INVALID, // use default direction
   402                     EC_DIR_INVALID, // use default direction
   394                     datagram->data + EC_SYNC_PAGE_SIZE * i);
   403                     datagram->data + EC_SYNC_PAGE_SIZE * i);
   395         }
   404         }
       
   405 
       
   406         slave->configured_rx_mailbox_offset =
       
   407             slave->sii.syncs[0].physical_start_address;
       
   408         slave->configured_rx_mailbox_size =
       
   409             slave->sii.syncs[0].default_length;
       
   410         slave->configured_tx_mailbox_offset =
       
   411             slave->sii.syncs[1].physical_start_address;
       
   412         slave->configured_tx_mailbox_size =
       
   413             slave->sii.syncs[1].default_length;
   396     } else { // no mailbox sync manager configurations provided
   414     } else { // no mailbox sync manager configurations provided
   397         ec_sync_t sync;
   415         ec_sync_t sync;
   398 
   416 
   399         if (master->debug_level)
   417         if (master->debug_level)
   400             EC_DBG("Slave %u does not provide"
   418             EC_DBG("Slave %u does not provide"
   410         sync.control_register = 0x26;
   428         sync.control_register = 0x26;
   411         sync.enable = 1;
   429         sync.enable = 1;
   412         ec_sync_page(&sync, 0, slave->sii.std_rx_mailbox_size,
   430         ec_sync_page(&sync, 0, slave->sii.std_rx_mailbox_size,
   413                 EC_DIR_INVALID, // use default direction
   431                 EC_DIR_INVALID, // use default direction
   414                 datagram->data);
   432                 datagram->data);
       
   433         slave->configured_rx_mailbox_offset =
       
   434             slave->sii.std_rx_mailbox_offset;
       
   435         slave->configured_rx_mailbox_size =
       
   436             slave->sii.std_rx_mailbox_size;
   415 
   437 
   416         ec_sync_init(&sync, slave);
   438         ec_sync_init(&sync, slave);
   417         sync.physical_start_address = slave->sii.std_tx_mailbox_offset;
   439         sync.physical_start_address = slave->sii.std_tx_mailbox_offset;
   418         sync.control_register = 0x22;
   440         sync.control_register = 0x22;
   419         sync.enable = 1;
   441         sync.enable = 1;
   420         ec_sync_page(&sync, 1, slave->sii.std_tx_mailbox_size,
   442         ec_sync_page(&sync, 1, slave->sii.std_tx_mailbox_size,
   421                 EC_DIR_INVALID, // use default direction
   443                 EC_DIR_INVALID, // use default direction
   422                 datagram->data + EC_SYNC_PAGE_SIZE);
   444                 datagram->data + EC_SYNC_PAGE_SIZE);
       
   445         slave->configured_tx_mailbox_offset =
       
   446             slave->sii.boot_tx_mailbox_offset;
       
   447         slave->configured_tx_mailbox_size =
       
   448             slave->sii.boot_tx_mailbox_size;
   423     }
   449     }
   424 
   450 
   425     fsm->retries = EC_FSM_RETRIES;
   451     fsm->retries = EC_FSM_RETRIES;
   426     fsm->state = ec_fsm_slave_config_state_mbox_sync;
   452     fsm->state = ec_fsm_slave_config_state_mbox_sync;
   427 }
   453 }