forked from luck/tmp_suning_uos_patched
libertas: move scan/assoc related stuff
Another cfg80211-preparation patch: removes some code/definitions from main.c and dev.h and put's it into assoc.c/.h, scan.c/.h. No function change. Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
243e84e91e
commit
2d46502dce
@ -23,6 +23,13 @@ static const u8 bssid_off[ETH_ALEN] __attribute__ ((aligned (2))) =
|
|||||||
*/
|
*/
|
||||||
#define CAPINFO_MASK (~(0xda00))
|
#define CAPINFO_MASK (~(0xda00))
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 802.11b/g supported bitrates (in 500Kb/s units)
|
||||||
|
*/
|
||||||
|
u8 lbs_bg_rates[MAX_RATES] =
|
||||||
|
{ 0x02, 0x04, 0x0b, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c,
|
||||||
|
0x00, 0x00 };
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief This function finds common rates between rates and card rates.
|
* @brief This function finds common rates between rates and card rates.
|
||||||
|
@ -3,7 +3,127 @@
|
|||||||
#ifndef _LBS_ASSOC_H_
|
#ifndef _LBS_ASSOC_H_
|
||||||
#define _LBS_ASSOC_H_
|
#define _LBS_ASSOC_H_
|
||||||
|
|
||||||
#include "dev.h"
|
|
||||||
|
#include "defs.h"
|
||||||
|
#include "host.h"
|
||||||
|
|
||||||
|
|
||||||
|
struct lbs_private;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* In theory, the IE is limited to the IE length, 255,
|
||||||
|
* but in practice 64 bytes are enough.
|
||||||
|
*/
|
||||||
|
#define MAX_WPA_IE_LEN 64
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
struct lbs_802_11_security {
|
||||||
|
u8 WPAenabled;
|
||||||
|
u8 WPA2enabled;
|
||||||
|
u8 wep_enabled;
|
||||||
|
u8 auth_mode;
|
||||||
|
u32 key_mgmt;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Current Basic Service Set State Structure */
|
||||||
|
struct current_bss_params {
|
||||||
|
/** bssid */
|
||||||
|
u8 bssid[ETH_ALEN];
|
||||||
|
/** ssid */
|
||||||
|
u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
|
||||||
|
u8 ssid_len;
|
||||||
|
|
||||||
|
/** band */
|
||||||
|
u8 band;
|
||||||
|
/** channel */
|
||||||
|
u8 channel;
|
||||||
|
/** zero-terminated array of supported data rates */
|
||||||
|
u8 rates[MAX_RATES + 1];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Structure used to store information for each beacon/probe response
|
||||||
|
*/
|
||||||
|
struct bss_descriptor {
|
||||||
|
u8 bssid[ETH_ALEN];
|
||||||
|
|
||||||
|
u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
|
||||||
|
u8 ssid_len;
|
||||||
|
|
||||||
|
u16 capability;
|
||||||
|
u32 rssi;
|
||||||
|
u32 channel;
|
||||||
|
u16 beaconperiod;
|
||||||
|
__le16 atimwindow;
|
||||||
|
|
||||||
|
/* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
|
||||||
|
u8 mode;
|
||||||
|
|
||||||
|
/* zero-terminated array of supported data rates */
|
||||||
|
u8 rates[MAX_RATES + 1];
|
||||||
|
|
||||||
|
unsigned long last_scanned;
|
||||||
|
|
||||||
|
union ieee_phy_param_set phy;
|
||||||
|
union ieee_ss_param_set ss;
|
||||||
|
|
||||||
|
u8 wpa_ie[MAX_WPA_IE_LEN];
|
||||||
|
size_t wpa_ie_len;
|
||||||
|
u8 rsn_ie[MAX_WPA_IE_LEN];
|
||||||
|
size_t rsn_ie_len;
|
||||||
|
|
||||||
|
u8 mesh;
|
||||||
|
|
||||||
|
struct list_head list;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Association request
|
||||||
|
*
|
||||||
|
* Encapsulates all the options that describe a specific assocation request
|
||||||
|
* or configuration of the wireless card's radio, mode, and security settings.
|
||||||
|
*/
|
||||||
|
struct assoc_request {
|
||||||
|
#define ASSOC_FLAG_SSID 1
|
||||||
|
#define ASSOC_FLAG_CHANNEL 2
|
||||||
|
#define ASSOC_FLAG_BAND 3
|
||||||
|
#define ASSOC_FLAG_MODE 4
|
||||||
|
#define ASSOC_FLAG_BSSID 5
|
||||||
|
#define ASSOC_FLAG_WEP_KEYS 6
|
||||||
|
#define ASSOC_FLAG_WEP_TX_KEYIDX 7
|
||||||
|
#define ASSOC_FLAG_WPA_MCAST_KEY 8
|
||||||
|
#define ASSOC_FLAG_WPA_UCAST_KEY 9
|
||||||
|
#define ASSOC_FLAG_SECINFO 10
|
||||||
|
#define ASSOC_FLAG_WPA_IE 11
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
|
||||||
|
u8 ssid_len;
|
||||||
|
u8 channel;
|
||||||
|
u8 band;
|
||||||
|
u8 mode;
|
||||||
|
u8 bssid[ETH_ALEN] __attribute__ ((aligned (2)));
|
||||||
|
|
||||||
|
/** WEP keys */
|
||||||
|
struct enc_key wep_keys[4];
|
||||||
|
u16 wep_tx_keyidx;
|
||||||
|
|
||||||
|
/** WPA keys */
|
||||||
|
struct enc_key wpa_mcast_key;
|
||||||
|
struct enc_key wpa_unicast_key;
|
||||||
|
|
||||||
|
struct lbs_802_11_security secinfo;
|
||||||
|
|
||||||
|
/** WPA Information Elements*/
|
||||||
|
u8 wpa_ie[MAX_WPA_IE_LEN];
|
||||||
|
u8 wpa_ie_len;
|
||||||
|
|
||||||
|
/* BSS to associate with for infrastructure of Ad-Hoc join */
|
||||||
|
struct bss_descriptor bss;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
extern u8 lbs_bg_rates[MAX_RATES];
|
||||||
|
|
||||||
void lbs_association_worker(struct work_struct *work);
|
void lbs_association_worker(struct work_struct *work);
|
||||||
struct assoc_request *lbs_get_association_request(struct lbs_private *priv);
|
struct assoc_request *lbs_get_association_request(struct lbs_private *priv);
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "dev.h"
|
#include "dev.h"
|
||||||
#include "assoc.h"
|
#include "assoc.h"
|
||||||
#include "wext.h"
|
#include "wext.h"
|
||||||
|
#include "scan.h"
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
|
|
||||||
static struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv);
|
static struct cmd_ctrl_node *lbs_get_cmd_ctrl_node(struct lbs_private *priv);
|
||||||
|
@ -10,6 +10,9 @@
|
|||||||
|
|
||||||
#include "defs.h"
|
#include "defs.h"
|
||||||
|
|
||||||
|
|
||||||
|
extern const struct ethtool_ops lbs_ethtool_ops;
|
||||||
|
|
||||||
/** Function Prototype Declaration */
|
/** Function Prototype Declaration */
|
||||||
struct lbs_private;
|
struct lbs_private;
|
||||||
struct sk_buff;
|
struct sk_buff;
|
||||||
@ -33,7 +36,6 @@ u8 lbs_data_rate_to_fw_index(u32 rate);
|
|||||||
/** The proc fs interface */
|
/** The proc fs interface */
|
||||||
netdev_tx_t lbs_hard_start_xmit(struct sk_buff *skb,
|
netdev_tx_t lbs_hard_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *dev);
|
struct net_device *dev);
|
||||||
int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band);
|
|
||||||
|
|
||||||
int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *);
|
int lbs_process_rxed_packet(struct lbs_private *priv, struct sk_buff *);
|
||||||
|
|
||||||
@ -49,8 +51,6 @@ void lbs_persist_config_init(struct net_device *net);
|
|||||||
void lbs_persist_config_remove(struct net_device *net);
|
void lbs_persist_config_remove(struct net_device *net);
|
||||||
|
|
||||||
/* main.c */
|
/* main.c */
|
||||||
struct chan_freq_power *lbs_get_region_cfp_table(u8 region,
|
|
||||||
int *cfp_no);
|
|
||||||
struct lbs_private *lbs_add_card(void *card, struct device *dmdev);
|
struct lbs_private *lbs_add_card(void *card, struct device *dmdev);
|
||||||
void lbs_remove_card(struct lbs_private *priv);
|
void lbs_remove_card(struct lbs_private *priv);
|
||||||
int lbs_start_card(struct lbs_private *priv);
|
int lbs_start_card(struct lbs_private *priv);
|
||||||
|
@ -322,7 +322,6 @@ static inline void lbs_deb_hex(unsigned int grp, const char *prompt, u8 *buf, in
|
|||||||
extern const char lbs_driver_version[];
|
extern const char lbs_driver_version[];
|
||||||
extern u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE];
|
extern u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE];
|
||||||
|
|
||||||
extern u8 lbs_bg_rates[MAX_RATES];
|
|
||||||
|
|
||||||
/** ENUM definition*/
|
/** ENUM definition*/
|
||||||
/** SNRNF_TYPE */
|
/** SNRNF_TYPE */
|
||||||
|
@ -6,75 +6,10 @@
|
|||||||
#ifndef _LBS_DEV_H_
|
#ifndef _LBS_DEV_H_
|
||||||
#define _LBS_DEV_H_
|
#define _LBS_DEV_H_
|
||||||
|
|
||||||
#include <linux/netdevice.h>
|
#include "scan.h"
|
||||||
#include <linux/wireless.h>
|
#include "assoc.h"
|
||||||
#include <linux/ethtool.h>
|
|
||||||
#include <linux/debugfs.h>
|
|
||||||
|
|
||||||
#include "defs.h"
|
|
||||||
#include "host.h"
|
|
||||||
|
|
||||||
extern const struct ethtool_ops lbs_ethtool_ops;
|
|
||||||
|
|
||||||
#define MAX_BSSID_PER_CHANNEL 16
|
|
||||||
|
|
||||||
#define NR_TX_QUEUE 3
|
|
||||||
|
|
||||||
/* For the extended Scan */
|
|
||||||
#define MAX_EXTENDED_SCAN_BSSID_LIST MAX_BSSID_PER_CHANNEL * \
|
|
||||||
MRVDRV_MAX_CHANNEL_SIZE + 1
|
|
||||||
|
|
||||||
#define MAX_REGION_CHANNEL_NUM 2
|
|
||||||
|
|
||||||
/** Chan-freq-TxPower mapping table*/
|
|
||||||
struct chan_freq_power {
|
|
||||||
/** channel Number */
|
|
||||||
u16 channel;
|
|
||||||
/** frequency of this channel */
|
|
||||||
u32 freq;
|
|
||||||
/** Max allowed Tx power level */
|
|
||||||
u16 maxtxpower;
|
|
||||||
/** TRUE:channel unsupported; FLASE:supported*/
|
|
||||||
u8 unsupported;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** region-band mapping table*/
|
|
||||||
struct region_channel {
|
|
||||||
/** TRUE if this entry is valid */
|
|
||||||
u8 valid;
|
|
||||||
/** region code for US, Japan ... */
|
|
||||||
u8 region;
|
|
||||||
/** band B/G/A, used for BAND_CONFIG cmd */
|
|
||||||
u8 band;
|
|
||||||
/** Actual No. of elements in the array below */
|
|
||||||
u8 nrcfp;
|
|
||||||
/** chan-freq-txpower mapping table*/
|
|
||||||
struct chan_freq_power *CFP;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct lbs_802_11_security {
|
|
||||||
u8 WPAenabled;
|
|
||||||
u8 WPA2enabled;
|
|
||||||
u8 wep_enabled;
|
|
||||||
u8 auth_mode;
|
|
||||||
u32 key_mgmt;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Current Basic Service Set State Structure */
|
|
||||||
struct current_bss_params {
|
|
||||||
/** bssid */
|
|
||||||
u8 bssid[ETH_ALEN];
|
|
||||||
/** ssid */
|
|
||||||
u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
|
|
||||||
u8 ssid_len;
|
|
||||||
|
|
||||||
/** band */
|
|
||||||
u8 band;
|
|
||||||
/** channel */
|
|
||||||
u8 channel;
|
|
||||||
/** zero-terminated array of supported data rates */
|
|
||||||
u8 rates[MAX_RATES + 1];
|
|
||||||
};
|
|
||||||
|
|
||||||
/** sleep_params */
|
/** sleep_params */
|
||||||
struct sleep_params {
|
struct sleep_params {
|
||||||
@ -295,12 +230,6 @@ struct lbs_private {
|
|||||||
struct enc_key wpa_mcast_key;
|
struct enc_key wpa_mcast_key;
|
||||||
struct enc_key wpa_unicast_key;
|
struct enc_key wpa_unicast_key;
|
||||||
|
|
||||||
/*
|
|
||||||
* In theory, the IE is limited to the IE length, 255,
|
|
||||||
* but in practice 64 bytes are enough.
|
|
||||||
*/
|
|
||||||
#define MAX_WPA_IE_LEN 64
|
|
||||||
|
|
||||||
/** WPA Information Elements*/
|
/** WPA Information Elements*/
|
||||||
u8 wpa_ie[MAX_WPA_IE_LEN];
|
u8 wpa_ie[MAX_WPA_IE_LEN];
|
||||||
u8 wpa_ie_len;
|
u8 wpa_ie_len;
|
||||||
@ -334,84 +263,4 @@ struct lbs_private {
|
|||||||
|
|
||||||
extern struct cmd_confirm_sleep confirm_sleep;
|
extern struct cmd_confirm_sleep confirm_sleep;
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief Structure used to store information for each beacon/probe response
|
|
||||||
*/
|
|
||||||
struct bss_descriptor {
|
|
||||||
u8 bssid[ETH_ALEN];
|
|
||||||
|
|
||||||
u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
|
|
||||||
u8 ssid_len;
|
|
||||||
|
|
||||||
u16 capability;
|
|
||||||
u32 rssi;
|
|
||||||
u32 channel;
|
|
||||||
u16 beaconperiod;
|
|
||||||
__le16 atimwindow;
|
|
||||||
|
|
||||||
/* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
|
|
||||||
u8 mode;
|
|
||||||
|
|
||||||
/* zero-terminated array of supported data rates */
|
|
||||||
u8 rates[MAX_RATES + 1];
|
|
||||||
|
|
||||||
unsigned long last_scanned;
|
|
||||||
|
|
||||||
union ieee_phy_param_set phy;
|
|
||||||
union ieee_ss_param_set ss;
|
|
||||||
|
|
||||||
u8 wpa_ie[MAX_WPA_IE_LEN];
|
|
||||||
size_t wpa_ie_len;
|
|
||||||
u8 rsn_ie[MAX_WPA_IE_LEN];
|
|
||||||
size_t rsn_ie_len;
|
|
||||||
|
|
||||||
u8 mesh;
|
|
||||||
|
|
||||||
struct list_head list;
|
|
||||||
};
|
|
||||||
|
|
||||||
/** Association request
|
|
||||||
*
|
|
||||||
* Encapsulates all the options that describe a specific assocation request
|
|
||||||
* or configuration of the wireless card's radio, mode, and security settings.
|
|
||||||
*/
|
|
||||||
struct assoc_request {
|
|
||||||
#define ASSOC_FLAG_SSID 1
|
|
||||||
#define ASSOC_FLAG_CHANNEL 2
|
|
||||||
#define ASSOC_FLAG_BAND 3
|
|
||||||
#define ASSOC_FLAG_MODE 4
|
|
||||||
#define ASSOC_FLAG_BSSID 5
|
|
||||||
#define ASSOC_FLAG_WEP_KEYS 6
|
|
||||||
#define ASSOC_FLAG_WEP_TX_KEYIDX 7
|
|
||||||
#define ASSOC_FLAG_WPA_MCAST_KEY 8
|
|
||||||
#define ASSOC_FLAG_WPA_UCAST_KEY 9
|
|
||||||
#define ASSOC_FLAG_SECINFO 10
|
|
||||||
#define ASSOC_FLAG_WPA_IE 11
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
u8 ssid[IEEE80211_MAX_SSID_LEN + 1];
|
|
||||||
u8 ssid_len;
|
|
||||||
u8 channel;
|
|
||||||
u8 band;
|
|
||||||
u8 mode;
|
|
||||||
u8 bssid[ETH_ALEN] __attribute__ ((aligned (2)));
|
|
||||||
|
|
||||||
/** WEP keys */
|
|
||||||
struct enc_key wep_keys[4];
|
|
||||||
u16 wep_tx_keyidx;
|
|
||||||
|
|
||||||
/** WPA keys */
|
|
||||||
struct enc_key wpa_mcast_key;
|
|
||||||
struct enc_key wpa_unicast_key;
|
|
||||||
|
|
||||||
struct lbs_802_11_security secinfo;
|
|
||||||
|
|
||||||
/** WPA Information Elements*/
|
|
||||||
u8 wpa_ie[MAX_WPA_IE_LEN];
|
|
||||||
u8 wpa_ie_len;
|
|
||||||
|
|
||||||
/* BSS to associate with for infrastructure of Ad-Hoc join */
|
|
||||||
struct bss_descriptor bss;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -45,132 +45,12 @@ module_param_named(libertas_debug, lbs_debug, int, 0644);
|
|||||||
struct cmd_confirm_sleep confirm_sleep;
|
struct cmd_confirm_sleep confirm_sleep;
|
||||||
|
|
||||||
|
|
||||||
#define LBS_TX_PWR_DEFAULT 20 /*100mW */
|
|
||||||
#define LBS_TX_PWR_US_DEFAULT 20 /*100mW */
|
|
||||||
#define LBS_TX_PWR_JP_DEFAULT 16 /*50mW */
|
|
||||||
#define LBS_TX_PWR_FR_DEFAULT 20 /*100mW */
|
|
||||||
#define LBS_TX_PWR_EMEA_DEFAULT 20 /*100mW */
|
|
||||||
|
|
||||||
/* Format { channel, frequency (MHz), maxtxpower } */
|
|
||||||
/* band: 'B/G', region: USA FCC/Canada IC */
|
|
||||||
static struct chan_freq_power channel_freq_power_US_BG[] = {
|
|
||||||
{1, 2412, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{2, 2417, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{3, 2422, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{4, 2427, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{5, 2432, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{6, 2437, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{7, 2442, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{8, 2447, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{9, 2452, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{10, 2457, LBS_TX_PWR_US_DEFAULT},
|
|
||||||
{11, 2462, LBS_TX_PWR_US_DEFAULT}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* band: 'B/G', region: Europe ETSI */
|
|
||||||
static struct chan_freq_power channel_freq_power_EU_BG[] = {
|
|
||||||
{1, 2412, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{2, 2417, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{3, 2422, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{4, 2427, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{5, 2432, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{6, 2437, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{7, 2442, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{8, 2447, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{9, 2452, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{10, 2457, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{11, 2462, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{12, 2467, LBS_TX_PWR_EMEA_DEFAULT},
|
|
||||||
{13, 2472, LBS_TX_PWR_EMEA_DEFAULT}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* band: 'B/G', region: Spain */
|
|
||||||
static struct chan_freq_power channel_freq_power_SPN_BG[] = {
|
|
||||||
{10, 2457, LBS_TX_PWR_DEFAULT},
|
|
||||||
{11, 2462, LBS_TX_PWR_DEFAULT}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* band: 'B/G', region: France */
|
|
||||||
static struct chan_freq_power channel_freq_power_FR_BG[] = {
|
|
||||||
{10, 2457, LBS_TX_PWR_FR_DEFAULT},
|
|
||||||
{11, 2462, LBS_TX_PWR_FR_DEFAULT},
|
|
||||||
{12, 2467, LBS_TX_PWR_FR_DEFAULT},
|
|
||||||
{13, 2472, LBS_TX_PWR_FR_DEFAULT}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* band: 'B/G', region: Japan */
|
|
||||||
static struct chan_freq_power channel_freq_power_JPN_BG[] = {
|
|
||||||
{1, 2412, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{2, 2417, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{3, 2422, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{4, 2427, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{5, 2432, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{6, 2437, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{7, 2442, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{8, 2447, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{9, 2452, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{10, 2457, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{11, 2462, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{12, 2467, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{13, 2472, LBS_TX_PWR_JP_DEFAULT},
|
|
||||||
{14, 2484, LBS_TX_PWR_JP_DEFAULT}
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the structure for channel, frequency and power
|
|
||||||
*/
|
|
||||||
struct region_cfp_table {
|
|
||||||
u8 region;
|
|
||||||
struct chan_freq_power *cfp_BG;
|
|
||||||
int cfp_no_BG;
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
|
||||||
* the structure for the mapping between region and CFP
|
|
||||||
*/
|
|
||||||
static struct region_cfp_table region_cfp_table[] = {
|
|
||||||
{0x10, /*US FCC */
|
|
||||||
channel_freq_power_US_BG,
|
|
||||||
ARRAY_SIZE(channel_freq_power_US_BG),
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{0x20, /*CANADA IC */
|
|
||||||
channel_freq_power_US_BG,
|
|
||||||
ARRAY_SIZE(channel_freq_power_US_BG),
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{0x30, /*EU*/ channel_freq_power_EU_BG,
|
|
||||||
ARRAY_SIZE(channel_freq_power_EU_BG),
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{0x31, /*SPAIN*/ channel_freq_power_SPN_BG,
|
|
||||||
ARRAY_SIZE(channel_freq_power_SPN_BG),
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{0x32, /*FRANCE*/ channel_freq_power_FR_BG,
|
|
||||||
ARRAY_SIZE(channel_freq_power_FR_BG),
|
|
||||||
}
|
|
||||||
,
|
|
||||||
{0x40, /*JAPAN*/ channel_freq_power_JPN_BG,
|
|
||||||
ARRAY_SIZE(channel_freq_power_JPN_BG),
|
|
||||||
}
|
|
||||||
,
|
|
||||||
/*Add new region here */
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the table to keep region code
|
* the table to keep region code
|
||||||
*/
|
*/
|
||||||
u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
|
u16 lbs_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
|
||||||
{ 0x10, 0x20, 0x30, 0x31, 0x32, 0x40 };
|
{ 0x10, 0x20, 0x30, 0x31, 0x32, 0x40 };
|
||||||
|
|
||||||
/**
|
|
||||||
* 802.11b/g supported bitrates (in 500Kb/s units)
|
|
||||||
*/
|
|
||||||
u8 lbs_bg_rates[MAX_RATES] =
|
|
||||||
{ 0x02, 0x04, 0x0b, 0x16, 0x0c, 0x12, 0x18, 0x24, 0x30, 0x48, 0x60, 0x6c,
|
|
||||||
0x00, 0x00 };
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* FW rate table. FW refers to rates by their index in this table, not by the
|
* FW rate table. FW refers to rates by their index in this table, not by the
|
||||||
* rate value itself. Values of 0x00 are
|
* rate value itself. Values of 0x00 are
|
||||||
@ -1617,68 +1497,6 @@ static void lbs_remove_mesh(struct lbs_private *priv)
|
|||||||
lbs_deb_leave(LBS_DEB_MESH);
|
lbs_deb_leave(LBS_DEB_MESH);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @brief This function finds the CFP in
|
|
||||||
* region_cfp_table based on region and band parameter.
|
|
||||||
*
|
|
||||||
* @param region The region code
|
|
||||||
* @param band The band
|
|
||||||
* @param cfp_no A pointer to CFP number
|
|
||||||
* @return A pointer to CFP
|
|
||||||
*/
|
|
||||||
struct chan_freq_power *lbs_get_region_cfp_table(u8 region, int *cfp_no)
|
|
||||||
{
|
|
||||||
int i, end;
|
|
||||||
|
|
||||||
lbs_deb_enter(LBS_DEB_MAIN);
|
|
||||||
|
|
||||||
end = ARRAY_SIZE(region_cfp_table);
|
|
||||||
|
|
||||||
for (i = 0; i < end ; i++) {
|
|
||||||
lbs_deb_main("region_cfp_table[i].region=%d\n",
|
|
||||||
region_cfp_table[i].region);
|
|
||||||
if (region_cfp_table[i].region == region) {
|
|
||||||
*cfp_no = region_cfp_table[i].cfp_no_BG;
|
|
||||||
lbs_deb_leave(LBS_DEB_MAIN);
|
|
||||||
return region_cfp_table[i].cfp_BG;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
lbs_deb_leave_args(LBS_DEB_MAIN, "ret NULL");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
int i = 0;
|
|
||||||
|
|
||||||
struct chan_freq_power *cfp;
|
|
||||||
int cfp_no;
|
|
||||||
|
|
||||||
lbs_deb_enter(LBS_DEB_MAIN);
|
|
||||||
|
|
||||||
memset(priv->region_channel, 0, sizeof(priv->region_channel));
|
|
||||||
|
|
||||||
cfp = lbs_get_region_cfp_table(region, &cfp_no);
|
|
||||||
if (cfp != NULL) {
|
|
||||||
priv->region_channel[i].nrcfp = cfp_no;
|
|
||||||
priv->region_channel[i].CFP = cfp;
|
|
||||||
} else {
|
|
||||||
lbs_deb_main("wrong region code %#x in band B/G\n",
|
|
||||||
region);
|
|
||||||
ret = -1;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
priv->region_channel[i].valid = 1;
|
|
||||||
priv->region_channel[i].region = region;
|
|
||||||
priv->region_channel[i].band = band;
|
|
||||||
i++;
|
|
||||||
out:
|
|
||||||
lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lbs_queue_event(struct lbs_private *priv, u32 event)
|
void lbs_queue_event(struct lbs_private *priv, u32 event)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
#include "decl.h"
|
#include "decl.h"
|
||||||
#include "dev.h"
|
#include "dev.h"
|
||||||
#include "scan.h"
|
#include "scan.h"
|
||||||
|
#include "assoc.h"
|
||||||
#include "cmd.h"
|
#include "cmd.h"
|
||||||
|
|
||||||
//! Approximate amount of data needed to pass a scan result back to iwlist
|
//! Approximate amount of data needed to pass a scan result back to iwlist
|
||||||
@ -121,6 +122,189 @@ static inline int is_same_network(struct bss_descriptor *src,
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*********************************************************************/
|
||||||
|
/* */
|
||||||
|
/* Region channel support */
|
||||||
|
/* */
|
||||||
|
/*********************************************************************/
|
||||||
|
|
||||||
|
#define LBS_TX_PWR_DEFAULT 20 /*100mW */
|
||||||
|
#define LBS_TX_PWR_US_DEFAULT 20 /*100mW */
|
||||||
|
#define LBS_TX_PWR_JP_DEFAULT 16 /*50mW */
|
||||||
|
#define LBS_TX_PWR_FR_DEFAULT 20 /*100mW */
|
||||||
|
#define LBS_TX_PWR_EMEA_DEFAULT 20 /*100mW */
|
||||||
|
|
||||||
|
/* Format { channel, frequency (MHz), maxtxpower } */
|
||||||
|
/* band: 'B/G', region: USA FCC/Canada IC */
|
||||||
|
static struct chan_freq_power channel_freq_power_US_BG[] = {
|
||||||
|
{1, 2412, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{2, 2417, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{3, 2422, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{4, 2427, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{5, 2432, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{6, 2437, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{7, 2442, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{8, 2447, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{9, 2452, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{10, 2457, LBS_TX_PWR_US_DEFAULT},
|
||||||
|
{11, 2462, LBS_TX_PWR_US_DEFAULT}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* band: 'B/G', region: Europe ETSI */
|
||||||
|
static struct chan_freq_power channel_freq_power_EU_BG[] = {
|
||||||
|
{1, 2412, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{2, 2417, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{3, 2422, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{4, 2427, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{5, 2432, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{6, 2437, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{7, 2442, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{8, 2447, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{9, 2452, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{10, 2457, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{11, 2462, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{12, 2467, LBS_TX_PWR_EMEA_DEFAULT},
|
||||||
|
{13, 2472, LBS_TX_PWR_EMEA_DEFAULT}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* band: 'B/G', region: Spain */
|
||||||
|
static struct chan_freq_power channel_freq_power_SPN_BG[] = {
|
||||||
|
{10, 2457, LBS_TX_PWR_DEFAULT},
|
||||||
|
{11, 2462, LBS_TX_PWR_DEFAULT}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* band: 'B/G', region: France */
|
||||||
|
static struct chan_freq_power channel_freq_power_FR_BG[] = {
|
||||||
|
{10, 2457, LBS_TX_PWR_FR_DEFAULT},
|
||||||
|
{11, 2462, LBS_TX_PWR_FR_DEFAULT},
|
||||||
|
{12, 2467, LBS_TX_PWR_FR_DEFAULT},
|
||||||
|
{13, 2472, LBS_TX_PWR_FR_DEFAULT}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* band: 'B/G', region: Japan */
|
||||||
|
static struct chan_freq_power channel_freq_power_JPN_BG[] = {
|
||||||
|
{1, 2412, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{2, 2417, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{3, 2422, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{4, 2427, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{5, 2432, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{6, 2437, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{7, 2442, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{8, 2447, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{9, 2452, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{10, 2457, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{11, 2462, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{12, 2467, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{13, 2472, LBS_TX_PWR_JP_DEFAULT},
|
||||||
|
{14, 2484, LBS_TX_PWR_JP_DEFAULT}
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the structure for channel, frequency and power
|
||||||
|
*/
|
||||||
|
struct region_cfp_table {
|
||||||
|
u8 region;
|
||||||
|
struct chan_freq_power *cfp_BG;
|
||||||
|
int cfp_no_BG;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the structure for the mapping between region and CFP
|
||||||
|
*/
|
||||||
|
static struct region_cfp_table region_cfp_table[] = {
|
||||||
|
{0x10, /*US FCC */
|
||||||
|
channel_freq_power_US_BG,
|
||||||
|
ARRAY_SIZE(channel_freq_power_US_BG),
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{0x20, /*CANADA IC */
|
||||||
|
channel_freq_power_US_BG,
|
||||||
|
ARRAY_SIZE(channel_freq_power_US_BG),
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{0x30, /*EU*/ channel_freq_power_EU_BG,
|
||||||
|
ARRAY_SIZE(channel_freq_power_EU_BG),
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{0x31, /*SPAIN*/ channel_freq_power_SPN_BG,
|
||||||
|
ARRAY_SIZE(channel_freq_power_SPN_BG),
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{0x32, /*FRANCE*/ channel_freq_power_FR_BG,
|
||||||
|
ARRAY_SIZE(channel_freq_power_FR_BG),
|
||||||
|
}
|
||||||
|
,
|
||||||
|
{0x40, /*JAPAN*/ channel_freq_power_JPN_BG,
|
||||||
|
ARRAY_SIZE(channel_freq_power_JPN_BG),
|
||||||
|
}
|
||||||
|
,
|
||||||
|
/*Add new region here */
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief This function finds the CFP in
|
||||||
|
* region_cfp_table based on region and band parameter.
|
||||||
|
*
|
||||||
|
* @param region The region code
|
||||||
|
* @param band The band
|
||||||
|
* @param cfp_no A pointer to CFP number
|
||||||
|
* @return A pointer to CFP
|
||||||
|
*/
|
||||||
|
static struct chan_freq_power *lbs_get_region_cfp_table(u8 region, int *cfp_no)
|
||||||
|
{
|
||||||
|
int i, end;
|
||||||
|
|
||||||
|
lbs_deb_enter(LBS_DEB_MAIN);
|
||||||
|
|
||||||
|
end = ARRAY_SIZE(region_cfp_table);
|
||||||
|
|
||||||
|
for (i = 0; i < end ; i++) {
|
||||||
|
lbs_deb_main("region_cfp_table[i].region=%d\n",
|
||||||
|
region_cfp_table[i].region);
|
||||||
|
if (region_cfp_table[i].region == region) {
|
||||||
|
*cfp_no = region_cfp_table[i].cfp_no_BG;
|
||||||
|
lbs_deb_leave(LBS_DEB_MAIN);
|
||||||
|
return region_cfp_table[i].cfp_BG;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
lbs_deb_leave_args(LBS_DEB_MAIN, "ret NULL");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
struct chan_freq_power *cfp;
|
||||||
|
int cfp_no;
|
||||||
|
|
||||||
|
lbs_deb_enter(LBS_DEB_MAIN);
|
||||||
|
|
||||||
|
memset(priv->region_channel, 0, sizeof(priv->region_channel));
|
||||||
|
|
||||||
|
cfp = lbs_get_region_cfp_table(region, &cfp_no);
|
||||||
|
if (cfp != NULL) {
|
||||||
|
priv->region_channel[i].nrcfp = cfp_no;
|
||||||
|
priv->region_channel[i].CFP = cfp;
|
||||||
|
} else {
|
||||||
|
lbs_deb_main("wrong region code %#x in band B/G\n",
|
||||||
|
region);
|
||||||
|
ret = -1;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
priv->region_channel[i].valid = 1;
|
||||||
|
priv->region_channel[i].region = region;
|
||||||
|
priv->region_channel[i].band = band;
|
||||||
|
i++;
|
||||||
|
out:
|
||||||
|
lbs_deb_leave_args(LBS_DEB_MAIN, "ret %d", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************/
|
/*********************************************************************/
|
||||||
/* */
|
/* */
|
||||||
|
@ -9,8 +9,36 @@
|
|||||||
|
|
||||||
#include <net/iw_handler.h>
|
#include <net/iw_handler.h>
|
||||||
|
|
||||||
|
struct lbs_private;
|
||||||
|
|
||||||
#define MAX_NETWORK_COUNT 128
|
#define MAX_NETWORK_COUNT 128
|
||||||
|
|
||||||
|
/** Chan-freq-TxPower mapping table*/
|
||||||
|
struct chan_freq_power {
|
||||||
|
/** channel Number */
|
||||||
|
u16 channel;
|
||||||
|
/** frequency of this channel */
|
||||||
|
u32 freq;
|
||||||
|
/** Max allowed Tx power level */
|
||||||
|
u16 maxtxpower;
|
||||||
|
/** TRUE:channel unsupported; FLASE:supported*/
|
||||||
|
u8 unsupported;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** region-band mapping table*/
|
||||||
|
struct region_channel {
|
||||||
|
/** TRUE if this entry is valid */
|
||||||
|
u8 valid;
|
||||||
|
/** region code for US, Japan ... */
|
||||||
|
u8 region;
|
||||||
|
/** band B/G/A, used for BAND_CONFIG cmd */
|
||||||
|
u8 band;
|
||||||
|
/** Actual No. of elements in the array below */
|
||||||
|
u8 nrcfp;
|
||||||
|
/** chan-freq-txpower mapping table*/
|
||||||
|
struct chan_freq_power *CFP;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Maximum number of channels that can be sent in a setuserscan ioctl
|
* @brief Maximum number of channels that can be sent in a setuserscan ioctl
|
||||||
*/
|
*/
|
||||||
@ -18,6 +46,8 @@
|
|||||||
|
|
||||||
int lbs_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len);
|
int lbs_ssid_cmp(u8 *ssid1, u8 ssid1_len, u8 *ssid2, u8 ssid2_len);
|
||||||
|
|
||||||
|
int lbs_set_regiontable(struct lbs_private *priv, u8 region, u8 band);
|
||||||
|
|
||||||
int lbs_send_specific_ssid_scan(struct lbs_private *priv, u8 *ssid,
|
int lbs_send_specific_ssid_scan(struct lbs_private *priv, u8 *ssid,
|
||||||
u8 ssid_len);
|
u8 ssid_len);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user