Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mason/btrfs...
[cascardo/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
78         //struct ft1000_ethernet_configuration configuration;
79
80 //      struct net_device_stats stats; //mbelian
81 } __attribute__ ((packed));
82
83 struct ft1000_debug_dirs {
84         struct list_head list;
85         struct dentry *dent;
86         struct dentry *file;
87         int int_number;
88 };
89
90 struct ft1000_info {
91     struct ft1000_device *pFt1000Dev;
92     struct net_device_stats stats;
93
94     struct task_struct *pPollThread;
95
96     unsigned char fcodeldr;
97     unsigned char bootmode;
98         unsigned char usbboot;
99     unsigned short dspalive;
100     u16 ASIC_ID;
101     bool fProvComplete;
102     bool fCondResetPend;
103     bool fAppMsgPend;
104     u16 DrvErrNum;
105     u16 AsicID;
106     int DspAsicReset;
107     int DeviceCreated;
108     int CardReady;
109     int NetDevRegDone;
110     u8 CardNumber;
111     u8 DeviceName[15];
112     struct ft1000_debug_dirs nodes;
113     int registered;
114     int mediastate;
115     u8 squeseqnum;                 // sequence number on slow queue
116     spinlock_t dpram_lock;
117     spinlock_t fifo_lock;
118     u16 fifo_cnt;
119     u8 DspVer[DSPVERSZ];        // DSP version number
120     u8 HwSerNum[HWSERNUMSZ];    // Hardware Serial Number
121     u8 Sku[SKUSZ];              // SKU
122     u8 eui64[EUISZ];            // EUI64
123     time_t ConTm;               // Connection Time
124     u8 ProductMode[MODESZ];
125     u8 RfCalVer[CALVERSZ];
126     u8 RfCalDate[CALDATESZ];
127     u16 DSP_TIME[4];
128     u16 LedStat;        //mbelian
129     u16 ConStat;        //mbelian
130     u16 ProgConStat;
131     struct list_head prov_list;
132     int appcnt;
133         struct app_info_block app_info[MAX_NUM_APP];
134     u16 DSPInfoBlklen;
135     u16 DrvMsgPend;
136     int (*ft1000_reset)(struct net_device *dev);
137     u16 DSPInfoBlk[MAX_DSP_SESS_REC];
138     union {
139         u16 Rec[MAX_DSP_SESS_REC];
140         u32 MagRec[MAX_DSP_SESS_REC/2];
141     } DSPSess;
142         unsigned short tempbuf[32];
143         char netdevname[IFNAMSIZ];
144         struct proc_dir_entry *ft1000_proc_dir; //mbelian
145 };
146
147
148 struct dpram_blk {
149     struct list_head list;
150     u16 *pbuffer;
151 } __attribute__ ((packed));
152
153 int ft1000_read_register(struct ft1000_device *ft1000dev, u16* Data, u16 nRegIndx);
154 int ft1000_write_register(struct ft1000_device *ft1000dev, u16 value, u16 nRegIndx);
155 int ft1000_read_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u16 cnt);
156 int ft1000_write_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u16 cnt);
157 int ft1000_read_dpram16(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u8 highlow);
158 int ft1000_write_dpram16(struct ft1000_device *ft1000dev, u16 indx, u16 value, u8 highlow);
159 int fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer);
160 int fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer);
161
162 extern void *pFileStart;
163 extern size_t FileLength;
164 extern int numofmsgbuf;
165
166 int ft1000_close (struct net_device *dev);
167 u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, u32  FileLength);
168
169 extern struct list_head freercvpool;
170 extern spinlock_t free_buff_lock;   // lock to arbitrate free buffer list for receive command data
171
172 int ft1000_create_dev(struct ft1000_device *dev);
173 void ft1000_destroy_dev(struct net_device *dev);
174 extern void card_send_command(struct ft1000_device *ft1000dev, void *ptempbuffer, int size);
175
176 struct dpram_blk *ft1000_get_buffer(struct list_head *bufflist);
177 void ft1000_free_buffer(struct dpram_blk *pdpram_blk, struct list_head *plist);
178
179 int dsp_reload(struct ft1000_device *ft1000dev);
180 int init_ft1000_netdev(struct ft1000_device *ft1000dev);
181 struct usb_interface;
182 int reg_ft1000_netdev(struct ft1000_device *ft1000dev, struct usb_interface *intf);
183 int ft1000_poll(void* dev_id);
184
185 int ft1000_init_proc(struct net_device *dev);
186 void ft1000_cleanup_proc(struct ft1000_info *info);
187
188
189
190 #endif