137 |
137 |
138 sema_init(&master->device_sem, 1); |
138 sema_init(&master->device_sem, 1); |
139 |
139 |
140 master->phase = EC_ORPHANED; |
140 master->phase = EC_ORPHANED; |
141 master->active = 0; |
141 master->active = 0; |
|
142 master->config_changed = 0; |
142 master->injection_seq_fsm = 0; |
143 master->injection_seq_fsm = 0; |
143 master->injection_seq_rt = 0; |
144 master->injection_seq_rt = 0; |
144 |
145 |
145 master->slaves = NULL; |
146 master->slaves = NULL; |
146 master->slave_count = 0; |
147 master->slave_count = 0; |
147 |
148 |
148 INIT_LIST_HEAD(&master->configs); |
149 INIT_LIST_HEAD(&master->configs); |
149 |
150 |
150 master->app_time = 0ULL; |
151 master->app_time = 0ULL; |
151 master->app_start_time = 0ULL; |
152 master->app_start_time = 0ULL; |
152 master->has_start_time = 0; |
153 master->has_app_time = 0; |
153 |
154 |
154 master->scan_busy = 0; |
155 master->scan_busy = 0; |
155 master->allow_scan = 1; |
156 master->allow_scan = 1; |
156 sema_init(&master->scan_sem, 1); |
157 sema_init(&master->scan_sem, 1); |
157 init_waitqueue_head(&master->scan_queue); |
158 init_waitqueue_head(&master->scan_queue); |
1822 ec_master_calc_topology(master); |
1823 ec_master_calc_topology(master); |
1823 |
1824 |
1824 ec_master_calc_transmission_delays(master); |
1825 ec_master_calc_transmission_delays(master); |
1825 } |
1826 } |
1826 |
1827 |
|
1828 /*****************************************************************************/ |
|
1829 |
|
1830 /** Request OP state for configured slaves. |
|
1831 */ |
|
1832 void ec_master_request_op( |
|
1833 ec_master_t *master /**< EtherCAT master. */ |
|
1834 ) |
|
1835 { |
|
1836 unsigned int i; |
|
1837 ec_slave_t *slave; |
|
1838 |
|
1839 if (!master->active) |
|
1840 return; |
|
1841 |
|
1842 EC_MASTER_DBG(master, 1, "Requesting OP...\n"); |
|
1843 |
|
1844 // request OP for all configured slaves |
|
1845 for (i = 0; i < master->slave_count; i++) { |
|
1846 slave = master->slaves + i; |
|
1847 if (slave->config) { |
|
1848 ec_slave_request_state(slave, EC_SLAVE_STATE_OP); |
|
1849 } |
|
1850 } |
|
1851 |
|
1852 // always set DC reference clock to OP |
|
1853 if (master->dc_ref_clock) { |
|
1854 ec_slave_request_state(master->dc_ref_clock, |
|
1855 EC_SLAVE_STATE_OP); |
|
1856 } |
|
1857 } |
|
1858 |
1827 /****************************************************************************** |
1859 /****************************************************************************** |
1828 * Application interface |
1860 * Application interface |
1829 *****************************************************************************/ |
1861 *****************************************************************************/ |
1830 |
1862 |
1831 /** Same as ecrt_master_create_domain(), but with ERR_PTR() return value. |
1863 /** Same as ecrt_master_create_domain(), but with ERR_PTR() return value. |
1904 return ret; |
1936 return ret; |
1905 } |
1937 } |
1906 domain_offset += domain->data_size; |
1938 domain_offset += domain->data_size; |
1907 } |
1939 } |
1908 |
1940 |
1909 // always set DC reference clock to OP |
|
1910 if (master->dc_ref_clock) { |
|
1911 ec_slave_request_state(master->dc_ref_clock, EC_SLAVE_STATE_OP); |
|
1912 } |
|
1913 |
|
1914 up(&master->master_sem); |
1941 up(&master->master_sem); |
1915 |
1942 |
1916 // restart EoE process and master thread with new locking |
1943 // restart EoE process and master thread with new locking |
1917 |
1944 |
1918 ec_master_thread_stop(master); |
1945 ec_master_thread_stop(master); |
2256 |
2287 |
2257 void ecrt_master_application_time(ec_master_t *master, uint64_t app_time) |
2288 void ecrt_master_application_time(ec_master_t *master, uint64_t app_time) |
2258 { |
2289 { |
2259 master->app_time = app_time; |
2290 master->app_time = app_time; |
2260 |
2291 |
2261 if (unlikely(!master->has_start_time)) { |
2292 if (unlikely(!master->has_app_time)) { |
2262 master->app_start_time = app_time; |
2293 master->app_start_time = app_time; |
2263 master->has_start_time = 1; |
2294 master->has_app_time = 1; |
2264 } |
2295 } |
2265 } |
2296 } |
2266 |
2297 |
2267 /*****************************************************************************/ |
2298 /*****************************************************************************/ |
2268 |
2299 |