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