equal
deleted
inserted
replaced
129 fehlgeschlagen |
129 fehlgeschlagen |
130 */ |
130 */ |
131 |
131 |
132 int EtherCAT_device_open(EtherCAT_device_t *ecd) |
132 int EtherCAT_device_open(EtherCAT_device_t *ecd) |
133 { |
133 { |
|
134 unsigned int i; |
|
135 |
134 if (!ecd) { |
136 if (!ecd) { |
135 printk(KERN_ERR "EtherCAT: Trying to open a NULL device!\n"); |
137 printk(KERN_ERR "EtherCAT: Trying to open a NULL device!\n"); |
136 return -1; |
138 return -1; |
137 } |
139 } |
138 |
140 |
139 if (!ecd->dev) { |
141 if (!ecd->dev) { |
140 printk(KERN_ERR "EtherCAT: No net_device to open!\n"); |
142 printk(KERN_ERR "EtherCAT: No net_device to open!\n"); |
141 return -1; |
143 return -1; |
142 } |
144 } |
|
145 |
|
146 // Device could have received frames before |
|
147 for (i = 0; i < 4; i++) EtherCAT_device_call_isr(ecd); |
143 |
148 |
144 // Reset old device state |
149 // Reset old device state |
145 ecd->state = ECAT_DS_READY; |
150 ecd->state = ECAT_DS_READY; |
146 ecd->tx_intr_cnt = 0; |
151 ecd->tx_intr_cnt = 0; |
147 ecd->rx_intr_cnt = 0; |
152 ecd->rx_intr_cnt = 0; |
263 } |
268 } |
264 |
269 |
265 if (unlikely(ecd->rx_data_length > ECAT_FRAME_BUFFER_SIZE)) { |
270 if (unlikely(ecd->rx_data_length > ECAT_FRAME_BUFFER_SIZE)) { |
266 if (likely(ecd->error_reported)) { |
271 if (likely(ecd->error_reported)) { |
267 printk(KERN_ERR "EtherCAT: receive - " |
272 printk(KERN_ERR "EtherCAT: receive - " |
268 " Reveived frame too long (%i Bytes)!\n", |
273 " Reveived frame is too long (%i Bytes)!\n", |
269 ecd->rx_data_length); |
274 ecd->rx_data_length); |
270 ecd->error_reported = 1; |
275 ecd->error_reported = 1; |
271 } |
276 } |
272 return -1; |
277 return -1; |
273 } |
278 } |
282 } |
287 } |
283 |
288 |
284 /*****************************************************************************/ |
289 /*****************************************************************************/ |
285 |
290 |
286 /** |
291 /** |
287 Ruft manuell die Interrupt-Routine der Netzwerkkarte auf. |
292 Ruft die Interrupt-Routine der Netzwerkkarte auf. |
288 |
293 |
289 @param ecd EtherCAT-Gerät |
294 @param ecd EtherCAT-Gerät |
290 |
295 |
291 @return Anzahl der kopierten Bytes bei Erfolg, sonst < 0 |
296 @return Anzahl der kopierten Bytes bei Erfolg, sonst < 0 |
292 */ |
297 */ |
348 EXPORT_SYMBOL(EtherCAT_device_assign); |
353 EXPORT_SYMBOL(EtherCAT_device_assign); |
349 EXPORT_SYMBOL(EtherCAT_device_open); |
354 EXPORT_SYMBOL(EtherCAT_device_open); |
350 EXPORT_SYMBOL(EtherCAT_device_close); |
355 EXPORT_SYMBOL(EtherCAT_device_close); |
351 |
356 |
352 /*****************************************************************************/ |
357 /*****************************************************************************/ |
|
358 |
|
359 /* Emacs-Konfiguration |
|
360 ;;; Local Variables: *** |
|
361 ;;; c-basic-offset:2 *** |
|
362 ;;; End: *** |
|
363 */ |