You've already forked linux-rockchip
mirror of
https://github.com/armbian/linux-rockchip.git
synced 2026-01-06 11:08:10 -08:00
[PATCH] Marvell Libertas 8388 802.11b/g USB driver
Add the Marvell Libertas 8388 802.11 USB driver. Signed-off-by: Marcelo Tosatti <marcelo@kvack.org> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
Jeff Garzik
parent
35c3404efa
commit
876c9d3aeb
@@ -265,6 +265,19 @@ config IPW2200_DEBUG
|
||||
|
||||
If you are not sure, say N here.
|
||||
|
||||
config LIBERTAS_USB
|
||||
tristate "Marvell Libertas 8388 802.11a/b/g cards"
|
||||
depends on NET_RADIO && USB
|
||||
select FW_LOADER
|
||||
---help---
|
||||
A driver for Marvell Libertas 8388 USB devices.
|
||||
|
||||
config LIBERTAS_USB_DEBUG
|
||||
bool "Enable full debugging output in the Libertas USB module."
|
||||
depends on LIBERTAS_USB
|
||||
---help---
|
||||
Debugging support.
|
||||
|
||||
config AIRO
|
||||
tristate "Cisco/Aironet 34X/35X/4500/4800 ISA and PCI cards"
|
||||
depends on ISA_DMA_API && WLAN_80211 && (PCI || BROKEN)
|
||||
|
||||
@@ -43,3 +43,4 @@ obj-$(CONFIG_PCMCIA_RAYCS) += ray_cs.o
|
||||
obj-$(CONFIG_PCMCIA_WL3501) += wl3501_cs.o
|
||||
|
||||
obj-$(CONFIG_USB_ZD1201) += zd1201.o
|
||||
obj-$(CONFIG_LIBERTAS_USB) += libertas/
|
||||
|
||||
754
drivers/net/wireless/libertas/11d.c
Normal file
754
drivers/net/wireless/libertas/11d.c
Normal file
File diff suppressed because it is too large
Load Diff
105
drivers/net/wireless/libertas/11d.h
Normal file
105
drivers/net/wireless/libertas/11d.h
Normal file
@@ -0,0 +1,105 @@
|
||||
/**
|
||||
* This header file contains data structures and
|
||||
* function declarations of 802.11d
|
||||
*/
|
||||
#ifndef _WLAN_11D_
|
||||
#define _WLAN_11D_
|
||||
|
||||
#include "types.h"
|
||||
#include "defs.h"
|
||||
|
||||
#define UNIVERSAL_REGION_CODE 0xff
|
||||
|
||||
/** (Beaconsize(256)-5(IEId,len,contrystr(3))/3(FirstChan,NoOfChan,MaxPwr)
|
||||
*/
|
||||
#define MRVDRV_MAX_SUBBAND_802_11D 83
|
||||
|
||||
#define COUNTRY_CODE_LEN 3
|
||||
#define MAX_NO_OF_CHAN 40
|
||||
|
||||
struct cmd_ds_command;
|
||||
|
||||
/** Data structure for Country IE*/
|
||||
struct ieeetypes_subbandset {
|
||||
u8 firstchan;
|
||||
u8 nrchan;
|
||||
u8 maxtxpwr;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct ieeetypes_countryinfoset {
|
||||
u8 element_id;
|
||||
u8 len;
|
||||
u8 countrycode[COUNTRY_CODE_LEN];
|
||||
struct ieeetypes_subbandset subband[1];
|
||||
};
|
||||
|
||||
struct ieeetypes_countryinfofullset {
|
||||
u8 element_id;
|
||||
u8 len;
|
||||
u8 countrycode[COUNTRY_CODE_LEN];
|
||||
struct ieeetypes_subbandset subband[MRVDRV_MAX_SUBBAND_802_11D];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct mrvlietypes_domainparamset {
|
||||
struct mrvlietypesheader header;
|
||||
u8 countrycode[COUNTRY_CODE_LEN];
|
||||
struct ieeetypes_subbandset subband[1];
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct cmd_ds_802_11d_domain_info {
|
||||
u16 action;
|
||||
struct mrvlietypes_domainparamset domain;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
/** domain regulatory information */
|
||||
struct wlan_802_11d_domain_reg {
|
||||
/** country Code*/
|
||||
u8 countrycode[COUNTRY_CODE_LEN];
|
||||
/** No. of subband*/
|
||||
u8 nr_subband;
|
||||
struct ieeetypes_subbandset subband[MRVDRV_MAX_SUBBAND_802_11D];
|
||||
};
|
||||
|
||||
struct chan_power_11d {
|
||||
u8 chan;
|
||||
u8 pwr;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct parsed_region_chan_11d {
|
||||
u8 band;
|
||||
u8 region;
|
||||
s8 countrycode[COUNTRY_CODE_LEN];
|
||||
struct chan_power_11d chanpwr[MAX_NO_OF_CHAN];
|
||||
u8 nr_chan;
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct region_code_mapping {
|
||||
u8 region[COUNTRY_CODE_LEN];
|
||||
u8 code;
|
||||
};
|
||||
|
||||
u8 libertas_get_scan_type_11d(u8 chan,
|
||||
struct parsed_region_chan_11d *parsed_region_chan);
|
||||
|
||||
u32 libertas_chan_2_freq(u8 chan, u8 band);
|
||||
|
||||
enum state_11d libertas_get_state_11d(wlan_private * priv);
|
||||
|
||||
void libertas_init_11d(wlan_private * priv);
|
||||
|
||||
int libertas_set_universaltable(wlan_private * priv, u8 band);
|
||||
|
||||
int libertas_cmd_802_11d_domain_info(wlan_private * priv,
|
||||
struct cmd_ds_command *cmd, u16 cmdno,
|
||||
u16 cmdOption);
|
||||
|
||||
int libertas_cmd_enable_11d(wlan_private * priv, struct iwreq *wrq);
|
||||
|
||||
int libertas_ret_802_11d_domain_info(wlan_private * priv,
|
||||
struct cmd_ds_command *resp);
|
||||
|
||||
int libertas_parse_dnld_countryinfo_11d(wlan_private * priv);
|
||||
|
||||
int libertas_create_dnld_countryinfo_11d(wlan_private * priv);
|
||||
|
||||
#endif /* _WLAN_11D_ */
|
||||
16
drivers/net/wireless/libertas/LICENSE
Normal file
16
drivers/net/wireless/libertas/LICENSE
Normal file
@@ -0,0 +1,16 @@
|
||||
Copyright (c) 2003-2006, Marvell International Ltd.
|
||||
All Rights Reserved
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of version 2 of the GNU General Public License as
|
||||
published by the Free Software Foundation.
|
||||
|
||||
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.
|
||||
|
||||
21
drivers/net/wireless/libertas/Makefile
Normal file
21
drivers/net/wireless/libertas/Makefile
Normal file
@@ -0,0 +1,21 @@
|
||||
# EXTRA_CFLAGS += -Wpacked
|
||||
|
||||
usb8xxx-objs := main.o fw.o wext.o \
|
||||
rx.o tx.o cmd.o \
|
||||
cmdresp.o scan.o \
|
||||
join.o 11d.o \
|
||||
ioctl.o debugfs.o \
|
||||
ethtool.o assoc.o
|
||||
|
||||
ifeq ($(CONFIG_LIBERTAS_USB_DEBUG), y)
|
||||
EXTRA_CFLAGS += -DDEBUG -DPROC_DEBUG
|
||||
endif
|
||||
|
||||
|
||||
# This is needed to support the newer boot2 bootloader (v >= 3104)
|
||||
EXTRA_CFLAGS += -DSUPPORT_BOOT_COMMAND
|
||||
usb8xxx-objs += if_bootcmd.o
|
||||
usb8xxx-objs += if_usb.o
|
||||
|
||||
obj-$(CONFIG_LIBERTAS_USB) += usb8xxx.o
|
||||
|
||||
1044
drivers/net/wireless/libertas/README
Normal file
1044
drivers/net/wireless/libertas/README
Normal file
File diff suppressed because it is too large
Load Diff
588
drivers/net/wireless/libertas/assoc.c
Normal file
588
drivers/net/wireless/libertas/assoc.c
Normal file
File diff suppressed because it is too large
Load Diff
30
drivers/net/wireless/libertas/assoc.h
Normal file
30
drivers/net/wireless/libertas/assoc.h
Normal file
@@ -0,0 +1,30 @@
|
||||
/* Copyright (C) 2006, Red Hat, Inc. */
|
||||
|
||||
#ifndef _WLAN_ASSOC_H_
|
||||
#define _WLAN_ASSOC_H_
|
||||
|
||||
#include "dev.h"
|
||||
|
||||
void wlan_association_worker(struct work_struct *work);
|
||||
|
||||
struct assoc_request * wlan_get_association_request(wlan_adapter *adapter);
|
||||
|
||||
#define ASSOC_DELAY (HZ / 2)
|
||||
static inline void wlan_postpone_association_work(wlan_private *priv)
|
||||
{
|
||||
if (priv->adapter->surpriseremoved)
|
||||
return;
|
||||
cancel_delayed_work(&priv->assoc_work);
|
||||
queue_delayed_work(priv->assoc_thread, &priv->assoc_work, ASSOC_DELAY);
|
||||
}
|
||||
|
||||
static inline void wlan_cancel_association_work(wlan_private *priv)
|
||||
{
|
||||
cancel_delayed_work(&priv->assoc_work);
|
||||
if (priv->adapter->assoc_req) {
|
||||
kfree(priv->adapter->assoc_req);
|
||||
priv->adapter->assoc_req = NULL;
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* _WLAN_ASSOC_H */
|
||||
1958
drivers/net/wireless/libertas/cmd.c
Normal file
1958
drivers/net/wireless/libertas/cmd.c
Normal file
File diff suppressed because it is too large
Load Diff
1031
drivers/net/wireless/libertas/cmdresp.c
Normal file
1031
drivers/net/wireless/libertas/cmdresp.c
Normal file
File diff suppressed because it is too large
Load Diff
1968
drivers/net/wireless/libertas/debugfs.c
Normal file
1968
drivers/net/wireless/libertas/debugfs.c
Normal file
File diff suppressed because it is too large
Load Diff
6
drivers/net/wireless/libertas/debugfs.h
Normal file
6
drivers/net/wireless/libertas/debugfs.h
Normal file
@@ -0,0 +1,6 @@
|
||||
void libertas_debugfs_init(void);
|
||||
void libertas_debugfs_remove(void);
|
||||
|
||||
void libertas_debugfs_init_one(wlan_private *priv, struct net_device *dev);
|
||||
void libertas_debugfs_remove_one(wlan_private *priv);
|
||||
|
||||
83
drivers/net/wireless/libertas/decl.h
Normal file
83
drivers/net/wireless/libertas/decl.h
Normal file
@@ -0,0 +1,83 @@
|
||||
/**
|
||||
* This file contains declaration referring to
|
||||
* functions defined in other source files
|
||||
*/
|
||||
|
||||
#ifndef _WLAN_DECL_H_
|
||||
#define _WLAN_DECL_H_
|
||||
|
||||
#include "defs.h"
|
||||
|
||||
/** Function Prototype Declaration */
|
||||
struct wlan_private;
|
||||
struct sk_buff;
|
||||
struct net_device;
|
||||
|
||||
extern char *libertas_fw_name;
|
||||
|
||||
void libertas_free_adapter(wlan_private * priv);
|
||||
int libertas_set_mac_packet_filter(wlan_private * priv);
|
||||
|
||||
int libertas_send_null_packet(wlan_private * priv, u8 pwr_mgmt);
|
||||
void libertas_send_tx_feedback(wlan_private * priv);
|
||||
u8 libertas_check_last_packet_indication(wlan_private * priv);
|
||||
|
||||
int libertas_free_cmd_buffer(wlan_private * priv);
|
||||
struct cmd_ctrl_node;
|
||||
struct cmd_ctrl_node *libertas_get_free_cmd_ctrl_node(wlan_private * priv);
|
||||
|
||||
void libertas_set_cmd_ctrl_node(wlan_private * priv,
|
||||
struct cmd_ctrl_node *ptempnode,
|
||||
u32 cmd_oid, u16 wait_option, void *pdata_buf);
|
||||
|
||||
int libertas_prepare_and_send_command(wlan_private * priv,
|
||||
u16 cmd_no,
|
||||
u16 cmd_action,
|
||||
u16 wait_option, u32 cmd_oid, void *pdata_buf);
|
||||
|
||||
void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, u8 addtail);
|
||||
|
||||
int libertas_allocate_cmd_buffer(wlan_private * priv);
|
||||
int libertas_execute_next_command(wlan_private * priv);
|
||||
int libertas_process_event(wlan_private * priv);
|
||||
void libertas_interrupt(struct net_device *);
|
||||
int libertas_set_radio_control(wlan_private * priv);
|
||||
u32 libertas_index_to_data_rate(u8 index);
|
||||
u8 libertas_data_rate_to_index(u32 rate);
|
||||
void libertas_get_fwversion(wlan_adapter * adapter, char *fwversion, int maxlen);
|
||||
|
||||
int libertas_upload_rx_packet(wlan_private * priv, struct sk_buff *skb);
|
||||
|
||||
/** The proc fs interface */
|
||||
int libertas_process_rx_command(wlan_private * priv);
|
||||
int libertas_process_tx(wlan_private * priv, struct sk_buff *skb);
|
||||
void libertas_cleanup_and_insert_cmd(wlan_private * priv,
|
||||
struct cmd_ctrl_node *ptempcmd);
|
||||
void __libertas_cleanup_and_insert_cmd(wlan_private * priv,
|
||||
struct cmd_ctrl_node *ptempcmd);
|
||||
|
||||
int libertas_set_regiontable(wlan_private * priv, u8 region, u8 band);
|
||||
|
||||
int libertas_process_rxed_packet(wlan_private * priv, struct sk_buff *);
|
||||
|
||||
void libertas_ps_sleep(wlan_private * priv, int wait_option);
|
||||
void libertas_ps_confirm_sleep(wlan_private * priv, u16 psmode);
|
||||
void libertas_ps_wakeup(wlan_private * priv, int wait_option);
|
||||
|
||||
void libertas_tx_runqueue(wlan_private *priv);
|
||||
|
||||
extern struct chan_freq_power *libertas_find_cfp_by_band_and_channel(
|
||||
wlan_adapter * adapter, u8 band, u16 channel);
|
||||
|
||||
extern void libertas_mac_event_disconnected(wlan_private * priv);
|
||||
|
||||
void libertas_send_iwevcustom_event(wlan_private * priv, s8 * str);
|
||||
|
||||
int reset_device(wlan_private *priv);
|
||||
/* main.c */
|
||||
extern struct chan_freq_power *libertas_get_region_cfp_table(u8 region, u8 band,
|
||||
int *cfp_no);
|
||||
wlan_private *wlan_add_card(void *card);
|
||||
int wlan_remove_card(void *card);
|
||||
|
||||
#endif /* _WLAN_DECL_H_ */
|
||||
369
drivers/net/wireless/libertas/defs.h
Normal file
369
drivers/net/wireless/libertas/defs.h
Normal file
@@ -0,0 +1,369 @@
|
||||
/**
|
||||
* This header file contains global constant/enum definitions,
|
||||
* global variable declaration.
|
||||
*/
|
||||
#ifndef _WLAN_DEFS_H_
|
||||
#define _WLAN_DEFS_H_
|
||||
|
||||
#include <linux/spinlock.h>
|
||||
|
||||
extern unsigned int libertas_debug;
|
||||
|
||||
#define DRV_NAME "usb8xxx"
|
||||
|
||||
#define lbs_pr_info(format, args...) \
|
||||
printk(KERN_INFO DRV_NAME": " format, ## args)
|
||||
#define lbs_pr_err(format, args...) \
|
||||
printk(KERN_ERR DRV_NAME": " format, ## args)
|
||||
#define lbs_pr_alert(format, args...) \
|
||||
printk(KERN_ALERT DRV_NAME": " format, ## args)
|
||||
|
||||
#ifdef DEBUG
|
||||
#define lbs_pr_debug(level, format, args...) \
|
||||
do { if (libertas_debug >= level) \
|
||||
printk(KERN_INFO DRV_NAME": " format, ##args); } while (0)
|
||||
#define lbs_dev_dbg(level, device, format, args...) \
|
||||
lbs_pr_debug(level, "%s: " format, \
|
||||
(device)->bus_id , ## args)
|
||||
|
||||
static inline void lbs_dbg_hex(char *prompt, u8 * buf, int len)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
if (!libertas_debug)
|
||||
return;
|
||||
|
||||
printk(KERN_DEBUG "%s: ", prompt);
|
||||
for (i = 1; i <= len; i++) {
|
||||
printk(KERN_DEBUG "%02x ", (u8) * buf);
|
||||
buf++;
|
||||
}
|
||||
printk("\n");
|
||||
}
|
||||
#else
|
||||
#define lbs_pr_debug(level, format, args...) do {} while (0)
|
||||
#define lbs_dev_dbg(level, device, format, args...) do {} while (0)
|
||||
#define lbs_dbg_hex(x,y,z) do {} while (0)
|
||||
#endif
|
||||
|
||||
#define ENTER() lbs_pr_debug(1, "Enter: %s, %s:%i\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__)
|
||||
#define LEAVE() lbs_pr_debug(1, "Leave: %s, %s:%i\n", \
|
||||
__FUNCTION__, __FILE__, __LINE__)
|
||||
|
||||
/** Buffer Constants */
|
||||
|
||||
/* The size of SQ memory PPA, DPA are 8 DWORDs, that keep the physical
|
||||
* addresses of TxPD buffers. Station has only 8 TxPD available, Whereas
|
||||
* driver has more local TxPDs. Each TxPD on the host memory is associated
|
||||
* with a Tx control node. The driver maintains 8 RxPD descriptors for
|
||||
* station firmware to store Rx packet information.
|
||||
*
|
||||
* Current version of MAC has a 32x6 multicast address buffer.
|
||||
*
|
||||
* 802.11b can have up to 14 channels, the driver keeps the
|
||||
* BSSID(MAC address) of each APs or Ad hoc stations it has sensed.
|
||||
*/
|
||||
|
||||
#define MRVDRV_MAX_MULTICAST_LIST_SIZE 32
|
||||
#define MRVDRV_NUM_OF_CMD_BUFFER 10
|
||||
#define MRVDRV_SIZE_OF_CMD_BUFFER (2 * 1024)
|
||||
#define MRVDRV_MAX_CHANNEL_SIZE 14
|
||||
#define MRVDRV_MAX_BSSID_LIST 64
|
||||
#define MRVDRV_ASSOCIATION_TIME_OUT 255
|
||||
#define MRVDRV_SNAP_HEADER_LEN 8
|
||||
|
||||
#define WLAN_UPLD_SIZE 2312
|
||||
#define DEV_NAME_LEN 32
|
||||
|
||||
/** Misc constants */
|
||||
/* This section defines 802.11 specific contants */
|
||||
|
||||
#define MRVDRV_MAX_BSS_DESCRIPTS 16
|
||||
#define MRVDRV_MAX_REGION_CODE 6
|
||||
|
||||
#define MRVDRV_IGNORE_MULTIPLE_DTIM 0xfffe
|
||||
#define MRVDRV_MIN_MULTIPLE_DTIM 1
|
||||
#define MRVDRV_MAX_MULTIPLE_DTIM 5
|
||||
#define MRVDRV_DEFAULT_MULTIPLE_DTIM 1
|
||||
|
||||
#define MRVDRV_DEFAULT_LISTEN_INTERVAL 10
|
||||
|
||||
#define MRVDRV_CHANNELS_PER_SCAN 4
|
||||
#define MRVDRV_MAX_CHANNELS_PER_SCAN 14
|
||||
|
||||
#define MRVDRV_DEBUG_RX_PATH 0x00000001
|
||||
#define MRVDRV_DEBUG_TX_PATH 0x00000002
|
||||
|
||||
#define MRVDRV_MIN_BEACON_INTERVAL 20
|
||||
#define MRVDRV_MAX_BEACON_INTERVAL 1000
|
||||
#define MRVDRV_BEACON_INTERVAL 100
|
||||
|
||||
/** TxPD status */
|
||||
|
||||
/* Station firmware use TxPD status field to report final Tx transmit
|
||||
* result, Bit masks are used to present combined situations.
|
||||
*/
|
||||
|
||||
#define MRVDRV_TxPD_POWER_MGMT_NULL_PACKET 0x01
|
||||
#define MRVDRV_TxPD_POWER_MGMT_LAST_PACKET 0x08
|
||||
|
||||
/** Tx mesh flag */
|
||||
/* Currently we are using normal WDS flag as mesh flag.
|
||||
* TODO: change to proper mesh flag when MAC understands it.
|
||||
*/
|
||||
#define TxPD_CONTROL_WDS_FRAME (1<<17)
|
||||
#define TxPD_MESH_FRAME TxPD_CONTROL_WDS_FRAME
|
||||
|
||||
/** RxPD status */
|
||||
|
||||
#define MRVDRV_RXPD_STATUS_OK 0x0001
|
||||
|
||||
/** RxPD status - Received packet types */
|
||||
/** Rx mesh flag */
|
||||
/* Currently we are using normal WDS flag as mesh flag.
|
||||
* TODO: change to proper mesh flag when MAC understands it.
|
||||
*/
|
||||
#define RxPD_CONTROL_WDS_FRAME (0x40)
|
||||
#define RxPD_MESH_FRAME RxPD_CONTROL_WDS_FRAME
|
||||
|
||||
/** RSSI-related defines */
|
||||
/* RSSI constants are used to implement 802.11 RSSI threshold
|
||||
* indication. if the Rx packet signal got too weak for 5 consecutive
|
||||
* times, miniport driver (driver) will report this event to wrapper
|
||||
*/
|
||||
|
||||
#define MRVDRV_NF_DEFAULT_SCAN_VALUE (-96)
|
||||
|
||||
/** RTS/FRAG related defines */
|
||||
#define MRVDRV_RTS_MIN_VALUE 0
|
||||
#define MRVDRV_RTS_MAX_VALUE 2347
|
||||
#define MRVDRV_FRAG_MIN_VALUE 256
|
||||
#define MRVDRV_FRAG_MAX_VALUE 2346
|
||||
|
||||
/* This is for firmware specific length */
|
||||
#define EXTRA_LEN 36
|
||||
|
||||
#define MRVDRV_ETH_TX_PACKET_BUFFER_SIZE \
|
||||
(ETH_FRAME_LEN + sizeof(struct txpd) + EXTRA_LEN)
|
||||
|
||||
#define MRVDRV_ETH_RX_PACKET_BUFFER_SIZE \
|
||||
(ETH_FRAME_LEN + sizeof(struct rxpd) \
|
||||
+ MRVDRV_SNAP_HEADER_LEN + EXTRA_LEN)
|
||||
|
||||
#define CMD_F_HOSTCMD (1 << 0)
|
||||
#define FW_CAPINFO_WPA (1 << 0)
|
||||
|
||||
/** WPA key LENGTH*/
|
||||
#define MRVL_MAX_KEY_WPA_KEY_LENGTH 32
|
||||
|
||||
#define KEY_LEN_WPA_AES 16
|
||||
#define KEY_LEN_WPA_TKIP 32
|
||||
#define KEY_LEN_WEP_104 13
|
||||
#define KEY_LEN_WEP_40 5
|
||||
|
||||
#define RF_ANTENNA_1 0x1
|
||||
#define RF_ANTENNA_2 0x2
|
||||
#define RF_ANTENNA_AUTO 0xFFFF
|
||||
|
||||
#define BAND_B (0x01)
|
||||
#define BAND_G (0x02)
|
||||
#define ALL_802_11_BANDS (BAND_B | BAND_G)
|
||||
|
||||
/** MACRO DEFINITIONS */
|
||||
#define CAL_NF(NF) ((s32)(-(s32)(NF)))
|
||||
#define CAL_RSSI(SNR, NF) ((s32)((s32)(SNR) + CAL_NF(NF)))
|
||||
#define SCAN_RSSI(RSSI) (0x100 - ((u8)(RSSI)))
|
||||
|
||||
#define DEFAULT_BCN_AVG_FACTOR 8
|
||||
#define DEFAULT_DATA_AVG_FACTOR 8
|
||||
#define AVG_SCALE 100
|
||||
#define CAL_AVG_SNR_NF(AVG, SNRNF, N) \
|
||||
(((AVG) == 0) ? ((u16)(SNRNF) * AVG_SCALE) : \
|
||||
((((int)(AVG) * (N -1)) + ((u16)(SNRNF) * \
|
||||
AVG_SCALE)) / N))
|
||||
|
||||
#define B_SUPPORTED_RATES 8
|
||||
#define G_SUPPORTED_RATES 14
|
||||
|
||||
#define WLAN_SUPPORTED_RATES 14
|
||||
|
||||
#define MAX_LEDS 8
|
||||
|
||||
#define IS_MESH_FRAME(x) (x->cb[6])
|
||||
#define SET_MESH_FRAME(x) (x->cb[6]=1)
|
||||
#define UNSET_MESH_FRAME(x) (x->cb[6]=0)
|
||||
|
||||
/** Global Variable Declaration */
|
||||
typedef struct _wlan_private wlan_private;
|
||||
typedef struct _wlan_adapter wlan_adapter;
|
||||
extern const char libertas_driver_version[];
|
||||
extern u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE];
|
||||
|
||||
extern u8 libertas_wlan_data_rates[WLAN_SUPPORTED_RATES];
|
||||
|
||||
extern u8 libertas_supported_rates[G_SUPPORTED_RATES];
|
||||
|
||||
extern u8 libertas_adhoc_rates_g[G_SUPPORTED_RATES];
|
||||
|
||||
extern u8 libertas_adhoc_rates_b[4];
|
||||
|
||||
/** ENUM definition*/
|
||||
/** SNRNF_TYPE */
|
||||
enum SNRNF_TYPE {
|
||||
TYPE_BEACON = 0,
|
||||
TYPE_RXPD,
|
||||
MAX_TYPE_B
|
||||
};
|
||||
|
||||
/** SNRNF_DATA*/
|
||||
enum SNRNF_DATA {
|
||||
TYPE_NOAVG = 0,
|
||||
TYPE_AVG,
|
||||
MAX_TYPE_AVG
|
||||
};
|
||||
|
||||
/** WLAN_802_11_AUTH_ALG*/
|
||||
enum WLAN_802_11_AUTH_ALG {
|
||||
AUTH_ALG_OPEN_SYSTEM = 1,
|
||||
AUTH_ALG_SHARED_KEY = 2,
|
||||
AUTH_ALG_NETWORK_EAP = 8,
|
||||
};
|
||||
|
||||
/** WLAN_802_1X_AUTH_ALG */
|
||||
enum WLAN_802_1X_AUTH_ALG {
|
||||
WLAN_1X_AUTH_ALG_NONE = 1,
|
||||
WLAN_1X_AUTH_ALG_LEAP = 2,
|
||||
WLAN_1X_AUTH_ALG_TLS = 4,
|
||||
WLAN_1X_AUTH_ALG_TTLS = 8,
|
||||
WLAN_1X_AUTH_ALG_MD5 = 16,
|
||||
};
|
||||
|
||||
/** WLAN_802_11_ENCRYPTION_MODE */
|
||||
enum WLAN_802_11_ENCRYPTION_MODE {
|
||||
CIPHER_NONE,
|
||||
CIPHER_WEP40,
|
||||
CIPHER_TKIP,
|
||||
CIPHER_CCMP,
|
||||
CIPHER_WEP104,
|
||||
};
|
||||
|
||||
/** WLAN_802_11_POWER_MODE */
|
||||
enum WLAN_802_11_POWER_MODE {
|
||||
wlan802_11powermodecam,
|
||||
wlan802_11powermodemax_psp,
|
||||
wlan802_11Powermodefast_psp,
|
||||
/*not a real mode, defined as an upper bound */
|
||||
wlan802_11powemodemax
|
||||
};
|
||||
|
||||
/** PS_STATE */
|
||||
enum PS_STATE {
|
||||
PS_STATE_FULL_POWER,
|
||||
PS_STATE_AWAKE,
|
||||
PS_STATE_PRE_SLEEP,
|
||||
PS_STATE_SLEEP
|
||||
};
|
||||
|
||||
/** DNLD_STATE */
|
||||
enum DNLD_STATE {
|
||||
DNLD_RES_RECEIVED,
|
||||
DNLD_DATA_SENT,
|
||||
DNLD_CMD_SENT
|
||||
};
|
||||
|
||||
/** WLAN_MEDIA_STATE */
|
||||
enum WLAN_MEDIA_STATE {
|
||||
libertas_connected,
|
||||
libertas_disconnected
|
||||
};
|
||||
|
||||
/** WLAN_802_11_PRIVACY_FILTER */
|
||||
enum WLAN_802_11_PRIVACY_FILTER {
|
||||
wlan802_11privfilteracceptall,
|
||||
wlan802_11privfilter8021xWEP
|
||||
};
|
||||
|
||||
/** mv_ms_type */
|
||||
enum mv_ms_type {
|
||||
MVMS_DAT = 0,
|
||||
MVMS_CMD = 1,
|
||||
MVMS_TXDONE = 2,
|
||||
MVMS_EVENT
|
||||
};
|
||||
|
||||
/** WLAN_802_11_NETWORK_INFRASTRUCTURE */
|
||||
enum WLAN_802_11_NETWORK_INFRASTRUCTURE {
|
||||
wlan802_11ibss,
|
||||
wlan802_11infrastructure,
|
||||
wlan802_11autounknown,
|
||||
/*defined as upper bound */
|
||||
wlan802_11infrastructuremax
|
||||
};
|
||||
|
||||
/** WLAN_802_11_AUTHENTICATION_MODE */
|
||||
enum WLAN_802_11_AUTHENTICATION_MODE {
|
||||
wlan802_11authmodeopen = 0x00,
|
||||
wlan802_11authmodeshared = 0x01,
|
||||
wlan802_11authmodenetworkEAP = 0x80,
|
||||
};
|
||||
|
||||
/** WLAN_802_11_WEP_STATUS */
|
||||
enum WLAN_802_11_WEP_STATUS {
|
||||
wlan802_11WEPenabled,
|
||||
wlan802_11WEPdisabled,
|
||||
};
|
||||
|
||||
/** SNMP_MIB_INDEX_e */
|
||||
enum SNMP_MIB_INDEX_e {
|
||||
desired_bsstype_i = 0,
|
||||
op_rateset_i,
|
||||
bcnperiod_i,
|
||||
dtimperiod_i,
|
||||
assocrsp_timeout_i,
|
||||
rtsthresh_i,
|
||||
short_retrylim_i,
|
||||
long_retrylim_i,
|
||||
fragthresh_i,
|
||||
dot11d_i,
|
||||
dot11h_i,
|
||||
manufid_i,
|
||||
prodID_i,
|
||||
manuf_oui_i,
|
||||
manuf_name_i,
|
||||
manuf_prodname_i,
|
||||
manuf_prodver_i,
|
||||
};
|
||||
|
||||
/** KEY_TYPE_ID */
|
||||
enum KEY_TYPE_ID {
|
||||
KEY_TYPE_ID_WEP = 0,
|
||||
KEY_TYPE_ID_TKIP,
|
||||
KEY_TYPE_ID_AES
|
||||
};
|
||||
|
||||
/** KEY_INFO_WPA (applies to both TKIP and AES/CCMP) */
|
||||
enum KEY_INFO_WPA {
|
||||
KEY_INFO_WPA_MCAST = 0x01,
|
||||
KEY_INFO_WPA_UNICAST = 0x02,
|
||||
KEY_INFO_WPA_ENABLED = 0x04
|
||||
};
|
||||
|
||||
/** SNMP_MIB_VALUE_e */
|
||||
enum SNMP_MIB_VALUE_e {
|
||||
SNMP_MIB_VALUE_INFRA = 1,
|
||||
SNMP_MIB_VALUE_ADHOC
|
||||
};
|
||||
|
||||
/* Default values for fwt commands. */
|
||||
#define FWT_DEFAULT_METRIC 0
|
||||
#define FWT_DEFAULT_DIR 1
|
||||
#define FWT_DEFAULT_SSN 0xffffffff
|
||||
#define FWT_DEFAULT_DSN 0
|
||||
#define FWT_DEFAULT_HOPCOUNT 0
|
||||
#define FWT_DEFAULT_TTL 0
|
||||
#define FWT_DEFAULT_EXPIRATION 0
|
||||
#define FWT_DEFAULT_SLEEPMODE 0
|
||||
#define FWT_DEFAULT_SNR 0
|
||||
|
||||
#endif /* _WLAN_DEFS_H_ */
|
||||
403
drivers/net/wireless/libertas/dev.h
Normal file
403
drivers/net/wireless/libertas/dev.h
Normal file
@@ -0,0 +1,403 @@
|
||||
/**
|
||||
* This file contains definitions and data structures specific
|
||||
* to Marvell 802.11 NIC. It contains the Device Information
|
||||
* structure wlan_adapter.
|
||||
*/
|
||||
#ifndef _WLAN_DEV_H_
|
||||
#define _WLAN_DEV_H_
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/wireless.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/debugfs.h>
|
||||
|
||||
#include "defs.h"
|
||||
#include "scan.h"
|
||||
#include "thread.h"
|
||||
|
||||
extern struct ethtool_ops libertas_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 wlan_802_11_security {
|
||||
u8 WPAenabled;
|
||||
u8 WPA2enabled;
|
||||
enum WLAN_802_11_WEP_STATUS WEPstatus;
|
||||
enum WLAN_802_11_AUTHENTICATION_MODE authmode;
|
||||
enum WLAN_802_1X_AUTH_ALG auth1xalg;
|
||||
enum WLAN_802_11_ENCRYPTION_MODE Encryptionmode;
|
||||
};
|
||||
|
||||
/** Current Basic Service Set State Structure */
|
||||
struct current_bss_params {
|
||||
struct bss_descriptor bssdescriptor;
|
||||
/** bssid */
|
||||
u8 bssid[ETH_ALEN];
|
||||
/** ssid */
|
||||
struct WLAN_802_11_SSID ssid;
|
||||
|
||||
/** band */
|
||||
u8 band;
|
||||
/** channel */
|
||||
u8 channel;
|
||||
/** number of rates supported */
|
||||
int numofrates;
|
||||
/** supported rates*/
|
||||
u8 datarates[WLAN_SUPPORTED_RATES];
|
||||
};
|
||||
|
||||
/** sleep_params */
|
||||
struct sleep_params {
|
||||
u16 sp_error;
|
||||
u16 sp_offset;
|
||||
u16 sp_stabletime;
|
||||
u8 sp_calcontrol;
|
||||
u8 sp_extsleepclk;
|
||||
u16 sp_reserved;
|
||||
};
|
||||
|
||||
/** Data structure for the Marvell WLAN device */
|
||||
typedef struct _wlan_dev {
|
||||
/** device name */
|
||||
char name[DEV_NAME_LEN];
|
||||
/** card pointer */
|
||||
void *card;
|
||||
/** IO port */
|
||||
u32 ioport;
|
||||
/** Upload received */
|
||||
u32 upld_rcv;
|
||||
/** Upload type */
|
||||
u32 upld_typ;
|
||||
/** Upload length */
|
||||
u32 upld_len;
|
||||
/** netdev pointer */
|
||||
struct net_device *netdev;
|
||||
/* Upload buffer */
|
||||
u8 upld_buf[WLAN_UPLD_SIZE];
|
||||
/* Download sent:
|
||||
bit0 1/0=data_sent/data_tx_done,
|
||||
bit1 1/0=cmd_sent/cmd_tx_done,
|
||||
all other bits reserved 0 */
|
||||
u8 dnld_sent;
|
||||
} wlan_dev_t, *pwlan_dev_t;
|
||||
|
||||
/* Mesh statistics */
|
||||
struct wlan_mesh_stats {
|
||||
u32 fwd_bcast_cnt; /* Fwd: Broadcast counter */
|
||||
u32 fwd_unicast_cnt; /* Fwd: Unicast counter */
|
||||
u32 fwd_drop_ttl; /* Fwd: TTL zero */
|
||||
u32 fwd_drop_rbt; /* Fwd: Recently Broadcasted */
|
||||
u32 fwd_drop_noroute; /* Fwd: No route to Destination */
|
||||
u32 fwd_drop_nobuf; /* Fwd: Run out of internal buffers */
|
||||
u32 drop_blind; /* Rx: Dropped by blinding table */
|
||||
};
|
||||
|
||||
/** Private structure for the MV device */
|
||||
struct _wlan_private {
|
||||
int open;
|
||||
int mesh_open;
|
||||
int infra_open;
|
||||
|
||||
wlan_adapter *adapter;
|
||||
wlan_dev_t wlan_dev;
|
||||
|
||||
struct net_device_stats stats;
|
||||
struct net_device *mesh_dev ; /* Virtual device */
|
||||
|
||||
struct iw_statistics wstats;
|
||||
struct wlan_mesh_stats mstats;
|
||||
struct dentry *debugfs_dir;
|
||||
struct dentry *debugfs_debug;
|
||||
struct dentry *debugfs_files[6];
|
||||
|
||||
struct dentry *events_dir;
|
||||
struct dentry *debugfs_events_files[6];
|
||||
|
||||
struct dentry *regs_dir;
|
||||
struct dentry *debugfs_regs_files[6];
|
||||
|
||||
u32 mac_offset;
|
||||
u32 bbp_offset;
|
||||
u32 rf_offset;
|
||||
|
||||
const struct firmware *firmware;
|
||||
struct device *hotplug_device;
|
||||
|
||||
/** thread to service interrupts */
|
||||
struct wlan_thread mainthread;
|
||||
|
||||
struct delayed_work assoc_work;
|
||||
struct workqueue_struct *assoc_thread;
|
||||
};
|
||||
|
||||
/** 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_MODE 3
|
||||
#define ASSOC_FLAG_BSSID 4
|
||||
#define ASSOC_FLAG_WEP_KEYS 5
|
||||
#define ASSOC_FLAG_WEP_TX_KEYIDX 6
|
||||
#define ASSOC_FLAG_WPA_MCAST_KEY 7
|
||||
#define ASSOC_FLAG_WPA_UCAST_KEY 8
|
||||
#define ASSOC_FLAG_SECINFO 9
|
||||
#define ASSOC_FLAG_WPA_IE 10
|
||||
unsigned long flags;
|
||||
|
||||
struct WLAN_802_11_SSID ssid;
|
||||
u8 channel;
|
||||
enum WLAN_802_11_NETWORK_INFRASTRUCTURE mode;
|
||||
u8 bssid[ETH_ALEN];
|
||||
|
||||
/** WEP keys */
|
||||
struct WLAN_802_11_KEY wep_keys[4];
|
||||
u16 wep_tx_keyidx;
|
||||
|
||||
/** WPA keys */
|
||||
struct WLAN_802_11_KEY wpa_mcast_key;
|
||||
struct WLAN_802_11_KEY wpa_unicast_key;
|
||||
|
||||
struct wlan_802_11_security secinfo;
|
||||
|
||||
/** WPA Information Elements*/
|
||||
#define MAX_WPA_IE_LEN 64
|
||||
u8 wpa_ie[MAX_WPA_IE_LEN];
|
||||
u8 wpa_ie_len;
|
||||
};
|
||||
|
||||
/** Wlan adapter data structure*/
|
||||
struct _wlan_adapter {
|
||||
/** STATUS variables */
|
||||
u32 fwreleasenumber;
|
||||
u32 fwcapinfo;
|
||||
/* protected with big lock */
|
||||
|
||||
struct mutex lock;
|
||||
|
||||
u8 tmptxbuf[WLAN_UPLD_SIZE];
|
||||
/* protected by hard_start_xmit serialization */
|
||||
|
||||
/** command-related variables */
|
||||
u16 seqnum;
|
||||
/* protected by big lock */
|
||||
|
||||
struct cmd_ctrl_node *cmd_array;
|
||||
/** Current command */
|
||||
struct cmd_ctrl_node *cur_cmd;
|
||||
int cur_cmd_retcode;
|
||||
/** command Queues */
|
||||
/** Free command buffers */
|
||||
struct list_head cmdfreeq;
|
||||
/** Pending command buffers */
|
||||
struct list_head cmdpendingq;
|
||||
|
||||
wait_queue_head_t cmd_pending;
|
||||
u8 nr_cmd_pending;
|
||||
/* command related variables protected by adapter->driver_lock */
|
||||
|
||||
/** Async and Sync Event variables */
|
||||
u32 intcounter;
|
||||
u32 eventcause;
|
||||
u8 nodename[16]; /* nickname */
|
||||
|
||||
/** spin locks */
|
||||
spinlock_t driver_lock;
|
||||
|
||||
/** Timers */
|
||||
struct timer_list command_timer;
|
||||
|
||||
/* TX queue used in PS mode */
|
||||
spinlock_t txqueue_lock;
|
||||
struct sk_buff *tx_queue_ps[NR_TX_QUEUE];
|
||||
unsigned int tx_queue_idx;
|
||||
|
||||
u8 hisregcpy;
|
||||
|
||||
/** current ssid/bssid related parameters*/
|
||||
struct current_bss_params curbssparams;
|
||||
|
||||
enum WLAN_802_11_NETWORK_INFRASTRUCTURE inframode;
|
||||
|
||||
struct bss_descriptor *pattemptedbssdesc;
|
||||
|
||||
struct WLAN_802_11_SSID previousssid;
|
||||
u8 previousbssid[ETH_ALEN];
|
||||
|
||||
struct bss_descriptor *scantable;
|
||||
u32 numinscantable;
|
||||
|
||||
u8 scantype;
|
||||
u32 scanmode;
|
||||
|
||||
u16 beaconperiod;
|
||||
u8 adhoccreate;
|
||||
|
||||
/** capability Info used in Association, start, join */
|
||||
struct ieeetypes_capinfo capinfo;
|
||||
|
||||
/** MAC address information */
|
||||
u8 current_addr[ETH_ALEN];
|
||||
u8 multicastlist[MRVDRV_MAX_MULTICAST_LIST_SIZE][ETH_ALEN];
|
||||
u32 nr_of_multicastmacaddr;
|
||||
|
||||
/** 802.11 statistics */
|
||||
// struct cmd_DS_802_11_GET_STAT wlan802_11Stat;
|
||||
|
||||
u16 enablehwauto;
|
||||
u16 ratebitmap;
|
||||
/** control G rates */
|
||||
u8 adhoc_grate_enabled;
|
||||
|
||||
u32 txantenna;
|
||||
u32 rxantenna;
|
||||
|
||||
u8 adhocchannel;
|
||||
u32 fragthsd;
|
||||
u32 rtsthsd;
|
||||
|
||||
u32 datarate;
|
||||
u8 is_datarate_auto;
|
||||
|
||||
u16 listeninterval;
|
||||
u16 prescan;
|
||||
u8 txretrycount;
|
||||
|
||||
/** Tx-related variables (for single packet tx) */
|
||||
struct sk_buff *currenttxskb;
|
||||
u16 TxLockFlag;
|
||||
|
||||
/** NIC Operation characteristics */
|
||||
u16 currentpacketfilter;
|
||||
u32 connect_status;
|
||||
u16 regioncode;
|
||||
u16 regiontableindex;
|
||||
u16 txpowerlevel;
|
||||
|
||||
/** POWER MANAGEMENT AND PnP SUPPORT */
|
||||
u8 surpriseremoved;
|
||||
u16 atimwindow;
|
||||
|
||||
u16 psmode; /* Wlan802_11PowermodeCAM=disable
|
||||
Wlan802_11PowermodeMAX_PSP=enable */
|
||||
u16 multipledtim;
|
||||
u32 psstate;
|
||||
u8 needtowakeup;
|
||||
|
||||
struct PS_CMD_ConfirmSleep libertas_ps_confirm_sleep;
|
||||
u16 locallisteninterval;
|
||||
u16 nullpktinterval;
|
||||
|
||||
struct assoc_request * assoc_req;
|
||||
|
||||
/** Encryption parameter */
|
||||
struct wlan_802_11_security secinfo;
|
||||
|
||||
/** WEP keys */
|
||||
struct WLAN_802_11_KEY wep_keys[4];
|
||||
u16 wep_tx_keyidx;
|
||||
|
||||
/** WPA keys */
|
||||
struct WLAN_802_11_KEY wpa_mcast_key;
|
||||
struct WLAN_802_11_KEY wpa_unicast_key;
|
||||
|
||||
/** WPA Information Elements*/
|
||||
#define MAX_WPA_IE_LEN 64
|
||||
u8 wpa_ie[MAX_WPA_IE_LEN];
|
||||
u8 wpa_ie_len;
|
||||
|
||||
u16 rxantennamode;
|
||||
u16 txantennamode;
|
||||
|
||||
/** Requested Signal Strength*/
|
||||
u16 bcn_avg_factor;
|
||||
u16 data_avg_factor;
|
||||
u16 SNR[MAX_TYPE_B][MAX_TYPE_AVG];
|
||||
u16 NF[MAX_TYPE_B][MAX_TYPE_AVG];
|
||||
u8 RSSI[MAX_TYPE_B][MAX_TYPE_AVG];
|
||||
u8 rawSNR[DEFAULT_DATA_AVG_FACTOR];
|
||||
u8 rawNF[DEFAULT_DATA_AVG_FACTOR];
|
||||
u16 nextSNRNF;
|
||||
u16 numSNRNF;
|
||||
u16 rxpd_rate;
|
||||
|
||||
u8 radioon;
|
||||
u32 preamble;
|
||||
|
||||
/** Multi bands Parameter*/
|
||||
u8 libertas_supported_rates[G_SUPPORTED_RATES];
|
||||
|
||||
/** Blue Tooth Co-existence Arbitration */
|
||||
|
||||
/** sleep_params */
|
||||
struct sleep_params sp;
|
||||
|
||||
/** RF calibration data */
|
||||
|
||||
#define MAX_REGION_CHANNEL_NUM 2
|
||||
/** region channel data */
|
||||
struct region_channel region_channel[MAX_REGION_CHANNEL_NUM];
|
||||
|
||||
struct region_channel universal_channel[MAX_REGION_CHANNEL_NUM];
|
||||
|
||||
/** 11D and Domain Regulatory Data */
|
||||
struct wlan_802_11d_domain_reg domainreg;
|
||||
struct parsed_region_chan_11d parsed_region_chan;
|
||||
|
||||
/** FSM variable for 11d support */
|
||||
u32 enable11d;
|
||||
|
||||
/** MISCELLANEOUS */
|
||||
u8 *prdeeprom;
|
||||
struct wlan_offset_value offsetvalue;
|
||||
|
||||
struct cmd_ds_802_11_get_log logmsg;
|
||||
u16 scanprobes;
|
||||
|
||||
u32 pkttxctrl;
|
||||
|
||||
u16 txrate;
|
||||
u32 linkmode;
|
||||
u32 radiomode;
|
||||
u32 debugmode;
|
||||
u8 fw_ready;
|
||||
};
|
||||
|
||||
#endif /* _WLAN_DEV_H_ */
|
||||
184
drivers/net/wireless/libertas/ethtool.c
Normal file
184
drivers/net/wireless/libertas/ethtool.c
Normal file
@@ -0,0 +1,184 @@
|
||||
|
||||
#include <linux/netdevice.h>
|
||||
#include <linux/ethtool.h>
|
||||
#include <linux/delay.h>
|
||||
|
||||
#include "host.h"
|
||||
#include "sbi.h"
|
||||
#include "decl.h"
|
||||
#include "defs.h"
|
||||
#include "dev.h"
|
||||
#include "join.h"
|
||||
#include "wext.h"
|
||||
static const char * mesh_stat_strings[]= {
|
||||
"drop_duplicate_bcast",
|
||||
"drop_ttl_zero",
|
||||
"drop_no_fwd_route",
|
||||
"drop_no_buffers",
|
||||
"fwded_unicast_cnt",
|
||||
"fwded_bcast_cnt",
|
||||
"drop_blind_table"
|
||||
};
|
||||
|
||||
static void libertas_ethtool_get_drvinfo(struct net_device *dev,
|
||||
struct ethtool_drvinfo *info)
|
||||
{
|
||||
wlan_private *priv = (wlan_private *) dev->priv;
|
||||
char fwver[32];
|
||||
|
||||
libertas_get_fwversion(priv->adapter, fwver, sizeof(fwver) - 1);
|
||||
|
||||
strcpy(info->driver, "libertas");
|
||||
strcpy(info->version, libertas_driver_version);
|
||||
strcpy(info->fw_version, fwver);
|
||||
}
|
||||
|
||||
/* All 8388 parts have 16KiB EEPROM size at the time of writing.
|
||||
* In case that changes this needs fixing.
|
||||
*/
|
||||
#define LIBERTAS_EEPROM_LEN 16384
|
||||
|
||||
static int libertas_ethtool_get_eeprom_len(struct net_device *dev)
|
||||
{
|
||||
return LIBERTAS_EEPROM_LEN;
|
||||
}
|
||||
|
||||
static int libertas_ethtool_get_eeprom(struct net_device *dev,
|
||||
struct ethtool_eeprom *eeprom, u8 * bytes)
|
||||
{
|
||||
wlan_private *priv = (wlan_private *) dev->priv;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
struct wlan_ioctl_regrdwr regctrl;
|
||||
char *ptr;
|
||||
int ret;
|
||||
|
||||
regctrl.action = 0;
|
||||
regctrl.offset = eeprom->offset;
|
||||
regctrl.NOB = eeprom->len;
|
||||
|
||||
if (eeprom->offset + eeprom->len > LIBERTAS_EEPROM_LEN)
|
||||
return -EINVAL;
|
||||
|
||||
// mutex_lock(&priv->mutex);
|
||||
|
||||
adapter->prdeeprom =
|
||||
(char *)kmalloc(eeprom->len+sizeof(regctrl), GFP_KERNEL);
|
||||
if (!adapter->prdeeprom)
|
||||
return -ENOMEM;
|
||||
memcpy(adapter->prdeeprom, ®ctrl, sizeof(regctrl));
|
||||
|
||||
/* +14 is for action, offset, and NOB in
|
||||
* response */
|
||||
lbs_pr_debug(1, "action:%d offset: %x NOB: %02x\n",
|
||||
regctrl.action, regctrl.offset, regctrl.NOB);
|
||||
|
||||
ret = libertas_prepare_and_send_command(priv,
|
||||
cmd_802_11_eeprom_access,
|
||||
regctrl.action,
|
||||
cmd_option_waitforrsp, 0,
|
||||
®ctrl);
|
||||
|
||||
if (ret) {
|
||||
if (adapter->prdeeprom)
|
||||
kfree(adapter->prdeeprom);
|
||||
LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
||||
mdelay(10);
|
||||
|
||||
ptr = (char *)adapter->prdeeprom;
|
||||
|
||||
/* skip the command header, but include the "value" u32 variable */
|
||||
ptr = ptr + sizeof(struct wlan_ioctl_regrdwr) - 4;
|
||||
|
||||
/*
|
||||
* Return the result back to the user
|
||||
*/
|
||||
memcpy(bytes, ptr, eeprom->len);
|
||||
|
||||
if (adapter->prdeeprom)
|
||||
kfree(adapter->prdeeprom);
|
||||
// mutex_unlock(&priv->mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void libertas_ethtool_get_stats(struct net_device * dev,
|
||||
struct ethtool_stats * stats, u64 * data)
|
||||
{
|
||||
wlan_private *priv = dev->priv;
|
||||
|
||||
ENTER();
|
||||
|
||||
stats->cmd = ETHTOOL_GSTATS;
|
||||
BUG_ON(stats->n_stats != MESH_STATS_NUM);
|
||||
|
||||
data[0] = priv->mstats.fwd_drop_rbt;
|
||||
data[1] = priv->mstats.fwd_drop_ttl;
|
||||
data[2] = priv->mstats.fwd_drop_noroute;
|
||||
data[3] = priv->mstats.fwd_drop_nobuf;
|
||||
data[4] = priv->mstats.fwd_unicast_cnt;
|
||||
data[5] = priv->mstats.fwd_bcast_cnt;
|
||||
data[6] = priv->mstats.drop_blind;
|
||||
|
||||
LEAVE();
|
||||
}
|
||||
|
||||
static int libertas_ethtool_get_stats_count(struct net_device * dev)
|
||||
{
|
||||
int ret;
|
||||
wlan_private *priv = dev->priv;
|
||||
struct cmd_ds_mesh_access mesh_access;
|
||||
|
||||
ENTER();
|
||||
/* Get Mesh Statistics */
|
||||
ret = libertas_prepare_and_send_command(priv,
|
||||
cmd_mesh_access, cmd_act_mesh_get_stats,
|
||||
cmd_option_waitforrsp, 0, &mesh_access);
|
||||
|
||||
if (ret) {
|
||||
LEAVE();
|
||||
return 0;
|
||||
}
|
||||
|
||||
priv->mstats.fwd_drop_rbt = mesh_access.data[0];
|
||||
priv->mstats.fwd_drop_ttl = mesh_access.data[1];
|
||||
priv->mstats.fwd_drop_noroute = mesh_access.data[2];
|
||||
priv->mstats.fwd_drop_nobuf = mesh_access.data[3];
|
||||
priv->mstats.fwd_unicast_cnt = mesh_access.data[4];
|
||||
priv->mstats.fwd_bcast_cnt = mesh_access.data[5];
|
||||
priv->mstats.drop_blind = mesh_access.data[6];
|
||||
|
||||
LEAVE();
|
||||
return MESH_STATS_NUM;
|
||||
}
|
||||
|
||||
static void libertas_ethtool_get_strings (struct net_device * dev,
|
||||
u32 stringset,
|
||||
u8 * s)
|
||||
{
|
||||
int i;
|
||||
|
||||
ENTER();
|
||||
switch (stringset) {
|
||||
case ETH_SS_STATS:
|
||||
for (i=0; i < MESH_STATS_NUM; i++) {
|
||||
memcpy(s + i * ETH_GSTRING_LEN,
|
||||
mesh_stat_strings[i],
|
||||
ETH_GSTRING_LEN);
|
||||
}
|
||||
break;
|
||||
}
|
||||
LEAVE();
|
||||
}
|
||||
|
||||
struct ethtool_ops libertas_ethtool_ops = {
|
||||
.get_drvinfo = libertas_ethtool_get_drvinfo,
|
||||
.get_eeprom = libertas_ethtool_get_eeprom,
|
||||
.get_eeprom_len = libertas_ethtool_get_eeprom_len,
|
||||
.get_stats_count = libertas_ethtool_get_stats_count,
|
||||
.get_ethtool_stats = libertas_ethtool_get_stats,
|
||||
.get_strings = libertas_ethtool_get_strings,
|
||||
};
|
||||
|
||||
361
drivers/net/wireless/libertas/fw.c
Normal file
361
drivers/net/wireless/libertas/fw.c
Normal file
@@ -0,0 +1,361 @@
|
||||
/**
|
||||
* This file contains the initialization for FW and HW
|
||||
*/
|
||||
#include <linux/module.h>
|
||||
#include <linux/moduleparam.h>
|
||||
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/firmware.h>
|
||||
#include <linux/version.h>
|
||||
|
||||
#include "host.h"
|
||||
#include "sbi.h"
|
||||
#include "defs.h"
|
||||
#include "decl.h"
|
||||
#include "dev.h"
|
||||
#include "fw.h"
|
||||
#include "wext.h"
|
||||
#include "if_usb.h"
|
||||
|
||||
char *libertas_fw_name = NULL;
|
||||
module_param_named(fw_name, libertas_fw_name, charp, 0644);
|
||||
|
||||
unsigned int libertas_debug = 0;
|
||||
module_param(libertas_debug, int, 0);
|
||||
|
||||
/**
|
||||
* @brief This function checks the validity of Boot2/FW image.
|
||||
*
|
||||
* @param data pointer to image
|
||||
* len image length
|
||||
* @return 0 or -1
|
||||
*/
|
||||
static int check_fwfile_format(u8 *data, u32 totlen)
|
||||
{
|
||||
u8 bincmd, exit;
|
||||
u32 blksize, offset, len;
|
||||
int ret;
|
||||
|
||||
ret = 1;
|
||||
exit = len = 0;
|
||||
|
||||
do {
|
||||
bincmd = *data;
|
||||
blksize = *(u32*)(data + offsetof(struct fwheader, datalength));
|
||||
switch (bincmd) {
|
||||
case FW_HAS_DATA_TO_RECV:
|
||||
offset = sizeof(struct fwheader) + blksize;
|
||||
data += offset;
|
||||
len += offset;
|
||||
if (len >= totlen)
|
||||
exit = 1;
|
||||
break;
|
||||
case FW_HAS_LAST_BLOCK:
|
||||
exit = 1;
|
||||
ret = 0;
|
||||
break;
|
||||
default:
|
||||
exit = 1;
|
||||
break;
|
||||
}
|
||||
} while (!exit);
|
||||
|
||||
if (ret)
|
||||
lbs_pr_err("bin file format check FAIL...\n");
|
||||
else
|
||||
lbs_pr_debug(1, "bin file format check PASS...\n");
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief This function downloads firmware image, gets
|
||||
* HW spec from firmware and set basic parameters to
|
||||
* firmware.
|
||||
*
|
||||
* @param priv A pointer to wlan_private structure
|
||||
* @return 0 or -1
|
||||
*/
|
||||
static int wlan_setup_station_hw(wlan_private * priv)
|
||||
{
|
||||
int ret = -1;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
|
||||
ENTER();
|
||||
|
||||
if ((ret = request_firmware(&priv->firmware, libertas_fw_name,
|
||||
priv->hotplug_device)) < 0) {
|
||||
lbs_pr_err("request_firmware() failed, error code = %#x\n",
|
||||
ret);
|
||||
lbs_pr_err("%s not found in /lib/firmware\n", libertas_fw_name);
|
||||
goto done;
|
||||
}
|
||||
|
||||
if(check_fwfile_format(priv->firmware->data, priv->firmware->size)) {
|
||||
release_firmware(priv->firmware);
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = libertas_sbi_prog_firmware(priv);
|
||||
|
||||
release_firmware(priv->firmware);
|
||||
|
||||
if (ret) {
|
||||
lbs_pr_debug(1, "Bootloader in invalid state!\n");
|
||||
ret = -1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
/*
|
||||
* Read MAC address from HW
|
||||
*/
|
||||
memset(adapter->current_addr, 0xff, ETH_ALEN);
|
||||
|
||||
ret = libertas_prepare_and_send_command(priv, cmd_get_hw_spec,
|
||||
0, cmd_option_waitforrsp, 0, NULL);
|
||||
|
||||
if (ret) {
|
||||
ret = -1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
libertas_set_mac_packet_filter(priv);
|
||||
|
||||
/* Get the supported Data rates */
|
||||
ret = libertas_prepare_and_send_command(priv, cmd_802_11_data_rate,
|
||||
cmd_act_get_tx_rate,
|
||||
cmd_option_waitforrsp, 0, NULL);
|
||||
|
||||
if (ret) {
|
||||
ret = -1;
|
||||
goto done;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
done:
|
||||
LEAVE();
|
||||
|
||||
return (ret);
|
||||
}
|
||||
|
||||
static int wlan_allocate_adapter(wlan_private * priv)
|
||||
{
|
||||
u32 ulbufsize;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
|
||||
struct bss_descriptor *ptempscantable;
|
||||
|
||||
/* Allocate buffer to store the BSSID list */
|
||||
ulbufsize = sizeof(struct bss_descriptor) * MRVDRV_MAX_BSSID_LIST;
|
||||
if (!(ptempscantable = kmalloc(ulbufsize, GFP_KERNEL))) {
|
||||
libertas_free_adapter(priv);
|
||||
return -1;
|
||||
}
|
||||
|
||||
adapter->scantable = ptempscantable;
|
||||
memset(adapter->scantable, 0, ulbufsize);
|
||||
|
||||
/* Allocate the command buffers */
|
||||
libertas_allocate_cmd_buffer(priv);
|
||||
|
||||
memset(&adapter->libertas_ps_confirm_sleep, 0, sizeof(struct PS_CMD_ConfirmSleep));
|
||||
adapter->libertas_ps_confirm_sleep.seqnum = cpu_to_le16(++adapter->seqnum);
|
||||
adapter->libertas_ps_confirm_sleep.command =
|
||||
cpu_to_le16(cmd_802_11_ps_mode);
|
||||
adapter->libertas_ps_confirm_sleep.size =
|
||||
cpu_to_le16(sizeof(struct PS_CMD_ConfirmSleep));
|
||||
adapter->libertas_ps_confirm_sleep.result = 0;
|
||||
adapter->libertas_ps_confirm_sleep.action =
|
||||
cpu_to_le16(cmd_subcmd_sleep_confirmed);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void wlan_init_adapter(wlan_private * priv)
|
||||
{
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
int i;
|
||||
|
||||
adapter->scanprobes = 0;
|
||||
|
||||
adapter->bcn_avg_factor = DEFAULT_BCN_AVG_FACTOR;
|
||||
adapter->data_avg_factor = DEFAULT_DATA_AVG_FACTOR;
|
||||
|
||||
/* ATIM params */
|
||||
adapter->atimwindow = 0;
|
||||
|
||||
adapter->connect_status = libertas_disconnected;
|
||||
memset(adapter->current_addr, 0xff, ETH_ALEN);
|
||||
|
||||
/* scan type */
|
||||
adapter->scantype = cmd_scan_type_active;
|
||||
|
||||
/* scan mode */
|
||||
adapter->scanmode = cmd_bss_type_any;
|
||||
|
||||
/* 802.11 specific */
|
||||
adapter->secinfo.WEPstatus = wlan802_11WEPdisabled;
|
||||
for (i = 0; i < sizeof(adapter->wep_keys) / sizeof(adapter->wep_keys[0]);
|
||||
i++)
|
||||
memset(&adapter->wep_keys[i], 0, sizeof(struct WLAN_802_11_KEY));
|
||||
adapter->wep_tx_keyidx = 0;
|
||||
adapter->secinfo.WEPstatus = wlan802_11WEPdisabled;
|
||||
adapter->secinfo.authmode = wlan802_11authmodeopen;
|
||||
adapter->secinfo.auth1xalg = WLAN_1X_AUTH_ALG_NONE;
|
||||
adapter->secinfo.Encryptionmode = CIPHER_NONE;
|
||||
adapter->inframode = wlan802_11infrastructure;
|
||||
|
||||
adapter->assoc_req = NULL;
|
||||
|
||||
adapter->numinscantable = 0;
|
||||
adapter->pattemptedbssdesc = NULL;
|
||||
mutex_init(&adapter->lock);
|
||||
|
||||
adapter->prescan = 1;
|
||||
|
||||
memset(&adapter->curbssparams, 0, sizeof(adapter->curbssparams));
|
||||
|
||||
/* PnP and power profile */
|
||||
adapter->surpriseremoved = 0;
|
||||
|
||||
adapter->currentpacketfilter =
|
||||
cmd_act_mac_rx_on | cmd_act_mac_tx_on;
|
||||
|
||||
adapter->radioon = RADIO_ON;
|
||||
adapter->txantenna = RF_ANTENNA_2;
|
||||
adapter->rxantenna = RF_ANTENNA_AUTO;
|
||||
|
||||
adapter->is_datarate_auto = 1;
|
||||
adapter->beaconperiod = MRVDRV_BEACON_INTERVAL;
|
||||
|
||||
// set default value of capinfo.
|
||||
#define SHORT_PREAMBLE_ALLOWED 1
|
||||
memset(&adapter->capinfo, 0, sizeof(adapter->capinfo));
|
||||
adapter->capinfo.shortpreamble = SHORT_PREAMBLE_ALLOWED;
|
||||
|
||||
adapter->adhocchannel = DEFAULT_AD_HOC_CHANNEL;
|
||||
|
||||
adapter->psmode = wlan802_11powermodecam;
|
||||
adapter->multipledtim = MRVDRV_DEFAULT_MULTIPLE_DTIM;
|
||||
|
||||
adapter->listeninterval = MRVDRV_DEFAULT_LISTEN_INTERVAL;
|
||||
|
||||
adapter->psstate = PS_STATE_FULL_POWER;
|
||||
adapter->needtowakeup = 0;
|
||||
adapter->locallisteninterval = 0; /* default value in firmware will be used */
|
||||
|
||||
adapter->datarate = 0; // Initially indicate the rate as auto
|
||||
|
||||
adapter->adhoc_grate_enabled = 0;
|
||||
|
||||
adapter->intcounter = 0;
|
||||
|
||||
adapter->currenttxskb = NULL;
|
||||
adapter->pkttxctrl = 0;
|
||||
|
||||
memset(&adapter->tx_queue_ps, 0, NR_TX_QUEUE*sizeof(struct sk_buff*));
|
||||
adapter->tx_queue_idx = 0;
|
||||
spin_lock_init(&adapter->txqueue_lock);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void command_timer_fn(unsigned long data);
|
||||
|
||||
int libertas_init_fw(wlan_private * priv)
|
||||
{
|
||||
int ret = -1;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
|
||||
ENTER();
|
||||
|
||||
/* Allocate adapter structure */
|
||||
if ((ret = wlan_allocate_adapter(priv)) != 0)
|
||||
goto done;
|
||||
|
||||
/* init adapter structure */
|
||||
wlan_init_adapter(priv);
|
||||
|
||||
/* init timer etc. */
|
||||
setup_timer(&adapter->command_timer, command_timer_fn,
|
||||
(unsigned long)priv);
|
||||
|
||||
/* download fimrware etc. */
|
||||
if ((ret = wlan_setup_station_hw(priv)) != 0) {
|
||||
del_timer_sync(&adapter->command_timer);
|
||||
goto done;
|
||||
}
|
||||
|
||||
/* init 802.11d */
|
||||
libertas_init_11d(priv);
|
||||
|
||||
ret = 0;
|
||||
done:
|
||||
LEAVE();
|
||||
return ret;
|
||||
}
|
||||
|
||||
void libertas_free_adapter(wlan_private * priv)
|
||||
{
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
|
||||
if (!adapter) {
|
||||
lbs_pr_debug(1, "Why double free adapter?:)\n");
|
||||
return;
|
||||
}
|
||||
|
||||
lbs_pr_debug(1, "Free command buffer\n");
|
||||
libertas_free_cmd_buffer(priv);
|
||||
|
||||
lbs_pr_debug(1, "Free commandTimer\n");
|
||||
del_timer(&adapter->command_timer);
|
||||
|
||||
lbs_pr_debug(1, "Free scantable\n");
|
||||
if (adapter->scantable) {
|
||||
kfree(adapter->scantable);
|
||||
adapter->scantable = NULL;
|
||||
}
|
||||
|
||||
lbs_pr_debug(1, "Free adapter\n");
|
||||
|
||||
/* Free the adapter object itself */
|
||||
kfree(adapter);
|
||||
priv->adapter = NULL;
|
||||
}
|
||||
|
||||
/**
|
||||
* This function handles the timeout of command sending.
|
||||
* It will re-send the same command again.
|
||||
*/
|
||||
static void command_timer_fn(unsigned long data)
|
||||
{
|
||||
wlan_private *priv = (wlan_private *)data;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
struct cmd_ctrl_node *ptempnode;
|
||||
struct cmd_ds_command *cmd;
|
||||
unsigned long flags;
|
||||
|
||||
ptempnode = adapter->cur_cmd;
|
||||
cmd = (struct cmd_ds_command *)ptempnode->bufvirtualaddr;
|
||||
|
||||
lbs_pr_info("command_timer_fn fired (%x)\n", cmd->command);
|
||||
|
||||
if (!adapter->fw_ready)
|
||||
return;
|
||||
|
||||
if (ptempnode == NULL) {
|
||||
lbs_pr_debug(1, "PTempnode Empty\n");
|
||||
return;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&adapter->driver_lock, flags);
|
||||
adapter->cur_cmd = NULL;
|
||||
spin_unlock_irqrestore(&adapter->driver_lock, flags);
|
||||
|
||||
lbs_pr_debug(1, "Re-sending same command as it timeout...!\n");
|
||||
libertas_queue_cmd(adapter, ptempnode, 0);
|
||||
|
||||
wake_up_interruptible(&priv->mainthread.waitq);
|
||||
|
||||
return;
|
||||
}
|
||||
13
drivers/net/wireless/libertas/fw.h
Normal file
13
drivers/net/wireless/libertas/fw.h
Normal file
@@ -0,0 +1,13 @@
|
||||
/**
|
||||
* This header file contains FW interface related definitions.
|
||||
*/
|
||||
#ifndef _WLAN_FW_H_
|
||||
#define _WLAN_FW_H_
|
||||
|
||||
#ifndef DEV_NAME_LEN
|
||||
#define DEV_NAME_LEN 32
|
||||
#endif
|
||||
|
||||
int libertas_init_fw(wlan_private * priv);
|
||||
|
||||
#endif /* _WLAN_FW_H_ */
|
||||
338
drivers/net/wireless/libertas/host.h
Normal file
338
drivers/net/wireless/libertas/host.h
Normal file
@@ -0,0 +1,338 @@
|
||||
/**
|
||||
* This file contains definitions of WLAN commands.
|
||||
*/
|
||||
|
||||
#ifndef _HOST_H_
|
||||
#define _HOST_H_
|
||||
|
||||
/** PUBLIC DEFINITIONS */
|
||||
#define DEFAULT_AD_HOC_CHANNEL 6
|
||||
#define DEFAULT_AD_HOC_CHANNEL_A 36
|
||||
|
||||
/** IEEE 802.11 oids */
|
||||
#define OID_802_11_SSID 0x00008002
|
||||
#define OID_802_11_INFRASTRUCTURE_MODE 0x00008008
|
||||
#define OID_802_11_FRAGMENTATION_THRESHOLD 0x00008009
|
||||
#define OID_802_11_RTS_THRESHOLD 0x0000800A
|
||||
#define OID_802_11_TX_ANTENNA_SELECTED 0x0000800D
|
||||
#define OID_802_11_SUPPORTED_RATES 0x0000800E
|
||||
#define OID_802_11_STATISTICS 0x00008012
|
||||
#define OID_802_11_TX_RETRYCOUNT 0x0000801D
|
||||
#define OID_802_11D_ENABLE 0x00008020
|
||||
|
||||
#define cmd_option_waitforrsp 0x0002
|
||||
|
||||
/** Host command ID */
|
||||
#define cmd_code_dnld 0x0002
|
||||
#define cmd_get_hw_spec 0x0003
|
||||
#define cmd_eeprom_update 0x0004
|
||||
#define cmd_802_11_reset 0x0005
|
||||
#define cmd_802_11_scan 0x0006
|
||||
#define cmd_802_11_get_log 0x000b
|
||||
#define cmd_mac_multicast_adr 0x0010
|
||||
#define cmd_802_11_authenticate 0x0011
|
||||
#define cmd_802_11_eeprom_access 0x0059
|
||||
#define cmd_802_11_associate 0x0050
|
||||
#define cmd_802_11_set_wep 0x0013
|
||||
#define cmd_802_11_get_stat 0x0014
|
||||
#define cmd_802_3_get_stat 0x0015
|
||||
#define cmd_802_11_snmp_mib 0x0016
|
||||
#define cmd_mac_reg_map 0x0017
|
||||
#define cmd_bbp_reg_map 0x0018
|
||||
#define cmd_mac_reg_access 0x0019
|
||||
#define cmd_bbp_reg_access 0x001a
|
||||
#define cmd_rf_reg_access 0x001b
|
||||
#define cmd_802_11_radio_control 0x001c
|
||||
#define cmd_802_11_rf_channel 0x001d
|
||||
#define cmd_802_11_rf_tx_power 0x001e
|
||||
#define cmd_802_11_rssi 0x001f
|
||||
#define cmd_802_11_rf_antenna 0x0020
|
||||
|
||||
#define cmd_802_11_ps_mode 0x0021
|
||||
|
||||
#define cmd_802_11_data_rate 0x0022
|
||||
#define cmd_rf_reg_map 0x0023
|
||||
#define cmd_802_11_deauthenticate 0x0024
|
||||
#define cmd_802_11_reassociate 0x0025
|
||||
#define cmd_802_11_disassociate 0x0026
|
||||
#define cmd_mac_control 0x0028
|
||||
#define cmd_802_11_ad_hoc_start 0x002b
|
||||
#define cmd_802_11_ad_hoc_join 0x002c
|
||||
|
||||
#define cmd_802_11_query_tkip_reply_cntrs 0x002e
|
||||
#define cmd_802_11_enable_rsn 0x002f
|
||||
#define cmd_802_11_pairwise_tsc 0x0036
|
||||
#define cmd_802_11_group_tsc 0x0037
|
||||
#define cmd_802_11_key_material 0x005e
|
||||
|
||||
#define cmd_802_11_set_afc 0x003c
|
||||
#define cmd_802_11_get_afc 0x003d
|
||||
|
||||
#define cmd_802_11_ad_hoc_stop 0x0040
|
||||
|
||||
#define cmd_802_11_beacon_stop 0x0049
|
||||
|
||||
#define cmd_802_11_mac_address 0x004D
|
||||
#define cmd_802_11_eeprom_access 0x0059
|
||||
|
||||
#define cmd_802_11_band_config 0x0058
|
||||
|
||||
#define cmd_802_11d_domain_info 0x005b
|
||||
|
||||
#define cmd_802_11_sleep_params 0x0066
|
||||
|
||||
#define cmd_802_11_inactivity_timeout 0x0067
|
||||
|
||||
#define cmd_802_11_tpc_cfg 0x0072
|
||||
#define cmd_802_11_pwr_cfg 0x0073
|
||||
|
||||
#define cmd_802_11_led_gpio_ctrl 0x004e
|
||||
|
||||
#define cmd_802_11_subscribe_event 0x0075
|
||||
|
||||
#define cmd_802_11_rate_adapt_rateset 0x0076
|
||||
|
||||
#define cmd_802_11_tx_rate_query 0x007f
|
||||
|
||||
#define cmd_get_tsf 0x0080
|
||||
|
||||
#define cmd_bt_access 0x0087
|
||||
#define cmd_ret_bt_access 0x8087
|
||||
|
||||
#define cmd_fwt_access 0x0088
|
||||
#define cmd_ret_fwt_access 0x8088
|
||||
|
||||
#define cmd_mesh_access 0x0090
|
||||
#define cmd_ret_mesh_access 0x8090
|
||||
|
||||
/* For the IEEE Power Save */
|
||||
#define cmd_subcmd_enter_ps 0x0030
|
||||
#define cmd_subcmd_exit_ps 0x0031
|
||||
#define cmd_subcmd_sleep_confirmed 0x0034
|
||||
#define cmd_subcmd_full_powerdown 0x0035
|
||||
#define cmd_subcmd_full_powerup 0x0036
|
||||
|
||||
/* command RET code, MSB is set to 1 */
|
||||
#define cmd_ret_hw_spec_info 0x8003
|
||||
#define cmd_ret_eeprom_update 0x8004
|
||||
#define cmd_ret_802_11_reset 0x8005
|
||||
#define cmd_ret_802_11_scan 0x8006
|
||||
#define cmd_ret_802_11_get_log 0x800b
|
||||
#define cmd_ret_mac_control 0x8028
|
||||
#define cmd_ret_mac_multicast_adr 0x8010
|
||||
#define cmd_ret_802_11_authenticate 0x8011
|
||||
#define cmd_ret_802_11_deauthenticate 0x8024
|
||||
#define cmd_ret_802_11_associate 0x8012
|
||||
#define cmd_ret_802_11_reassociate 0x8025
|
||||
#define cmd_ret_802_11_disassociate 0x8026
|
||||
#define cmd_ret_802_11_set_wep 0x8013
|
||||
#define cmd_ret_802_11_stat 0x8014
|
||||
#define cmd_ret_802_3_stat 0x8015
|
||||
#define cmd_ret_802_11_snmp_mib 0x8016
|
||||
#define cmd_ret_mac_reg_map 0x8017
|
||||
#define cmd_ret_bbp_reg_map 0x8018
|
||||
#define cmd_ret_rf_reg_map 0x8023
|
||||
#define cmd_ret_mac_reg_access 0x8019
|
||||
#define cmd_ret_bbp_reg_access 0x801a
|
||||
#define cmd_ret_rf_reg_access 0x801b
|
||||
#define cmd_ret_802_11_radio_control 0x801c
|
||||
#define cmd_ret_802_11_rf_channel 0x801d
|
||||
#define cmd_ret_802_11_rssi 0x801f
|
||||
#define cmd_ret_802_11_rf_tx_power 0x801e
|
||||
#define cmd_ret_802_11_rf_antenna 0x8020
|
||||
#define cmd_ret_802_11_ps_mode 0x8021
|
||||
#define cmd_ret_802_11_data_rate 0x8022
|
||||
|
||||
#define cmd_ret_802_11_ad_hoc_start 0x802B
|
||||
#define cmd_ret_802_11_ad_hoc_join 0x802C
|
||||
|
||||
#define cmd_ret_802_11_query_tkip_reply_cntrs 0x802e
|
||||
#define cmd_ret_802_11_enable_rsn 0x802f
|
||||
#define cmd_ret_802_11_pairwise_tsc 0x8036
|
||||
#define cmd_ret_802_11_group_tsc 0x8037
|
||||
#define cmd_ret_802_11_key_material 0x805e
|
||||
|
||||
#define cmd_enable_rsn 0x0001
|
||||
#define cmd_disable_rsn 0x0000
|
||||
|
||||
#define cmd_act_set 0x0001
|
||||
#define cmd_act_get 0x0000
|
||||
|
||||
#define cmd_act_get_AES (cmd_act_get + 2)
|
||||
#define cmd_act_set_AES (cmd_act_set + 2)
|
||||
#define cmd_act_remove_aes (cmd_act_set + 3)
|
||||
|
||||
#define cmd_ret_802_11_set_afc 0x803c
|
||||
#define cmd_ret_802_11_get_afc 0x803d
|
||||
|
||||
#define cmd_ret_802_11_ad_hoc_stop 0x8040
|
||||
|
||||
#define cmd_ret_802_11_beacon_stop 0x8049
|
||||
|
||||
#define cmd_ret_802_11_mac_address 0x804D
|
||||
#define cmd_ret_802_11_eeprom_access 0x8059
|
||||
|
||||
#define cmd_ret_802_11_band_config 0x8058
|
||||
|
||||
#define cmd_ret_802_11_sleep_params 0x8066
|
||||
|
||||
#define cmd_ret_802_11_inactivity_timeout 0x8067
|
||||
|
||||
#define cmd_ret_802_11d_domain_info (0x8000 | \
|
||||
cmd_802_11d_domain_info)
|
||||
|
||||
#define cmd_ret_802_11_tpc_cfg (cmd_802_11_tpc_cfg | 0x8000)
|
||||
#define cmd_ret_802_11_pwr_cfg (cmd_802_11_pwr_cfg | 0x8000)
|
||||
|
||||
#define cmd_ret_802_11_led_gpio_ctrl 0x804e
|
||||
|
||||
#define cmd_ret_802_11_subscribe_event (cmd_802_11_subscribe_event | 0x8000)
|
||||
|
||||
#define cmd_ret_802_11_rate_adapt_rateset (cmd_802_11_rate_adapt_rateset | 0x8000)
|
||||
|
||||
#define cmd_rte_802_11_tx_rate_query (cmd_802_11_tx_rate_query | 0x8000)
|
||||
|
||||
#define cmd_ret_get_tsf 0x8080
|
||||
|
||||
/* Define action or option for cmd_802_11_set_wep */
|
||||
#define cmd_act_add 0x0002
|
||||
#define cmd_act_remove 0x0004
|
||||
#define cmd_act_use_default 0x0008
|
||||
|
||||
#define cmd_type_wep_40_bit 0x0001
|
||||
#define cmd_type_wep_104_bit 0x0002
|
||||
|
||||
#define cmd_NUM_OF_WEP_KEYS 4
|
||||
|
||||
#define cmd_WEP_KEY_INDEX_MASK 0x3fff
|
||||
|
||||
/* Define action or option for cmd_802_11_reset */
|
||||
#define cmd_act_halt 0x0003
|
||||
|
||||
/* Define action or option for cmd_802_11_scan */
|
||||
#define cmd_bss_type_bss 0x0001
|
||||
#define cmd_bss_type_ibss 0x0002
|
||||
#define cmd_bss_type_any 0x0003
|
||||
|
||||
/* Define action or option for cmd_802_11_scan */
|
||||
#define cmd_scan_type_active 0x0000
|
||||
#define cmd_scan_type_passive 0x0001
|
||||
|
||||
#define cmd_scan_radio_type_bg 0
|
||||
|
||||
#define cmd_scan_probe_delay_time 0
|
||||
|
||||
/* Define action or option for cmd_mac_control */
|
||||
#define cmd_act_mac_rx_on 0x0001
|
||||
#define cmd_act_mac_tx_on 0x0002
|
||||
#define cmd_act_mac_loopback_on 0x0004
|
||||
#define cmd_act_mac_wep_enable 0x0008
|
||||
#define cmd_act_mac_int_enable 0x0010
|
||||
#define cmd_act_mac_multicast_enable 0x0020
|
||||
#define cmd_act_mac_broadcast_enable 0x0040
|
||||
#define cmd_act_mac_promiscuous_enable 0x0080
|
||||
#define cmd_act_mac_all_multicast_enable 0x0100
|
||||
#define cmd_act_mac_strict_protection_enable 0x0400
|
||||
|
||||
/* Define action or option for cmd_802_11_radio_control */
|
||||
#define cmd_type_auto_preamble 0x0001
|
||||
#define cmd_type_short_preamble 0x0002
|
||||
#define cmd_type_long_preamble 0x0003
|
||||
|
||||
#define TURN_ON_RF 0x01
|
||||
#define RADIO_ON 0x01
|
||||
#define RADIO_OFF 0x00
|
||||
|
||||
#define SET_AUTO_PREAMBLE 0x05
|
||||
#define SET_SHORT_PREAMBLE 0x03
|
||||
#define SET_LONG_PREAMBLE 0x01
|
||||
|
||||
/* Define action or option for CMD_802_11_RF_CHANNEL */
|
||||
#define cmd_opt_802_11_rf_channel_get 0x00
|
||||
#define cmd_opt_802_11_rf_channel_set 0x01
|
||||
|
||||
/* Define action or option for cmd_802_11_rf_tx_power */
|
||||
#define cmd_act_tx_power_opt_get 0x0000
|
||||
#define cmd_act_tx_power_opt_set_high 0x8007
|
||||
#define cmd_act_tx_power_opt_set_mid 0x8004
|
||||
#define cmd_act_tx_power_opt_set_low 0x8000
|
||||
|
||||
#define cmd_act_tx_power_index_high 0x0007
|
||||
#define cmd_act_tx_power_index_mid 0x0004
|
||||
#define cmd_act_tx_power_index_low 0x0000
|
||||
|
||||
/* Define action or option for cmd_802_11_data_rate */
|
||||
#define cmd_act_set_tx_auto 0x0000
|
||||
#define cmd_act_set_tx_fix_rate 0x0001
|
||||
#define cmd_act_get_tx_rate 0x0002
|
||||
|
||||
#define cmd_act_set_rx 0x0001
|
||||
#define cmd_act_set_tx 0x0002
|
||||
#define cmd_act_set_both 0x0003
|
||||
#define cmd_act_get_rx 0x0004
|
||||
#define cmd_act_get_tx 0x0008
|
||||
#define cmd_act_get_both 0x000c
|
||||
|
||||
/* Define action or option for cmd_802_11_ps_mode */
|
||||
#define cmd_type_cam 0x0000
|
||||
#define cmd_type_max_psp 0x0001
|
||||
#define cmd_type_fast_psp 0x0002
|
||||
|
||||
/* Define action or option for cmd_bt_access */
|
||||
enum cmd_bt_access_opts {
|
||||
/* The bt commands start at 5 instead of 1 because the old dft commands
|
||||
* are mapped to 1-4. These old commands are no longer maintained and
|
||||
* should not be called.
|
||||
*/
|
||||
cmd_act_bt_access_add = 5,
|
||||
cmd_act_bt_access_del,
|
||||
cmd_act_bt_access_list,
|
||||
cmd_act_bt_access_reset
|
||||
};
|
||||
|
||||
/* Define action or option for cmd_fwt_access */
|
||||
enum cmd_fwt_access_opts {
|
||||
cmd_act_fwt_access_add = 1,
|
||||
cmd_act_fwt_access_del,
|
||||
cmd_act_fwt_access_lookup,
|
||||
cmd_act_fwt_access_list,
|
||||
cmd_act_fwt_access_list_route,
|
||||
cmd_act_fwt_access_list_neighbor,
|
||||
cmd_act_fwt_access_reset,
|
||||
cmd_act_fwt_access_cleanup,
|
||||
cmd_act_fwt_access_time,
|
||||
};
|
||||
|
||||
/* Define action or option for cmd_mesh_access */
|
||||
enum cmd_mesh_access_opts {
|
||||
cmd_act_mesh_get_ttl = 1,
|
||||
cmd_act_mesh_set_ttl,
|
||||
cmd_act_mesh_get_stats,
|
||||
cmd_act_mesh_get_mpp,
|
||||
cmd_act_mesh_set_mpp,
|
||||
};
|
||||
|
||||
/** Card Event definition */
|
||||
#define MACREG_INT_CODE_TX_PPA_FREE 0x00000000
|
||||
#define MACREG_INT_CODE_TX_DMA_DONE 0x00000001
|
||||
#define MACREG_INT_CODE_LINK_LOSE_W_SCAN 0x00000002
|
||||
#define MACREG_INT_CODE_LINK_LOSE_NO_SCAN 0x00000003
|
||||
#define MACREG_INT_CODE_LINK_SENSED 0x00000004
|
||||
#define MACREG_INT_CODE_CMD_FINISHED 0x00000005
|
||||
#define MACREG_INT_CODE_MIB_CHANGED 0x00000006
|
||||
#define MACREG_INT_CODE_INIT_DONE 0x00000007
|
||||
#define MACREG_INT_CODE_DEAUTHENTICATED 0x00000008
|
||||
#define MACREG_INT_CODE_DISASSOCIATED 0x00000009
|
||||
#define MACREG_INT_CODE_PS_AWAKE 0x0000000a
|
||||
#define MACREG_INT_CODE_PS_SLEEP 0x0000000b
|
||||
#define MACREG_INT_CODE_MIC_ERR_MULTICAST 0x0000000d
|
||||
#define MACREG_INT_CODE_MIC_ERR_UNICAST 0x0000000e
|
||||
#define MACREG_INT_CODE_WM_AWAKE 0x0000000f
|
||||
#define MACREG_INT_CODE_ADHOC_BCN_LOST 0x00000011
|
||||
#define MACREG_INT_CODE_RSSI_LOW 0x00000019
|
||||
#define MACREG_INT_CODE_SNR_LOW 0x0000001a
|
||||
#define MACREG_INT_CODE_MAX_FAIL 0x0000001b
|
||||
#define MACREG_INT_CODE_RSSI_HIGH 0x0000001c
|
||||
#define MACREG_INT_CODE_SNR_HIGH 0x0000001d
|
||||
|
||||
#endif /* _HOST_H_ */
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user