diff options
author | David S. Miller <davem@davemloft.net> | 2011-01-24 21:17:06 (GMT) |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2011-01-24 21:17:06 (GMT) |
commit | e92427b289d252cfbd4cb5282d92f4ce1a5bb1fb (patch) | |
tree | 6d30e5e7b7f8e9aaa51d43b7128ac56860fa03bb /drivers/staging/ft1000 | |
parent | c506653d35249bb4738bb139c24362e1ae724bc1 (diff) | |
parent | ec30f343d61391ab23705e50a525da1d55395780 (diff) | |
download | linux-fsl-qoriq-e92427b289d252cfbd4cb5282d92f4ce1a5bb1fb.tar.xz |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/torvalds/linux-2.6
Diffstat (limited to 'drivers/staging/ft1000')
-rw-r--r-- | drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c | 54 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c | 8 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/Makefile | 2 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_debug.c (renamed from drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c) | 435 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_download.c | 386 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_hw.c | 433 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_hw.h | 4 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_proc.c | 373 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_usb.c | 34 | ||||
-rw-r--r-- | drivers/staging/ft1000/ft1000-usb/ft1000_usb.h | 62 |
10 files changed, 718 insertions, 1073 deletions
diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c index eed7e94..588afd5 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_hw.c @@ -132,7 +132,7 @@ inline void ft1000_asic_write(struct net_device *dev, u16 offset, u16 value) //--------------------------------------------------------------------------- static inline u16 ft1000_read_fifo_len(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); if (info->AsicID == ELECTRABUZZ_ID) { return (ft1000_read_reg(dev, FT1000_REG_UFIFO_STAT) - 16); @@ -155,7 +155,7 @@ static inline u16 ft1000_read_fifo_len(struct net_device *dev) //--------------------------------------------------------------------------- u16 ft1000_read_dpram(struct net_device * dev, int offset) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); unsigned long flags; u16 data; @@ -184,7 +184,7 @@ u16 ft1000_read_dpram(struct net_device * dev, int offset) static inline void ft1000_write_dpram(struct net_device *dev, int offset, u16 value) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); unsigned long flags; // Provide mutual exclusive access while reading ASIC registers. @@ -208,7 +208,7 @@ static inline void ft1000_write_dpram(struct net_device *dev, //--------------------------------------------------------------------------- u16 ft1000_read_dpram_mag_16(struct net_device *dev, int offset, int Index) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); unsigned long flags; u16 data; @@ -242,7 +242,7 @@ u16 ft1000_read_dpram_mag_16(struct net_device *dev, int offset, int Index) static inline void ft1000_write_dpram_mag_16(struct net_device *dev, int offset, u16 value, int Index) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); unsigned long flags; // Provide mutual exclusive access while reading ASIC registers. @@ -270,7 +270,7 @@ static inline void ft1000_write_dpram_mag_16(struct net_device *dev, //--------------------------------------------------------------------------- u32 ft1000_read_dpram_mag_32(struct net_device *dev, int offset) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); unsigned long flags; u32 data; @@ -298,7 +298,7 @@ u32 ft1000_read_dpram_mag_32(struct net_device *dev, int offset) //--------------------------------------------------------------------------- void ft1000_write_dpram_mag_32(struct net_device *dev, int offset, u32 value) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); unsigned long flags; // Provide mutual exclusive access while reading ASIC registers. @@ -320,7 +320,7 @@ void ft1000_write_dpram_mag_32(struct net_device *dev, int offset, u32 value) //--------------------------------------------------------------------------- static void ft1000_enable_interrupts(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 tempword; DEBUG(1, "ft1000_hw:ft1000_enable_interrupts()\n"); @@ -345,7 +345,7 @@ static void ft1000_enable_interrupts(struct net_device *dev) //--------------------------------------------------------------------------- static void ft1000_disable_interrupts(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 tempword; DEBUG(1, "ft1000_hw: ft1000_disable_interrupts()\n"); @@ -370,7 +370,7 @@ static void ft1000_disable_interrupts(struct net_device *dev) //--------------------------------------------------------------------------- static void ft1000_reset_asic(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 tempword; DEBUG(1, "ft1000_hw:ft1000_reset_asic called\n"); @@ -414,7 +414,7 @@ static void ft1000_reset_asic(struct net_device *dev) //--------------------------------------------------------------------------- static int ft1000_reset_card(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 tempword; int i; unsigned long flags; @@ -618,7 +618,7 @@ static void ft1000_hbchk(u_long data) FT1000_INFO *info; USHORT tempword; - info = (FT1000_INFO *) netdev_priv(dev); + info = netdev_priv(dev); if (info->CardReady == 1) { // Perform dsp heartbeat check @@ -831,7 +831,7 @@ static void ft1000_hbchk(u_long data) //--------------------------------------------------------------------------- void ft1000_send_cmd (struct net_device *dev, u16 *ptempbuffer, int size, u16 qtype) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); int i; u16 tempword; unsigned long flags; @@ -916,7 +916,7 @@ void ft1000_send_cmd (struct net_device *dev, u16 *ptempbuffer, int size, u16 qt //--------------------------------------------------------------------------- BOOLEAN ft1000_receive_cmd(struct net_device *dev, u16 * pbuffer, int maxsz, u16 *pnxtph) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 size; u16 *ppseudohdr; int i; @@ -1009,7 +1009,7 @@ BOOLEAN ft1000_receive_cmd(struct net_device *dev, u16 * pbuffer, int maxsz, u16 //--------------------------------------------------------------------------- void ft1000_proc_drvmsg(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 msgtype; u16 tempword; PMEDIAMSG pmediamsg; @@ -1292,7 +1292,7 @@ void ft1000_proc_drvmsg(struct net_device *dev) //--------------------------------------------------------------------------- int ft1000_parse_dpram_msg(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 doorbell; u16 portid; u16 nxtph; @@ -1449,7 +1449,7 @@ int ft1000_parse_dpram_msg(struct net_device *dev) //--------------------------------------------------------------------------- static void ft1000_flush_fifo(struct net_device *dev, u16 DrvErrNum) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 i; u32 templong; u16 tempword; @@ -1596,7 +1596,7 @@ static void ft1000_flush_fifo(struct net_device *dev, u16 DrvErrNum) int ft1000_copy_up_pkt(struct net_device *dev) { u16 tempword; - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 len; struct sk_buff *skb; u16 i; @@ -1783,7 +1783,7 @@ int ft1000_copy_up_pkt(struct net_device *dev) //--------------------------------------------------------------------------- int ft1000_copy_down_pkt(struct net_device *dev, u16 * packet, u16 len) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); union { PSEUDO_HDR blk; u16 buff[sizeof(PSEUDO_HDR) >> 1]; @@ -1943,7 +1943,7 @@ int ft1000_copy_down_pkt(struct net_device *dev, u16 * packet, u16 len) static struct net_device_stats *ft1000_stats(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); return (&info->stats); } @@ -1967,7 +1967,7 @@ static int ft1000_open(struct net_device *dev) static int ft1000_close(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); DEBUG(0, "ft1000_hw: ft1000_close()\n"); @@ -1989,7 +1989,7 @@ static int ft1000_close(struct net_device *dev) static int ft1000_start_xmit(struct sk_buff *skb, struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u8 *pdata; DEBUG(1, "ft1000_hw: ft1000_start_xmit()\n"); @@ -2026,7 +2026,7 @@ static int ft1000_start_xmit(struct sk_buff *skb, struct net_device *dev) static irqreturn_t ft1000_interrupt(int irq, void *dev_id) { struct net_device *dev = (struct net_device *)dev_id; - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); u16 tempword; u16 inttype; int cnt; @@ -2091,7 +2091,7 @@ static irqreturn_t ft1000_interrupt(int irq, void *dev_id) void stop_ft1000_card(struct net_device *dev) { - FT1000_INFO *info = (FT1000_INFO *) netdev_priv(dev); + FT1000_INFO *info = netdev_priv(dev); PPROV_RECORD ptr; // int cnt; @@ -2127,7 +2127,7 @@ static void ft1000_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info) { FT1000_INFO *ft_info; - ft_info = (FT1000_INFO *) netdev_priv(dev); + ft_info = netdev_priv(dev); snprintf(info->driver, 32, "ft1000"); snprintf(info->bus_info, ETHTOOL_BUSINFO_LEN, "PCMCIA 0x%lx", @@ -2139,7 +2139,7 @@ static void ft1000_get_drvinfo(struct net_device *dev, static u32 ft1000_get_link(struct net_device *dev) { FT1000_INFO *info; - info = (FT1000_INFO *) netdev_priv(dev); + info = netdev_priv(dev); return info->mediastate; } @@ -2185,7 +2185,7 @@ struct net_device *init_ft1000_card(unsigned short irq, int port, } SET_NETDEV_DEV(dev, fdev); - info = (FT1000_INFO *) netdev_priv(dev); + info = netdev_priv(dev); memset(info, 0, sizeof(FT1000_INFO)); diff --git a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c index b45de9b..935608e 100644 --- a/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c +++ b/drivers/staging/ft1000/ft1000-pcmcia/ft1000_proc.c @@ -65,7 +65,7 @@ int ft1000ReadProc(char *page, char **start, off_t off, time_t delta; dev = (struct net_device *)data; - info = (FT1000_INFO *) netdev_priv(dev); + info = netdev_priv(dev); if (off > 0) { *eof = 1; @@ -174,7 +174,7 @@ static int ft1000NotifyProc(struct notifier_block *this, unsigned long event, struct net_device *dev = ptr; FT1000_INFO *info; - info = (FT1000_INFO *) netdev_priv(dev); + info = netdev_priv(dev); switch (event) { case NETDEV_CHANGENAME: @@ -195,7 +195,7 @@ void ft1000InitProc(struct net_device *dev) { FT1000_INFO *info; - info = (FT1000_INFO *) netdev_priv(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, @@ -208,7 +208,7 @@ void ft1000CleanupProc(struct net_device *dev) { FT1000_INFO *info; - info = (FT1000_INFO *) netdev_priv(dev); + info = netdev_priv(dev); remove_proc_entry(dev->name, info->proc_ft1000); remove_proc_entry(FT1000_PROC, init_net.proc_net); diff --git a/drivers/staging/ft1000/ft1000-usb/Makefile b/drivers/staging/ft1000/ft1000-usb/Makefile index dd87ecd..f0f5240 100644 --- a/drivers/staging/ft1000/ft1000-usb/Makefile +++ b/drivers/staging/ft1000/ft1000-usb/Makefile @@ -1,3 +1,3 @@ obj-$(CONFIG_FT1000_USB) += ft1000.o -ft1000-y := ft1000_chdev.o ft1000_download.o ft1000_hw.o ft1000_proc.o ft1000_usb.o +ft1000-y := ft1000_debug.o ft1000_download.o ft1000_hw.o ft1000_proc.o ft1000_usb.o diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c b/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c index 20d5098..149ba59 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_debug.c @@ -27,33 +27,22 @@ #include <linux/module.h> #include <linux/kernel.h> #include <linux/sched.h> -#include <linux/signal.h> #include <linux/errno.h> #include <linux/poll.h> #include <linux/netdevice.h> #include <linux/delay.h> -#include <linux/fs.h> -#include <linux/kmod.h> #include <linux/ioctl.h> -#include <linux/unistd.h> - +#include <linux/debugfs.h> #include "ft1000_usb.h" -//#include "ft1000_ioctl.h" static int ft1000_flarion_cnt = 0; -//need to looking usage of ft1000Handle - -static int ft1000_ChOpen (struct inode *Inode, struct file *File); -static unsigned int ft1000_ChPoll(struct file *file, poll_table *wait); -static long ft1000_ChIoctl(struct file *File, unsigned int Command, - unsigned long Argument); -static int ft1000_ChRelease (struct inode *Inode, struct file *File); - -// Global pointer to device object -static struct ft1000_device *pdevobj[MAX_NUM_CARDS + 2]; -//static devfs_handle_t ft1000Handle[MAX_NUM_CARDS]; +static int ft1000_open (struct inode *inode, struct file *file); +static unsigned int ft1000_poll_dev(struct file *file, poll_table *wait); +static long ft1000_ioctl(struct file *file, unsigned int command, + unsigned long argument); +static int ft1000_release (struct inode *inode, struct file *file); // List to free receive command buffer pool struct list_head freercvpool; @@ -63,103 +52,18 @@ spinlock_t free_buff_lock; int numofmsgbuf = 0; -// Global variable to indicate that all provisioning data is sent to DSP -//BOOLEAN fProvComplete; - // // Table of entry-point routines for char device // static struct file_operations ft1000fops = { - .unlocked_ioctl = ft1000_ChIoctl, - .poll = ft1000_ChPoll, - .open = ft1000_ChOpen, - .release = ft1000_ChRelease, + .unlocked_ioctl = ft1000_ioctl, + .poll = ft1000_poll_dev, + .open = ft1000_open, + .release = ft1000_release, .llseek = no_llseek, }; - - - -//--------------------------------------------------------------------------- -// Function: exec_mknod -// -// Parameters: -// -// Returns: -// -// Description: -// -// Notes: -// -//--------------------------------------------------------------------------- -static int exec_mknod (void *pdata) -{ - struct ft1000_info *info; - char mjnum[4]; - char minornum[4]; - char temp[32]; - int retcode; -// int i; //aelias [-] reason : unused variable - char *envp[] = { "HOME=/", "PATH=/usr/bin:/bin", NULL }; - char *argv[]={"-m 666",temp,"c",mjnum,minornum,NULL}; - - info = pdata; - DEBUG("ft1000_chdev:exec_mknod is called with major number = %d\n", info->DeviceMajor); - sprintf(temp, "%s%s", "/dev/", info->DeviceName) ; - sprintf(mjnum, "%d", info->DeviceMajor); - sprintf(minornum, "%d", info->CardNumber); - - //char *argv[]={"mknod","-m 666",temp,"c",mjnum,minornum,NULL}; -// char *argv[]={"-m 666",temp,"c",mjnum,minornum,NULL}; - - //for (i=0; i<7;i++) - // DEBUG("argv[%d]=%s\n", i, argv[i]); - - - retcode = call_usermodehelper ("/bin/mknod", argv, envp, 1); - if (retcode) { - DEBUG("ft1000_chdev:exec_mknod failed to make the node: retcode = %d\n", retcode); - } - - - - return retcode; - -} - -//--------------------------------------------------------------------------- -// Function: rm_mknod -// -// Description: This module removes the FT1000 device file -// -//--------------------------------------------------------------------------- -static int rm_mknod (void *pdata) -{ - - struct ft1000_info *info; - //char *argv[4]={"rm", "-f", "/dev/FT1000", NULL}; - int retcode; - char temp[32]; - char *argv[]={"rm", "-f", temp, NULL}; - - info = (struct ft1000_info *)pdata; - DEBUG("ft1000_chdev:rm_mknod is called for device %s\n", info->DeviceName); - sprintf(temp, "%s%s", "/dev/", info->DeviceName) ; - -// char *argv[]={"rm", "-f", temp, NULL}; - - retcode = call_usermodehelper ("/bin/rm", argv, NULL, 1); - if (retcode) { - DEBUG("ft1000_chdev:rm_mknod failed to remove the node: retcode = %d\n", retcode); - } - else - DEBUG("ft1000_chdev:rm_mknod done!\n"); - - - return retcode; - -} //--------------------------------------------------------------------------- // Function: ft1000_get_buffer // @@ -233,80 +137,55 @@ void ft1000_free_buffer(struct dpram_blk *pdpram_blk, struct list_head *plist) // Notes: Only called by init_module(). // //--------------------------------------------------------------------------- -int ft1000_CreateDevice(struct ft1000_device *dev) +int ft1000_create_dev(struct ft1000_device *dev) { struct ft1000_info *info = netdev_priv(dev->net); int result; int i; - pid_t pid; + struct dentry *dir, *file; + struct ft1000_debug_dirs *tmp; // make a new device name - sprintf(info->DeviceName, "%s%d", "FT100", info->CardNumber); - - // Delete any existing FT1000 node - pid = kernel_thread (rm_mknod,(void *)info, 0); - msleep(1000); + sprintf(info->DeviceName, "%s%d", "FT1000_", info->CardNumber); - DEBUG("ft1000_CreateDevice: number of instance = %d\n", ft1000_flarion_cnt); + DEBUG("%s: number of instance = %d\n", __func__, ft1000_flarion_cnt); DEBUG("DeviceCreated = %x\n", info->DeviceCreated); - //save the device info to global array - pdevobj[info->CardNumber] = dev; - - DEBUG("ft1000_CreateDevice: ******SAVED pdevobj[%d]=%p\n", info->CardNumber, pdevobj[info->CardNumber]); //aelias [+] reason:up - if (info->DeviceCreated) { - DEBUG("ft1000_CreateDevice: \"%s\" already registered\n", info->DeviceName); + DEBUG("%s: \"%s\" already registered\n", __func__, info->DeviceName); return -EIO; } // register the device - DEBUG("ft1000_CreateDevice: \"%s\" device registration\n", info->DeviceName); - info->DeviceMajor = 0; - - result = register_chrdev(info->DeviceMajor, info->DeviceName, &ft1000fops); - if (result < 0) - { - DEBUG("ft1000_CreateDevice: unable to get major %d\n", info->DeviceMajor); - return result; - } - - DEBUG("ft1000_CreateDevice: registered char device \"%s\"\n", info->DeviceName); + DEBUG("%s: \"%s\" debugfs device registration\n", __func__, info->DeviceName); - // save a dynamic device major number - if (info->DeviceMajor == 0) - { - info->DeviceMajor = result; - DEBUG("ft1000_PcdCreateDevice: device major = %d\n", info->DeviceMajor); - } + tmp = kmalloc(sizeof(struct ft1000_debug_dirs), GFP_KERNEL); + if (tmp == NULL) { + result = -1; + goto fail; + } - // Create a thread to call user mode app to mknod - pid = kernel_thread (exec_mknod, (void *)info, 0); + dir = debugfs_create_dir(info->DeviceName, 0); + if (IS_ERR(dir)) { + result = PTR_ERR(dir); + goto debug_dir_fail; + } - // initialize application information + file = debugfs_create_file("device", S_IRUGO | S_IWUSR, dir, + dev, &ft1000fops); + if (IS_ERR(file)) { + result = PTR_ERR(file); + goto debug_file_fail; + } -// if (ft1000_flarion_cnt == 0) { -// -// DEBUG("Initialize free_buff_lock and freercvpool\n"); -// spin_lock_init(&free_buff_lock); -// -// // initialize a list of buffers to be use for queuing up receive command data -// INIT_LIST_HEAD (&freercvpool); -// -// // create list of free buffers -// for (i=0; i<NUM_OF_FREE_BUFFERS; i++) { -// // Get memory for DPRAM_DATA link list -// pdpram_blk = kmalloc ( sizeof(struct dpram_blk), GFP_KERNEL ); -// // Get a block of memory to store command data -// pdpram_blk->pbuffer = kmalloc ( MAX_CMD_SQSIZE, GFP_KERNEL ); -// // link provisioning data -// list_add_tail (&pdpram_blk->list, &freercvpool); -// } -// numofmsgbuf = NUM_OF_FREE_BUFFERS; -// } + tmp->dent = dir; + tmp->file = file; + tmp->int_number = info->CardNumber; + list_add(&(tmp->list), &(info->nodes.list)); + DEBUG("%s: registered debugfs directory \"%s\"\n", __func__, info->DeviceName); // initialize application information info->appcnt = 0; @@ -323,17 +202,17 @@ int ft1000_CreateDevice(struct ft1000_device *dev) INIT_LIST_HEAD (&info->app_info[i].app_sqlist); } - - - -// ft1000Handle[info->CardNumber] = devfs_register(NULL, info->DeviceName, DEVFS_FL_AUTO_DEVNUM, 0, 0, -// S_IFCHR | S_IRUGO | S_IWUGO, &ft1000fops, NULL); - - info->DeviceCreated = TRUE; ft1000_flarion_cnt++; - return result; + return 0; + +debug_file_fail: + debugfs_remove(dir); +debug_dir_fail: + kfree(tmp); +fail: + return result; } //--------------------------------------------------------------------------- @@ -346,27 +225,33 @@ int ft1000_CreateDevice(struct ft1000_device *dev) // Notes: Only called by cleanup_module(). // //--------------------------------------------------------------------------- -void ft1000_DestroyDevice(struct net_device *dev) +void ft1000_destroy_dev(struct net_device *dev) { struct ft1000_info *info = netdev_priv(dev); - int result = 0; - pid_t pid; int i; struct dpram_blk *pdpram_blk; struct dpram_blk *ptr; + struct list_head *pos, *q; + struct ft1000_debug_dirs *dir; - DEBUG("ft1000_chdev:ft1000_DestroyDevice called\n"); + DEBUG("%s called\n", __func__); if (info->DeviceCreated) { ft1000_flarion_cnt--; - unregister_chrdev(info->DeviceMajor, info->DeviceName); - DEBUG("ft1000_DestroyDevice: unregistered device \"%s\", result = %d\n", - info->DeviceName, result); - - pid = kernel_thread (rm_mknod, (void *)info, 0); + list_for_each_safe(pos, q, &info->nodes.list) { + dir = list_entry(pos, struct ft1000_debug_dirs, list); + if (dir->int_number == info->CardNumber) { + debugfs_remove(dir->file); + debugfs_remove(dir->dent); + list_del(pos); + kfree(dir); + } + } + DEBUG("%s: unregistered device \"%s\"\n", __func__, + info->DeviceName); // Make sure we free any memory reserve for slow Queue for (i=0; i<MAX_NUM_APP; i++) { @@ -388,19 +273,14 @@ void ft1000_DestroyDevice(struct net_device *dev) kfree(ptr); } } - -// devfs_unregister(ft1000Handle[info->CardNumber]); - info->DeviceCreated = FALSE; - - pdevobj[info->CardNumber] = NULL; } } //--------------------------------------------------------------------------- -// Function: ft1000_ChOpen +// Function: ft1000_open // // Parameters: // @@ -409,28 +289,19 @@ void ft1000_DestroyDevice(struct net_device *dev) // Notes: // //--------------------------------------------------------------------------- -static int ft1000_ChOpen (struct inode *Inode, struct file *File) +static int ft1000_open (struct inode *inode, struct file *file) { struct ft1000_info *info; + struct ft1000_device *dev = (struct ft1000_device *)inode->i_private; int i,num; - DEBUG("ft1000_ChOpen called\n"); - num = (MINOR(Inode->i_rdev) & 0xf); - DEBUG("ft1000_ChOpen: minor number=%d\n", num); + DEBUG("%s called\n", __func__); + num = (MINOR(inode->i_rdev) & 0xf); + DEBUG("ft1000_open: minor number=%d\n", num); - for (i=0; i<5; i++) - DEBUG("pdevobj[%d]=%p\n", i, pdevobj[i]); //aelias [+] reason: down + info = file->private_data = netdev_priv(dev->net); - if ( pdevobj[num] != NULL ) - //info = (struct ft1000_info *)(pdevobj[num]->net->priv); - info = (struct ft1000_info *)netdev_priv(pdevobj[num]->net); - else - { - DEBUG("ft1000_ChOpen: can not find device object %d\n", num); - return -1; - } - - DEBUG("f_owner = %p number of application = %d\n", (&File->f_owner), info->appcnt ); + DEBUG("f_owner = %p number of application = %d\n", (&file->f_owner), info->appcnt ); // Check if maximum number of application exceeded if (info->appcnt > MAX_NUM_APP) { @@ -452,21 +323,19 @@ static int ft1000_ChOpen (struct inode *Inode, struct file *File) } info->appcnt++; - info->app_info[i].fileobject = &File->f_owner; + info->app_info[i].fileobject = &file->f_owner; info->app_info[i].nTxMsg = 0; info->app_info[i].nRxMsg = 0; info->app_info[i].nTxMsgReject = 0; info->app_info[i].nRxMsgMiss = 0; - File->private_data = pdevobj[num]->net; - - nonseekable_open(Inode, File); + nonseekable_open(inode, file); return 0; } //--------------------------------------------------------------------------- -// Function: ft1000_ChPoll +// Function: ft1000_poll_dev // // Parameters: // @@ -476,47 +345,47 @@ static int ft1000_ChOpen (struct inode *Inode, struct file *File) // //--------------------------------------------------------------------------- -static unsigned int ft1000_ChPoll(struct file *file, poll_table *wait) +static unsigned int ft1000_poll_dev(struct file *file, poll_table *wait) { struct net_device *dev = file->private_data; struct ft1000_info *info; int i; - //DEBUG("ft1000_ChPoll called\n"); + //DEBUG("ft1000_poll_dev called\n"); if (ft1000_flarion_cnt == 0) { - DEBUG("FT1000:ft1000_ChPoll called when ft1000_flarion_cnt is zero\n"); + DEBUG("FT1000:ft1000_poll_dev called when ft1000_flarion_cnt is zero\n"); return (-EBADF); } - info = (struct ft1000_info *) netdev_priv(dev); + info = netdev_priv(dev); // Search for matching file object for (i=0; i<MAX_NUM_APP; i++) { if ( info->app_info[i].fileobject == &file->f_owner) { - //DEBUG("FT1000:ft1000_ChIoctl: Message is for AppId = %d\n", info->app_info[i].app_id); + //DEBUG("FT1000:ft1000_ioctl: Message is for AppId = %d\n", info->app_info[i].app_id); break; } } // Could not find application info block if (i == MAX_NUM_APP) { - DEBUG("FT1000:ft1000_ChIoctl:Could not find application info block\n"); + DEBUG("FT1000:ft1000_ioctl:Could not find application info block\n"); return ( -EACCES ); } if (list_empty(&info->app_info[i].app_sqlist) == 0) { - DEBUG("FT1000:ft1000_ChPoll:Message detected in slow queue\n"); + DEBUG("FT1000:ft1000_poll_dev:Message detected in slow queue\n"); return(POLLIN | POLLRDNORM | POLLPRI); } poll_wait (file, &info->app_info[i].wait_dpram_msg, wait); - //DEBUG("FT1000:ft1000_ChPoll:Polling for data from DSP\n"); + //DEBUG("FT1000:ft1000_poll_dev:Polling for data from DSP\n"); return (0); } //--------------------------------------------------------------------------- -// Function: ft1000_ChIoctl +// Function: ft1000_ioctl // // Parameters: // @@ -525,11 +394,10 @@ static unsigned int ft1000_ChPoll(struct file *file, poll_table *wait) // Notes: // //--------------------------------------------------------------------------- -static long ft1000_ChIoctl (struct file *File, unsigned int Command, - unsigned long Argument) +static long ft1000_ioctl (struct file *file, unsigned int command, + unsigned long argument) { - void __user *argp = (void __user *)Argument; - struct net_device *dev; + void __user *argp = (void __user *)argument; struct ft1000_info *info; struct ft1000_device *ft1000dev; int result=0; @@ -550,25 +418,24 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, unsigned short ledStat=0; unsigned short conStat=0; - //DEBUG("ft1000_ChIoctl called\n"); + //DEBUG("ft1000_ioctl called\n"); if (ft1000_flarion_cnt == 0) { - DEBUG("FT1000:ft1000_ChIoctl called when ft1000_flarion_cnt is zero\n"); + DEBUG("FT1000:ft1000_ioctl called when ft1000_flarion_cnt is zero\n"); return (-EBADF); } - //DEBUG("FT1000:ft1000_ChIoctl:Command = 0x%x Argument = 0x%8x\n", Command, (u32)Argument); + //DEBUG("FT1000:ft1000_ioctl:command = 0x%x argument = 0x%8x\n", command, (u32)argument); - dev = File->private_data; - info = (struct ft1000_info *) netdev_priv(dev); - ft1000dev = info->pFt1000Dev; - cmd = _IOC_NR(Command); - //DEBUG("FT1000:ft1000_ChIoctl:cmd = 0x%x\n", cmd); + info = file->private_data; + ft1000dev = info->pFt1000Dev; + cmd = _IOC_NR(command); + //DEBUG("FT1000:ft1000_ioctl:cmd = 0x%x\n", cmd); // process the command switch (cmd) { case IOCTL_REGISTER_CMD: - DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_REGISTER called\n"); + DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_REGISTER called\n"); result = get_user(tempword, (__u16 __user*)argp); if (result) { DEBUG("result = %d failed to get_user\n", result); @@ -577,9 +444,9 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, if (tempword == DSPBCMSGID) { // Search for matching file object for (i=0; i<MAX_NUM_APP; i++) { - if ( info->app_info[i].fileobject == &File->f_owner) { + if ( info->app_info[i].fileobject == &file->f_owner) { info->app_info[i].DspBCMsgFlag = 1; - DEBUG("FT1000:ft1000_ChIoctl:Registered for broadcast messages\n"); + DEBUG("FT1000:ft1000_ioctl:Registered for broadcast messages\n"); break; } } @@ -587,34 +454,34 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, break; case IOCTL_GET_VER_CMD: - DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_GET_VER called\n"); + DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_GET_VER called\n"); get_ver_data.drv_ver = FT1000_DRV_VER; if (copy_to_user(argp, &get_ver_data, sizeof(get_ver_data)) ) { - DEBUG("FT1000:ft1000_ChIoctl: copy fault occurred\n"); + DEBUG("FT1000:ft1000_ioctl: copy fault occurred\n"); result = -EFAULT; break; } - DEBUG("FT1000:ft1000_ChIoctl:driver version = 0x%x\n",(unsigned int)get_ver_data.drv_ver); + DEBUG("FT1000:ft1000_ioctl:driver version = 0x%x\n",(unsigned int)get_ver_data.drv_ver); break; case IOCTL_CONNECT: // Connect Message - DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_CONNECT\n"); + DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_CONNECT\n"); ConnectionMsg[79] = 0xfc; CardSendCommand(ft1000dev, (unsigned short *)ConnectionMsg, 0x4c); break; case IOCTL_DISCONNECT: // Disconnect Message - DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_DISCONNECT\n"); + DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_DISCONNECT\n"); ConnectionMsg[79] = 0xfd; CardSendCommand(ft1000dev, (unsigned short *)ConnectionMsg, 0x4c); break; case IOCTL_GET_DSP_STAT_CMD: - //DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_GET_DSP_STAT called\n"); + //DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_GET_DSP_STAT called\n"); memset(&get_stat_data, 0, sizeof(get_stat_data)); memcpy(get_stat_data.DspVer, info->DspVer, DSPVERSZ); memcpy(get_stat_data.HwSerNum, info->HwSerNum, HWSERNUMSZ); @@ -622,12 +489,12 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, memcpy(get_stat_data.eui64, info->eui64, EUISZ); if (info->ProgConStat != 0xFF) { - ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_LED, (PUCHAR)&ledStat, FT1000_MAG_DSP_LED_INDX); + ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_LED, (u8 *)&ledStat, FT1000_MAG_DSP_LED_INDX); get_stat_data.LedStat = ntohs(ledStat); - DEBUG("FT1000:ft1000_ChIoctl: LedStat = 0x%x\n", get_stat_data.LedStat); - ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_CON_STATE, (PUCHAR)&conStat, FT1000_MAG_DSP_CON_STATE_INDX); + DEBUG("FT1000:ft1000_ioctl: LedStat = 0x%x\n", get_stat_data.LedStat); + ft1000_read_dpram16(ft1000dev, FT1000_MAG_DSP_CON_STATE, (u8 *)&conStat, FT1000_MAG_DSP_CON_STATE_INDX); get_stat_data.ConStat = ntohs(conStat); - DEBUG("FT1000:ft1000_ChIoctl: ConStat = 0x%x\n", get_stat_data.ConStat); + DEBUG("FT1000:ft1000_ioctl: ConStat = 0x%x\n", get_stat_data.ConStat); } else { get_stat_data.ConStat = 0x0f; @@ -642,7 +509,7 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, get_stat_data.ConTm = (u32)(tv.tv_sec - info->ConTm); DEBUG("Connection Time = %d\n", (int)get_stat_data.ConTm); if (copy_to_user(argp, &get_stat_data, sizeof(get_stat_data)) ) { - DEBUG("FT1000:ft1000_ChIoctl: copy fault occurred\n"); + DEBUG("FT1000:ft1000_ioctl: copy fault occurred\n"); result = -EFAULT; break; } @@ -650,17 +517,17 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, break; case IOCTL_SET_DPRAM_CMD: { - IOCTL_DPRAM_BLK *dpram_data; + IOCTL_DPRAM_BLK *dpram_data = NULL; //IOCTL_DPRAM_COMMAND dpram_command; - USHORT qtype; - USHORT msgsz; + u16 qtype; + u16 msgsz; struct pseudo_hdr *ppseudo_hdr; - PUSHORT pmsg; - USHORT total_len; - USHORT app_index; + u16 *pmsg; + u16 total_len; + u16 app_index; u16 status; - //DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_SET_DPRAM called\n"); + //DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_SET_DPRAM called\n"); if (ft1000_flarion_cnt == 0) { @@ -679,15 +546,15 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, if (info->CardReady) { - //DEBUG("FT1000:ft1000_ChIoctl: try to SET_DPRAM \n"); + //DEBUG("FT1000:ft1000_ioctl: try to SET_DPRAM \n"); // Get the length field to see how many bytes to copy result = get_user(msgsz, (__u16 __user *)argp); msgsz = ntohs (msgsz); - //DEBUG("FT1000:ft1000_ChIoctl: length of message = %d\n", msgsz); + //DEBUG("FT1000:ft1000_ioctl: length of message = %d\n", msgsz); if (msgsz > MAX_CMD_SQSIZE) { - DEBUG("FT1000:ft1000_ChIoctl: bad message length = %d\n", msgsz); + DEBUG("FT1000:ft1000_ioctl: bad message length = %d\n", msgsz); result = -EINVAL; break; } @@ -697,22 +564,14 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, if (!dpram_data) break; - //if ( copy_from_user(&(dpram_command.dpram_blk), (PIOCTL_DPRAM_BLK)Argument, msgsz+2) ) { - if ( copy_from_user(&dpram_data, argp, msgsz+2) ) { + if ( copy_from_user(dpram_data, argp, msgsz+2) ) { DEBUG("FT1000:ft1000_ChIoctl: copy fault occurred\n"); result = -EFAULT; } else { -#if 0 - // whc - for debugging only - ptr = (char *)&dpram_data; - for (i=0; i<msgsz; i++) { - DEBUG(1,"FT1000:ft1000_ChIoctl: data %d = 0x%x\n", i, *ptr++); - } -#endif // Check if this message came from a registered application for (i=0; i<MAX_NUM_APP; i++) { - if ( info->app_info[i].fileobject == &File->f_owner) { + if ( info->app_info[i].fileobject == &file->f_owner) { break; } } @@ -725,16 +584,15 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, app_index = i; // Check message qtype type which is the lower byte within qos_class - //qtype = ntohs(dpram_command.dpram_blk.pseudohdr.qos_class) & 0xff; qtype = ntohs(dpram_data->pseudohdr.qos_class) & 0xff; - //DEBUG("FT1000_ft1000_ChIoctl: qtype = %d\n", qtype); + //DEBUG("FT1000_ft1000_ioctl: qtype = %d\n", qtype); if (qtype) { } else { // Put message into Slow Queue // Only put a message into the DPRAM if msg doorbell is available status = ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); - //DEBUG("FT1000_ft1000_ChIoctl: READ REGISTER tempword=%x\n", tempword); + //DEBUG("FT1000_ft1000_ioctl: READ REGISTER tempword=%x\n", tempword); if (tempword & FT1000_DB_DPRAM_TX) { // Suspend for 2ms and try again due to DSP doorbell busy mdelay(2); @@ -750,7 +608,7 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, mdelay(3); status = ft1000_read_register(ft1000dev, &tempword, FT1000_REG_DOORBELL); if (tempword & FT1000_DB_DPRAM_TX) { - DEBUG("FT1000:ft1000_ChIoctl:Doorbell not available\n"); + DEBUG("FT1000:ft1000_ioctl:Doorbell not available\n"); result = -ENOTTY; kfree(dpram_data); break; @@ -760,13 +618,12 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, } } - //DEBUG("FT1000_ft1000_ChIoctl: finished reading register\n"); + //DEBUG("FT1000_ft1000_ioctl: finished reading register\n"); // Make sure we are within the limits of the slow queue memory limitation if ( (msgsz < MAX_CMD_SQSIZE) && (msgsz > PSEUDOSZ) ) { // Need to put sequence number plus new checksum for message - //pmsg = (PUSHORT)&dpram_command.dpram_blk.pseudohdr; - pmsg = (PUSHORT)&dpram_data->pseudohdr; + pmsg = (u16 *)&dpram_data->pseudohdr; ppseudo_hdr = (struct pseudo_hdr *)pmsg; total_len = msgsz+2; if (total_len & 0x1) { @@ -785,17 +642,7 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, } pmsg++; ppseudo_hdr = (struct pseudo_hdr *)pmsg; -#if 0 - ptr = dpram_data; - DEBUG("FT1000:ft1000_ChIoctl: Command Send\n"); - for (i=0; i<total_len; i++) { - DEBUG("FT1000:ft1000_ChIoctl: data %d = 0x%x\n", i, *ptr++); - } -#endif - //dpram_command.extra = 0; - - //CardSendCommand(ft1000dev,(unsigned char*)&dpram_command,total_len+2); - CardSendCommand(ft1000dev,(unsigned short*)dpram_data,total_len+2); + CardSendCommand(ft1000dev,(unsigned short*)dpram_data,total_len+2); info->app_info[app_index].nTxMsg++; @@ -807,7 +654,7 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, } } else { - DEBUG("FT1000:ft1000_ChIoctl: Card not ready take messages\n"); + DEBUG("FT1000:ft1000_ioctl: Card not ready take messages\n"); result = -EACCES; } kfree(dpram_data); @@ -820,7 +667,7 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, IOCTL_DPRAM_BLK __user *pioctl_dpram; int msglen; - //DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_GET_DPRAM called\n"); + //DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_GET_DPRAM called\n"); if (ft1000_flarion_cnt == 0) { return (-EBADF); @@ -828,15 +675,15 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, // Search for matching file object for (i=0; i<MAX_NUM_APP; i++) { - if ( info->app_info[i].fileobject == &File->f_owner) { - //DEBUG("FT1000:ft1000_ChIoctl: Message is for AppId = %d\n", info->app_info[i].app_id); + if ( info->app_info[i].fileobject == &file->f_owner) { + //DEBUG("FT1000:ft1000_ioctl: Message is for AppId = %d\n", info->app_info[i].app_id); break; } } // Could not find application info block if (i == MAX_NUM_APP) { - DEBUG("FT1000:ft1000_ChIoctl:Could not find application info block\n"); + DEBUG("FT1000:ft1000_ioctl:Could not find application info block\n"); result = -EBADF; break; } @@ -844,22 +691,22 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, result = 0; pioctl_dpram = argp; if (list_empty(&info->app_info[i].app_sqlist) == 0) { - //DEBUG("FT1000:ft1000_ChIoctl:Message detected in slow queue\n"); + //DEBUG("FT1000:ft1000_ioctl:Message detected in slow queue\n"); spin_lock_irqsave(&free_buff_lock, flags); pdpram_blk = list_entry(info->app_info[i].app_sqlist.next, struct dpram_blk, list); list_del(&pdpram_blk->list); info->app_info[i].NumOfMsg--; - //DEBUG("FT1000:ft1000_ChIoctl:NumOfMsg for app %d = %d\n", i, info->app_info[i].NumOfMsg); + //DEBUG("FT1000:ft1000_ioctl:NumOfMsg for app %d = %d\n", i, info->app_info[i].NumOfMsg); spin_unlock_irqrestore(&free_buff_lock, flags); msglen = ntohs(*(u16 *)pdpram_blk->pbuffer) + PSEUDOSZ; result = get_user(msglen, &pioctl_dpram->total_len); if (result) break; msglen = htons(msglen); - //DEBUG("FT1000:ft1000_ChIoctl:msg length = %x\n", msglen); + //DEBUG("FT1000:ft1000_ioctl:msg length = %x\n", msglen); if(copy_to_user (&pioctl_dpram->pseudohdr, pdpram_blk->pbuffer, msglen)) { - DEBUG("FT1000:ft1000_ChIoctl: copy fault occurred\n"); + DEBUG("FT1000:ft1000_ioctl: copy fault occurred\n"); result = -EFAULT; break; } @@ -867,12 +714,12 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, ft1000_free_buffer(pdpram_blk, &freercvpool); result = msglen; } - //DEBUG("FT1000:ft1000_ChIoctl: IOCTL_FT1000_GET_DPRAM no message\n"); + //DEBUG("FT1000:ft1000_ioctl: IOCTL_FT1000_GET_DPRAM no message\n"); } break; default: - DEBUG("FT1000:ft1000_ChIoctl:unknown command: 0x%x\n", Command); + DEBUG("FT1000:ft1000_ioctl:unknown command: 0x%x\n", command); result = -ENOTTY; break; } @@ -881,7 +728,7 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, } //--------------------------------------------------------------------------- -// Function: ft1000_ChRelease +// Function: ft1000_release // // Parameters: // @@ -890,17 +737,17 @@ static long ft1000_ChIoctl (struct file *File, unsigned int Command, // Notes: // //--------------------------------------------------------------------------- -static int ft1000_ChRelease (struct inode *Inode, struct file *File) +static int ft1000_release (struct inode *inode, struct file *file) { struct ft1000_info *info; struct net_device *dev; int i; struct dpram_blk *pdpram_blk; - DEBUG("ft1000_ChRelease called\n"); + DEBUG("ft1000_release called\n"); - dev = File->private_data; - info = (struct ft1000_info *) netdev_priv(dev); + dev = file->private_data; + info = netdev_priv(dev); if (ft1000_flarion_cnt == 0) { info->appcnt--; @@ -909,8 +756,8 @@ static int ft1000_ChRelease (struct inode *Inode, struct file *File) // Search for matching file object for (i=0; i<MAX_NUM_APP; i++) { - if ( info->app_info[i].fileobject == &File->f_owner) { - //DEBUG("FT1000:ft1000_ChIoctl: Message is for AppId = %d\n", info->app_info[i].app_id); + if ( info->app_info[i].fileobject == &file->f_owner) { + //DEBUG("FT1000:ft1000_ioctl: Message is for AppId = %d\n", info->app_info[i].app_id); break; } } diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_download.c b/drivers/staging/ft1000/ft1000-usb/ft1000_download.c index 4dd456f..17546d8 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_download.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_download.c @@ -123,11 +123,11 @@ struct dsp_image_info { // Notes: // //--------------------------------------------------------------------------- -static ULONG check_usb_db (struct ft1000_device *ft1000dev) +static u32 check_usb_db (struct ft1000_device *ft1000dev) { int loopcnt; - USHORT temp; - ULONG status; + u16 temp; + u32 status; loopcnt = 0; while (loopcnt < 10) @@ -190,7 +190,7 @@ static ULONG check_usb_db (struct ft1000_device *ft1000dev) // Function: get_handshake // // Parameters: struct ft1000_device - device structure -// USHORT expected_value - the handshake value expected +// u16 expected_value - the handshake value expected // // Returns: handshakevalue - success // HANDSHAKE_TIMEOUT_VALUE - failure @@ -200,11 +200,11 @@ static ULONG check_usb_db (struct ft1000_device *ft1000dev) // Notes: // //--------------------------------------------------------------------------- -static USHORT get_handshake(struct ft1000_device *ft1000dev, USHORT expected_value) +static u16 get_handshake(struct ft1000_device *ft1000dev, u16 expected_value) { - USHORT handshake; + u16 handshake; int loopcnt; - ULONG status=0; + u32 status=0; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); loopcnt = 0; @@ -228,7 +228,7 @@ static USHORT get_handshake(struct ft1000_device *ft1000dev, USHORT expected_val status = ft1000_write_register (ft1000dev, FT1000_DB_DNLD_RX, FT1000_REG_DOORBELL); } - status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, (PUCHAR)&handshake, 1); + status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, (u8 *)&handshake, 1); //DEBUG("get_handshake: handshake is %x\n", tempx); handshake = ntohs(handshake); //DEBUG("get_handshake: after swap, handshake is %x\n", handshake); @@ -259,7 +259,7 @@ static USHORT get_handshake(struct ft1000_device *ft1000dev, USHORT expected_val // Function: put_handshake // // Parameters: struct ft1000_device - device structure -// USHORT handshake_value - handshake to be written +// u16 handshake_value - handshake to be written // // Returns: none // @@ -269,30 +269,30 @@ static USHORT get_handshake(struct ft1000_device *ft1000dev, USHORT expected_val // Notes: // //--------------------------------------------------------------------------- -static void put_handshake(struct ft1000_device *ft1000dev,USHORT handshake_value) +static void put_handshake(struct ft1000_device *ft1000dev,u16 handshake_value) { - ULONG tempx; - USHORT tempword; - ULONG status; + u32 tempx; + u16 tempword; + u32 status; - tempx = (ULONG)handshake_value; + tempx = (u32)handshake_value; tempx = ntohl(tempx); - tempword = (USHORT)(tempx & 0xffff); + tempword = (u16)(tempx & 0xffff); status = ft1000_write_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, tempword, 0); - tempword = (USHORT)(tempx >> 16); + tempword = (u16)(tempx >> 16); status = ft1000_write_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, tempword, 1); status = ft1000_write_register(ft1000dev, FT1000_DB_DNLD_TX, FT1000_REG_DOORBELL); } -static USHORT get_handshake_usb(struct ft1000_device *ft1000dev, USHORT expected_value) +static u16 get_handshake_usb(struct ft1000_device *ft1000dev, u16 expected_value) { - USHORT handshake; + u16 handshake; int loopcnt; - USHORT temp; - ULONG status=0; + u16 temp; + u32 status=0; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); loopcnt = 0; @@ -300,10 +300,10 @@ static USHORT get_handshake_usb(struct ft1000_device *ft1000dev, USHORT expected while (loopcnt < 100) { if (pft1000info->usbboot == 2) { - status = ft1000_read_dpram32 (ft1000dev, 0, (PUCHAR)&(pft1000info->tempbuf[0]), 64); + status = ft1000_read_dpram32 (ft1000dev, 0, (u8 *)&(pft1000info->tempbuf[0]), 64); for (temp=0; temp<16; temp++) DEBUG("tempbuf %d = 0x%x\n", temp, pft1000info->tempbuf[temp]); - status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, (PUCHAR)&handshake, 1); + status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, (u8 *)&handshake, 1); DEBUG("handshake from read_dpram16 = 0x%x\n", handshake); if (pft1000info->dspalive == pft1000info->tempbuf[6]) handshake = 0; @@ -313,7 +313,7 @@ static USHORT get_handshake_usb(struct ft1000_device *ft1000dev, USHORT expected } } else { - status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, (PUCHAR)&handshake, 1); + status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_HANDSHAKE_LOC, (u8 *)&handshake, 1); } loopcnt++; msleep(10); @@ -327,7 +327,7 @@ static USHORT get_handshake_usb(struct ft1000_device *ft1000dev, USHORT expected return HANDSHAKE_TIMEOUT_VALUE; } -static void put_handshake_usb(struct ft1000_device *ft1000dev,USHORT handshake_value) +static void put_handshake_usb(struct ft1000_device *ft1000dev,u16 handshake_value) { int i; @@ -346,44 +346,44 @@ static void put_handshake_usb(struct ft1000_device *ft1000dev,USHORT handshake_v // Notes: // //--------------------------------------------------------------------------- -static USHORT get_request_type(struct ft1000_device *ft1000dev) +static u16 get_request_type(struct ft1000_device *ft1000dev) { - USHORT request_type; - ULONG status; - USHORT tempword; - ULONG tempx; + u16 request_type; + u32 status; + u16 tempword; + u32 tempx; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); if ( pft1000info->bootmode == 1) { - status = fix_ft1000_read_dpram32 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (PUCHAR)&tempx); + status = fix_ft1000_read_dpram32 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (u8 *)&tempx); tempx = ntohl(tempx); } else { tempx = 0; - status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (PUCHAR)&tempword, 1); + status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (u8 *)&tempword, 1); tempx |= (tempword << 16); tempx = ntohl(tempx); } - request_type = (USHORT)tempx; + request_type = (u16)tempx; //DEBUG("get_request_type: request_type is %x\n", request_type); return request_type; } -static USHORT get_request_type_usb(struct ft1000_device *ft1000dev) +static u16 get_request_type_usb(struct ft1000_device *ft1000dev) { - USHORT request_type; - ULONG status; - USHORT tempword; - ULONG tempx; + u16 request_type; + u32 status; + u16 tempword; + u32 tempx; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); if ( pft1000info->bootmode == 1) { - status = fix_ft1000_read_dpram32 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (PUCHAR)&tempx); + status = fix_ft1000_read_dpram32 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (u8 *)&tempx); tempx = ntohl(tempx); } else @@ -394,12 +394,12 @@ static USHORT get_request_type_usb(struct ft1000_device *ft1000dev) } else { tempx = 0; - status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (PUCHAR)&tempword, 1); + status = ft1000_read_dpram16 (ft1000dev, DWNLD_MAG1_TYPE_LOC, (u8 *)&tempword, 1); } tempx |= (tempword << 16); tempx = ntohl(tempx); } - request_type = (USHORT)tempx; + request_type = (u16)tempx; //DEBUG("get_request_type: request_type is %x\n", request_type); return request_type; @@ -420,22 +420,22 @@ static USHORT get_request_type_usb(struct ft1000_device *ft1000dev) //--------------------------------------------------------------------------- static long get_request_value(struct ft1000_device *ft1000dev) { - ULONG value; - USHORT tempword; - ULONG status; + u32 value; + u16 tempword; + u32 status; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); if ( pft1000info->bootmode == 1) { - status = fix_ft1000_read_dpram32(ft1000dev, DWNLD_MAG1_SIZE_LOC, (PUCHAR)&value); + status = fix_ft1000_read_dpram32(ft1000dev, DWNLD_MAG1_SIZE_LOC, (u8 *)&value); value = ntohl(value); } else { - status = ft1000_read_dpram16(ft1000dev, DWNLD_MAG1_SIZE_LOC, (PUCHAR)&tempword, 0); + status = ft1000_read_dpram16(ft1000dev, DWNLD_MAG1_SIZE_LOC, (u8 *)&tempword, 0); value = tempword; - status = ft1000_read_dpram16(ft1000dev, DWNLD_MAG1_SIZE_LOC, (PUCHAR)&tempword, 1); + status = ft1000_read_dpram16(ft1000dev, DWNLD_MAG1_SIZE_LOC, (u8 *)&tempword, 1); value |= (tempword << 16); value = ntohl(value); } @@ -449,9 +449,9 @@ static long get_request_value(struct ft1000_device *ft1000dev) #if 0 static long get_request_value_usb(struct ft1000_device *ft1000dev) { - ULONG value; - USHORT tempword; - ULONG status; + u32 value; + u16 tempword; + u32 status; struct ft1000_info * pft1000info = netdev_priv(ft1000dev->net); if (pft1000info->usbboot == 2) { @@ -460,7 +460,7 @@ static long get_request_value_usb(struct ft1000_device *ft1000dev) } else { value = 0; - status = ft1000_read_dpram16(ft1000dev, DWNLD_MAG1_SIZE_LOC, (PUCHAR)&tempword, 1); + status = ft1000_read_dpram16(ft1000dev, DWNLD_MAG1_SIZE_LOC, (u8 *)&tempword, 1); } value |= (tempword << 16); @@ -490,11 +490,11 @@ static long get_request_value_usb(struct ft1000_device *ft1000dev) //--------------------------------------------------------------------------- static void put_request_value(struct ft1000_device *ft1000dev, long lvalue) { - ULONG tempx; - ULONG status; + u32 tempx; + u32 status; tempx = ntohl(lvalue); - status = fix_ft1000_write_dpram32(ft1000dev, DWNLD_MAG1_SIZE_LOC, (PUCHAR)&tempx); + status = fix_ft1000_write_dpram32(ft1000dev, DWNLD_MAG1_SIZE_LOC, (u8 *)&tempx); @@ -516,10 +516,10 @@ static void put_request_value(struct ft1000_device *ft1000dev, long lvalue) // Notes: // //--------------------------------------------------------------------------- -static USHORT hdr_checksum(struct pseudo_hdr *pHdr) +static u16 hdr_checksum(struct pseudo_hdr *pHdr) { - USHORT *usPtr = (USHORT *)pHdr; - USHORT chksum; + u16 *usPtr = (u16 *)pHdr; + u16 chksum; chksum = ((((((usPtr[0] ^ usPtr[1]) ^ usPtr[2]) ^ usPtr[3]) ^ @@ -533,8 +533,8 @@ static USHORT hdr_checksum(struct pseudo_hdr *pHdr) // Function: write_blk // // Parameters: struct ft1000_device - device structure -// USHORT **pUsFile - DSP image file pointer in USHORT -// UCHAR **pUcFile - DSP image file pointer in UCHAR +// u16 **pUsFile - DSP image file pointer in u16 +// u8 **pUcFile - DSP image file pointer in u8 // long word_length - lenght of the buffer to be written // to DPRAM // @@ -546,20 +546,20 @@ static USHORT hdr_checksum(struct pseudo_hdr *pHdr) // Notes: // //--------------------------------------------------------------------------- -static ULONG write_blk (struct ft1000_device *ft1000dev, USHORT **pUsFile, UCHAR **pUcFile, long word_length) +static u32 write_blk (struct ft1000_device *ft1000dev, u16 **pUsFile, u8 **pUcFile, long word_length) { - ULONG Status = STATUS_SUCCESS; - USHORT dpram; + u32 Status = STATUS_SUCCESS; + u16 dpram; long temp_word_length; int loopcnt, i, j; - USHORT *pTempFile; - USHORT tempword; - USHORT tempbuffer[64]; - USHORT resultbuffer[64]; + u16 *pTempFile; + u16 tempword; + u16 tempbuffer[64]; + u16 resultbuffer[64]; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); //DEBUG("FT1000:download:start word_length = %d\n",(int)word_length); - dpram = (USHORT)DWNLD_MAG1_PS_HDR_LOC; + dpram = (u16)DWNLD_MAG1_PS_HDR_LOC; tempword = *(*pUsFile); (*pUsFile)++; Status = ft1000_write_dpram16(ft1000dev, dpram, tempword, 0); @@ -569,7 +569,7 @@ static ULONG write_blk (struct ft1000_device *ft1000dev, USHORT **pUsFile, UCHAR *pUcFile = *pUcFile + 4; word_length--; - tempword = (USHORT)word_length; + tempword = (u16)word_length; word_length = (word_length / 16) + 1; pTempFile = *pUsFile; temp_word_length = word_length; @@ -602,24 +602,24 @@ static ULONG write_blk (struct ft1000_device *ft1000dev, USHORT **pUsFile, UCHAR if (pft1000info->bootmode == 0) { if (dpram >= 0x3F4) - Status = ft1000_write_dpram32 (ft1000dev, dpram, (PUCHAR)&tempbuffer[0], 8); + Status = ft1000_write_dpram32 (ft1000dev, dpram, (u8 *)&tempbuffer[0], 8); else - Status = ft1000_write_dpram32 (ft1000dev, dpram, (PUCHAR)&tempbuffer[0], 64); + Status = ft1000_write_dpram32 (ft1000dev, dpram, (u8 *)&tempbuffer[0], 64); } else { for (j=0; j<10; j++) { - Status = ft1000_write_dpram32 (ft1000dev, dpram, (PUCHAR)&tempbuffer[0], 64); + Status = ft1000_write_dpram32 (ft1000dev, dpram, (u8 *)&tempbuffer[0], 64); if (Status == STATUS_SUCCESS) { // Work around for ASIC bit stuffing problem. if ( (tempbuffer[31] & 0xfe00) == 0xfe00) { - Status = ft1000_write_dpram32(ft1000dev, dpram+12, (PUCHAR)&tempbuffer[24], 64); + Status = ft1000_write_dpram32(ft1000dev, dpram+12, (u8 *)&tempbuffer[24], 64); } // Let's check the data written - Status = ft1000_read_dpram32 (ft1000dev, dpram, (PUCHAR)&resultbuffer[0], 64); + Status = ft1000_read_dpram32 (ft1000dev, dpram, (u8 *)&resultbuffer[0], 64); if ( (tempbuffer[31] & 0xfe00) == 0xfe00) { for (i=0; i<28; i++) @@ -633,7 +633,7 @@ static ULONG write_blk (struct ft1000_device *ft1000dev, USHORT **pUsFile, UCHAR break; } } - Status = ft1000_read_dpram32 (ft1000dev, dpram+12, (PUCHAR)&resultbuffer[0], 64); + Status = ft1000_read_dpram32 (ft1000dev, dpram+12, (u8 *)&resultbuffer[0], 64); for (i=0; i<16; i++) { if (resultbuffer[i] != tempbuffer[i+24]) @@ -689,8 +689,8 @@ static void usb_dnld_complete (struct urb *urb) // Function: write_blk_fifo // // Parameters: struct ft1000_device - device structure -// USHORT **pUsFile - DSP image file pointer in USHORT -// UCHAR **pUcFile - DSP image file pointer in UCHAR +// u16 **pUsFile - DSP image file pointer in u16 +// u8 **pUcFile - DSP image file pointer in u8 // long word_length - lenght of the buffer to be written // to DPRAM // @@ -702,9 +702,9 @@ static void usb_dnld_complete (struct urb *urb) // Notes: // //--------------------------------------------------------------------------- -static ULONG write_blk_fifo (struct ft1000_device *ft1000dev, USHORT **pUsFile, UCHAR **pUcFile, long word_length) +static u32 write_blk_fifo (struct ft1000_device *ft1000dev, u16 **pUsFile, u8 **pUcFile, long word_length) { - ULONG Status = STATUS_SUCCESS; + u32 Status = STATUS_SUCCESS; int byte_length; long aligncnt; @@ -770,36 +770,36 @@ static ULONG write_blk_fifo (struct ft1000_device *ft1000dev, USHORT **pUsFile, // Returns: status - return code //--------------------------------------------------------------------------- -u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLength) +u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, u32 FileLength) { - u16 Status = STATUS_SUCCESS; - UINT uiState; - USHORT handshake; - struct pseudo_hdr *pHdr; - USHORT usHdrLength; + u16 status = STATUS_SUCCESS; + u32 state; + u16 handshake; + struct pseudo_hdr *pseudo_header; + u16 pseudo_header_len; long word_length; - USHORT request; - USHORT temp; - USHORT tempword; + u16 request; + u16 temp; + u16 tempword; - struct dsp_file_hdr *pFileHdr5; - struct dsp_image_info *pDspImageInfoV6 = NULL; + struct dsp_file_hdr *file_hdr; + struct dsp_image_info *dsp_img_info = NULL; long requested_version; - BOOLEAN bGoodVersion; - struct drv_msg *pMailBoxData; - USHORT *pUsData = NULL; - USHORT *pUsFile = NULL; - UCHAR *pUcFile = NULL; - UCHAR *pBootEnd = NULL, *pCodeEnd= NULL; - int imageN; + bool correct_version; + struct drv_msg *mailbox_data; + u16 *data = NULL; + u16 *s_file = NULL; + u8 *c_file = NULL; + u8 *boot_end = NULL, *code_end= NULL; + int image; long loader_code_address, loader_code_size = 0; long run_address = 0, run_size = 0; - ULONG templong; - ULONG image_chksum = 0; + u32 templong; + u32 image_chksum = 0; - USHORT dpram = 0; - PUCHAR pbuffer; + u16 dpram = 0; + u8 *pbuffer; struct prov_record *pprov_record; struct ft1000_info *pft1000info = netdev_priv(ft1000dev->net); @@ -814,24 +814,24 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe // Get version id of file, at first 4 bytes of file, for newer files. // - uiState = STATE_START_DWNLD; + state = STATE_START_DWNLD; - pFileHdr5 = (struct dsp_file_hdr *)pFileStart; + file_hdr = (struct dsp_file_hdr *)pFileStart; ft1000_write_register (ft1000dev, 0x800, FT1000_REG_MAG_WATERMARK); - pUsFile = (USHORT *)(pFileStart + pFileHdr5->loader_offset); - pUcFile = (UCHAR *)(pFileStart + pFileHdr5->loader_offset); + s_file = (u16 *)(pFileStart + file_hdr->loader_offset); + c_file = (u8 *)(pFileStart + file_hdr->loader_offset); - pBootEnd = (UCHAR *)(pFileStart + pFileHdr5->loader_code_end); + boot_end = (u8 *)(pFileStart + file_hdr->loader_code_end); - loader_code_address = pFileHdr5->loader_code_address; - loader_code_size = pFileHdr5->loader_code_size; - bGoodVersion = FALSE; + loader_code_address = file_hdr->loader_code_address; + loader_code_size = file_hdr->loader_code_size; + correct_version = FALSE; - while ((Status == STATUS_SUCCESS) && (uiState != STATE_DONE_FILE)) + while ((status == STATUS_SUCCESS) && (state != STATE_DONE_FILE)) { - switch (uiState) + switch (state) { case STATE_START_DWNLD: DEBUG("FT1000:STATE_START_DWNLD\n"); @@ -848,10 +848,10 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe else { DEBUG("FT1000:download:Download error: Handshake failed\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; } - uiState = STATE_BOOT_DWNLD; + state = STATE_BOOT_DWNLD; break; @@ -878,11 +878,11 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe case REQUEST_DONE_BL: DEBUG("FT1000:REQUEST_DONE_BL\n"); /* Reposition ptrs to beginning of code section */ - pUsFile = (USHORT *)(pBootEnd); - pUcFile = (UCHAR *)(pBootEnd); - //DEBUG("FT1000:download:pUsFile = 0x%8x\n", (int)pUsFile); - //DEBUG("FT1000:download:pUcFile = 0x%8x\n", (int)pUcFile); - uiState = STATE_CODE_DWNLD; + s_file = (u16 *)(boot_end); + c_file = (u8 *)(boot_end); + //DEBUG("FT1000:download:s_file = 0x%8x\n", (int)s_file); + //DEBUG("FT1000:download:c_file = 0x%8x\n", (int)c_file); + state = STATE_CODE_DWNLD; pft1000info->fcodeldr = 1; break; case REQUEST_CODE_SEGMENT: @@ -893,33 +893,33 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe if (word_length > MAX_LENGTH) { DEBUG("FT1000:download:Download error: Max length exceeded\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } - if ( (word_length*2 + pUcFile) > pBootEnd) + if ( (word_length*2 + c_file) > boot_end) { /* * Error, beyond boot code range. */ DEBUG("FT1000:download:Download error: Requested len=%d exceeds BOOT code boundry.\n", (int)word_length); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } /* * Position ASIC DPRAM auto-increment pointer. */ - dpram = (USHORT)DWNLD_MAG1_PS_HDR_LOC; + dpram = (u16)DWNLD_MAG1_PS_HDR_LOC; if (word_length & 0x1) word_length++; word_length = word_length / 2; - Status = write_blk(ft1000dev, &pUsFile, &pUcFile, word_length); - //DEBUG("write_blk returned %d\n", Status); + status = write_blk(ft1000dev, &s_file, &c_file, word_length); + //DEBUG("write_blk returned %d\n", status); break; default: DEBUG("FT1000:download:Download error: Bad request type=%d in BOOT download state.\n",request); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } if (pft1000info->usbboot) @@ -930,7 +930,7 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe else { DEBUG("FT1000:download:Download error: Handshake failed\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; } break; @@ -959,7 +959,7 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe break; case REQUEST_RUN_ADDRESS: DEBUG("FT1000:download: REQUEST_RUN_ADDRESS\n"); - if (bGoodVersion) + if (correct_version) { DEBUG("FT1000:download:run_address = 0x%8x\n", (int)run_address); put_request_value(ft1000dev, run_address); @@ -967,13 +967,13 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe else { DEBUG("FT1000:download:Download error: Got Run address request before image offset request.\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } break; case REQUEST_CODE_LENGTH: DEBUG("FT1000:download:REQUEST_CODE_LENGTH\n"); - if (bGoodVersion) + if (correct_version) { DEBUG("FT1000:download:run_size = 0x%8x\n", (int)run_size); put_request_value(ft1000dev, run_size); @@ -981,23 +981,23 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe else { DEBUG("FT1000:download:Download error: Got Size request before image offset request.\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } break; case REQUEST_DONE_CL: pft1000info->usbboot = 3; /* Reposition ptrs to beginning of provisioning section */ - pUsFile = (USHORT *)(pFileStart + pFileHdr5->commands_offset); - pUcFile = (UCHAR *)(pFileStart + pFileHdr5->commands_offset); - uiState = STATE_DONE_DWNLD; + s_file = (u16 *)(pFileStart + file_hdr->commands_offset); + c_file = (u8 *)(pFileStart + file_hdr->commands_offset); + state = STATE_DONE_DWNLD; break; case REQUEST_CODE_SEGMENT: //DEBUG("FT1000:download: REQUEST_CODE_SEGMENT - CODELOADER\n"); - if (!bGoodVersion) + if (!correct_version) { DEBUG("FT1000:download:Download error: Got Code Segment request before image offset request.\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } #if 0 @@ -1011,28 +1011,28 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe #endif { DEBUG("FT1000:download:Download error: Max length exceeded\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } - if ( (word_length*2 + pUcFile) > pCodeEnd) + if ( (word_length*2 + c_file) > code_end) { /* * Error, beyond boot code range. */ DEBUG("FT1000:download:Download error: Requested len=%d exceeds DSP code boundry.\n", (int)word_length); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } /* * Position ASIC DPRAM auto-increment pointer. */ - dpram = (USHORT)DWNLD_MAG1_PS_HDR_LOC; + dpram = (u16)DWNLD_MAG1_PS_HDR_LOC; if (word_length & 0x1) word_length++; word_length = word_length / 2; - write_blk_fifo (ft1000dev, &pUsFile, &pUcFile, word_length); + write_blk_fifo (ft1000dev, &s_file, &c_file, word_length); if (pft1000info->usbboot == 0) pft1000info->usbboot++; if (pft1000info->usbboot == 1) { @@ -1047,14 +1047,14 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe // Convert length from byte count to word count. Make sure we round up. word_length = (long)(pft1000info->DSPInfoBlklen + 1)/2; put_request_value(ft1000dev, word_length); - pMailBoxData = (struct drv_msg *)&(pft1000info->DSPInfoBlk[0]); + mailbox_data = (struct drv_msg *)&(pft1000info->DSPInfoBlk[0]); /* * Position ASIC DPRAM auto-increment pointer. */ - pUsData = (USHORT *)&pMailBoxData->data[0]; - dpram = (USHORT)DWNLD_MAG1_PS_HDR_LOC; + data = (u16 *)&mailbox_data->data[0]; + dpram = (u16)DWNLD_MAG1_PS_HDR_LOC; if (word_length & 0x1) word_length++; @@ -1064,25 +1064,25 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe for (; word_length > 0; word_length--) /* In words */ { - templong = *pUsData++; - templong |= (*pUsData++ << 16); - Status = fix_ft1000_write_dpram32 (ft1000dev, dpram++, (PUCHAR)&templong); + templong = *data++; + templong |= (*data++ << 16); + status = fix_ft1000_write_dpram32 (ft1000dev, dpram++, (u8 *)&templong); } break; case REQUEST_VERSION_INFO: DEBUG("FT1000:download:REQUEST_VERSION_INFO\n"); - word_length = pFileHdr5->version_data_size; + word_length = file_hdr->version_data_size; put_request_value(ft1000dev, word_length); /* * Position ASIC DPRAM auto-increment pointer. */ - pUsFile = (USHORT *)(pFileStart + pFileHdr5->version_data_offset); + s_file = (u16 *)(pFileStart + file_hdr->version_data_offset); - dpram = (USHORT)DWNLD_MAG1_PS_HDR_LOC; + dpram = (u16)DWNLD_MAG1_PS_HDR_LOC; if (word_length & 0x1) word_length++; @@ -1092,59 +1092,59 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe for (; word_length > 0; word_length--) /* In words */ { - templong = ntohs(*pUsFile++); - temp = ntohs(*pUsFile++); + templong = ntohs(*s_file++); + temp = ntohs(*s_file++); templong |= (temp << 16); - Status = fix_ft1000_write_dpram32 (ft1000dev, dpram++, (PUCHAR)&templong); + status = fix_ft1000_write_dpram32 (ft1000dev, dpram++, (u8 *)&templong); } break; case REQUEST_CODE_BY_VERSION: DEBUG("FT1000:download:REQUEST_CODE_BY_VERSION\n"); - bGoodVersion = FALSE; + correct_version = FALSE; requested_version = get_request_value(ft1000dev); - pDspImageInfoV6 = (struct dsp_image_info *)(pFileStart + sizeof(struct dsp_file_hdr )); + dsp_img_info = (struct dsp_image_info *)(pFileStart + sizeof(struct dsp_file_hdr )); - for (imageN = 0; imageN < pFileHdr5->nDspImages; imageN++) + for (image = 0; image < file_hdr->nDspImages; image++) { - temp = (USHORT)(pDspImageInfoV6->version); + temp = (u16)(dsp_img_info->version); templong = temp; - temp = (USHORT)(pDspImageInfoV6->version >> 16); + temp = (u16)(dsp_img_info->version >> 16); templong |= (temp << 16); - if (templong == (ULONG)requested_version) + if (templong == (u32)requested_version) { - bGoodVersion = TRUE; - DEBUG("FT1000:download: bGoodVersion is TRUE\n"); - pUsFile = (USHORT *)(pFileStart + pDspImageInfoV6->begin_offset); - pUcFile = (UCHAR *)(pFileStart + pDspImageInfoV6->begin_offset); - pCodeEnd = (UCHAR *)(pFileStart + pDspImageInfoV6->end_offset); - run_address = pDspImageInfoV6->run_address; - run_size = pDspImageInfoV6->image_size; - image_chksum = (ULONG)pDspImageInfoV6->checksum; + correct_version = TRUE; + DEBUG("FT1000:download: correct_version is TRUE\n"); + s_file = (u16 *)(pFileStart + dsp_img_info->begin_offset); + c_file = (u8 *)(pFileStart + dsp_img_info->begin_offset); + code_end = (u8 *)(pFileStart + dsp_img_info->end_offset); + run_address = dsp_img_info->run_address; + run_size = dsp_img_info->image_size; + image_chksum = (u32)dsp_img_info->checksum; break; } - pDspImageInfoV6++; + dsp_img_info++; } //end of for - if (!bGoodVersion) + if (!correct_version) { /* * Error, beyond boot code range. */ DEBUG("FT1000:download:Download error: Bad Version Request = 0x%x.\n",(int)requested_version); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } break; default: DEBUG("FT1000:download:Download error: Bad request type=%d in CODE download state.\n",request); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } if (pft1000info->usbboot) @@ -1155,94 +1155,94 @@ u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLe else { DEBUG("FT1000:download:Download error: Handshake failed\n"); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; } break; case STATE_DONE_DWNLD: DEBUG("FT1000:download:Code loader is done...\n"); - uiState = STATE_SECTION_PROV; + state = STATE_SECTION_PROV; break; case STATE_SECTION_PROV: DEBUG("FT1000:download:STATE_SECTION_PROV\n"); - pHdr = (struct pseudo_hdr *)pUcFile; + pseudo_header = (struct pseudo_hdr *)c_file; - if (pHdr->checksum == hdr_checksum(pHdr)) + if (pseudo_header->checksum == hdr_checksum(pseudo_header)) { - if (pHdr->portdest != 0x80 /* Dsp OAM */) + if (pseudo_header->portdest != 0x80 /* Dsp OAM */) { - uiState = STATE_DONE_PROV; + state = STATE_DONE_PROV; break; } - usHdrLength = ntohs(pHdr->length); /* Byte length for PROV records */ + pseudo_header_len = ntohs(pseudo_header->length); /* Byte length for PROV records */ // Get buffer for provisioning data - pbuffer = kmalloc((usHdrLength + sizeof(struct pseudo_hdr)), GFP_ATOMIC); + pbuffer = kmalloc((pseudo_header_len + sizeof(struct pseudo_hdr)), GFP_ATOMIC); if (pbuffer) { - memcpy(pbuffer, (void *)pUcFile, (UINT)(usHdrLength + sizeof(struct pseudo_hdr))); + memcpy(pbuffer, (void *)c_file, (u32)(pseudo_header_len + sizeof(struct pseudo_hdr))); // link provisioning data pprov_record = kmalloc(sizeof(struct prov_record), GFP_ATOMIC); if (pprov_record) { pprov_record->pprov_data = pbuffer; list_add_tail (&pprov_record->list, &pft1000info->prov_list); // Move to next entry if available - pUcFile = (UCHAR *)((unsigned long)pUcFile + (UINT)((usHdrLength + 1) & 0xFFFFFFFE) + sizeof(struct pseudo_hdr)); - if ( (unsigned long)(pUcFile) - (unsigned long)(pFileStart) >= (unsigned long)FileLength) { - uiState = STATE_DONE_FILE; + c_file = (u8 *)((unsigned long)c_file + (u32)((pseudo_header_len + 1) & 0xFFFFFFFE) + sizeof(struct pseudo_hdr)); + if ( (unsigned long)(c_file) - (unsigned long)(pFileStart) >= (unsigned long)FileLength) { + state = STATE_DONE_FILE; } } else { kfree(pbuffer); - Status = STATUS_FAILURE; + status = STATUS_FAILURE; } } else { - Status = STATUS_FAILURE; + status = STATUS_FAILURE; } } else { /* Checksum did not compute */ - Status = STATUS_FAILURE; + status = STATUS_FAILURE; } - DEBUG("ft1000:download: after STATE_SECTION_PROV, uiState = %d, Status= %d\n", uiState, Status); + DEBUG("ft1000:download: after STATE_SECTION_PROV, state = %d, status= %d\n", state, status); break; case STATE_DONE_PROV: DEBUG("FT1000:download:STATE_DONE_PROV\n"); - uiState = STATE_DONE_FILE; + state = STATE_DONE_FILE; break; default: - Status = STATUS_FAILURE; + status = STATUS_FAILURE; break; } /* End Switch */ - if (Status != STATUS_SUCCESS) { + if (status != STATUS_SUCCESS) { break; } /**** // Check if Card is present - Status = Harley_Read_Register(&temp, FT1000_REG_SUP_IMASK); - if ( (Status != NDIS_STATUS_SUCCESS) || (temp == 0x0000) ) { + status = Harley_Read_Register(&temp, FT1000_REG_SUP_IMASK); + if ( (status != NDIS_STATUS_SUCCESS) || (temp == 0x0000) ) { break; } - Status = Harley_Read_Register(&temp, FT1000_REG_ASIC_ID); - if ( (Status != NDIS_STATUS_SUCCESS) || (temp == 0xffff) ) { + status = Harley_Read_Register(&temp, FT1000_REG_ASIC_ID); + if ( (status != NDIS_STATUS_SUCCESS) || (temp == 0xffff) ) { break; } ****/ } /* End while */ - DEBUG("Download exiting with status = 0x%8x\n", Status); + DEBUG("Download exiting with status = 0x%8x\n", status); ft1000_write_register(ft1000dev, FT1000_DB_DNLD_TX, FT1000_REG_DOORBELL); - return Status; + return status; } diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c index 5b89ee2..643a637 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c @@ -41,37 +41,9 @@ static int ft1000_chkcard (struct ft1000_device *dev); //Jim static u8 tempbuffer[1600]; -static unsigned long gCardIndex; #define MAX_RCV_LOOP 100 -/**************************************************************** - * ft1000_control_complete - ****************************************************************/ -static void ft1000_control_complete(struct urb *urb) -{ - struct ft1000_device *ft1000dev = (struct ft1000_device *)urb->context; - - //DEBUG("FT1000_CONTROL_COMPLETE ENTERED\n"); - if (ft1000dev == NULL ) - { - DEBUG("NULL ft1000dev, failure\n"); - return ; - } - else if ( ft1000dev->dev == NULL ) - { - DEBUG("NULL ft1000dev->dev, failure\n"); - return ; - } - - if(waitqueue_active(&ft1000dev->control_wait)) - { - wake_up(&ft1000dev->control_wait); - } - - //DEBUG("FT1000_CONTROL_COMPLETE RETURNED\n"); -} - //--------------------------------------------------------------------------- // Function: ft1000_control // @@ -187,7 +159,7 @@ u16 ft1000_read_register(struct ft1000_device *ft1000dev, u16* Data, u16 nRegInd // Notes: // //--------------------------------------------------------------------------- -u16 ft1000_write_register(struct ft1000_device *ft1000dev, USHORT value, u16 nRegIndx) +u16 ft1000_write_register(struct ft1000_device *ft1000dev, u16 value, u16 nRegIndx) { u16 ret = STATUS_SUCCESS; @@ -223,7 +195,7 @@ u16 ft1000_write_register(struct ft1000_device *ft1000dev, USHORT value, u16 nRe // //--------------------------------------------------------------------------- -u16 ft1000_read_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer, USHORT cnt) +u16 ft1000_read_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u16 cnt) { u16 ret = STATUS_SUCCESS; @@ -262,7 +234,7 @@ u16 ft1000_read_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buf // Notes: // //--------------------------------------------------------------------------- -u16 ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer, USHORT cnt) +u16 ft1000_write_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u16 cnt) { u16 ret = STATUS_SUCCESS; @@ -299,7 +271,7 @@ u16 ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR bu // Notes: // //--------------------------------------------------------------------------- -u16 ft1000_read_dpram16(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer, u8 highlow) +u16 ft1000_read_dpram16(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u8 highlow) { u16 ret = STATUS_SUCCESS; @@ -347,7 +319,7 @@ u16 ft1000_read_dpram16(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buf // Notes: // //--------------------------------------------------------------------------- -u16 ft1000_write_dpram16(struct ft1000_device *ft1000dev, USHORT indx, USHORT value, u8 highlow) +u16 ft1000_write_dpram16(struct ft1000_device *ft1000dev, u16 indx, u16 value, u8 highlow) { u16 ret = STATUS_SUCCESS; @@ -392,10 +364,10 @@ u16 ft1000_write_dpram16(struct ft1000_device *ft1000dev, USHORT indx, USHORT va // Notes: // //--------------------------------------------------------------------------- -u16 fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer) +u16 fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer) { - UCHAR buf[16]; - USHORT pos; + u8 buf[16]; + u16 pos; u16 ret = STATUS_SUCCESS; //DEBUG("fix_ft1000_read_dpram32: indx: %d \n", indx); @@ -441,14 +413,14 @@ u16 fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR // Notes: // //--------------------------------------------------------------------------- -u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer) +u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer) { - USHORT pos1; - USHORT pos2; - USHORT i; - UCHAR buf[32]; - UCHAR resultbuffer[32]; - PUCHAR pdata; + u16 pos1; + u16 pos2; + u16 i; + u8 buf[32]; + u8 resultbuffer[32]; + u8 *pdata; u16 ret = STATUS_SUCCESS; //DEBUG("fix_ft1000_write_dpram32: Entered:\n"); @@ -472,7 +444,7 @@ u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHA return ret; } - ret = ft1000_read_dpram32(ft1000dev, pos1, (PUCHAR)&resultbuffer[0], 16); + ret = ft1000_read_dpram32(ft1000dev, pos1, (u8 *)&resultbuffer[0], 16); if (ret == STATUS_SUCCESS) { buffer = pdata; @@ -487,8 +459,8 @@ u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHA if (ret == STATUS_FAILURE) { - ret = ft1000_write_dpram32(ft1000dev, pos1, (PUCHAR)&tempbuffer[0], 16); - ret = ft1000_read_dpram32(ft1000dev, pos1, (PUCHAR)&resultbuffer[0], 16); + ret = ft1000_write_dpram32(ft1000dev, pos1, (u8 *)&tempbuffer[0], 16); + ret = ft1000_read_dpram32(ft1000dev, pos1, (u8 *)&resultbuffer[0], 16); if (ret == STATUS_SUCCESS) { buffer = pdata; @@ -518,10 +490,10 @@ u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHA // // Returns: None //----------------------------------------------------------------------- -static void card_reset_dsp (struct ft1000_device *ft1000dev, BOOLEAN value) +static void card_reset_dsp (struct ft1000_device *ft1000dev, bool value) { u16 status = STATUS_SUCCESS; - USHORT tempword; + u16 tempword; status = ft1000_write_register (ft1000dev, HOST_INTF_BE, FT1000_REG_SUP_CTRL); status = ft1000_read_register(ft1000dev, &tempword, FT1000_REG_SUP_CTRL); @@ -620,8 +592,8 @@ void CardSendCommand(struct ft1000_device *ft1000dev, void *ptempbuffer, int siz int dsp_reload(struct ft1000_device *ft1000dev) { u16 status; - USHORT tempword; - ULONG templong; + u16 tempword; + u32 templong; struct ft1000_info *pft1000info; @@ -648,7 +620,7 @@ int dsp_reload(struct ft1000_device *ft1000dev) status = ft1000_write_register (ft1000dev, HOST_INTF_BE, FT1000_REG_SUP_CTRL); // Let's check for FEFE - status = ft1000_read_dpram32 (ft1000dev, FT1000_MAG_DPRAM_FEFE_INDX, (PUCHAR)&templong, 4); + status = ft1000_read_dpram32 (ft1000dev, FT1000_MAG_DPRAM_FEFE_INDX, (u8 *)&templong, 4); DEBUG("templong (fefe) = 0x%8x\n", templong); // call codeloader @@ -753,7 +725,7 @@ static int ft1000_reset_card (struct net_device *dev) // Initialize DSP heartbeat area to ho ft1000_write_dpram16(ft1000dev, FT1000_MAG_HI_HO, ho_mag, FT1000_MAG_HI_HO_INDX); - ft1000_read_dpram16(ft1000dev, FT1000_MAG_HI_HO, (PCHAR)&tempword, FT1000_MAG_HI_HO_INDX); + ft1000_read_dpram16(ft1000dev, FT1000_MAG_HI_HO, (u8 *)&tempword, FT1000_MAG_HI_HO_INDX); DEBUG("ft1000_hw:ft1000_reset_card:hi_ho value = 0x%x\n", tempword); @@ -800,8 +772,7 @@ u16 init_ft1000_netdev(struct ft1000_device *ft1000dev) int i, ret_val; struct list_head *cur, *tmp; char card_nr[2]; - - gCardIndex=0; //mbelian + unsigned long gCardIndex = 0; DEBUG("Enter init_ft1000_netdev...\n"); @@ -813,7 +784,7 @@ u16 init_ft1000_netdev(struct ft1000_device *ft1000dev) return -ENOMEM; } - pInfo = (struct ft1000_info *) netdev_priv(netdev); + pInfo = netdev_priv(netdev); //DEBUG("init_ft1000_netdev: gFt1000Info=%x, netdev=%x, ft1000dev=%x\n", gFt1000Info, netdev, ft1000dev); @@ -821,9 +792,6 @@ u16 init_ft1000_netdev(struct ft1000_device *ft1000dev) dev_alloc_name(netdev, netdev->name); - //for the first inserted card, decide the card index beginning number, in case there are existing network interfaces - if ( gCardIndex == 0 ) - { DEBUG("init_ft1000_netdev: network device name is %s\n", netdev->name); if ( strncmp(netdev->name,"eth", 3) == 0) { @@ -843,13 +811,6 @@ u16 init_ft1000_netdev(struct ft1000_device *ft1000dev) ret_val = -ENXIO; goto err_net; } - } - else - { - //not the first inserted card, increase card number by 1 - pInfo->CardNumber = gCardIndex; - /*DEBUG("card number = %d\n", pInfo->CardNumber);*/ //mbelian - } memset(&pInfo->stats, 0, sizeof(struct net_device_stats) ); @@ -862,7 +823,6 @@ u16 init_ft1000_netdev(struct ft1000_device *ft1000dev) pInfo->mediastate = 0; pInfo->fifo_cnt = 0; pInfo->DeviceCreated = FALSE; - pInfo->DeviceMajor = 0; pInfo->CurrentInterruptEnableMask = ISR_DEFAULT_MASK; pInfo->InterruptsEnabled = FALSE; pInfo->CardReady = 0; @@ -874,13 +834,11 @@ u16 init_ft1000_netdev(struct ft1000_device *ft1000dev) pInfo->fCondResetPend = 0; pInfo->usbboot = 0; pInfo->dspalive = 0; - for (i=0;i<32 ;i++ ) - { - pInfo->tempbuf[i] = 0; - } + memset(&pInfo->tempbuf[0], 0, sizeof(pInfo->tempbuf)); INIT_LIST_HEAD(&pInfo->prov_list); + INIT_LIST_HEAD(&pInfo->nodes.list); //mbelian #ifdef HAVE_NET_DEVICE_OPS netdev->netdev_ops = &ftnet_ops; @@ -982,7 +940,7 @@ int reg_ft1000_netdev(struct ft1000_device *ft1000dev, struct usb_interface *int //Create character device, implemented by Jim - ft1000_CreateDevice(ft1000dev); + ft1000_create_dev(ft1000dev); DEBUG ("reg_ft1000_netdev returned\n"); @@ -1026,178 +984,6 @@ static void ft1000_usb_transmit_complete(struct urb *urb) //DEBUG("Return from ft1000_usb_transmit_complete\n"); } - -/**************************************************************** - * ft1000_control - ****************************************************************/ -static int ft1000_read_fifo_reg(struct ft1000_device *ft1000dev,unsigned int pipe, - u8 request, - u8 requesttype, - u16 value, - u16 index, - void *data, - u16 size, - int timeout) -{ - u16 ret; - - DECLARE_WAITQUEUE(wait, current); - struct urb *urb; - struct usb_ctrlrequest *dr; - int status; - - if (ft1000dev == NULL ) - { - DEBUG("NULL ft1000dev, failure\n"); - return STATUS_FAILURE; - } - else if ( ft1000dev->dev == NULL ) - { - DEBUG("NULL ft1000dev->dev, failure\n"); - return STATUS_FAILURE; - } - - spin_lock(&ft1000dev->device_lock); - - if(in_interrupt()) - { - spin_unlock(&ft1000dev->device_lock); - return -EBUSY; - } - - urb = usb_alloc_urb(0, GFP_KERNEL); - dr = kmalloc(sizeof(struct usb_ctrlrequest), in_interrupt() ? GFP_ATOMIC : GFP_KERNEL); - - if(!urb || !dr) - { - kfree(dr); - usb_free_urb(urb); - spin_unlock(&ft1000dev->device_lock); - return -ENOMEM; - } - - - - dr->bRequestType = requesttype; - dr->bRequest = request; - dr->wValue = value; - dr->wIndex = index; - dr->wLength = size; - - usb_fill_control_urb(urb, ft1000dev->dev, pipe, (char*)dr, (void*)data, size, (void *)ft1000_control_complete, (void*)ft1000dev); - - - init_waitqueue_head(&ft1000dev->control_wait); - - set_current_state(TASK_INTERRUPTIBLE); - - add_wait_queue(&ft1000dev->control_wait, &wait); - - - - - status = usb_submit_urb(urb, GFP_KERNEL); - - if(status) - { - usb_free_urb(urb); - kfree(dr); - remove_wait_queue(&ft1000dev->control_wait, &wait); - spin_unlock(&ft1000dev->device_lock); - return status; - } - - if(urb->status == -EINPROGRESS) - { - while(timeout && urb->status == -EINPROGRESS) - { - status = timeout = schedule_timeout(timeout); - } - } - else - { - status = 1; - } - - remove_wait_queue(&ft1000dev->control_wait, &wait); - - if(!status) - { - usb_unlink_urb(urb); - printk("ft1000 timeout\n"); - status = -ETIMEDOUT; - } - else - { - status = urb->status; - - if(urb->status) - { - printk("ft1000 control message failed (urb addr: %p) with error number: %i\n", urb, (int)status); - - usb_clear_halt(ft1000dev->dev, usb_rcvctrlpipe(ft1000dev->dev, 0)); - usb_clear_halt(ft1000dev->dev, usb_sndctrlpipe(ft1000dev->dev, 0)); - usb_unlink_urb(urb); - } - } - - - - usb_free_urb(urb); - kfree(dr); - spin_unlock(&ft1000dev->device_lock); - return ret; - - -} - -//--------------------------------------------------------------------------- -// Function: ft1000_read_fifo_len -// -// Parameters: ft1000dev - device structure -// -// -// Returns: none -// -// Description: read the fifo length register content -// -// Notes: -// -//--------------------------------------------------------------------------- -static inline u16 ft1000_read_fifo_len (struct net_device *dev) -{ - u16 temp; - u16 ret; - - struct ft1000_info *info = (struct ft1000_info *) netdev_priv(dev); - struct ft1000_device *ft1000dev = info->pFt1000Dev; -// DEBUG("ft1000_read_fifo_len: enter ft1000dev %x\n", ft1000dev); //aelias [-] reason: warning: format ???%x??? expects type ???unsigned int???, but argument 2 has type ???struct ft1000_device *??? - DEBUG("ft1000_read_fifo_len: enter ft1000dev %p\n", ft1000dev); //aelias [+] reason: up - - ret = STATUS_SUCCESS; - - ret = ft1000_read_fifo_reg(ft1000dev, - usb_rcvctrlpipe(ft1000dev->dev,0), - HARLEY_READ_REGISTER, - HARLEY_READ_OPERATION, - 0, - FT1000_REG_MAG_UFSR, - &temp, - 2, - LARGE_TIMEOUT); - - if (ret>0) - ret = STATUS_SUCCESS; - else - ret = STATUS_FAILURE; - - DEBUG("ft1000_read_fifo_len: returned %d\n", temp); - - return (temp- 16); - -} - - //--------------------------------------------------------------------------- // // Function: ft1000_copy_down_pkt @@ -1219,16 +1005,15 @@ static int ft1000_copy_down_pkt (struct net_device *netdev, u8 *packet, u16 len) struct ft1000_device *pFt1000Dev = pInfo->pFt1000Dev; - int i, count, ret; - USHORT *pTemp; - USHORT checksum; + int count, ret; u8 *t; + struct pseudo_hdr hdr; if (!pInfo->CardReady) { DEBUG("ft1000_copy_down_pkt::Card Not Ready\n"); - return STATUS_FAILURE; + return -ENODEV; } @@ -1240,27 +1025,27 @@ static int ft1000_copy_down_pkt (struct net_device *netdev, u8 *packet, u16 len) { DEBUG("Error:ft1000_copy_down_pkt:Message Size Overflow!\n"); DEBUG("size = %d\n", count); - return STATUS_FAILURE; + return -EINVAL; } if ( count % 4) count = count + (4- (count %4) ); - pTemp = (PUSHORT)&(pFt1000Dev->tx_buf[0]); - *pTemp ++ = ntohs(count); - *pTemp ++ = 0x1020; - *pTemp ++ = 0x2010; - *pTemp ++ = 0x9100; - *pTemp ++ = 0; - *pTemp ++ = 0; - *pTemp ++ = 0; - pTemp = (PUSHORT)&(pFt1000Dev->tx_buf[0]); - checksum = *pTemp ++; - for (i=1; i<7; i++) - { - checksum ^= *pTemp ++; - } - *pTemp++ = checksum; + memset(&hdr, 0, sizeof(struct pseudo_hdr)); + + hdr.length = ntohs(count); + hdr.source = 0x10; + hdr.destination = 0x20; + hdr.portdest = 0x20; + hdr.portsrc = 0x10; + hdr.sh_str_id = 0x91; + hdr.control = 0x00; + + hdr.checksum = hdr.length ^ hdr.source ^ hdr.destination ^ + hdr.portdest ^ hdr.portsrc ^ hdr.sh_str_id ^ + hdr.control; + + memcpy(&pFt1000Dev->tx_buf[0], &hdr, sizeof(hdr)); memcpy(&(pFt1000Dev->tx_buf[sizeof(struct pseudo_hdr)]), packet, len); netif_stop_queue(netdev); @@ -1283,25 +1068,18 @@ static int ft1000_copy_down_pkt (struct net_device *netdev, u8 *packet, u16 len) }*/ - ret = usb_submit_urb(pFt1000Dev->tx_urb, GFP_ATOMIC); - if(ret) - { + ret = usb_submit_urb(pFt1000Dev->tx_urb, GFP_ATOMIC); + if (ret) { DEBUG("ft1000 failed tx_urb %d\n", ret); - - return STATUS_FAILURE; - - } - else - { - //DEBUG("ft1000 sucess tx_urb %d\n", ret); - - pInfo->stats.tx_packets++; - pInfo->stats.tx_bytes += (len+14); - } + return ret; + } else { + pInfo->stats.tx_packets++; + pInfo->stats.tx_bytes += (len+14); + } //DEBUG("ft1000_copy_down_pkt() exit\n"); - return STATUS_SUCCESS; + return 0; } //--------------------------------------------------------------------------- @@ -1331,14 +1109,13 @@ static int ft1000_start_xmit(struct sk_buff *skb, struct net_device *dev) if ( skb == NULL ) { DEBUG ("ft1000_hw: ft1000_start_xmit:skb == NULL!!!\n" ); - return STATUS_FAILURE; + return NETDEV_TX_OK; } if ( pFt1000Dev->status & FT1000_STATUS_CLOSING) { DEBUG("network driver is closed, return\n"); - dev_kfree_skb(skb); - return STATUS_SUCCESS; + goto err; } //DEBUG("ft1000_start_xmit 1:length of packet = %d\n", skb->len); @@ -1357,28 +1134,24 @@ static int ft1000_start_xmit(struct sk_buff *skb, struct net_device *dev) { /* Drop packet is mediastate is down */ DEBUG("ft1000_hw:ft1000_start_xmit:mediastate is down\n"); - dev_kfree_skb(skb); - return STATUS_SUCCESS; + goto err; } if ( (skb->len < ENET_HEADER_SIZE) || (skb->len > ENET_MAX_SIZE) ) { /* Drop packet which has invalid size */ DEBUG("ft1000_hw:ft1000_start_xmit:invalid ethernet length\n"); - dev_kfree_skb(skb); - return STATUS_SUCCESS; + goto err; } //mbelian - if(ft1000_copy_down_pkt (dev, (pdata+ENET_HEADER_SIZE-2), skb->len - ENET_HEADER_SIZE + 2) == STATUS_FAILURE) - { - dev_kfree_skb(skb); - return STATUS_SUCCESS; - } + ft1000_copy_down_pkt(dev, (pdata+ENET_HEADER_SIZE-2), + skb->len - ENET_HEADER_SIZE + 2); - dev_kfree_skb(skb); +err: + dev_kfree_skb(skb); //DEBUG(" ft1000_start_xmit() exit\n"); - return 0; + return NETDEV_TX_OK; } //--------------------------------------------------------------------------- @@ -1424,7 +1197,7 @@ static int ft1000_copy_up_pkt (struct urb *urb) //DEBUG("ft1000_copy_up_pkt: transfer_buffer_length=%d, actual_buffer_len=%d\n", // urb->transfer_buffer_length, urb->actual_length); - chksum = (PUSHORT)ft1000dev->rx_buf; + chksum = (u16 *)ft1000dev->rx_buf; tempword = *chksum++; for (i=1; i<7; i++) @@ -1521,7 +1294,7 @@ static int ft1000_submit_rx_urb(struct ft1000_info *info) { DEBUG("network driver is closed, return\n"); //usb_kill_urb(pFt1000Dev->rx_urb); //mbelian - return STATUS_SUCCESS; + return -ENODEV; } usb_fill_bulk_urb(pFt1000Dev->rx_urb, @@ -1536,12 +1309,12 @@ static int ft1000_submit_rx_urb(struct ft1000_info *info) if((result = usb_submit_urb(pFt1000Dev->rx_urb, GFP_ATOMIC))) { printk("ft1000_submit_rx_urb: submitting rx_urb %d failed\n", result); - return STATUS_FAILURE; + return result; } //DEBUG("ft1000_submit_rx_urb exit: result=%d\n", result); - return STATUS_SUCCESS; + return 0; } //--------------------------------------------------------------------------- @@ -1560,8 +1333,9 @@ static int ft1000_submit_rx_urb(struct ft1000_info *info) //--------------------------------------------------------------------------- static int ft1000_open (struct net_device *dev) { - struct ft1000_info *pInfo = (struct ft1000_info *)netdev_priv(dev); + struct ft1000_info *pInfo = netdev_priv(dev); struct timeval tv; //mbelian + int ret; DEBUG("ft1000_open is called for card %d\n", pInfo->CardNumber); //DEBUG("ft1000_open: dev->addr=%x, dev->addr_len=%d\n", dev->addr, dev->addr_len); @@ -1579,8 +1353,9 @@ static int ft1000_open (struct net_device *dev) netif_carrier_on(dev); //mbelian - ft1000_submit_rx_urb(pInfo); - return 0; + ret = ft1000_submit_rx_urb(pInfo); + + return ret; } //--------------------------------------------------------------------------- @@ -1599,7 +1374,7 @@ static int ft1000_open (struct net_device *dev) //--------------------------------------------------------------------------- int ft1000_close(struct net_device *net) { - struct ft1000_info *pInfo = (struct ft1000_info *) netdev_priv(net); + struct ft1000_info *pInfo = netdev_priv(net); struct ft1000_device *ft1000dev = pInfo->pFt1000Dev; //DEBUG ("ft1000_close: netdev->refcnt=%d\n", net->refcnt); @@ -1622,7 +1397,7 @@ int ft1000_close(struct net_device *net) static struct net_device_stats *ft1000_netdev_stats(struct net_device *dev) { - struct ft1000_info *info = (struct ft1000_info *) netdev_priv(dev); + struct ft1000_info *info = netdev_priv(dev); return &(info->stats); //mbelian } @@ -1648,7 +1423,7 @@ Jim static int ft1000_chkcard (struct ft1000_device *dev) { u16 tempword; u16 status; - struct ft1000_info *info = (struct ft1000_info *) netdev_priv(dev->net); + struct ft1000_info *info = netdev_priv(dev->net); if (info->fCondResetPend) { @@ -1692,13 +1467,13 @@ static int ft1000_chkcard (struct ft1000_device *dev) { // = 1 (successful) // //--------------------------------------------------------------------------- -static BOOLEAN ft1000_receive_cmd (struct ft1000_device *dev, u16 *pbuffer, int maxsz, u16 *pnxtph) { +static bool ft1000_receive_cmd (struct ft1000_device *dev, u16 *pbuffer, int maxsz, u16 *pnxtph) { u16 size, ret; u16 *ppseudohdr; int i; u16 tempword; - ret = ft1000_read_dpram16(dev, FT1000_MAG_PH_LEN, (PUCHAR)&size, FT1000_MAG_PH_LEN_INDX); + ret = ft1000_read_dpram16(dev, FT1000_MAG_PH_LEN, (u8 *)&size, FT1000_MAG_PH_LEN_INDX); size = ntohs(size) + PSEUDOSZ; if (size > maxsz) { DEBUG("FT1000:ft1000_receive_cmd:Invalid command length = %d\n", size); @@ -1748,15 +1523,15 @@ static BOOLEAN ft1000_receive_cmd (struct ft1000_device *dev, u16 *pbuffer, int static int ft1000_dsp_prov(void *arg) { struct ft1000_device *dev = (struct ft1000_device *)arg; - struct ft1000_info *info = (struct ft1000_info *) netdev_priv(dev->net); + struct ft1000_info *info = netdev_priv(dev->net); u16 tempword; u16 len; u16 i=0; struct prov_record *ptr; struct pseudo_hdr *ppseudo_hdr; - PUSHORT pmsg; + u16 *pmsg; u16 status; - USHORT TempShortBuf [256]; + u16 TempShortBuf [256]; DEBUG("*** DspProv Entered\n"); @@ -1792,7 +1567,7 @@ static int ft1000_dsp_prov(void *arg) len = htons(len); len += PSEUDOSZ; - pmsg = (PUSHORT)ptr->pprov_data; + pmsg = (u16 *)ptr->pprov_data; ppseudo_hdr = (struct pseudo_hdr *)pmsg; // Insert slow queue sequence number ppseudo_hdr->seq_num = info->squeseqnum++; @@ -1809,7 +1584,7 @@ static int ft1000_dsp_prov(void *arg) TempShortBuf[1] = htons (len); memcpy(&TempShortBuf[2], ppseudo_hdr, len); - status = ft1000_write_dpram32 (dev, 0, (PUCHAR)&TempShortBuf[0], (unsigned short)(len+2)); + status = ft1000_write_dpram32 (dev, 0, (u8 *)&TempShortBuf[0], (unsigned short)(len+2)); status = ft1000_write_register (dev, FT1000_DB_DPRAM_TX, FT1000_REG_DOORBELL); list_del(&ptr->list); @@ -1831,7 +1606,7 @@ static int ft1000_dsp_prov(void *arg) static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { - struct ft1000_info *info = (struct ft1000_info *) netdev_priv(dev->net); + struct ft1000_info *info = netdev_priv(dev->net); u16 msgtype; u16 tempword; struct media_msg *pmediamsg; @@ -1839,7 +1614,7 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { struct drv_msg *pdrvmsg; u16 i; struct pseudo_hdr *ppseudo_hdr; - PUSHORT pmsg; + u16 *pmsg; u16 status; union { u8 byte[2]; @@ -1971,7 +1746,7 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { tempword = ntohs(pdrvmsg->length); info->DSPInfoBlklen = tempword; if (tempword < (MAX_DSP_SESS_REC-4) ) { - pmsg = (PUSHORT)&pdrvmsg->data[0]; + pmsg = (u16 *)&pdrvmsg->data[0]; for (i=0; i<((tempword+1)/2); i++) { DEBUG("FT1000:drivermsg:dsp info data = 0x%x\n", *pmsg); info->DSPInfoBlk[i+10] = *pmsg++; @@ -2003,10 +1778,10 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { // Put message into Slow Queue // Form Pseudo header - pmsg = (PUSHORT)info->DSPInfoBlk; + pmsg = (u16 *)info->DSPInfoBlk; *pmsg++ = 0; *pmsg++ = htons(info->DSPInfoBlklen+20+info->DSPInfoBlklen); - ppseudo_hdr = (struct pseudo_hdr *)(PUSHORT)&info->DSPInfoBlk[2]; + ppseudo_hdr = (struct pseudo_hdr *)(u16 *)&info->DSPInfoBlk[2]; ppseudo_hdr->length = htons(info->DSPInfoBlklen+4+info->DSPInfoBlklen); ppseudo_hdr->source = 0x10; ppseudo_hdr->destination = 0x20; @@ -2028,7 +1803,7 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { } info->DSPInfoBlk[10] = 0x7200; info->DSPInfoBlk[11] = htons(info->DSPInfoBlklen); - status = ft1000_write_dpram32 (dev, 0, (PUCHAR)&info->DSPInfoBlk[0], (unsigned short)(info->DSPInfoBlklen+22)); + status = ft1000_write_dpram32 (dev, 0, (u8 *)&info->DSPInfoBlk[0], (unsigned short)(info->DSPInfoBlklen+22)); status = ft1000_write_register (dev, FT1000_DB_DPRAM_TX, FT1000_REG_DOORBELL); info->DrvMsgPend = 0; @@ -2053,7 +1828,7 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { if ( (tempword & FT1000_DB_DPRAM_TX) == 0) { // Put message into Slow Queue // Form Pseudo header - pmsg = (PUSHORT)&tempbuffer[0]; + pmsg = (u16 *)&tempbuffer[0]; ppseudo_hdr = (struct pseudo_hdr *)pmsg; ppseudo_hdr->length = htons(0x0012); ppseudo_hdr->source = 0x10; @@ -2074,7 +1849,7 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { for (i=1; i<7; i++) { ppseudo_hdr->checksum ^= *pmsg++; } - pmsg = (PUSHORT)&tempbuffer[16]; + pmsg = (u16 *)&tempbuffer[16]; *pmsg++ = htons(RSP_DRV_ERR_RPT_MSG); *pmsg++ = htons(0x000e); *pmsg++ = htons(info->DSP_TIME[0]); @@ -2089,7 +1864,7 @@ static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { *pmsg++ = convert.wrd; *pmsg++ = htons(info->DrvErrNum); - CardSendCommand (dev, (unsigned char*)&tempbuffer[0], (USHORT)(0x0012 + PSEUDOSZ)); + CardSendCommand (dev, (unsigned char*)&tempbuffer[0], (u16)(0x0012 + PSEUDOSZ)); info->DrvErrNum = 0; } info->DrvMsgPend = 0; @@ -2114,15 +1889,15 @@ out: int ft1000_poll(void* dev_id) { struct ft1000_device *dev = (struct ft1000_device *)dev_id; - struct ft1000_info *info = (struct ft1000_info *) netdev_priv(dev->net); + struct ft1000_info *info = netdev_priv(dev->net); u16 tempword; u16 status; u16 size; int i; - USHORT data; - USHORT modulo; - USHORT portid; + u16 data; + u16 modulo; + u16 portid; u16 nxtph; struct dpram_blk *pdpram_blk; struct pseudo_hdr *ppseudo_hdr; @@ -2143,14 +1918,14 @@ int ft1000_poll(void* dev_id) { if (tempword & FT1000_DB_DPRAM_RX) { //DEBUG("ft1000_poll: FT1000_REG_DOORBELL message type: FT1000_DB_DPRAM_RX\n"); - status = ft1000_read_dpram16(dev, 0x200, (PUCHAR)&data, 0); + status = ft1000_read_dpram16(dev, 0x200, (u8 *)&data, 0); //DEBUG("ft1000_poll:FT1000_DB_DPRAM_RX:ft1000_read_dpram16:size = 0x%x\n", data); size = ntohs(data) + 16 + 2; //wai if (size % 4) { modulo = 4 - (size % 4); size = size + modulo; } - status = ft1000_read_dpram16(dev, 0x201, (PUCHAR)&portid, 1); + status = ft1000_read_dpram16(dev, 0x201, (u8 *)&portid, 1); portid &= 0xff; //DEBUG("ft1000_poll: FT1000_REG_DOORBELL message type: FT1000_DB_DPRAM_RX : portid 0x%x\n", portid); @@ -2285,7 +2060,7 @@ int ft1000_poll(void* dev_id) { status = ft1000_write_register (dev, FT1000_ASIC_RESET_REQ, FT1000_REG_DOORBELL); status = ft1000_write_register (dev, HOST_INTF_BE, FT1000_REG_SUP_CTRL); // copy dsp session record from Adapter block - status = ft1000_write_dpram32 (dev, 0, (PUCHAR)&info->DSPSess.Rec[0], 1024); + status = ft1000_write_dpram32 (dev, 0, (u8 *)&info->DSPSess.Rec[0], 1024); // Program WMARK register status = ft1000_write_register (dev, 0x600, FT1000_REG_MAG_WATERMARK); // ring doorbell to tell DSP that ASIC is out of reset @@ -2299,10 +2074,10 @@ int ft1000_poll(void* dev_id) { if (info->fAppMsgPend == 0) { // Reset ASIC and DSP - status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER0, (PUCHAR)&(info->DSP_TIME[0]), FT1000_MAG_DSP_TIMER0_INDX); - status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER1, (PUCHAR)&(info->DSP_TIME[1]), FT1000_MAG_DSP_TIMER1_INDX); - status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER2, (PUCHAR)&(info->DSP_TIME[2]), FT1000_MAG_DSP_TIMER2_INDX); - status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER3, (PUCHAR)&(info->DSP_TIME[3]), FT1000_MAG_DSP_TIMER3_INDX); + status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER0, (u8 *)&(info->DSP_TIME[0]), FT1000_MAG_DSP_TIMER0_INDX); + status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER1, (u8 *)&(info->DSP_TIME[1]), FT1000_MAG_DSP_TIMER1_INDX); + status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER2, (u8 *)&(info->DSP_TIME[2]), FT1000_MAG_DSP_TIMER2_INDX); + status = ft1000_read_dpram16(dev, FT1000_MAG_DSP_TIMER3, (u8 *)&(info->DSP_TIME[3]), FT1000_MAG_DSP_TIMER3_INDX); info->CardReady = 0; info->DrvErrNum = DSP_CONDRESET_INFO; DEBUG("ft1000_hw:DSP conditional reset requested\n"); diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.h b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.h index c580741..ab9312f 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.h +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.h @@ -4,7 +4,7 @@ #include "ft1000_usb.h" -extern u16 ft1000_read_register(struct usb_device *dev, PUSHORT Data, u8 nRegIndx); -extern u16 ft1000_write_register(struct usb_device *dev, USHORT value, u8 nRegIndx); +extern u16 ft1000_read_register(struct usb_device *dev, u16 *Data, u8 nRegIndx); +extern u16 ft1000_write_register(struct usb_device *dev, u16 value, u8 nRegIndx); #endif diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c b/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c index 36cdd58..b87542a 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_proc.c @@ -1,3 +1,24 @@ +/* + * ft1000_proc.c - ft1000 proc interface + * + * Copyright (C) 2009-2010 Quintec + * (C) 2010 Open-nandra + * <marek.belisko@open-nandra.com> + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file "COPYING" in the main directory of this + * archive for more details. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + #include <linux/module.h> #include <linux/kernel.h> #include <linux/proc_fs.h> @@ -14,219 +35,217 @@ #define PUTX_TO_PAGE(len,page,message,size,var) \ len += snprintf(page+len, PAGE_SIZE - len, message); \ - for(i = 0; i < (size - 1); i++) \ - { \ + for (i = 0; i < (size - 1); i++) {\ len += snprintf(page+len, PAGE_SIZE - len, "%02x:", var[i]); \ } \ len += snprintf(page+len, PAGE_SIZE - len, "%02x\n", var[i]) #define PUTD_TO_PAGE(len,page,message,size,var) \ len += snprintf(page+len, PAGE_SIZE - len, message); \ - for(i = 0; i < (size - 1); i++) \ - { \ + for (i = 0; i < (size - 1); i++) {\ len += snprintf(page+len, PAGE_SIZE - len, "%d.", var[i]); \ } \ len += snprintf(page+len, PAGE_SIZE - len, "%d\n", var[i]) - - -//#ifdef INIT_NET_NS #define FTNET_PROC init_net.proc_net -//#else -//#define FTNET_PROC proc_net -//#endif -u16 ft1000_read_dpram16 (struct ft1000_device *ft1000dev, USHORT indx, - PUCHAR buffer, u8 highlow); +u16 ft1000_read_dpram16 (struct ft1000_device *ft1000dev, u16 indx, + u8 *buffer, u8 highlow); static int -ft1000ReadProc (char *page, char **start, off_t off, int count, int *eof, +ft1000ReadProc(char *page, char **start, off_t off, int count, int *eof, void *data) { - struct net_device *dev; - int len; - int i; - unsigned short ledStat; - unsigned short conStat; + struct net_device *dev; + int len; + int i; + unsigned short ledStat; + unsigned short conStat; struct ft1000_info *info; - char *status[] = { "Idle (Disconnect)", "Searching", "Active (Connected)", - "Waiting for L2", "Sleep", "No Coverage", "", "" - }; - - char *signal[] = { "", "*", "**", "***", "****" }; - int strength; - int quality; - struct timeval tv; - time_t delta; - - dev = (struct net_device *) data; - info = (struct ft1000_info *) netdev_priv(dev); - - if (off > 0) - { - *eof = 1; - return 0; - } - - - if (info->ProgConStat != 0xFF) - { - ft1000_read_dpram16 (info->pFt1000Dev, FT1000_MAG_DSP_LED, - (PUCHAR) & ledStat, FT1000_MAG_DSP_LED_INDX); - info->LedStat = ntohs (ledStat); - - ft1000_read_dpram16 (info->pFt1000Dev, FT1000_MAG_DSP_CON_STATE, - (PUCHAR) & conStat, FT1000_MAG_DSP_CON_STATE_INDX); - info->ConStat = ntohs (conStat); - do_gettimeofday (&tv); - delta = (tv.tv_sec - info->ConTm); - } - else - { - info->ConStat = 0xf; - delta = 0; - } - - - - i = (info->LedStat) & 0xf; - switch (i) - { - case 0x1: - strength = 1; - break; - case 0x3: - strength = 2; - break; - case 0x7: - strength = 3; - break; - case 0xf: - strength = 4; - break; - default: - strength = 0; - } - - i = (info->LedStat >> 8) & 0xf; - switch (i) - { - case 0x1: - quality = 1; - break; - case 0x3: - quality = 2; - break; - case 0x7: - quality = 3; - break; - case 0xf: - quality = 4; - break; - default: - quality = 0; - } - - - len = 0; - PUTM_TO_PAGE (len, page, "Connection Time: %02ld:%02ld:%02ld\n", - ((delta / 3600) % 24), ((delta / 60) % 60), (delta % 60)); - PUTM_TO_PAGE (len, page, "Connection Time[s]: %ld\n", delta); - PUTM_TO_PAGE (len, page, "Asic ID: %s\n", - (info->AsicID) == - ELECTRABUZZ_ID ? "ELECTRABUZZ ASIC" : "MAGNEMITE ASIC"); - PUTX_TO_PAGE (len, page, "SKU: ", SKUSZ, info->Sku); - PUTX_TO_PAGE (len, page, "EUI64: ", EUISZ, info->eui64); - PUTD_TO_PAGE (len, page, "DSP version number: ", DSPVERSZ, info->DspVer); - PUTX_TO_PAGE (len, page, "Hardware Serial Number: ", HWSERNUMSZ, - info->HwSerNum); - PUTX_TO_PAGE (len, page, "Caliberation Version: ", CALVERSZ, - info->RfCalVer); - PUTD_TO_PAGE (len, page, "Caliberation Date: ", CALDATESZ, info->RfCalDate); - PUTM_TO_PAGE (len, page, "Media State: %s\n", - (info->mediastate) ? "link" : "no link"); - PUTM_TO_PAGE (len, page, "Connection Status: %s\n", - status[((info->ConStat) & 0x7)]); - PUTM_TO_PAGE (len, page, "RX packets: %ld\n", info->stats.rx_packets); - PUTM_TO_PAGE (len, page, "TX packets: %ld\n", info->stats.tx_packets); - PUTM_TO_PAGE (len, page, "RX bytes: %ld\n", info->stats.rx_bytes); - PUTM_TO_PAGE (len, page, "TX bytes: %ld\n", info->stats.tx_bytes); - PUTM_TO_PAGE (len, page, "Signal Strength: %s\n", signal[strength]); - PUTM_TO_PAGE (len, page, "Signal Quality: %s\n", signal[quality]); - - - - - return len; + char *status[] = { + "Idle (Disconnect)", + "Searching", + "Active (Connected)", + "Waiting for L2", + "Sleep", + "No Coverage", + "", + "", + }; + + char *signal[] = { "", "*", "**", "***", "****" }; + int strength; + int quality; + struct timeval tv; + time_t delta; + + dev = (struct net_device *) data; + info = netdev_priv(dev); + + if (off > 0) { + *eof = 1; + return 0; + } + + + if (info->ProgConStat != 0xFF) { + ft1000_read_dpram16(info->pFt1000Dev, 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, + (u8 *)&conStat, FT1000_MAG_DSP_CON_STATE_INDX); + info->ConStat = ntohs(conStat); + do_gettimeofday(&tv); + delta = (tv.tv_sec - info->ConTm); + } else { + info->ConStat = 0xf; + delta = 0; + } + + i = (info->LedStat) & 0xf; + switch (i) { + case 0x1: + strength = 1; + break; + case 0x3: + strength = 2; + break; + case 0x7: + strength = 3; + break; + case 0xf: + strength = 4; + break; + default: + strength = 0; + } + + i = (info->LedStat >> 8) & 0xf; + switch (i) { + case 0x1: + quality = 1; + break; + case 0x3: + quality = 2; + break; + case 0x7: + quality = 3; + break; + case 0xf: + quality = 4; + break; + default: + quality = 0; + } + + len = 0; + PUTM_TO_PAGE(len, page, "Connection Time: %02ld:%02ld:%02ld\n", + ((delta / 3600) % 24), ((delta / 60) % 60), (delta % 60)); + PUTM_TO_PAGE(len, page, "Connection Time[s]: %ld\n", delta); + PUTM_TO_PAGE(len, page, "Asic ID: %s\n", + (info->AsicID) == + ELECTRABUZZ_ID ? "ELECTRABUZZ ASIC" : "MAGNEMITE ASIC"); + PUTX_TO_PAGE(len, page, "SKU: ", SKUSZ, info->Sku); + PUTX_TO_PAGE(len, page, "EUI64: ", EUISZ, info->eui64); + PUTD_TO_PAGE(len, page, "DSP version number: ", DSPVERSZ, info->DspVer); + PUTX_TO_PAGE(len, page, "Hardware Serial Number: ", HWSERNUMSZ, + info->HwSerNum); + PUTX_TO_PAGE(len, page, "Caliberation Version: ", CALVERSZ, + info->RfCalVer); + PUTD_TO_PAGE(len, page, "Caliberation Date: ", CALDATESZ, + info->RfCalDate); + PUTM_TO_PAGE(len, page, "Media State: %s\n", + (info->mediastate) ? "link" : "no link"); + PUTM_TO_PAGE(len, page, "Connection Status: %s\n", + status[((info->ConStat) & 0x7)]); + PUTM_TO_PAGE(len, page, "RX packets: %ld\n", info->stats.rx_packets); + PUTM_TO_PAGE(len, page, "TX packets: %ld\n", info->stats.tx_packets); + PUTM_TO_PAGE(len, page, "RX bytes: %ld\n", info->stats.rx_bytes); + PUTM_TO_PAGE(len, page, "TX bytes: %ld\n", info->stats.tx_bytes); + PUTM_TO_PAGE(len, page, "Signal Strength: %s\n", signal[strength]); + PUTM_TO_PAGE(len, page, "Signal Quality: %s\n", signal[quality]); + + return len; } static int -ft1000NotifyProc (struct notifier_block *this, unsigned long event, void *ptr) +ft1000NotifyProc(struct notifier_block *this, unsigned long event, void *ptr) { - struct net_device *dev = ptr; + struct net_device *dev = ptr; struct ft1000_info *info; - struct proc_dir_entry *ft1000_proc_file; - -info = (struct ft1000_info *) netdev_priv(dev); - - - switch (event) - { - case NETDEV_CHANGENAME: - remove_proc_entry (info->netdevname, info->ft1000_proc_dir); - ft1000_proc_file = create_proc_read_entry (dev->name, 0644, - info->ft1000_proc_dir, - ft1000ReadProc, dev); - snprintf (info->netdevname, IFNAMSIZ, "%s", dev->name); - break; - } - return NOTIFY_DONE; + struct proc_dir_entry *ft1000_proc_file; + + info = netdev_priv(dev); + + switch (event) { + case NETDEV_CHANGENAME: + remove_proc_entry(info->netdevname, info->ft1000_proc_dir); + ft1000_proc_file = create_proc_read_entry(dev->name, 0644, + info->ft1000_proc_dir, + ft1000ReadProc, dev); + snprintf(info->netdevname, IFNAMSIZ, "%s", dev->name); + break; + } + + return NOTIFY_DONE; } static struct notifier_block ft1000_netdev_notifier = { - .notifier_call = ft1000NotifyProc + .notifier_call = ft1000NotifyProc, }; -void -ft1000InitProc (struct net_device *dev) +int ft1000_init_proc(struct net_device *dev) { struct ft1000_info *info; - struct proc_dir_entry *ft1000_proc_file; - info = (struct ft1000_info *) netdev_priv(dev); - - - info->ft1000_proc_dir = proc_mkdir (FT1000_PROC_DIR, FTNET_PROC); - if (info->ft1000_proc_dir == NULL) - { - remove_proc_entry (FT1000_PROC_DIR, FTNET_PROC); - } - - - ft1000_proc_file = - create_proc_read_entry (dev->name, 0644, info->ft1000_proc_dir, - ft1000ReadProc, dev); - if (ft1000_proc_file == NULL) - { - remove_proc_entry (info->netdevname, info->ft1000_proc_dir); - } - - snprintf (info->netdevname, IFNAMSIZ, "%s", dev->name); - register_netdevice_notifier (&ft1000_netdev_notifier); - return; + struct proc_dir_entry *ft1000_proc_file; + int ret = 0; + + info = netdev_priv(dev); + + info->ft1000_proc_dir = proc_mkdir(FT1000_PROC_DIR, FTNET_PROC); + if (info->ft1000_proc_dir == NULL) { + printk(KERN_WARNING "Unable to create %s dir.\n", + FT1000_PROC_DIR); + ret = -EINVAL; + goto fail; + } + + ft1000_proc_file = + create_proc_read_entry(dev->name, 0644, + info->ft1000_proc_dir, ft1000ReadProc, dev); + + if (ft1000_proc_file == NULL) { + printk(KERN_WARNING "Unable to create /proc entry.\n"); + ret = -EINVAL; + goto fail_entry; + } + + snprintf(info->netdevname, IFNAMSIZ, "%s", dev->name); + + ret = register_netdevice_notifier(&ft1000_netdev_notifier); + if (ret) + goto fail_notif; + + return 0; + +fail_notif: + remove_proc_entry(info->netdevname, info->ft1000_proc_dir); +fail_entry: + remove_proc_entry(FT1000_PROC_DIR, FTNET_PROC); +fail: + return ret; } -void -ft1000CleanupProc(struct ft1000_info *info) +void ft1000_cleanup_proc(struct ft1000_info *info) { - remove_proc_entry (info->netdevname, info->ft1000_proc_dir); - remove_proc_entry (FT1000_PROC_DIR, FTNET_PROC); - unregister_netdevice_notifier (&ft1000_netdev_notifier); - - return; + remove_proc_entry(info->netdevname, info->ft1000_proc_dir); + remove_proc_entry(FT1000_PROC_DIR, FTNET_PROC); + unregister_netdevice_notifier(&ft1000_netdev_notifier); } diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c index 28f55b2..79482ac 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.c @@ -36,7 +36,7 @@ static struct usb_device_id id_table[] = { MODULE_DEVICE_TABLE(usb, id_table); -static BOOLEAN gPollingfailed = FALSE; +static bool gPollingfailed = FALSE; int ft1000_poll_thread(void *arg) { int ret = STATUS_SUCCESS; @@ -64,7 +64,7 @@ static int ft1000_probe(struct usb_interface *interface, int i, ret = 0, size; struct ft1000_device *ft1000dev; - struct ft1000_info *pft1000info; + struct ft1000_info *pft1000info = NULL; const struct firmware *dsp_fw; ft1000dev = kmalloc(sizeof(struct ft1000_device), GFP_KERNEL); @@ -84,7 +84,6 @@ static int ft1000_probe(struct usb_interface *interface, ft1000dev->dev = dev; ft1000dev->status = 0; ft1000dev->net = NULL; - spin_lock_init(&ft1000dev->device_lock); ft1000dev->tx_urb = usb_alloc_urb(0, GFP_ATOMIC); ft1000dev->rx_urb = usb_alloc_urb(0, GFP_ATOMIC); @@ -164,7 +163,7 @@ static int ft1000_probe(struct usb_interface *interface, if (ret) goto err_load; - pft1000info = (struct ft1000_info *) netdev_priv(ft1000dev->net); + pft1000info = netdev_priv(ft1000dev->net); DEBUG("In probe: pft1000info=%p\n", pft1000info); ret = dsp_reload(ft1000dev); @@ -176,14 +175,18 @@ static int ft1000_probe(struct usb_interface *interface, gPollingfailed = FALSE; pft1000info->pPollThread = kthread_run(ft1000_poll_thread, ft1000dev, "ft1000_poll"); + + if (IS_ERR(pft1000info->pPollThread)) { + ret = PTR_ERR(pft1000info->pPollThread); + goto err_load; + } + msleep(500); while (!pft1000info->CardReady) { if (gPollingfailed) { - if (pft1000info->pPollThread) - kthread_stop(pft1000info->pPollThread); ret = -EIO; - goto err_load; + goto err_thread; } msleep(100); DEBUG("ft1000_probe::Waiting for Card Ready\n"); @@ -193,14 +196,21 @@ static int ft1000_probe(struct usb_interface *interface, ret = reg_ft1000_netdev(ft1000dev, interface); if (ret) - goto err_load; + goto err_thread; - pft1000info->NetDevRegDone = 1; + ret = ft1000_init_proc(ft1000dev->net); + if (ret) + goto err_proc; - ft1000InitProc(ft1000dev->net); + pft1000info->NetDevRegDone = 1; return 0; +err_proc: + unregister_netdev(ft1000dev->net); + free_netdev(ft1000dev->net); +err_thread: + kthread_stop(pft1000info->pPollThread); err_load: kfree(pFileStart); err_fw: @@ -218,7 +228,7 @@ static void ft1000_disconnect(struct usb_interface *interface) DEBUG("In disconnect pft1000info=%p\n", pft1000info); if (pft1000info) { - ft1000CleanupProc(pft1000info); + ft1000_cleanup_proc(pft1000info); if (pft1000info->pPollThread) kthread_stop(pft1000info->pPollThread); @@ -226,7 +236,7 @@ static void ft1000_disconnect(struct usb_interface *interface) if (pft1000info->pFt1000Dev->net) { DEBUG("ft1000_disconnect: destroy char driver\n"); - ft1000_DestroyDevice(pft1000info->pFt1000Dev->net); + ft1000_destroy_dev(pft1000info->pFt1000Dev->net); unregister_netdev(pft1000info->pFt1000Dev->net); DEBUG ("ft1000_disconnect: network device unregisterd\n"); diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h index a9d419a..a143e9c 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h @@ -98,16 +98,6 @@ struct prov_record { /*end of Jim*/ #define DEBUG(args...) printk(KERN_INFO args) -#define UCHAR u8 -#define USHORT u16 -#define ULONG u32 /* WTF ??? */ -#define BOOLEAN u8 -#define PULONG u32 * -#define PUSHORT u16 * -#define PUCHAR u8 * -#define PCHAR u8 * -#define UINT u32 - #define FALSE 0 #define TRUE 1 @@ -372,15 +362,15 @@ struct prov_record { -#define ISR_EMPTY (UCHAR)0x00 // no bits set in ISR +#define ISR_EMPTY (u8)0x00 // no bits set in ISR -#define ISR_DOORBELL_ACK (UCHAR)0x01 // the doorbell i sent has been recieved. +#define ISR_DOORBELL_ACK (u8)0x01 // the doorbell i sent has been recieved. -#define ISR_DOORBELL_PEND (UCHAR)0x02 // doorbell for me +#define ISR_DOORBELL_PEND (u8)0x02 // doorbell for me -#define ISR_RCV (UCHAR)0x04 // packet received with no errors +#define ISR_RCV (u8)0x04 // packet received with no errors -#define ISR_WATERMARK (UCHAR)0x08 // +#define ISR_WATERMARK (u8)0x08 // @@ -466,12 +456,9 @@ struct ft1000_device { struct usb_device *dev; struct net_device *net; - spinlock_t device_lock; u32 status; - wait_queue_head_t control_wait; - struct urb *rx_urb; struct urb *tx_urb; @@ -486,6 +473,13 @@ struct ft1000_device // struct net_device_stats stats; //mbelian } __attribute__ ((packed)); +struct ft1000_debug_dirs { + struct list_head list; + struct dentry *dent; + struct dentry *file; + int int_number; +}; + struct ft1000_info { struct ft1000_device *pFt1000Dev; struct net_device_stats stats; @@ -497,9 +491,9 @@ struct ft1000_info { unsigned char usbboot; unsigned short dspalive; u16 ASIC_ID; - BOOLEAN fProvComplete; - BOOLEAN fCondResetPend; - BOOLEAN fAppMsgPend; + bool fProvComplete; + bool fCondResetPend; + bool fAppMsgPend; char *pfwimg; int fwimgsz; u16 DrvErrNum; @@ -520,7 +514,7 @@ struct ft1000_info { int NetDevRegDone; u8 CardNumber; u8 DeviceName[15]; - int DeviceMajor; + struct ft1000_debug_dirs nodes; int registered; int mediastate; int dhcpflg; @@ -567,26 +561,26 @@ struct dpram_blk { } __attribute__ ((packed)); u16 ft1000_read_register(struct ft1000_device *ft1000dev, u16* Data, u16 nRegIndx); -u16 ft1000_write_register(struct ft1000_device *ft1000dev, USHORT value, u16 nRegIndx); -u16 ft1000_read_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer, USHORT cnt); -u16 ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer, USHORT cnt); -u16 ft1000_read_dpram16(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer, u8 highlow); -u16 ft1000_write_dpram16(struct ft1000_device *ft1000dev, USHORT indx, USHORT value, u8 highlow); -u16 fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer); -u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, USHORT indx, PUCHAR buffer); +u16 ft1000_write_register(struct ft1000_device *ft1000dev, u16 value, u16 nRegIndx); +u16 ft1000_read_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u16 cnt); +u16 ft1000_write_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u16 cnt); +u16 ft1000_read_dpram16(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer, u8 highlow); +u16 ft1000_write_dpram16(struct ft1000_device *ft1000dev, u16 indx, u16 value, u8 highlow); +u16 fix_ft1000_read_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer); +u16 fix_ft1000_write_dpram32(struct ft1000_device *ft1000dev, u16 indx, u8 *buffer); extern void *pFileStart; extern size_t FileLength; extern int numofmsgbuf; int ft1000_close (struct net_device *dev); -u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, ULONG FileLength); +u16 scram_dnldr(struct ft1000_device *ft1000dev, void *pFileStart, u32 FileLength); extern struct list_head freercvpool; extern spinlock_t free_buff_lock; // lock to arbitrate free buffer list for receive command data -int ft1000_CreateDevice(struct ft1000_device *dev); -void ft1000_DestroyDevice(struct net_device *dev); +int ft1000_create_dev(struct ft1000_device *dev); +void ft1000_destroy_dev(struct net_device *dev); extern void CardSendCommand(struct ft1000_device *ft1000dev, void *ptempbuffer, int size); struct dpram_blk *ft1000_get_buffer(struct list_head *bufflist); @@ -600,8 +594,8 @@ struct usb_interface; int reg_ft1000_netdev(struct ft1000_device *ft1000dev, struct usb_interface *intf); int ft1000_poll(void* dev_id); -void ft1000InitProc(struct net_device *dev); -void ft1000CleanupProc(struct ft1000_info *info); +int ft1000_init_proc(struct net_device *dev); +void ft1000_cleanup_proc(struct ft1000_info *info); |