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 191