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