diff -r 000000000000 -r 05c992bf5847 drivers/ec_device.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/drivers/ec_device.h Fri Oct 21 11:21:42 2005 +0000 @@ -0,0 +1,86 @@ +/**************************************************************** + * + * e c _ d e v i c e . h + * + * Struktur für ein EtherCAT-Gerät. + * + * $Date$ + * $Author$ + * + ***************************************************************/ + +#ifndef _EC_DEVICE_H_ +#define _EC_DEVICE_H_ + +#include "ec_globals.h" + +/** + Zustand eines EtherCAT-Gerätes. + + Eine Für EtherCAT reservierte Netzwerkkarte kann bestimmte Zustände haben. +*/ + +typedef enum +{ + ECAT_DS_READY, /**< Das Gerät ist bereit zum Senden */ + ECAT_DS_SENT, /**< Das Gerät hat einen Rahmen abgesendet, + aber noch keine Antwort enpfangen */ + ECAT_DS_RECEIVED, /**< Das Gerät hat eine Antwort auf einen + zuvor gesendeten Rahmen empfangen */ + ECAT_DS_TIMEOUT, /**< Nach dem Senden eines Rahmens meldete + das Gerät einen Timeout */ + ECAT_DS_ERROR /**< Nach dem Senden eines frames hat das + Gerät einen Fehler festgestellt. */ +} +EtherCAT_device_state_t; + +#define ECAT_BUS_TIME(ecd_ptr) ((((ecd_ptr)->rx_time - \ + (ecd_ptr)->tx_time) * 1000) / cpu_khz) + +/***************************************************************/ + +/** + EtherCAT-Gerät. + + Ein EtherCAT-Gerät ist eine Netzwerkkarte, die vom + EtherCAT-Master dazu verwendet wird, um Frames zu senden + und zu empfangen. +*/ + +typedef struct +{ + struct net_device *dev; /**< Zeiger auf das reservierte net_device */ + struct sk_buff *tx_skb; /**< Zeiger auf Transmit-Socketbuffer */ + struct sk_buff *rx_skb; /**< Zeiger auf Receive-Socketbuffer */ + unsigned long tx_time; /**< Zeit des letzten Sendens */ + unsigned long rx_time; /**< Zeit des letzten Empfangs */ + unsigned long tx_intr_cnt; /**< Anzahl Tx-Interrupts */ + unsigned long rx_intr_cnt; /**< Anzahl Rx-Interrupts */ + unsigned long intr_cnt; /**< Anzahl Interrupts */ + volatile EtherCAT_device_state_t state; /**< Gesendet, Empfangen, + Timeout, etc. */ + unsigned char rx_data[ECAT_FRAME_BUFFER_SIZE]; /**< Puffer für + empfangene Rahmen */ + volatile unsigned int rx_data_length; /**< Länge des zuletzt + empfangenen Rahmens */ + spinlock_t *lock; /**< Zeiger auf das Spinlock des net_devices */ +} +EtherCAT_device_t; + +/***************************************************************/ + +void EtherCAT_device_init(EtherCAT_device_t *); +int EtherCAT_device_assign(EtherCAT_device_t *, struct net_device *); +void EtherCAT_device_clear(EtherCAT_device_t *); + +int EtherCAT_device_open(EtherCAT_device_t *); +int EtherCAT_device_close(EtherCAT_device_t *); + +int EtherCAT_device_send(EtherCAT_device_t *, unsigned char *, unsigned int); +int EtherCAT_device_receive(EtherCAT_device_t *, unsigned char *, unsigned int); + +void EtherCAT_device_debug(EtherCAT_device_t *); + +/***************************************************************/ + +#endif