staging: ft1000: unify struct ft1000_info between USB and PCMCIA drivers
RFC PATCH 1/1 staging: ft1000: unify struct ft1000_info between USB and PCMCIA drivers
Unify struct ft1000_info between ft1000-usb and ft1000-pcmcia and move it to common ft1000.h.
ft1000-pcmcia seems to work. Please test ft1000-usb.
Signed-off-by Ondrej Zary <[email protected]>
--- drivers/staging/ft1000/ft1000-pcmcia/ft1000.h | 33 +----- drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c | 21 ++- drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c | 10 +- drivers/staging/ft1000/ft1000-usb/ft1000_debug.c | 147 ++++++++++---------- .../staging/ft1000/ft1000-usb/ft1000_download.c | 70 +++++----- drivers/staging/ft1000/ft1000-usb/ft1000_hw.c | 99 +++++++------- drivers/staging/ft1000/ft1000-usb/ft1000_proc.c | 4 +- drivers/staging/ft1000/ft1000-usb/ft1000_usb.c | 30 ++-- drivers/staging/ft1000/ft1000-usb/ft1000_usb.h | 89 +++--------- drivers/staging/ft1000/ft1000.h | 35 +++++ 10 files changed, 251 insertions(+), 287 deletions(-)
drivers/staging/ft1000/ft1000-pcmcia/ft1000.h +1 -32
@@ -31,41 +31,10 @@#define SUCCESS 0x00#define FAILURE 0x01 -struct ft1000_info { -struct net_device_stats stats; -u16 DrvErrNum; -u16 AsicID; +struct ft1000_pcmcia {int PktIntfErr; -int CardReady; -int registered; -int mediastate;u16 packetseqnum; -u8 squeseqnum;/* sequence number on slow queue */ -spinlock_t dpram_lock; -u16 fifo_cnt; -u8 DspVer[DSPVERSZ ];/* DSP version number */ -u8 HwSerNum[HWSERNUMSZ ];/* Hardware Serial Number */ -u8 Sku[SKUSZ ];/* SKU */ -u8 eui64[EUISZ ];/* EUI64 */ -time_t ConTm;/* Connection Time */ -u16 LedStat; -u16 ConStat; -u16 ProgConStat; -u8 ProductMode[MODESZ ]; -u8 RfCalVer[CALVERSZ ]; -u8 RfCalDate[CALDATESZ ]; -u16 DSP_TIME[4 ]; -struct list_head prov_list; -u16 DSPInfoBlklen; -int (*ft1000_reset)(void *);void *link; -u16 DSPInfoBlk[MAX_DSP_SESS_REC ]; -union { -u16 Rec[MAX_DSP_SESS_REC ]; -u32 MagRec[MAX_DSP_SESS_REC /2 ]; - } DSPSess; -struct proc_dir_entry *proc_ft1000; -char netdevname[IFNAMSIZ ]; };extern u16 ft1000_read_dpram (struct net_device *dev,int offset);
drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c +15 -6
@@ -335,11 +335,12 @@ static void ft1000_disable_interrupts(struct net_device *dev)static void ft1000_reset_asic (struct net_device *dev) {struct ft1000_info *info =netdev_priv (dev); +struct ft1000_pcmcia *pcmcia = info->priv;u16 tempword;DEBUG (1 ,"ft1000_hw:ft1000_reset_asic called\n" ); - (*info->ft1000_reset) (info->link); + (*info->ft1000_reset) (pcmcia->link);// Let's use the register provided by the Magnemite ASIC to reset the // ASIC and DSP.
@@ -1403,12 +1404,13 @@ int ft1000_parse_dpram_msg(struct net_device *dev)static void ft1000_flush_fifo (struct net_device *dev,u16 DrvErrNum) {struct ft1000_info *info =netdev_priv (dev); +struct ft1000_pcmcia *pcmcia = info->priv;u16 i;u32 templong;u16 tempword;DEBUG (1 ,"ft1000:ft1000_hw:ft1000_flush_fifo called\n" ); -if (info->PktIntfErr >MAX_PH_ERR ) { +if (pcmcia->PktIntfErr >MAX_PH_ERR ) {if (info->AsicID ==ELECTRABUZZ_ID ) { info->DSP_TIME[0 ] =ft1000_read_dpram (dev,FT1000_DSP_TIMER0 );
@@ -1497,7 +1499,7 @@ static void ft1000_flush_fifo(struct net_device *dev, u16 DrvErrNum)FIFO_FLUSH_BADCNT ; }else {// Let's assume that we really flush the FIFO - info->PktIntfErr++; + pcmcia->PktIntfErr++;return ; } }else {
@@ -1528,7 +1530,7 @@ static void ft1000_flush_fifo(struct net_device *dev, u16 DrvErrNum)DEBUG (0 ,"FT1000_REG_MAG_DFSR = 0x%x\n" , tempword); }if (DrvErrNum) { - info->PktIntfErr++; + pcmcia->PktIntfErr++; } } }
@@ -1737,6 +1739,7 @@ int ft1000_copy_up_pkt(struct net_device *dev)int ft1000_copy_down_pkt (struct net_device *dev,u16 * packet,u16 len) {struct ft1000_info *info =netdev_priv (dev); +struct ft1000_pcmcia *pcmcia = info->priv;union {struct pseudo_hdr blk;u16 buff[sizeof (struct pseudo_hdr ) >>1 ];
@@ -1786,7 +1789,7 @@ int ft1000_copy_down_pkt(struct net_device *dev, u16 * packet, u16 len) pseudo.blk.control =0 ; pseudo.blk.rsvd1 =0 ; pseudo.blk.seq_num =0 ; - pseudo.blk.rsvd2 = info->packetseqnum++; + pseudo.blk.rsvd2 = pcmcia->packetseqnum++; pseudo.blk.qos_class =0 ;/* Calculate pseudo header checksum */ pseudo.blk.checksum = pseudo.buff[0 ];
@@ -2063,6 +2066,8 @@ void stop_ft1000_card(struct net_device *dev)kfree (ptr); } +kfree (info->priv); +if (info->registered) {unregister_netdev (dev); info->registered =0 ;
@@ -2105,6 +2110,7 @@ struct net_device *init_ft1000_card(struct pcmcia_device *link, void *ft1000_reset) {struct ft1000_info *info; +struct ft1000_pcmcia *pcmcia;struct net_device *dev; static const struct net_device_ops ft1000ops = // Slavius 21.10.2009 due to kernel changes
@@ -2146,10 +2152,13 @@ struct net_device *init_ft1000_card(struct pcmcia_device *link,memset (&info->stats,0 ,sizeof (struct net_device_stats )); + info->priv =kzalloc (sizeof (struct ft1000_pcmcia ),GFP_KERNEL ); + pcmcia = info->priv; + pcmcia->link = link; +spin_lock_init (&info->dpram_lock); info->DrvErrNum =0 ; info->registered =1 ; - info->link = link; info->ft1000_reset = ft1000_reset; info->mediastate =0 ; info->fifo_cnt =0 ;
drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c +5 -5
@@ -176,8 +176,8 @@ static int ft1000NotifyProc(struct notifier_block *this, unsigned long event,switch (event) {case NETDEV_CHANGENAME : -remove_proc_entry (info->netdevname, info->proc_ft1000); -create_proc_read_entry (dev->name,0644 , info->proc_ft1000, +remove_proc_entry (info->netdevname, info->ft1000_proc_dir); +create_proc_read_entry (dev->name,0644 , info->ft1000_proc_dir, ft1000ReadProc, dev);snprintf (info->netdevname,IFNAMSIZ ,"%s" , dev->name);break ;
@@ -195,8 +195,8 @@ void ft1000InitProc(struct net_device *dev) info =netdev_priv (dev); - info->proc_ft1000 =proc_mkdir (FT1000_PROC , init_net.proc_net); -create_proc_read_entry (dev->name,0644 , info->proc_ft1000, + info->ft1000_proc_dir =proc_mkdir (FT1000_PROC , init_net.proc_net); +create_proc_read_entry (dev->name,0644 , info->ft1000_proc_dir, ft1000ReadProc, dev);snprintf (info->netdevname,IFNAMSIZ ,"%s" , dev->name);register_netdevice_notifier (&ft1000_netdev_notifier);
@@ -208,7 +208,7 @@ void ft1000CleanupProc(struct net_device *dev) info =netdev_priv (dev); -remove_proc_entry (dev->name, info->proc_ft1000); +remove_proc_entry (dev->name, info->ft1000_proc_dir);remove_proc_entry (FT1000_PROC , init_net.proc_net);unregister_netdevice_notifier (&ft1000_netdev_notifier); }
drivers/staging/ft1000/ft1000-usb/ft1000_debug.c +74 -73
359 lines not on this page · raw message
drivers/staging/ft1000/ft1000-usb/ft1000_download.c +32 -38
201 lines not on this page · raw message
drivers/staging/ft1000/ft1000-usb/ft1000_hw.c +48 -51
306 lines not on this page · raw message
drivers/staging/ft1000/ft1000-usb/ft1000_proc.c +2 -2
@@ -94,11 +94,11 @@ ft1000ReadProc(char *page, char **start, off_t off, int count, int *eof,if (info->ProgConStat !=0xFF ) { -ft1000_read_dpram16 (info->pFt1000Dev,FT1000_MAG_DSP_LED , +ft1000_read_dpram16 (info->priv,FT1000_MAG_DSP_LED , (u8 *)&ledStat,FT1000_MAG_DSP_LED_INDX ); info->LedStat =ntohs (ledStat); -ft1000_read_dpram16 (info->pFt1000Dev,FT1000_MAG_DSP_CON_STATE , +ft1000_read_dpram16 (info->priv,FT1000_MAG_DSP_CON_STATE , (u8 *)&conStat,FT1000_MAG_DSP_CON_STATE_INDX ); info->ConStat =ntohs (conStat);do_gettimeofday (&tv);
drivers/staging/ft1000/ft1000-usb/ft1000_usb.c +16 -14
@@ -173,11 +173,11 @@ static int ft1000_probe(struct usb_interface *interface, } gPollingfailed = FALSE; - pft1000info->pPollThread = + ft1000dev->pPollThread =kthread_run (ft1000_poll_thread, ft1000dev,"ft1000_poll" ); -if (IS_ERR (pft1000info->pPollThread)) { - ret =PTR_ERR (pft1000info->pPollThread); +if (IS_ERR (ft1000dev->pPollThread)) { + ret =PTR_ERR (ft1000dev->pPollThread); goto err_load; }
@@ -202,7 +202,7 @@ static int ft1000_probe(struct usb_interface *interface,if (ret) goto err_proc; - pft1000info->NetDevRegDone =1 ; + ft1000dev->NetDevRegDone =1 ;return 0 ;
@@ -210,7 +210,7 @@ err_proc:unregister_netdev (ft1000dev->net);free_netdev (ft1000dev->net); err_thread: -kthread_stop (pft1000info->pPollThread); +kthread_stop (ft1000dev->pPollThread); err_load:kfree (pFileStart); err_fw:
@@ -221,6 +221,7 @@ err_fw:static void ft1000_disconnect (struct usb_interface *interface) {struct ft1000_info *pft1000info; +struct ft1000_device *ft1000dev;DEBUG ("ft1000_disconnect is called\n" );
@@ -228,28 +229,29 @@ static void ft1000_disconnect(struct usb_interface *interface)DEBUG ("In disconnect pft1000info=%p\n" , pft1000info);if (pft1000info) { + ft1000dev = pft1000info->priv;ft1000_cleanup_proc (pft1000info); -if (pft1000info->pPollThread) -kthread_stop (pft1000info->pPollThread); +if (ft1000dev->pPollThread) +kthread_stop (ft1000dev->pPollThread);DEBUG ("ft1000_disconnect: threads are terminated\n" ); -if (pft1000info->pFt1000Dev->net) { +if (ft1000dev->net) {DEBUG ("ft1000_disconnect: destroy char driver\n" ); -ft1000_destroy_dev (pft1000info->pFt1000Dev->net); -unregister_netdev (pft1000info->pFt1000Dev->net); +ft1000_destroy_dev (ft1000dev->net); +unregister_netdev (ft1000dev->net);DEBUG ("ft1000_disconnect: network device unregisterd\n" ); -free_netdev (pft1000info->pFt1000Dev->net); +free_netdev (ft1000dev->net); } -usb_free_urb (pft1000info->pFt1000Dev->rx_urb); -usb_free_urb (pft1000info->pFt1000Dev->tx_urb); +usb_free_urb (ft1000dev->rx_urb); +usb_free_urb (ft1000dev->tx_urb);DEBUG ("ft1000_disconnect: urb freed\n" ); -kfree (pft1000info->pFt1000Dev); +kfree (ft1000dev); }kfree (pFileStart);
drivers/staging/ft1000/ft1000-usb/ft1000_usb.h +23 -66
104 lines not on this page · raw message
drivers/staging/ft1000/ft1000.h +35 -0
@@ -250,3 +250,38 @@ struct prov_record {struct list_head list;u8 *pprov_data; }; + +struct ft1000_info { +void *priv; +struct net_device_stats stats; +u16 DrvErrNum; +u16 AsicID; +int CardReady; +int registered; +int mediastate; +u8 squeseqnum;/* sequence number on slow queue */ +spinlock_t dpram_lock; +u16 fifo_cnt; +u8 DspVer[DSPVERSZ ];/* DSP version number */ +u8 HwSerNum[HWSERNUMSZ ];/* Hardware Serial Number */ +u8 Sku[SKUSZ ];/* SKU */ +u8 eui64[EUISZ ];/* EUI64 */ +time_t ConTm;/* Connection Time */ +u8 ProductMode[MODESZ ]; +u8 RfCalVer[CALVERSZ ]; +u8 RfCalDate[CALDATESZ ]; +u16 DSP_TIME[4 ]; +u16 LedStat; +u16 ConStat; +u16 ProgConStat; +struct list_head prov_list; +u16 DSPInfoBlklen; +int (*ft1000_reset)(void *); +u16 DSPInfoBlk[MAX_DSP_SESS_REC ]; +union { +u16 Rec[MAX_DSP_SESS_REC ]; +u32 MagRec[MAX_DSP_SESS_REC /2 ]; + } DSPSess; +struct proc_dir_entry *ft1000_proc_dir; +char netdevname[IFNAMSIZ ]; +};
Signature · 1 line
Ondrej Zary