drivers/ec_device.h
changeset 54 7506e67dd122
parent 53 6b3b8acb71b5
child 55 059a9e712aa7
equal deleted inserted replaced
53:6b3b8acb71b5 54:7506e67dd122
     1 /******************************************************************************
       
     2  *
       
     3  *  e c _ d e v i c e . h
       
     4  *
       
     5  *  Struktur für ein EtherCAT-Gerät.
       
     6  *
       
     7  *  $Id$
       
     8  *
       
     9  *****************************************************************************/
       
    10 
       
    11 #ifndef _EC_DEVICE_H_
       
    12 #define _EC_DEVICE_H_
       
    13 
       
    14 #include <linux/interrupt.h>
       
    15 
       
    16 #include "ec_globals.h"
       
    17 
       
    18 /*****************************************************************************/
       
    19 
       
    20 /**
       
    21    Zustand eines EtherCAT-Gerätes.
       
    22 
       
    23    Eine Für EtherCAT reservierte Netzwerkkarte kann bestimmte Zustände haben.
       
    24 */
       
    25 
       
    26 typedef enum
       
    27 {
       
    28   ECAT_DS_READY,    /**< Das Gerät ist bereit zum Senden */
       
    29   ECAT_DS_SENT,     /**< Das Gerät hat einen Rahmen abgesendet,
       
    30                        aber noch keine Antwort enpfangen */
       
    31   ECAT_DS_RECEIVED, /**< Das Gerät hat eine Antwort auf einen
       
    32                        zuvor gesendeten Rahmen empfangen */
       
    33   ECAT_DS_TIMEOUT,  /**< Nach dem Senden eines Rahmens meldete
       
    34                        das Gerät einen Timeout */
       
    35   ECAT_DS_ERROR     /**< Nach dem Senden eines frames hat das
       
    36                        Gerät einen Fehler festgestellt. */
       
    37 }
       
    38 EtherCAT_device_state_t;
       
    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   irqreturn_t (*isr)(int, void *, struct pt_regs *); /**< Adresse der ISR */
       
    67   struct module *module; /**< Zeiger auf das Modul, das das Gerät zur
       
    68                             Verfügung stellt. */
       
    69   int error_reported; /**< Zeigt an, ob ein Fehler im zyklischen Code
       
    70                          bereits gemeldet wurde. */
       
    71 }
       
    72 EtherCAT_device_t;
       
    73 
       
    74 /*****************************************************************************/
       
    75 
       
    76 void EtherCAT_device_init(EtherCAT_device_t *);
       
    77 int EtherCAT_device_assign(EtherCAT_device_t *, struct net_device *);
       
    78 void EtherCAT_device_clear(EtherCAT_device_t *);
       
    79 
       
    80 int EtherCAT_device_open(EtherCAT_device_t *);
       
    81 int EtherCAT_device_close(EtherCAT_device_t *);
       
    82 
       
    83 int EtherCAT_device_send(EtherCAT_device_t *, unsigned char *, unsigned int);
       
    84 int EtherCAT_device_receive(EtherCAT_device_t *, unsigned char *);
       
    85 void EtherCAT_device_call_isr(EtherCAT_device_t *);
       
    86 
       
    87 void EtherCAT_device_debug(EtherCAT_device_t *);
       
    88 
       
    89 /*****************************************************************************/
       
    90 
       
    91 #endif