From 9119dee1ce32453dfe24656091d69f8d57397fe0 Mon Sep 17 00:00:00 2001 From: Marek Belisko Date: Thu, 9 Dec 2010 11:26:46 +0100 Subject: [PATCH] staging: ft1000: Convert char device to debugfs. Character device was used only for debugging purposes. Convert it to debugfs functionality. For every plugged device create new directory with one file. Signed-off-by: Marek Belisko Signed-off-by: Greg Kroah-Hartman --- .../staging/ft1000/ft1000-usb/ft1000_chdev.c | 68 +++++++++++++------ drivers/staging/ft1000/ft1000-usb/ft1000_hw.c | 1 + .../staging/ft1000/ft1000-usb/ft1000_usb.h | 8 +++ 3 files changed, 57 insertions(+), 20 deletions(-) diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c b/drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c index 1aec926c993c..1238b7759e5b 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_chdev.c @@ -37,7 +37,7 @@ #include #include #include - +#include #include "ft1000_usb.h" //#include "ft1000_ioctl.h" @@ -156,9 +156,11 @@ int ft1000_CreateDevice(struct ft1000_device *dev) struct ft1000_info *info = netdev_priv(dev->net); int result; int i; + struct dentry *dir, *file; + struct ft1000_debug_dirs *tmp; // make a new device name - sprintf(info->DeviceName, "%s%d", "FT100", info->CardNumber); + sprintf(info->DeviceName, "%s%d", "FT1000_", info->CardNumber); DEBUG("ft1000_CreateDevice: number of instance = %d\n", ft1000_flarion_cnt); DEBUG("DeviceCreated = %x\n", info->DeviceCreated); @@ -179,22 +181,32 @@ int ft1000_CreateDevice(struct ft1000_device *dev) 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; - } + tmp = kmalloc(sizeof(struct ft1000_debug_dirs), GFP_KERNEL); + if (tmp == NULL) { + result = -1; + goto fail; + } + + dir = debugfs_create_dir(info->DeviceName, 0); + if (IS_ERR(dir)) { + result = PTR_ERR(dir); + goto debug_dir_fail; + } + + file = debugfs_create_file("device", S_IRUGO | S_IWUGO, dir, + NULL, &ft1000fops); + if (IS_ERR(file)) { + result = PTR_ERR(file); + goto debug_file_fail; + } + + tmp->dent = dir; + tmp->file = file; + tmp->int_number = info->CardNumber; + list_add(&(tmp->list), &(info->nodes.list)); DEBUG("ft1000_CreateDevice: registered char device \"%s\"\n", info->DeviceName); - // save a dynamic device major number - if (info->DeviceMajor == 0) - { - info->DeviceMajor = result; - DEBUG("ft1000_PcdCreateDevice: device major = %d\n", info->DeviceMajor); - } - // initialize application information // if (ft1000_flarion_cnt == 0) { @@ -243,7 +255,14 @@ int ft1000_CreateDevice(struct ft1000_device *dev) info->DeviceCreated = TRUE; ft1000_flarion_cnt++; - return result; + return 0; + +debug_file_fail: + debugfs_remove(dir); +debug_dir_fail: + kfree(tmp); +fail: + return result; } //--------------------------------------------------------------------------- @@ -259,10 +278,11 @@ int ft1000_CreateDevice(struct ft1000_device *dev) void ft1000_DestroyDevice(struct net_device *dev) { struct ft1000_info *info = netdev_priv(dev); - int result = 0; 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"); @@ -271,9 +291,17 @@ void ft1000_DestroyDevice(struct net_device *dev) if (info->DeviceCreated) { ft1000_flarion_cnt--; - unregister_chrdev(info->DeviceMajor, info->DeviceName); - DEBUG("ft1000_DestroyDevice: unregistered device \"%s\", result = %d\n", - info->DeviceName, result); + 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("ft1000_DestroyDevice: unregistered device \"%s\"\n", + info->DeviceName); // Make sure we free any memory reserve for slow Queue for (i=0; iprov_list); + INIT_LIST_HEAD(&pInfo->nodes.list); //mbelian #ifdef HAVE_NET_DEVICE_OPS netdev->netdev_ops = &ftnet_ops; diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h index a07db26441f1..5bead6314985 100644 --- a/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h +++ b/drivers/staging/ft1000/ft1000-usb/ft1000_usb.h @@ -473,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; @@ -508,6 +515,7 @@ struct ft1000_info { u8 CardNumber; u8 DeviceName[15]; int DeviceMajor; + struct ft1000_debug_dirs nodes; int registered; int mediastate; int dhcpflg;