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