--- a/net80211/ieee80211_linux.c +++ b/net80211/ieee80211_linux.c @@ -476,8 +476,12 @@ static int proc_ieee80211_open(struct inode *inode, struct file *file) { struct proc_ieee80211_priv *pv = NULL; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + struct ieee80211vap *vap = PDE_DATA(inode); +#else struct proc_dir_entry *dp = PDE(inode); struct ieee80211vap *vap = dp->data; +#endif if (!(file->private_data = kmalloc(sizeof(struct proc_ieee80211_priv), GFP_KERNEL))) return -ENOMEM; @@ -842,10 +846,16 @@ ieee80211_virtfs_latevattach(struct ieee tmp = vap->iv_proc_entries; while (tmp) { if (!tmp->entry) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + tmp->entry = proc_create_data(tmp->name, + PROC_IEEE80211_PERM, vap->iv_proc, + tmp->fileops, vap); +#else tmp->entry = create_proc_entry(tmp->name, PROC_IEEE80211_PERM, vap->iv_proc); tmp->entry->data = vap; tmp->entry->proc_fops = tmp->fileops; +#endif } tmp = tmp->next; } @@ -913,10 +923,16 @@ ieee80211_proc_vcreate(struct ieee80211v /* Create the actual proc entry */ if (vap->iv_proc) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + entry->entry = proc_create_data(entry->name, + PROC_IEEE80211_PERM, vap->iv_proc, + entry->fileops, vap); +#else entry->entry = create_proc_entry(entry->name, PROC_IEEE80211_PERM, vap->iv_proc); entry->entry->data = vap; entry->entry->proc_fops = entry->fileops; +#endif } /* Add it to the list */ @@ -953,14 +969,26 @@ ieee80211_virtfs_vdetach(struct ieee8021 tmp = vap->iv_proc_entries; while (tmp) { if (tmp->entry) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + proc_remove(tmp->entry); +#else remove_proc_entry(tmp->name, vap->iv_proc); +#endif tmp->entry = NULL; } tmp = tmp->next; } +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + proc_remove(vap->iv_proc); +#else remove_proc_entry(vap->iv_proc->name, proc_madwifi); +#endif if (proc_madwifi_count == 1) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + proc_remove(proc_madwifi); +#else remove_proc_entry("madwifi", proc_net); +#endif proc_madwifi = NULL; } proc_madwifi_count--; --- a/ath_rate/minstrel/minstrel.c +++ b/ath_rate/minstrel/minstrel.c @@ -835,8 +835,12 @@ static int ath_proc_ratesample_open(struct inode *inode, struct file *file) { struct proc_ieee80211_priv *pv = NULL; +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)) + struct ieee80211vap *vap = PDE_DATA(inode); +#else struct proc_dir_entry *dp = PDE(inode); struct ieee80211vap *vap = dp->data; +#endif if (!(file->private_data = kmalloc(sizeof(struct proc_ieee80211_priv), GFP_KERNEL))) --- a/ath_rate/sample/sample.c +++ b/ath_rate/sample/sample.c @@ -923,12 +923,15 @@ proc_read_nodes(struct ieee80211vap *vap } static int -proc_ratesample_open(struct inode *inode, struct file *file) +proc_ratesample_open_common(struct inode *inode, struct file *file, const unsigned long size) { struct proc_ieee80211_priv *pv; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) + struct ieee80211vap *vap = PDE_DATA(inode); +#else struct proc_dir_entry *dp = PDE(inode); struct ieee80211vap *vap = dp->data; - unsigned long size; +#endif if (!(file->private_data = kmalloc(sizeof(struct proc_ieee80211_priv), GFP_KERNEL))) @@ -953,18 +956,47 @@ proc_ratesample_open(struct inode *inode pv->max_wlen = MAX_PROC_IEEE80211_SIZE; pv->max_rlen = MAX_PROC_IEEE80211_SIZE; - /* Determine what size packets to get stats for based on proc filename */ - size = simple_strtoul(dp->name + 10, NULL, 0); - /* now read the data into the buffer */ pv->rlen = proc_read_nodes(vap, size, pv->rbuf, MAX_PROC_IEEE80211_SIZE); return 0; } -static struct file_operations proc_ratesample_ops = { +static int +proc_ratesample_stats250_open(struct inode *inode, struct file *file) +{ + return proc_ratesample_open_common(inode, file, 250); +} + +static int +proc_ratesample_stats1600_open(struct inode *inode, struct file *file) +{ + return proc_ratesample_open_common(inode, file, 1600); +} + +static int +proc_ratesample_stats3000_open(struct inode *inode, struct file *file) +{ + return proc_ratesample_open_common(inode, file, 3000); +} + +static struct file_operations proc_ratesample_stats250_ops = { + .read = NULL, + .write = NULL, + .open = proc_ratesample_stats250_open, + .release = NULL, +}; + +static struct file_operations proc_ratesample_stats1600_ops = { + .read = NULL, + .write = NULL, + .open = proc_ratesample_stats1600_open, + .release = NULL, +}; + +static struct file_operations proc_ratesample_stats3000_ops = { .read = NULL, .write = NULL, - .open = proc_ratesample_open, + .open = proc_ratesample_stats3000_open, .release = NULL, }; @@ -972,9 +1004,9 @@ static void ath_rate_dynamic_proc_register(struct ieee80211vap *vap) { /* Create proc entries for the rate control algorithm */ - ieee80211_proc_vcreate(vap, &proc_ratesample_ops, "ratestats_250"); - ieee80211_proc_vcreate(vap, &proc_ratesample_ops, "ratestats_1600"); - ieee80211_proc_vcreate(vap, &proc_ratesample_ops, "ratestats_3000"); + ieee80211_proc_vcreate(vap, &proc_ratesample_stats250_ops, "ratestats_250"); + ieee80211_proc_vcreate(vap, &proc_ratesample_stats1600_ops, "ratestats_1600"); + ieee80211_proc_vcreate(vap, &proc_ratesample_stats3000_ops, "ratestats_3000"); } static struct ieee80211_rate_ops ath_rate_ops = {