00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00039
00040
00041 #ifndef _EC_DATAGRAM_H_
00042 #define _EC_DATAGRAM_H_
00043
00044 #include <linux/list.h>
00045 #include <linux/time.h>
00046 #include <linux/timex.h>
00047
00048 #include "globals.h"
00049
00050
00051
00056 typedef enum
00057 {
00058 EC_DATAGRAM_NONE = 0x00,
00059 EC_DATAGRAM_APRD = 0x01,
00060 EC_DATAGRAM_APWR = 0x02,
00061 EC_DATAGRAM_NPRD = 0x04,
00062 EC_DATAGRAM_NPWR = 0x05,
00063 EC_DATAGRAM_BRD = 0x07,
00064 EC_DATAGRAM_BWR = 0x08,
00065 EC_DATAGRAM_LRW = 0x0C
00066 }
00067 ec_datagram_type_t;
00068
00073 typedef enum
00074 {
00075 EC_DATAGRAM_INIT,
00076 EC_DATAGRAM_QUEUED,
00077 EC_DATAGRAM_SENT,
00078 EC_DATAGRAM_RECEIVED,
00079 EC_DATAGRAM_TIMED_OUT,
00080 EC_DATAGRAM_ERROR
00081 }
00082 ec_datagram_state_t;
00083
00084
00085
00090 typedef union
00091 {
00092 struct
00093 {
00094 uint16_t slave;
00095 uint16_t mem;
00096 }
00097 physical;
00099 uint32_t logical;
00100 }
00101 ec_address_t;
00102
00103
00104
00109 typedef struct
00110 {
00111 struct list_head list;
00112 struct list_head queue;
00113 struct list_head sent;
00114 ec_datagram_type_t type;
00115 ec_address_t address;
00116 uint8_t *data;
00117 size_t mem_size;
00118 size_t data_size;
00119 uint8_t index;
00120 uint16_t working_counter;
00121 ec_datagram_state_t state;
00122 cycles_t cycles_queued;
00123 cycles_t cycles_sent;
00124 unsigned long jiffies_sent;
00125 cycles_t cycles_received;
00126 unsigned long jiffies_received;
00127 }
00128 ec_datagram_t;
00129
00130
00131
00132 void ec_datagram_init(ec_datagram_t *);
00133 void ec_datagram_clear(ec_datagram_t *);
00134 int ec_datagram_prealloc(ec_datagram_t *, size_t);
00135
00136 int ec_datagram_nprd(ec_datagram_t *, uint16_t, uint16_t, size_t);
00137 int ec_datagram_npwr(ec_datagram_t *, uint16_t, uint16_t, size_t);
00138 int ec_datagram_aprd(ec_datagram_t *, uint16_t, uint16_t, size_t);
00139 int ec_datagram_apwr(ec_datagram_t *, uint16_t, uint16_t, size_t);
00140 int ec_datagram_brd(ec_datagram_t *, uint16_t, size_t);
00141 int ec_datagram_bwr(ec_datagram_t *, uint16_t, size_t);
00142 int ec_datagram_lrw(ec_datagram_t *, uint32_t, size_t);
00143
00144
00145
00146 #endif