149 |
149 |
150 master->slaves = NULL; |
150 master->slaves = NULL; |
151 master->slave_count = 0; |
151 master->slave_count = 0; |
152 |
152 |
153 INIT_LIST_HEAD(&master->configs); |
153 INIT_LIST_HEAD(&master->configs); |
|
154 INIT_LIST_HEAD(&master->domains); |
154 |
155 |
155 master->app_time = 0ULL; |
156 master->app_time = 0ULL; |
|
157 master->app_start_time = 0ULL; |
|
158 master->has_app_time = 0; |
156 #ifdef EC_HAVE_CYCLES |
159 #ifdef EC_HAVE_CYCLES |
157 master->dc_cycles_app_start_time = 0; |
160 master->dc_cycles_app_start_time = 0; |
158 #endif |
161 #endif |
159 master->dc_jiffies_app_start_time = 0; |
162 master->dc_jiffies_app_start_time = 0; |
160 master->app_start_time = 0ULL; |
|
161 master->has_app_time = 0; |
|
162 |
163 |
163 master->scan_busy = 0; |
164 master->scan_busy = 0; |
|
165 master->allow_scan = 1; |
164 ec_mutex_init(&master->scan_mutex); |
166 ec_mutex_init(&master->scan_mutex); |
165 init_waitqueue_head(&master->scan_queue); |
167 init_waitqueue_head(&master->scan_queue); |
166 |
168 |
167 master->config_busy = 0; |
169 master->config_busy = 0; |
168 ec_mutex_init(&master->config_mutex); |
170 ec_mutex_init(&master->config_mutex); |
174 ec_mutex_init(&master->fsm_queue_mutex); |
176 ec_mutex_init(&master->fsm_queue_mutex); |
175 INIT_LIST_HEAD(&master->fsm_datagram_queue); |
177 INIT_LIST_HEAD(&master->fsm_datagram_queue); |
176 |
178 |
177 // send interval in IDLE phase |
179 // send interval in IDLE phase |
178 ec_master_set_send_interval(master, 1000000 / HZ); |
180 ec_master_set_send_interval(master, 1000000 / HZ); |
179 |
|
180 INIT_LIST_HEAD(&master->domains); |
|
181 |
181 |
182 master->debug_level = debug_level; |
182 master->debug_level = debug_level; |
183 master->stats.timeouts = 0; |
183 master->stats.timeouts = 0; |
184 master->stats.corrupted = 0; |
184 master->stats.corrupted = 0; |
185 master->stats.unmatched = 0; |
185 master->stats.unmatched = 0; |
224 EC_MASTER_ERR(master, "Failed to allocate FSM datagram.\n"); |
224 EC_MASTER_ERR(master, "Failed to allocate FSM datagram.\n"); |
225 goto out_clear_backup; |
225 goto out_clear_backup; |
226 } |
226 } |
227 |
227 |
228 // create state machine object |
228 // create state machine object |
229 ec_mbox_init(&master->fsm_mbox,&master->fsm_datagram); |
229 ec_mbox_init(&master->fsm_mbox, &master->fsm_datagram); |
230 ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram); |
230 ec_fsm_master_init(&master->fsm, master, &master->fsm_datagram); |
231 |
231 |
232 // init reference sync datagram |
232 // init reference sync datagram |
233 ec_datagram_init(&master->ref_sync_datagram); |
233 ec_datagram_init(&master->ref_sync_datagram); |
234 snprintf(master->ref_sync_datagram.name, EC_DATAGRAM_NAME_SIZE, "refsync"); |
234 snprintf(master->ref_sync_datagram.name, EC_DATAGRAM_NAME_SIZE, "refsync"); |