drivers/ec_device.c
changeset 42 a22a202d0f42
parent 39 6965c23a6826
equal deleted inserted replaced
41:42c66194c0c8 42:a22a202d0f42
   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 */