drivers/ec_device.h
changeset 0 05c992bf5847
child 5 6f2508af550c
equal deleted inserted replaced
-1:000000000000 0:05c992bf5847
       
     1 /****************************************************************
       
     2  *
       
     3  *  e c _ d e v i c e . h
       
     4  *
       
     5  *  Struktur für ein EtherCAT-Gerät.
       
     6  *
       
     7  *  $Date$
       
     8  *  $Author$
       
     9  *
       
    10  ***************************************************************/
       
    11 
       
    12 #ifndef _EC_DEVICE_H_
       
    13 #define _EC_DEVICE_H_
       
    14 
       
    15 #include "ec_globals.h"
       
    16 
       
    17 /**
       
    18    Zustand eines EtherCAT-Gerätes.
       
    19    
       
    20    Eine Für EtherCAT reservierte Netzwerkkarte kann bestimmte Zustände haben.
       
    21 */
       
    22 
       
    23 typedef enum
       
    24 {
       
    25   ECAT_DS_READY,    /**< Das Gerät ist bereit zum Senden */
       
    26   ECAT_DS_SENT,     /**< Das Gerät hat einen Rahmen abgesendet,
       
    27                        aber noch keine Antwort enpfangen */
       
    28   ECAT_DS_RECEIVED, /**< Das Gerät hat eine Antwort auf einen
       
    29                        zuvor gesendeten Rahmen empfangen */
       
    30   ECAT_DS_TIMEOUT,  /**< Nach dem Senden eines Rahmens meldete
       
    31                        das Gerät einen Timeout */
       
    32   ECAT_DS_ERROR     /**< Nach dem Senden eines frames hat das
       
    33                        Gerät einen Fehler festgestellt. */
       
    34 }
       
    35 EtherCAT_device_state_t;
       
    36 
       
    37 #define ECAT_BUS_TIME(ecd_ptr) ((((ecd_ptr)->rx_time - \
       
    38                                   (ecd_ptr)->tx_time) * 1000) / cpu_khz)
       
    39 
       
    40 /***************************************************************/
       
    41 
       
    42 /**
       
    43    EtherCAT-Gerät.
       
    44 
       
    45    Ein EtherCAT-Gerät ist eine Netzwerkkarte, die vom
       
    46    EtherCAT-Master dazu verwendet wird, um Frames zu senden
       
    47    und zu empfangen.
       
    48 */
       
    49 
       
    50 typedef struct
       
    51 {
       
    52   struct net_device *dev;    /**< Zeiger auf das reservierte net_device */
       
    53   struct sk_buff *tx_skb;    /**< Zeiger auf Transmit-Socketbuffer */
       
    54   struct sk_buff *rx_skb;    /**< Zeiger auf Receive-Socketbuffer */
       
    55   unsigned long tx_time;     /**< Zeit des letzten Sendens */
       
    56   unsigned long rx_time;     /**< Zeit des letzten Empfangs */
       
    57   unsigned long tx_intr_cnt; /**< Anzahl Tx-Interrupts */
       
    58   unsigned long rx_intr_cnt; /**< Anzahl Rx-Interrupts */
       
    59   unsigned long intr_cnt;    /**< Anzahl Interrupts */
       
    60   volatile EtherCAT_device_state_t state; /**< Gesendet, Empfangen,
       
    61                                              Timeout, etc. */
       
    62   unsigned char rx_data[ECAT_FRAME_BUFFER_SIZE]; /**< Puffer für
       
    63                                                     empfangene Rahmen */
       
    64   volatile unsigned int rx_data_length; /**< Länge des zuletzt
       
    65                                            empfangenen Rahmens */
       
    66   spinlock_t *lock; /**< Zeiger auf das Spinlock des net_devices */
       
    67 }
       
    68 EtherCAT_device_t;
       
    69 
       
    70 /***************************************************************/
       
    71 
       
    72 void EtherCAT_device_init(EtherCAT_device_t *);
       
    73 int EtherCAT_device_assign(EtherCAT_device_t *, struct net_device *);
       
    74 void EtherCAT_device_clear(EtherCAT_device_t *);
       
    75 
       
    76 int EtherCAT_device_open(EtherCAT_device_t *);
       
    77 int EtherCAT_device_close(EtherCAT_device_t *);
       
    78 
       
    79 int EtherCAT_device_send(EtherCAT_device_t *, unsigned char *, unsigned int);
       
    80 int EtherCAT_device_receive(EtherCAT_device_t *, unsigned char *, unsigned int);
       
    81 
       
    82 void EtherCAT_device_debug(EtherCAT_device_t *);
       
    83 
       
    84 /***************************************************************/
       
    85 
       
    86 #endif