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 } |