642bb89942f572ecb9140162f2e58048297430cf
[deliverable/linux.git] / drivers / staging / ft1000 / ft1000-usb / ft1000_usb.h
1 #ifndef _FT1000_USB_H_
2 #define _FT1000_USB_H_
3
4 #include "../ft1000.h"
5 #include "ft1000_ioctl.h"
6 #define FT1000_DRV_VER 0x01010403
7
8 #define MAX_NUM_APP 6
9 #define MAX_MSG_LIMIT 200
10 #define NUM_OF_FREE_BUFFERS 1500
11
12 #define PSEUDOSZ 16
13
14 #define SUCCESS 0x00
15
16 struct app_info_block {
17 u32 nTxMsg; /* DPRAM msg sent to DSP with app_id */
18 u32 nRxMsg; /* DPRAM msg rcv from dsp with app_id */
19 u32 nTxMsgReject; /* DPRAM msg rejected due to DSP doorbell set */
20 u32 nRxMsgMiss; /* DPRAM msg dropped due to overflow */
21 struct fown_struct *fileobject;/* Application's file object */
22 u16 app_id; /* Application id */
23 int DspBCMsgFlag;
24 int NumOfMsg; /* number of messages queued up */
25 wait_queue_head_t wait_dpram_msg;
26 struct list_head app_sqlist; /* link list of msgs for applicaton on slow queue */
27 } __packed;
28
29 #define DEBUG(args...) printk(KERN_INFO args)
30
31 #define FALSE 0
32 #define TRUE 1
33
34 #define STATUS_SUCCESS 0
35 #define STATUS_FAILURE 0x1001
36
37 #define FT1000_STATUS_CLOSING 0x01
38
39 #define LARGE_TIMEOUT 5000
40
41 #define DSPBCMSGID 0x10
42
43 /* Electrabuzz specific DPRAM mapping */
44 /* this is used by ft1000_usb driver - isn't that a bug? */
45 #undef FT1000_DPRAM_RX_BASE
46 #define FT1000_DPRAM_RX_BASE 0x1800 /* RX AREA (SlowQ) */
47
48 /* MEMORY MAP FOR MAGNEMITE */
49 /* the indexes are swapped comparing to PCMCIA - is it OK or a bug? */
50 #undef FT1000_MAG_DSP_LED_INDX
51 #define FT1000_MAG_DSP_LED_INDX 0x1 /* dsp led status for PAD device */
52 #undef FT1000_MAG_DSP_CON_STATE_INDX
53 #define FT1000_MAG_DSP_CON_STATE_INDX 0x0 /* DSP Connection Status Info */
54
55 /* Maximum times trying to get ASIC out of reset */
56 #define MAX_ASIC_RESET_CNT 20
57
58 #define MAX_BUF_SIZE 4096
59
60 struct ft1000_device {
61 struct usb_device *dev;
62 struct net_device *net;
63
64 u32 status;
65
66 struct urb *rx_urb;
67 struct urb *tx_urb;
68
69 u8 tx_buf[MAX_BUF_SIZE];
70 u8 rx_buf[MAX_BUF_SIZE];
71
72 u8 bulk_in_endpointAddr;
73 u8 bulk_out_endpointAddr;
74 } __packed;
75
76 struct ft1000_debug_dirs {
77 struct list_head list;
78 struct dentry *dent;
79 struct dentry *file;
80 int int_number;
81 };
82
83 struct ft1000_info {
84 struct ft1000_device *pFt1000Dev;
85 struct net_device_stats stats;
86
87 struct task_struct *pPollThread;
88
89 unsigned char fcodeldr;
90 unsigned char bootmode;
91 unsigned char usbboot;
92 unsigned short dspalive;
93 u16 ASIC_ID;
94 bool fProvComplete;
95 bool fCondResetPend;
96 bool fAppMsgPend;
97 u16 DrvErrNum;
98 u16 AsicID;
99 int DspAsicReset;
100 int DeviceCreated;
101 int CardReady;
102 int NetDevRegDone;
103 u8 CardNumber;
104 u8 DeviceName[15];
105 struct ft1000_debug_dirs nodes;
106 int registered;
107 int mediastate;
108 u8 squeseqnum; /* sequence number on slow queue */
109 spinlock_t dpram_lock;
110 spinlock_t fifo_lock;
111 u16 fifo_cnt;
112 u8 DspVer[DSPVERSZ]; /* DSP version number */
113 u8 HwSerNum[HWSERNUMSZ]; /* Hardware Serial Number */
114 u8 Sku[SKUSZ]; /* SKU */
115 u8 eui64[EUISZ]; /* EUI64 */
116 time_t ConTm; /* Connection Time */
117 u8 ProductMode[MODESZ];
118 u8 RfCalVer[CALVERSZ];
119 u8 RfCalDate[CALDATESZ];
120 u16 DSP_TIME[4];
121 u16 LedStat;
122 u16 ConStat;
123 u16 ProgConStat;
124 struct list_head prov_list;
125 int appcnt;
126 struct app_info_block app_info[MAX_NUM_APP];
127 u16 DSPInfoBlklen;
128 u16 DrvMsgPend;
129 int (*ft1000_reset)(struct net_device *dev);
130 u16 DSPInfoBlk[MAX_DSP_SESS_REC];
131 union {
132 u16 Rec[MAX_DSP_SESS_REC];
133 u32 MagRec[MAX_DSP_SESS_REC/2];
134 } DSPSess;
135 unsigned short tempbuf[32];
136 char netdevname[IFNAMSIZ];
137 struct proc_dir_entry *ft1000_proc_dir;
138 };
139
140
141 struct dpram_blk {
142 struct list_head list;
143 u16 *pbuffer;
144 } __packed;
145
146 int ft1000_read_register(struct ft1000_device *ft1000dev,
147 u16 *Data, u16 nRegIndx);
148 int ft1000_write_register(struct ft1000_device *ft1000dev,
149 u16 value, u16 nRegIndx);
150 int ft1000_read_dpram32(struct ft1000_device *ft1000dev,
151 u16 indx, u8 *buffer, u16 cnt);
152 int ft1000_write_dpram32(struct ft1000_device *ft1000dev,
153 u16 indx, u8 *buffer, u16 cnt);
154 int ft1000_read_dpram16(struct ft1000_device *ft1000dev,
155 u16 indx, u8 *buffer, u8 highlow);
156 int ft1000_write_dpram16(struct ft1000_device *ft1000dev,
157 u16 indx, u16 value, u8 highlow);
158 int fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev,
159 u16 indx, u8 *buffer);
160 int fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev,
161 u16 indx, u8 *buffer);
162
163 extern void *pFileStart;
164 extern size_t FileLength;
165 extern int numofmsgbuf;
166
167 int ft1000_close(struct net_device *dev);
168 u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart,
169 u32 FileLength);
170
171 extern struct list_head freercvpool;
172
173 extern spinlock_t free_buff_lock; /* lock to arbitrate free buffer list for receive command data */
174
175 int ft1000_create_dev(struct ft1000_device *dev);
176 void ft1000_destroy_dev(struct net_device *dev);
177 extern void card_send_command(struct ft1000_device *ft1000dev,
178 void *ptempbuffer, int size);
179
180 struct dpram_blk *ft1000_get_buffer(struct list_head *bufflist);
181 void ft1000_free_buffer(struct dpram_blk *pdpram_blk, struct list_head *plist);
182
183 int dsp_reload(struct ft1000_device *ft1000dev);
184 int init_ft1000_netdev(struct ft1000_device *ft1000dev);
185 struct usb_interface;
186 int reg_ft1000_netdev(struct ft1000_device *ft1000dev,
187 struct usb_interface *intf);
188 int ft1000_poll(void *dev_id);
189
190 int ft1000_init_proc(struct net_device *dev);
191 void ft1000_cleanup_proc(struct ft1000_info *info);
192
193
194
195 #endif
This page took 0.039224 seconds and 4 git commands to generate.