master/device.h
changeset 54 7506e67dd122
parent 41 42c66194c0c8
child 73 9f4ea66d89a3
equal deleted inserted replaced
53:6b3b8acb71b5 54:7506e67dd122
       
     1 /******************************************************************************
       
     2  *
       
     3  *  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 "globals.h"
       
    17 #include "../include/EtherCAT_dev.h"
       
    18 
       
    19 /*****************************************************************************/
       
    20 
       
    21 /**
       
    22    EtherCAT-Gerät.
       
    23 
       
    24    Ein EtherCAT-Gerät ist eine Netzwerkkarte, die vom
       
    25    EtherCAT-Master dazu verwendet wird, um Frames zu senden
       
    26    und zu empfangen.
       
    27 */
       
    28 
       
    29 struct ec_device
       
    30 {
       
    31   struct net_device *dev;    /**< Zeiger auf das reservierte net_device */
       
    32   unsigned int open;         /**< Das net_device ist geoeffnet. */
       
    33   struct sk_buff *tx_skb;    /**< Zeiger auf Transmit-Socketbuffer */
       
    34   struct sk_buff *rx_skb;    /**< Zeiger auf Receive-Socketbuffer */
       
    35   unsigned long tx_time;     /**< Zeit des letzten Sendens */
       
    36   unsigned long rx_time;     /**< Zeit des letzten Empfangs */
       
    37   unsigned long tx_intr_cnt; /**< Anzahl Tx-Interrupts */
       
    38   unsigned long rx_intr_cnt; /**< Anzahl Rx-Interrupts */
       
    39   unsigned long intr_cnt;    /**< Anzahl Interrupts */
       
    40   volatile ec_device_state_t state; /**< Gesendet, Empfangen,
       
    41                                        Timeout, etc. */
       
    42   unsigned char rx_data[EC_FRAME_SIZE]; /**< Puffer für
       
    43                                            empfangene Rahmen */
       
    44   volatile unsigned int rx_data_length; /**< Länge des zuletzt
       
    45                                            empfangenen Rahmens */
       
    46   irqreturn_t (*isr)(int, void *, struct pt_regs *); /**< Adresse der ISR */
       
    47   struct module *module; /**< Zeiger auf das Modul, das das Gerät zur
       
    48                             Verfügung stellt. */
       
    49   int error_reported; /**< Zeigt an, ob ein Fehler im zyklischen Code
       
    50                          bereits gemeldet wurde. */
       
    51 };
       
    52 
       
    53 /*****************************************************************************/
       
    54 
       
    55 int ec_device_init(ec_device_t *);
       
    56 void ec_device_clear(ec_device_t *);
       
    57 int ec_device_open(ec_device_t *);
       
    58 int ec_device_close(ec_device_t *);
       
    59 void ec_device_call_isr(ec_device_t *);
       
    60 int ec_device_send(ec_device_t *, unsigned char *, unsigned int);
       
    61 int ec_device_receive(ec_device_t *, unsigned char *);
       
    62 
       
    63 /*****************************************************************************/
       
    64 
       
    65 #endif