Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / 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 struct app_info_block {
15         u32 nTxMsg;                    /* DPRAM msg sent to DSP with app_id */
16         u32 nRxMsg;                    /* DPRAM msg rcv from dsp with app_id */
17         u32 nTxMsgReject;              /* DPRAM msg rejected due to DSP doorbell
18                                         * set
19                                         */
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
27                                         * slow queue
28                                         */
29 } __packed;
30
31 #define FALSE           0
32 #define TRUE            1
33
34 #define FT1000_STATUS_CLOSING  0x01
35
36 #define DSPBCMSGID              0x10
37
38 /* Electrabuzz specific DPRAM mapping */
39 /* this is used by ft1000_usb driver - isn't that a bug? */
40 #undef FT1000_DPRAM_RX_BASE
41 #define FT1000_DPRAM_RX_BASE    0x1800  /* RX AREA (SlowQ) */
42
43 /* MEMORY MAP FOR MAGNEMITE */
44 /* the indexes are swapped comparing to PCMCIA - is it OK or a bug? */
45 #undef FT1000_MAG_DSP_LED_INDX
46 #define FT1000_MAG_DSP_LED_INDX         0x1     /* dsp led status for PAD
47                                                  * device
48                                                  */
49 #undef FT1000_MAG_DSP_CON_STATE_INDX
50 #define FT1000_MAG_DSP_CON_STATE_INDX   0x0     /* DSP Connection Status Info */
51
52 /* Maximum times trying to get ASIC out of reset */
53 #define MAX_ASIC_RESET_CNT      20
54
55 #define MAX_BUF_SIZE            4096
56
57 struct ft1000_debug_dirs {
58         struct list_head list;
59         struct dentry *dent;
60         struct dentry *file;
61         int int_number;
62 };
63
64 struct ft1000_usb {
65         struct usb_device *dev;
66         struct net_device *net;
67
68         u32 status;
69
70         struct urb *rx_urb;
71         struct urb *tx_urb;
72
73         u8 tx_buf[MAX_BUF_SIZE];
74         u8 rx_buf[MAX_BUF_SIZE];
75
76         u8 bulk_in_endpointAddr;
77         u8 bulk_out_endpointAddr;
78
79         struct task_struct *pPollThread;
80         unsigned char fcodeldr;
81         unsigned char bootmode;
82         unsigned char usbboot;
83         unsigned short dspalive;
84         bool fProvComplete;
85         bool fCondResetPend;
86         bool fAppMsgPend;
87         int DeviceCreated;
88         int NetDevRegDone;
89         u8 CardNumber;
90         u8 DeviceName[15];
91         struct ft1000_debug_dirs nodes;
92         spinlock_t fifo_lock;
93         int appcnt;
94         struct app_info_block app_info[MAX_NUM_APP];
95         u16 DrvMsgPend;
96         unsigned short tempbuf[32];
97 } __packed;
98
99
100 struct dpram_blk {
101         struct list_head list;
102         u16 *pbuffer;
103 } __packed;
104
105 int ft1000_read_register(struct ft1000_usb *ft1000dev,
106                          u16 *Data, u16 nRegIndx);
107 int ft1000_write_register(struct ft1000_usb *ft1000dev,
108                           u16 value, u16 nRegIndx);
109 int ft1000_read_dpram32(struct ft1000_usb *ft1000dev,
110                         u16 indx, u8 *buffer, u16 cnt);
111 int ft1000_write_dpram32(struct ft1000_usb *ft1000dev,
112                          u16 indx, u8 *buffer, u16 cnt);
113 int ft1000_read_dpram16(struct ft1000_usb *ft1000dev,
114                         u16 indx, u8 *buffer, u8 highlow);
115 int ft1000_write_dpram16(struct ft1000_usb *ft1000dev,
116                          u16 indx, u16 value, u8 highlow);
117 int fix_ft1000_read_dpram32(struct ft1000_usb *ft1000dev,
118                             u16 indx, u8 *buffer);
119 int fix_ft1000_write_dpram32(struct ft1000_usb *ft1000dev,
120                              u16 indx, u8 *buffer);
121
122 extern void *pFileStart;
123 extern size_t FileLength;
124 extern int numofmsgbuf;
125
126 int ft1000_close(struct net_device *dev);
127 int scram_dnldr(struct ft1000_usb *ft1000dev, void *pFileStart,
128                 u32  FileLength);
129
130 extern struct list_head freercvpool;
131
132 /* lock to arbitrate free buffer list for receive command data */
133 extern spinlock_t free_buff_lock;
134
135 int ft1000_create_dev(struct ft1000_usb *dev);
136 void ft1000_destroy_dev(struct net_device *dev);
137 extern int card_send_command(struct ft1000_usb *ft1000dev,
138                              void *ptempbuffer, int size);
139
140 struct dpram_blk *ft1000_get_buffer(struct list_head *bufflist);
141 void ft1000_free_buffer(struct dpram_blk *pdpram_blk, struct list_head *plist);
142
143 int dsp_reload(struct ft1000_usb *ft1000dev);
144 int init_ft1000_netdev(struct ft1000_usb *ft1000dev);
145 struct usb_interface;
146 int reg_ft1000_netdev(struct ft1000_usb *ft1000dev,
147                       struct usb_interface *intf);
148 int ft1000_poll(void *dev_id);
149
150 #endif  /* _FT1000_USB_H_ */