Loading net/mac80211/Makefile +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,7 @@ mac80211-objs := \ ieee80211_iface.o \ ieee80211_iface.o \ ieee80211_rate.o \ ieee80211_rate.o \ michael.o \ michael.o \ regdomain.o \ tkip.o \ tkip.o \ aes_ccm.o \ aes_ccm.o \ wme.o \ wme.o \ Loading net/mac80211/debugfs_netdev.c +6 −3 Original line number Original line Diff line number Diff line Loading @@ -397,6 +397,8 @@ static int netdev_notify(struct notifier_block * nb, void *ndev) void *ndev) { { struct net_device *dev = ndev; struct net_device *dev = ndev; struct dentry *dir; struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); char buf[10+IFNAMSIZ]; char buf[10+IFNAMSIZ]; if (state != NETDEV_CHANGENAME) if (state != NETDEV_CHANGENAME) Loading @@ -408,10 +410,11 @@ static int netdev_notify(struct notifier_block * nb, if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) return 0; return 0; /* TODO sprintf(buf, "netdev:%s", dev->name); sprintf(buf, "netdev:%s", dev->name); debugfs_rename(IEEE80211_DEV_TO_SUB_IF(dev)->debugfsdir, buf); dir = sdata->debugfsdir; */ if (!debugfs_rename(dir->d_parent, dir, dir->d_parent, buf)) printk(KERN_ERR "mac80211: debugfs: failed to rename debugfs " "dir to %s\n", buf); return 0; return 0; } } Loading net/mac80211/ieee80211.c +4 −3 Original line number Original line Diff line number Diff line Loading @@ -4986,7 +4986,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) * and we need some headroom for passing the frame to monitor * and we need some headroom for passing the frame to monitor * interfaces, but never both at the same time. * interfaces, but never both at the same time. */ */ local->tx_headroom = max(local->hw.extra_tx_headroom, local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom, sizeof(struct ieee80211_tx_status_rtap_hdr)); sizeof(struct ieee80211_tx_status_rtap_hdr)); debugfs_hw_add(local); debugfs_hw_add(local); Loading Loading @@ -5095,7 +5095,7 @@ int ieee80211_register_hwmode(struct ieee80211_hw *hw, } } if (!(hw->flags & IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED)) if (!(hw->flags & IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED)) ieee80211_init_client(local->mdev); ieee80211_set_default_regdomain(mode); return 0; return 0; } } Loading Loading @@ -5246,6 +5246,7 @@ static int __init ieee80211_init(void) } } ieee80211_debugfs_netdev_init(); ieee80211_debugfs_netdev_init(); ieee80211_regdomain_init(); return 0; return 0; } } Loading net/mac80211/ieee80211_i.h +4 −1 Original line number Original line Diff line number Diff line Loading @@ -759,7 +759,6 @@ void ieee80211_update_default_wep_only(struct ieee80211_local *local); /* ieee80211_ioctl.c */ /* ieee80211_ioctl.c */ int ieee80211_set_compression(struct ieee80211_local *local, int ieee80211_set_compression(struct ieee80211_local *local, struct net_device *dev, struct sta_info *sta); struct net_device *dev, struct sta_info *sta); int ieee80211_init_client(struct net_device *dev); int ieee80211_set_channel(struct ieee80211_local *local, int channel, int freq); int ieee80211_set_channel(struct ieee80211_local *local, int channel, int freq); /* ieee80211_sta.c */ /* ieee80211_sta.c */ void ieee80211_sta_timer(unsigned long data); void ieee80211_sta_timer(unsigned long data); Loading Loading @@ -798,6 +797,10 @@ void ieee80211_if_sdata_init(struct ieee80211_sub_if_data *sdata); int ieee80211_if_add_mgmt(struct ieee80211_local *local); int ieee80211_if_add_mgmt(struct ieee80211_local *local); void ieee80211_if_del_mgmt(struct ieee80211_local *local); void ieee80211_if_del_mgmt(struct ieee80211_local *local); /* regdomain.c */ void ieee80211_regdomain_init(void); void ieee80211_set_default_regdomain(struct ieee80211_hw_mode *mode); /* for wiphy privid */ /* for wiphy privid */ extern void *mac80211_wiphy_privid; extern void *mac80211_wiphy_privid; Loading net/mac80211/ieee80211_ioctl.c +0 −133 Original line number Original line Diff line number Diff line Loading @@ -27,20 +27,6 @@ #include "aes_ccm.h" #include "aes_ccm.h" #include "debugfs_key.h" #include "debugfs_key.h" static int ieee80211_regdom = 0x10; /* FCC */ module_param(ieee80211_regdom, int, 0444); MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain; 64=MKK"); /* * If firmware is upgraded by the vendor, additional channels can be used based * on the new Japanese regulatory rules. This is indicated by setting * ieee80211_japan_5ghz module parameter to one when loading the 80211 kernel * module. */ static int ieee80211_japan_5ghz /* = 0 */; module_param(ieee80211_japan_5ghz, int, 0444); MODULE_PARM_DESC(ieee80211_japan_5ghz, "Vendor-updated firmware for 5 GHz"); static void ieee80211_set_hw_encryption(struct net_device *dev, static void ieee80211_set_hw_encryption(struct net_device *dev, struct sta_info *sta, u8 addr[ETH_ALEN], struct sta_info *sta, u8 addr[ETH_ALEN], struct ieee80211_key *key) struct ieee80211_key *key) Loading Loading @@ -412,125 +398,6 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev, } } struct ieee80211_channel_range { short start_freq; short end_freq; unsigned char power_level; unsigned char antenna_max; }; static const struct ieee80211_channel_range ieee80211_fcc_channels[] = { { 2412, 2462, 27, 6 } /* IEEE 802.11b/g, channels 1..11 */, { 5180, 5240, 17, 6 } /* IEEE 802.11a, channels 36..48 */, { 5260, 5320, 23, 6 } /* IEEE 802.11a, channels 52..64 */, { 5745, 5825, 30, 6 } /* IEEE 802.11a, channels 149..165, outdoor */, { 0 } }; static const struct ieee80211_channel_range ieee80211_mkk_channels[] = { { 2412, 2472, 20, 6 } /* IEEE 802.11b/g, channels 1..13 */, { 5170, 5240, 20, 6 } /* IEEE 802.11a, channels 34..48 */, { 5260, 5320, 20, 6 } /* IEEE 802.11a, channels 52..64 */, { 0 } }; static const struct ieee80211_channel_range *channel_range = ieee80211_fcc_channels; static void ieee80211_unmask_channel(struct net_device *dev, int mode, struct ieee80211_channel *chan) { int i; chan->flag = 0; if (ieee80211_regdom == 64 && (mode == MODE_ATHEROS_TURBO || mode == MODE_ATHEROS_TURBOG)) { /* Do not allow Turbo modes in Japan. */ return; } for (i = 0; channel_range[i].start_freq; i++) { const struct ieee80211_channel_range *r = &channel_range[i]; if (r->start_freq <= chan->freq && r->end_freq >= chan->freq) { if (ieee80211_regdom == 64 && !ieee80211_japan_5ghz && chan->freq >= 5260 && chan->freq <= 5320) { /* * Skip new channels in Japan since the * firmware was not marked having been upgraded * by the vendor. */ continue; } if (ieee80211_regdom == 0x10 && (chan->freq == 5190 || chan->freq == 5210 || chan->freq == 5230)) { /* Skip MKK channels when in FCC domain. */ continue; } chan->flag |= IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | IEEE80211_CHAN_W_IBSS; chan->power_level = r->power_level; chan->antenna_max = r->antenna_max; if (ieee80211_regdom == 64 && (chan->freq == 5170 || chan->freq == 5190 || chan->freq == 5210 || chan->freq == 5230)) { /* * New regulatory rules in Japan have backwards * compatibility with old channels in 5.15-5.25 * GHz band, but the station is not allowed to * use active scan on these old channels. */ chan->flag &= ~IEEE80211_CHAN_W_ACTIVE_SCAN; } if (ieee80211_regdom == 64 && (chan->freq == 5260 || chan->freq == 5280 || chan->freq == 5300 || chan->freq == 5320)) { /* * IBSS is not allowed on 5.25-5.35 GHz band * due to radar detection requirements. */ chan->flag &= ~IEEE80211_CHAN_W_IBSS; } break; } } } static int ieee80211_unmask_channels(struct net_device *dev) { struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); struct ieee80211_hw_mode *mode; int c; list_for_each_entry(mode, &local->modes_list, list) { for (c = 0; c < mode->num_channels; c++) { ieee80211_unmask_channel(dev, mode->mode, &mode->channels[c]); } } return 0; } int ieee80211_init_client(struct net_device *dev) { if (ieee80211_regdom == 0x40) channel_range = ieee80211_mkk_channels; ieee80211_unmask_channels(dev); return 0; } static int ieee80211_ioctl_siwmode(struct net_device *dev, static int ieee80211_ioctl_siwmode(struct net_device *dev, struct iw_request_info *info, struct iw_request_info *info, __u32 *mode, char *extra) __u32 *mode, char *extra) Loading Loading
net/mac80211/Makefile +1 −0 Original line number Original line Diff line number Diff line Loading @@ -13,6 +13,7 @@ mac80211-objs := \ ieee80211_iface.o \ ieee80211_iface.o \ ieee80211_rate.o \ ieee80211_rate.o \ michael.o \ michael.o \ regdomain.o \ tkip.o \ tkip.o \ aes_ccm.o \ aes_ccm.o \ wme.o \ wme.o \ Loading
net/mac80211/debugfs_netdev.c +6 −3 Original line number Original line Diff line number Diff line Loading @@ -397,6 +397,8 @@ static int netdev_notify(struct notifier_block * nb, void *ndev) void *ndev) { { struct net_device *dev = ndev; struct net_device *dev = ndev; struct dentry *dir; struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); char buf[10+IFNAMSIZ]; char buf[10+IFNAMSIZ]; if (state != NETDEV_CHANGENAME) if (state != NETDEV_CHANGENAME) Loading @@ -408,10 +410,11 @@ static int netdev_notify(struct notifier_block * nb, if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) if (dev->ieee80211_ptr->wiphy->privid != mac80211_wiphy_privid) return 0; return 0; /* TODO sprintf(buf, "netdev:%s", dev->name); sprintf(buf, "netdev:%s", dev->name); debugfs_rename(IEEE80211_DEV_TO_SUB_IF(dev)->debugfsdir, buf); dir = sdata->debugfsdir; */ if (!debugfs_rename(dir->d_parent, dir, dir->d_parent, buf)) printk(KERN_ERR "mac80211: debugfs: failed to rename debugfs " "dir to %s\n", buf); return 0; return 0; } } Loading
net/mac80211/ieee80211.c +4 −3 Original line number Original line Diff line number Diff line Loading @@ -4986,7 +4986,7 @@ int ieee80211_register_hw(struct ieee80211_hw *hw) * and we need some headroom for passing the frame to monitor * and we need some headroom for passing the frame to monitor * interfaces, but never both at the same time. * interfaces, but never both at the same time. */ */ local->tx_headroom = max(local->hw.extra_tx_headroom, local->tx_headroom = max_t(unsigned int , local->hw.extra_tx_headroom, sizeof(struct ieee80211_tx_status_rtap_hdr)); sizeof(struct ieee80211_tx_status_rtap_hdr)); debugfs_hw_add(local); debugfs_hw_add(local); Loading Loading @@ -5095,7 +5095,7 @@ int ieee80211_register_hwmode(struct ieee80211_hw *hw, } } if (!(hw->flags & IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED)) if (!(hw->flags & IEEE80211_HW_DEFAULT_REG_DOMAIN_CONFIGURED)) ieee80211_init_client(local->mdev); ieee80211_set_default_regdomain(mode); return 0; return 0; } } Loading Loading @@ -5246,6 +5246,7 @@ static int __init ieee80211_init(void) } } ieee80211_debugfs_netdev_init(); ieee80211_debugfs_netdev_init(); ieee80211_regdomain_init(); return 0; return 0; } } Loading
net/mac80211/ieee80211_i.h +4 −1 Original line number Original line Diff line number Diff line Loading @@ -759,7 +759,6 @@ void ieee80211_update_default_wep_only(struct ieee80211_local *local); /* ieee80211_ioctl.c */ /* ieee80211_ioctl.c */ int ieee80211_set_compression(struct ieee80211_local *local, int ieee80211_set_compression(struct ieee80211_local *local, struct net_device *dev, struct sta_info *sta); struct net_device *dev, struct sta_info *sta); int ieee80211_init_client(struct net_device *dev); int ieee80211_set_channel(struct ieee80211_local *local, int channel, int freq); int ieee80211_set_channel(struct ieee80211_local *local, int channel, int freq); /* ieee80211_sta.c */ /* ieee80211_sta.c */ void ieee80211_sta_timer(unsigned long data); void ieee80211_sta_timer(unsigned long data); Loading Loading @@ -798,6 +797,10 @@ void ieee80211_if_sdata_init(struct ieee80211_sub_if_data *sdata); int ieee80211_if_add_mgmt(struct ieee80211_local *local); int ieee80211_if_add_mgmt(struct ieee80211_local *local); void ieee80211_if_del_mgmt(struct ieee80211_local *local); void ieee80211_if_del_mgmt(struct ieee80211_local *local); /* regdomain.c */ void ieee80211_regdomain_init(void); void ieee80211_set_default_regdomain(struct ieee80211_hw_mode *mode); /* for wiphy privid */ /* for wiphy privid */ extern void *mac80211_wiphy_privid; extern void *mac80211_wiphy_privid; Loading
net/mac80211/ieee80211_ioctl.c +0 −133 Original line number Original line Diff line number Diff line Loading @@ -27,20 +27,6 @@ #include "aes_ccm.h" #include "aes_ccm.h" #include "debugfs_key.h" #include "debugfs_key.h" static int ieee80211_regdom = 0x10; /* FCC */ module_param(ieee80211_regdom, int, 0444); MODULE_PARM_DESC(ieee80211_regdom, "IEEE 802.11 regulatory domain; 64=MKK"); /* * If firmware is upgraded by the vendor, additional channels can be used based * on the new Japanese regulatory rules. This is indicated by setting * ieee80211_japan_5ghz module parameter to one when loading the 80211 kernel * module. */ static int ieee80211_japan_5ghz /* = 0 */; module_param(ieee80211_japan_5ghz, int, 0444); MODULE_PARM_DESC(ieee80211_japan_5ghz, "Vendor-updated firmware for 5 GHz"); static void ieee80211_set_hw_encryption(struct net_device *dev, static void ieee80211_set_hw_encryption(struct net_device *dev, struct sta_info *sta, u8 addr[ETH_ALEN], struct sta_info *sta, u8 addr[ETH_ALEN], struct ieee80211_key *key) struct ieee80211_key *key) Loading Loading @@ -412,125 +398,6 @@ static int ieee80211_ioctl_giwrange(struct net_device *dev, } } struct ieee80211_channel_range { short start_freq; short end_freq; unsigned char power_level; unsigned char antenna_max; }; static const struct ieee80211_channel_range ieee80211_fcc_channels[] = { { 2412, 2462, 27, 6 } /* IEEE 802.11b/g, channels 1..11 */, { 5180, 5240, 17, 6 } /* IEEE 802.11a, channels 36..48 */, { 5260, 5320, 23, 6 } /* IEEE 802.11a, channels 52..64 */, { 5745, 5825, 30, 6 } /* IEEE 802.11a, channels 149..165, outdoor */, { 0 } }; static const struct ieee80211_channel_range ieee80211_mkk_channels[] = { { 2412, 2472, 20, 6 } /* IEEE 802.11b/g, channels 1..13 */, { 5170, 5240, 20, 6 } /* IEEE 802.11a, channels 34..48 */, { 5260, 5320, 20, 6 } /* IEEE 802.11a, channels 52..64 */, { 0 } }; static const struct ieee80211_channel_range *channel_range = ieee80211_fcc_channels; static void ieee80211_unmask_channel(struct net_device *dev, int mode, struct ieee80211_channel *chan) { int i; chan->flag = 0; if (ieee80211_regdom == 64 && (mode == MODE_ATHEROS_TURBO || mode == MODE_ATHEROS_TURBOG)) { /* Do not allow Turbo modes in Japan. */ return; } for (i = 0; channel_range[i].start_freq; i++) { const struct ieee80211_channel_range *r = &channel_range[i]; if (r->start_freq <= chan->freq && r->end_freq >= chan->freq) { if (ieee80211_regdom == 64 && !ieee80211_japan_5ghz && chan->freq >= 5260 && chan->freq <= 5320) { /* * Skip new channels in Japan since the * firmware was not marked having been upgraded * by the vendor. */ continue; } if (ieee80211_regdom == 0x10 && (chan->freq == 5190 || chan->freq == 5210 || chan->freq == 5230)) { /* Skip MKK channels when in FCC domain. */ continue; } chan->flag |= IEEE80211_CHAN_W_SCAN | IEEE80211_CHAN_W_ACTIVE_SCAN | IEEE80211_CHAN_W_IBSS; chan->power_level = r->power_level; chan->antenna_max = r->antenna_max; if (ieee80211_regdom == 64 && (chan->freq == 5170 || chan->freq == 5190 || chan->freq == 5210 || chan->freq == 5230)) { /* * New regulatory rules in Japan have backwards * compatibility with old channels in 5.15-5.25 * GHz band, but the station is not allowed to * use active scan on these old channels. */ chan->flag &= ~IEEE80211_CHAN_W_ACTIVE_SCAN; } if (ieee80211_regdom == 64 && (chan->freq == 5260 || chan->freq == 5280 || chan->freq == 5300 || chan->freq == 5320)) { /* * IBSS is not allowed on 5.25-5.35 GHz band * due to radar detection requirements. */ chan->flag &= ~IEEE80211_CHAN_W_IBSS; } break; } } } static int ieee80211_unmask_channels(struct net_device *dev) { struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr); struct ieee80211_hw_mode *mode; int c; list_for_each_entry(mode, &local->modes_list, list) { for (c = 0; c < mode->num_channels; c++) { ieee80211_unmask_channel(dev, mode->mode, &mode->channels[c]); } } return 0; } int ieee80211_init_client(struct net_device *dev) { if (ieee80211_regdom == 0x40) channel_range = ieee80211_mkk_channels; ieee80211_unmask_channels(dev); return 0; } static int ieee80211_ioctl_siwmode(struct net_device *dev, static int ieee80211_ioctl_siwmode(struct net_device *dev, struct iw_request_info *info, struct iw_request_info *info, __u32 *mode, char *extra) __u32 *mode, char *extra) Loading