Merge branch 'libertas-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream-fixes
This commit is contained in:
commit
36f9d0c5e9
@ -2,7 +2,7 @@ libertas-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 \
|
||||
debugfs.o \
|
||||
ethtool.o assoc.o
|
||||
|
||||
usb8xxx-objs += if_bootcmd.o
|
||||
|
@ -28,281 +28,6 @@ DRIVER LOADING
|
||||
|
||||
insmod usb8388.ko [fw_name=usb8388.bin]
|
||||
|
||||
=====================
|
||||
IWPRIV COMMAND
|
||||
=====================
|
||||
|
||||
NAME
|
||||
This manual describes the usage of private commands used in Marvell WLAN
|
||||
Linux Driver. All the commands available in Wlanconfig will not be available
|
||||
in the iwpriv.
|
||||
|
||||
SYNOPSIS
|
||||
iwpriv <ethX> <command> [sub-command] ...
|
||||
|
||||
iwpriv ethX setregioncode <n>
|
||||
iwpriv ethX getregioncode
|
||||
|
||||
Version 5 Command:
|
||||
iwpriv ethX ledgpio <n>
|
||||
|
||||
BT Commands:
|
||||
The blinding table (BT) contains a list of mac addresses that will be,
|
||||
by default, ignored by the firmware. It is also possible to invert this
|
||||
behavior so that we will ignore all traffic except for the portion
|
||||
coming from mac addresess in the list. It is primarily used for
|
||||
debugging and testing networks. It can be edited and inspected with
|
||||
the following commands:
|
||||
|
||||
iwpriv ethX bt_reset
|
||||
iwpriv ethX bt_add <mac_address>
|
||||
iwpriv ethX bt_del <mac_address>
|
||||
iwpriv ethX bt_list <id>
|
||||
iwpriv ethX bt_get_invert <n>
|
||||
iwpriv ethX bt_set_invert <n>
|
||||
|
||||
FWT Commands:
|
||||
The forwarding table (FWT) is a feature used to manage mesh network
|
||||
routing in the firmware. The FWT is essentially a routing table that
|
||||
associates a destination mac address (da) with a next hop receiver
|
||||
address (ra). The FWT can be inspected and edited with the following
|
||||
iwpriv commands, which are described in greater detail below.
|
||||
Eventually, the table will be automatically maintained by a custom
|
||||
routing protocol.
|
||||
|
||||
NOTE: FWT commands replace the previous DFT commands. What were the DFT
|
||||
commands?, you might ask. They were an earlier API to the firmware that
|
||||
implemented a simple MAC-layer forwarding mechanism. In the unlikely
|
||||
event that you were using these commands, you must migrate to the new
|
||||
FWT commands which can be used to achieve the same functionality.
|
||||
|
||||
iwpriv ethX fwt_add [parameters]
|
||||
iwpriv ethX fwt_del [parameters]
|
||||
iwpriv ethX fwt_lookup [parameters]
|
||||
iwpriv ethX fwt_list [parameters]
|
||||
iwpriv ethX fwt_list_route [parameters]
|
||||
iwpriv ethX fwt_list_neigh [parameters]
|
||||
iwpriv ethX fwt_reset [parameters]
|
||||
iwpriv ethX fwt_cleanup
|
||||
iwpriv ethX fwt_time
|
||||
|
||||
MESH Commands:
|
||||
|
||||
The MESH commands are used to configure various features of the mesh
|
||||
routing protocol. The following commands are supported:
|
||||
|
||||
iwpriv ethX mesh_get_ttl
|
||||
iwpriv ethX mesh_set_ttl ttl
|
||||
|
||||
DESCRIPTION
|
||||
Those commands are used to send additional commands to the Marvell WLAN
|
||||
card via the Linux device driver.
|
||||
|
||||
The ethX parameter specifies the network device that is to be used to
|
||||
perform this command on. it could be eth0, eth1 etc.
|
||||
|
||||
setregioncode
|
||||
This command is used to set the region code in the station.
|
||||
where value is 'region code' for various regions like
|
||||
USA FCC, Canada IC, Spain, France, Europe ETSI, Japan ...
|
||||
|
||||
Usage:
|
||||
iwpriv ethX setregioncode 0x10: set region code to USA (0x10).
|
||||
|
||||
getregioncode
|
||||
This command is used to get the region code information set in the
|
||||
station.
|
||||
|
||||
ledgpio
|
||||
This command is used to set/get LEDs.
|
||||
|
||||
iwpriv ethX ledgpio <LEDs>
|
||||
will set the corresponding LED for the GPIO Line.
|
||||
|
||||
iwpriv ethX ledgpio
|
||||
will give u which LEDs are Enabled.
|
||||
|
||||
Usage:
|
||||
iwpriv eth1 ledgpio 1 0 2 1 3 4
|
||||
will enable
|
||||
LED 1 -> GPIO 0
|
||||
LED 2 -> GPIO 1
|
||||
LED 3 -> GPIO 4
|
||||
|
||||
iwpriv eth1 ledgpio
|
||||
shows LED information in the format as mentioned above.
|
||||
|
||||
Note: LED0 is invalid
|
||||
Note: Maximum Number of LEDs are 16.
|
||||
|
||||
fwt_add
|
||||
This command is used to insert an entry into the FWT table. The list of
|
||||
parameters must follow the following structure:
|
||||
|
||||
iwpriv ethX fwt_add da ra [metric dir rate ssn dsn hopcount ttl expiration sleepmode snr]
|
||||
|
||||
The parameters between brackets are optional, but they must appear in
|
||||
the order specified. For example, if you want to specify the metric,
|
||||
you must also specify the dir, ssn, and dsn but you need not specify the
|
||||
hopcount, expiration, sleepmode, or snr. Any unspecified parameters
|
||||
will be assigned the defaults specified below.
|
||||
|
||||
The different parameters are:-
|
||||
da -- DA MAC address in the form 00:11:22:33:44:55
|
||||
ra -- RA MAC address in the form 00:11:22:33:44:55
|
||||
metric -- route metric (cost: smaller-metric routes are
|
||||
preferred, default is 0)
|
||||
dir -- direction (1 for direct, 0 for reverse,
|
||||
default is 1)
|
||||
rate -- data rate used for transmission to the RA,
|
||||
as specified for the rateadapt command,
|
||||
default is 3 (11Mbps)
|
||||
ssn -- Source Sequence Number (time at the RA for
|
||||
reverse routes. Default is 0)
|
||||
dsn -- Destination Sequence Number (time at the DA
|
||||
for direct routes. Default is 0)
|
||||
hopcount -- hop count (currently unused, default is 0)
|
||||
ttl -- TTL (Only used in reverse entries)
|
||||
expiration -- entry expiration (in ticks, where a tick is
|
||||
1024us, or ~ 1ms. Use 0 for an indefinite
|
||||
entry, default is 0)
|
||||
sleepmode -- RA's sleep mode (currently unused, default is
|
||||
0)
|
||||
snr -- SNR in the link to RA (currently unused,
|
||||
default is 0)
|
||||
|
||||
The command does not return anything.
|
||||
|
||||
fwt_del
|
||||
This command is used to remove an entry to the FWT table. The list of
|
||||
parameters must follow the following structure:
|
||||
|
||||
iwpriv ethX fwt_del da ra [dir]
|
||||
|
||||
where the different parameters are:-
|
||||
da -- DA MAC address (in the form "00:11:22:33:44:55")
|
||||
ra -- RA MAC address (in the form "00:11:22:33:44:55")
|
||||
dir -- direction (1 for direct, 0 for reverse,
|
||||
default is 1)
|
||||
|
||||
The command does not return anything.
|
||||
|
||||
fwt_lookup
|
||||
This command is used to get the best route in the FWT table to a given
|
||||
host. The only parameter is the MAC address of the host that is being
|
||||
looked for.
|
||||
|
||||
iwpriv ethX fwt_lookup da
|
||||
|
||||
where:-
|
||||
da -- DA MAC address (in the form "00:11:22:33:44:55")
|
||||
|
||||
The command returns an output string identical to the one returned by
|
||||
fwt_list described below.
|
||||
|
||||
|
||||
fwt_list
|
||||
This command is used to list a route from the FWT table. The only
|
||||
parameter is the index into the table. If you want to list all the
|
||||
routes in a table, start with index=0, and keep listing until you get a
|
||||
"(null)" string. Note that the indicies may change as the fwt is
|
||||
updated. It is expected that most users will not use fwt_list directly,
|
||||
but that a utility similar to the traditional route command will be used
|
||||
to invoke fwt_list over and over.
|
||||
|
||||
iwpriv ethX fwt_list index
|
||||
|
||||
The output is a string of the following form:
|
||||
|
||||
da ra valid metric dir rate ssn dsn hopcount ttl expiration
|
||||
sleepmode snr precursor
|
||||
|
||||
where the different fields are:-
|
||||
da -- DA MAC address (in the form "00:11:22:33:44:55")
|
||||
ra -- RA MAC address (in the form "00:11:22:33:44:55")
|
||||
valid -- whether the route is valid (0 if not valid)
|
||||
metric -- route metric (cost: smaller-metric routes are preferred)
|
||||
dir -- direction (1 for direct, 0 for reverse)
|
||||
rate -- data rate used for transmission to the RA,
|
||||
as specified for the rateadapt command
|
||||
ssn -- Source Sequence Number (time at the RA for reverse routes)
|
||||
dsn -- Destination Sequence Number (time at the DA for direct routes)
|
||||
hopcount -- hop count (currently unused)
|
||||
ttl -- TTL (only used in reverse entries)
|
||||
expiration -- entry expiration (in ticks, where a tick is 1024us, or ~ 1ms. Use 0 for an indefinite entry)
|
||||
sleepmode -- RA's sleep mode (currently unused)
|
||||
snr -- SNR in the link to RA (currently unused)
|
||||
precursor -- predecessor in direct routes
|
||||
|
||||
fwt_list_route
|
||||
This command is equivalent to fwt_list.
|
||||
|
||||
fwt_list_neigh
|
||||
This command is used to list a neighbor from the FWT table. The only
|
||||
parameter is the neighbor ID. If you want to list all the neighbors in a
|
||||
table, start with nid=0, and keep incrementing nid until you get a
|
||||
"(null)" string. Note that the nid from a fwt_list_route command can be
|
||||
used as an input to this command. Also note that this command is meant
|
||||
mostly for debugging. It is expected that users will use fwt_lookup.
|
||||
One important reason for this is that the neighbor id may change as the
|
||||
neighbor table is altered.
|
||||
|
||||
iwpriv ethX fwt_list_neigh nid
|
||||
|
||||
The output is a string of the following form:
|
||||
|
||||
ra sleepmode snr references
|
||||
|
||||
where the different fields are:-
|
||||
ra -- RA MAC address (in the form "00:11:22:33:44:55")
|
||||
sleepmode -- RA's sleep mode (currently unused)
|
||||
snr -- SNR in the link to RA (currently unused)
|
||||
references -- RA's reference counter
|
||||
|
||||
fwt_reset
|
||||
This command is used to reset the FWT table, getting rid of all the
|
||||
entries. There are no input parameters.
|
||||
|
||||
iwpriv ethX fwt_reset
|
||||
|
||||
The command does not return anything.
|
||||
|
||||
fwt_cleanup
|
||||
This command is used to perform user-based garbage recollection. The
|
||||
FWT table is checked, and all the entries that are expired or invalid
|
||||
are cleaned. Note that this is exported to the driver for debugging
|
||||
purposes, as garbage collection is also fired by the firmware when in
|
||||
space problems. There are no input parameters.
|
||||
|
||||
iwpriv ethX fwt_cleanup
|
||||
|
||||
The command does returns the number of invalid/expired routes deleted.
|
||||
|
||||
fwt_time
|
||||
This command returns a card's internal time representation. It is this
|
||||
time that is used to represent the expiration times of FWT entries. The
|
||||
number is not consistent from card to card; it is simply a timer count.
|
||||
The fwt_time command is used to inspect the timer so that expiration
|
||||
times reported by fwt_list can be properly interpreted.
|
||||
|
||||
iwpriv ethX fwt_time
|
||||
|
||||
mesh_get_ttl
|
||||
|
||||
The mesh ttl is the number of hops a mesh packet can traverse before it
|
||||
is dropped. This parameter is used to prevent infinite loops in the
|
||||
mesh network. The value returned by this function is the ttl assigned
|
||||
to all mesh packets. Currently there is no way to control the ttl on a
|
||||
per packet or per socket basis.
|
||||
|
||||
iwpriv ethX mesh_get_ttl
|
||||
|
||||
mesh_set_ttl ttl
|
||||
|
||||
Set the ttl. The argument must be between 0 and 255.
|
||||
|
||||
iwpriv ethX mesh_set_ttl <ttl>
|
||||
|
||||
=========================
|
||||
ETHTOOL
|
||||
=========================
|
||||
|
@ -323,6 +323,8 @@ static int assoc_helper_secinfo(wlan_private *priv,
|
||||
{
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
int ret = 0;
|
||||
u32 do_wpa;
|
||||
u32 rsn = 0;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_ASSOC);
|
||||
|
||||
@ -333,12 +335,34 @@ static int assoc_helper_secinfo(wlan_private *priv,
|
||||
if (ret)
|
||||
goto out;
|
||||
|
||||
/* enable/disable RSN */
|
||||
/* If RSN is already enabled, don't try to enable it again, since
|
||||
* ENABLE_RSN resets internal state machines and will clobber the
|
||||
* 4-way WPA handshake.
|
||||
*/
|
||||
|
||||
/* Get RSN enabled/disabled */
|
||||
ret = libertas_prepare_and_send_command(priv,
|
||||
cmd_802_11_enable_rsn,
|
||||
cmd_act_set,
|
||||
cmd_option_waitforrsp,
|
||||
0, assoc_req);
|
||||
0, &rsn);
|
||||
if (ret) {
|
||||
lbs_deb_assoc("Failed to get RSN status: %d", ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* Don't re-enable RSN if it's already enabled */
|
||||
do_wpa = (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled);
|
||||
if (do_wpa == rsn)
|
||||
goto out;
|
||||
|
||||
/* Set RSN enabled/disabled */
|
||||
rsn = do_wpa;
|
||||
ret = libertas_prepare_and_send_command(priv,
|
||||
cmd_802_11_enable_rsn,
|
||||
cmd_act_set,
|
||||
cmd_option_waitforrsp,
|
||||
0, &rsn);
|
||||
|
||||
out:
|
||||
lbs_deb_leave_args(LBS_DEB_ASSOC, "ret %d", ret);
|
||||
|
@ -228,17 +228,19 @@ static int wlan_cmd_802_11_enable_rsn(wlan_private * priv,
|
||||
void * pdata_buf)
|
||||
{
|
||||
struct cmd_ds_802_11_enable_rsn *penableRSN = &cmd->params.enbrsn;
|
||||
struct assoc_request * assoc_req = pdata_buf;
|
||||
u32 * enable = pdata_buf;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_CMD);
|
||||
|
||||
cmd->command = cpu_to_le16(cmd_802_11_enable_rsn);
|
||||
cmd->size = cpu_to_le16(sizeof(*penableRSN) + S_DS_GEN);
|
||||
penableRSN->action = cpu_to_le16(cmd_action);
|
||||
if (assoc_req->secinfo.WPAenabled || assoc_req->secinfo.WPA2enabled) {
|
||||
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
|
||||
} else {
|
||||
penableRSN->enable = cpu_to_le16(cmd_disable_rsn);
|
||||
|
||||
if (cmd_action == cmd_act_set) {
|
||||
if (*enable)
|
||||
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
|
||||
else
|
||||
penableRSN->enable = cpu_to_le16(cmd_enable_rsn);
|
||||
}
|
||||
|
||||
lbs_deb_leave(LBS_DEB_CMD);
|
||||
|
@ -537,6 +537,24 @@ static int wlan_ret_get_log(wlan_private * priv,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int libertas_ret_802_11_enable_rsn(wlan_private * priv,
|
||||
struct cmd_ds_command *resp)
|
||||
{
|
||||
struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn;
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
u32 * pdata_buf = adapter->cur_cmd->pdata_buf;
|
||||
|
||||
lbs_deb_enter(LBS_DEB_CMD);
|
||||
|
||||
if (enable_rsn->action == cpu_to_le16(cmd_act_get)) {
|
||||
if (pdata_buf)
|
||||
*pdata_buf = (u32) le16_to_cpu(enable_rsn->enable);
|
||||
}
|
||||
|
||||
lbs_deb_enter(LBS_DEB_CMD);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int handle_cmd_response(u16 respcmd,
|
||||
struct cmd_ds_command *resp,
|
||||
wlan_private *priv)
|
||||
@ -610,7 +628,10 @@ static inline int handle_cmd_response(u16 respcmd,
|
||||
case cmd_ret_802_11_authenticate:
|
||||
case cmd_ret_802_11_radio_control:
|
||||
case cmd_ret_802_11_beacon_stop:
|
||||
break;
|
||||
|
||||
case cmd_ret_802_11_enable_rsn:
|
||||
ret = libertas_ret_802_11_enable_rsn(priv, resp);
|
||||
break;
|
||||
|
||||
case cmd_ret_802_11_data_rate:
|
||||
|
@ -503,7 +503,7 @@ struct cmd_ds_802_11_ad_hoc_join {
|
||||
struct cmd_ds_802_11_enable_rsn {
|
||||
__le16 action;
|
||||
__le16 enable;
|
||||
};
|
||||
} __attribute__ ((packed));
|
||||
|
||||
struct MrvlIEtype_keyParamSet {
|
||||
/* type ID */
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -181,7 +181,8 @@ u16 libertas_region_code_to_index[MRVDRV_MAX_REGION_CODE] =
|
||||
* @brief Get function for sysfs attribute anycast_mask
|
||||
*/
|
||||
static ssize_t libertas_anycast_get(struct device * dev,
|
||||
struct device_attribute *attr, char * buf) {
|
||||
struct device_attribute *attr, char * buf)
|
||||
{
|
||||
struct cmd_ds_mesh_access mesh_access;
|
||||
|
||||
memset(&mesh_access, 0, sizeof(mesh_access));
|
||||
@ -197,7 +198,8 @@ static ssize_t libertas_anycast_get(struct device * dev,
|
||||
* @brief Set function for sysfs attribute anycast_mask
|
||||
*/
|
||||
static ssize_t libertas_anycast_set(struct device * dev,
|
||||
struct device_attribute *attr, const char * buf, size_t count) {
|
||||
struct device_attribute *attr, const char * buf, size_t count)
|
||||
{
|
||||
struct cmd_ds_mesh_access mesh_access;
|
||||
uint32_t datum;
|
||||
|
||||
@ -799,7 +801,6 @@ wlan_private *libertas_add_card(void *card, struct device *dmdev)
|
||||
dev->open = wlan_open;
|
||||
dev->hard_start_xmit = wlan_pre_start_xmit;
|
||||
dev->stop = wlan_close;
|
||||
dev->do_ioctl = libertas_do_ioctl;
|
||||
dev->set_mac_address = wlan_set_mac_address;
|
||||
dev->tx_timeout = wlan_tx_timeout;
|
||||
dev->get_stats = wlan_get_stats;
|
||||
@ -918,7 +919,6 @@ int libertas_add_mesh(wlan_private *priv, struct device *dev)
|
||||
mesh_dev->open = mesh_open;
|
||||
mesh_dev->hard_start_xmit = mesh_pre_start_xmit;
|
||||
mesh_dev->stop = mesh_close;
|
||||
mesh_dev->do_ioctl = libertas_do_ioctl;
|
||||
mesh_dev->get_stats = wlan_get_stats;
|
||||
mesh_dev->set_mac_address = wlan_set_mac_address;
|
||||
mesh_dev->ethtool_ops = &libertas_ethtool_ops;
|
||||
|
@ -214,38 +214,6 @@ done:
|
||||
return matched;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Post process the scan table after a new scan command has completed
|
||||
*
|
||||
* Inspect each entry of the scan table and try to find an entry that
|
||||
* matches our current associated/joined network from the scan. If
|
||||
* one is found, update the stored copy of the bssdescriptor for our
|
||||
* current network.
|
||||
*
|
||||
* Debug dump the current scan table contents if compiled accordingly.
|
||||
*
|
||||
* @param priv A pointer to wlan_private structure
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
static void wlan_scan_process_results(wlan_private * priv)
|
||||
{
|
||||
wlan_adapter *adapter = priv->adapter;
|
||||
struct bss_descriptor * iter_bss;
|
||||
int i = 0;
|
||||
|
||||
if (adapter->connect_status == libertas_connected)
|
||||
return;
|
||||
|
||||
mutex_lock(&adapter->lock);
|
||||
list_for_each_entry (iter_bss, &adapter->network_list, list) {
|
||||
lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
|
||||
i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
|
||||
escape_essid(iter_bss->ssid, iter_bss->ssid_len));
|
||||
}
|
||||
mutex_unlock(&adapter->lock);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Create a channel list for the driver to scan based on region info
|
||||
*
|
||||
@ -791,6 +759,10 @@ int wlan_scan_networks(wlan_private * priv,
|
||||
u8 scancurrentchanonly;
|
||||
int maxchanperscan;
|
||||
int ret;
|
||||
#ifdef CONFIG_LIBERTAS_DEBUG
|
||||
struct bss_descriptor * iter_bss;
|
||||
int i = 0;
|
||||
#endif
|
||||
|
||||
lbs_deb_enter(LBS_DEB_ASSOC);
|
||||
|
||||
@ -832,11 +804,16 @@ int wlan_scan_networks(wlan_private * priv,
|
||||
puserscanin,
|
||||
full_scan);
|
||||
|
||||
/* Process the resulting scan table:
|
||||
* - Remove any bad ssids
|
||||
* - Update our current BSS information from scan data
|
||||
*/
|
||||
wlan_scan_process_results(priv);
|
||||
#ifdef CONFIG_LIBERTAS_DEBUG
|
||||
/* Dump the scan table */
|
||||
mutex_lock(&adapter->lock);
|
||||
list_for_each_entry (iter_bss, &adapter->network_list, list) {
|
||||
lbs_deb_scan("Scan:(%02d) " MAC_FMT ", RSSI[%03d], SSID[%s]\n",
|
||||
i++, MAC_ARG(iter_bss->bssid), (s32) iter_bss->rssi,
|
||||
escape_essid(iter_bss->ssid, iter_bss->ssid_len));
|
||||
}
|
||||
mutex_unlock(&adapter->lock);
|
||||
#endif
|
||||
|
||||
if (priv->adapter->connect_status == libertas_connected) {
|
||||
netif_carrier_on(priv->dev);
|
||||
|
@ -913,148 +913,6 @@ out:
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* iwpriv settable callbacks
|
||||
*/
|
||||
|
||||
static const iw_handler wlan_private_handler[] = {
|
||||
NULL, /* SIOCIWFIRSTPRIV */
|
||||
};
|
||||
|
||||
static const struct iw_priv_args wlan_private_args[] = {
|
||||
/*
|
||||
* { cmd, set_args, get_args, name }
|
||||
*/
|
||||
/* Using iwpriv sub-command feature */
|
||||
{
|
||||
WLAN_SETONEINT_GETNONE, /* IOCTL: 24 */
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
""},
|
||||
{
|
||||
WLANSETREGION,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"setregioncode"},
|
||||
{
|
||||
WLAN_SUBCMD_MESH_SET_TTL,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"mesh_set_ttl"},
|
||||
{
|
||||
WLAN_SETNONE_GETONEINT,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
""},
|
||||
{
|
||||
WLANGETREGION,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"getregioncode"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_CLEANUP,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"fwt_cleanup"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_TIME,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"fwt_time"},
|
||||
{
|
||||
WLAN_SUBCMD_MESH_GET_TTL,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"mesh_get_ttl"},
|
||||
{
|
||||
WLAN_SETNONE_GETNONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
""},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_RESET,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"fwt_reset"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_RESET,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"bt_reset"},
|
||||
{
|
||||
WLAN_SET128CHAR_GET128CHAR,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
""},
|
||||
/* BT Management */
|
||||
{
|
||||
WLAN_SUBCMD_BT_ADD,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"bt_add"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_DEL,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"bt_del"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_LIST,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"bt_list"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_SET_INVERT,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
"bt_set_invert"},
|
||||
{
|
||||
WLAN_SUBCMD_BT_GET_INVERT,
|
||||
IW_PRIV_TYPE_NONE,
|
||||
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
|
||||
"bt_get_invert"},
|
||||
/* FWT Management */
|
||||
{
|
||||
WLAN_SUBCMD_FWT_ADD,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_add"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_DEL,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_del"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LOOKUP,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_lookup"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LIST_NEIGHBOR,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_list_neigh"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LIST,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_list"},
|
||||
{
|
||||
WLAN_SUBCMD_FWT_LIST_ROUTE,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
IW_PRIV_TYPE_CHAR | 128,
|
||||
"fwt_list_route"},
|
||||
{
|
||||
WLAN_SET_GET_SIXTEEN_INT,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
""},
|
||||
{
|
||||
WLAN_LED_GPIO_CTRL,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
IW_PRIV_TYPE_INT | 16,
|
||||
"ledgpio"},
|
||||
};
|
||||
|
||||
static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
|
||||
{
|
||||
enum {
|
||||
@ -2444,22 +2302,12 @@ static const iw_handler mesh_wlan_handler[] = {
|
||||
};
|
||||
struct iw_handler_def libertas_handler_def = {
|
||||
.num_standard = sizeof(wlan_handler) / sizeof(iw_handler),
|
||||
.num_private = sizeof(wlan_private_handler) / sizeof(iw_handler),
|
||||
.num_private_args = sizeof(wlan_private_args) /
|
||||
sizeof(struct iw_priv_args),
|
||||
.standard = (iw_handler *) wlan_handler,
|
||||
.private = (iw_handler *) wlan_private_handler,
|
||||
.private_args = (struct iw_priv_args *)wlan_private_args,
|
||||
.get_wireless_stats = wlan_get_wireless_stats,
|
||||
};
|
||||
|
||||
struct iw_handler_def mesh_handler_def = {
|
||||
.num_standard = sizeof(mesh_wlan_handler) / sizeof(iw_handler),
|
||||
.num_private = sizeof(wlan_private_handler) / sizeof(iw_handler),
|
||||
.num_private_args = sizeof(wlan_private_args) /
|
||||
sizeof(struct iw_priv_args),
|
||||
.standard = (iw_handler *) mesh_wlan_handler,
|
||||
.private = (iw_handler *) wlan_private_handler,
|
||||
.private_args = (struct iw_priv_args *)wlan_private_args,
|
||||
.get_wireless_stats = wlan_get_wireless_stats,
|
||||
};
|
||||
|
@ -7,45 +7,6 @@
|
||||
#define SUBCMD_OFFSET 4
|
||||
#define SUBCMD_DATA(x) *((int *)(x->u.name + SUBCMD_OFFSET))
|
||||
|
||||
/** PRIVATE CMD ID */
|
||||
#define WLANIOCTL SIOCIWFIRSTPRIV
|
||||
|
||||
#define WLAN_SETNONE_GETNONE (WLANIOCTL + 8)
|
||||
#define WLAN_SUBCMD_BT_RESET 13
|
||||
#define WLAN_SUBCMD_FWT_RESET 14
|
||||
|
||||
#define WLAN_SETNONE_GETONEINT (WLANIOCTL + 15)
|
||||
#define WLANGETREGION 1
|
||||
|
||||
#define WLAN_SUBCMD_FWT_CLEANUP 15
|
||||
#define WLAN_SUBCMD_FWT_TIME 16
|
||||
#define WLAN_SUBCMD_MESH_GET_TTL 17
|
||||
#define WLAN_SUBCMD_BT_GET_INVERT 18
|
||||
|
||||
#define WLAN_SETONEINT_GETNONE (WLANIOCTL + 24)
|
||||
#define WLANSETREGION 8
|
||||
#define WLAN_SUBCMD_MESH_SET_TTL 18
|
||||
#define WLAN_SUBCMD_BT_SET_INVERT 19
|
||||
|
||||
#define WLAN_SET128CHAR_GET128CHAR (WLANIOCTL + 25)
|
||||
#define WLAN_SUBCMD_BT_ADD 18
|
||||
#define WLAN_SUBCMD_BT_DEL 19
|
||||
#define WLAN_SUBCMD_BT_LIST 20
|
||||
#define WLAN_SUBCMD_FWT_ADD 21
|
||||
#define WLAN_SUBCMD_FWT_DEL 22
|
||||
#define WLAN_SUBCMD_FWT_LOOKUP 23
|
||||
#define WLAN_SUBCMD_FWT_LIST_NEIGHBOR 24
|
||||
#define WLAN_SUBCMD_FWT_LIST 25
|
||||
#define WLAN_SUBCMD_FWT_LIST_ROUTE 26
|
||||
|
||||
#define WLAN_SET_GET_SIXTEEN_INT (WLANIOCTL + 29)
|
||||
#define WLAN_LED_GPIO_CTRL 5
|
||||
|
||||
#define WLAN_LINKMODE_802_3 0
|
||||
#define WLAN_LINKMODE_802_11 2
|
||||
#define WLAN_RADIOMODE_NONE 0
|
||||
#define WLAN_RADIOMODE_RADIOTAP 2
|
||||
|
||||
/** wlan_ioctl_regrdwr */
|
||||
struct wlan_ioctl_regrdwr {
|
||||
/** Which register to access */
|
||||
@ -57,9 +18,13 @@ struct wlan_ioctl_regrdwr {
|
||||
u32 value;
|
||||
};
|
||||
|
||||
#define WLAN_LINKMODE_802_3 0
|
||||
#define WLAN_LINKMODE_802_11 2
|
||||
#define WLAN_RADIOMODE_NONE 0
|
||||
#define WLAN_RADIOMODE_RADIOTAP 2
|
||||
|
||||
extern struct iw_handler_def libertas_handler_def;
|
||||
extern struct iw_handler_def mesh_handler_def;
|
||||
int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int i);
|
||||
int wlan_radio_ioctl(wlan_private * priv, u8 option);
|
||||
|
||||
#endif /* _WLAN_WEXT_H_ */
|
||||
|
Loading…
Reference in New Issue
Block a user