Commit 17cf8cc9 authored by Jeff Garzik's avatar Jeff Garzik

Merge branch 'libertas' of...

Merge branch 'libertas' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-2.6 into upstream
parents 12414db1 4269e2ad
# EXTRA_CFLAGS += -Wpacked
usb8xxx-objs := main.o fw.o wext.o \
rx.o tx.o cmd.o \
cmdresp.o scan.o \
......@@ -7,13 +5,6 @@ usb8xxx-objs := main.o fw.o wext.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
......
......@@ -40,64 +40,11 @@ NAME
SYNOPSIS
iwpriv <ethX> <command> [sub-command] ...
iwpriv ethX version
iwpriv ethX scantype [sub-command]
iwpriv ethX getSNR <n>
iwpriv ethX getNF <n>
iwpriv ethX getRSSI <n>
iwpriv ethX setrxant <n>
iwpriv ethX getrxant
iwpriv ethX settxant <n>
iwpriv ethX gettxant
iwpriv ethX authalgs <n>
iwpriv ethX pre-TBTT <n>
iwpriv ethX 8021xauthalgs <n>
iwpriv ethX encryptionmode <n>
iwpriv ethX setregioncode <n>
iwpriv ethX getregioncode
iwpriv ethX setbcnavg <n>
iwpriv ethX getbcnavg
iwpriv ethX setdataavg <n>
iwpriv ethX setlisteninter <n>
iwpriv ethX getlisteninter
iwpriv ethX setmultipledtim <n>
iwpriv ethX getmultipledtim
iwpriv ethX atimwindow <n>
iwpriv ethX deauth
iwpriv ethX adhocstop
iwpriv ethX radioon
iwpriv ethX radiooff
iwpriv ethX reasso-on
iwpriv ethX reasso-off
iwpriv ethX scanmode [sub-command]
iwpriv ethX setwpaie <n>
iwpriv ethX wlanidle-off
iwpriv ethX wlanidle-on
iwpriv ethX getcis
iwpriv ethX getlog
iwpriv ethX getadhocstatus
iwpriv ethX adhocgrate <n>
Version 4 Command:
iwpriv ethX inactvityto <n>
iwpriv ethX sleeppd <n>
iwpriv ethX enable11d <n>
iwpriv ethX tpccfg <n>
iwpriv ethX powercfg <n>
iwpriv ethX setafc <n>
iwpriv ethX getafc
Version 5 Command:
iwpriv ethX ledgpio <n>
iwpriv ethX scanprobes <n>
iwpriv ethX lolisteninter <n>
iwpriv ethX rateadapt <n> <m>
iwpriv ethX txcontrol <n>
iwpriv ethX psnullinterval <n>
iwpriv ethX prescan <n>
iwpriv ethX getrxinfo
iwpriv ethX gettxrate
iwpriv ethX beaconinterval
BT Commands:
The blinding table (BT) contains a list of mac addresses that should be
......@@ -150,114 +97,6 @@ DESCRIPTION
The ethX parameter specifies the network device that is to be used to
perform this command on. it could be eth0, eth1 etc.
version
This is used to get the current version of the driver and the firmware.
scantype
This command is used to set the scan type to be used by the driver in
the scan command. This setting will not be used while performing a scan
for a specific SSID, as it is always done with scan type being active.
where the sub-commands are: -
active -- to set the scan type to active
passive -- to set the scan type to passive
get -- to get the scan type set in the driver
getSNR
This command gets the average and non average value of Signal to Noise
Ratio of Beacon and Data.
where value is:-
0 -- Beacon non-average.
1 -- Beacon average.
2 -- Data non-average.
3 -- Data average.
If no value is given, all four values are returned in the order mentioned
above.
Note: This command is available only when STA is connected.
getRSSI
This command gets the average and non average value os Receive Signal
Strength of Beacon and Data.
where value is:-
0 -- Beacon non-average.
1 -- Beacon average.
2 -- Data non-average.
3 -- Data average.
Note: This command is available only when STA is connected.
getNF
This command gets the average and non average value of Noise Floor of
Beacon and Data.
where value is:-
0 -- Beacon non-average.
1 -- Beacon average.
2 -- Data non-average.
3 -- Data average.
Note: This command is available only when STA is connected.
setrxant
This command is used to set the mode for Rx antenna.
The options that can be sent are:-
1 -- Antenna 1.
2 -- Antenna 2.
0xFFFF -- Diversity.
Usage:
iwpriv ethX setrxant 0x01: select Antenna 1.
getrxant
This command is used to get the mode for Rx antenna.
settxant
This command is used to set the mode for Tx antenna.
The options that can be sent are:-
1 -- Antenna 1.
2 -- Antenna 2.
0xFFFF -- Diversity.
Usage:
iwpriv ethX settxant 0x01: select Antenna 1.
gettxant
This command is used to get the mode for Tx antenna.
authalgs
This command is used by the WPA supplicant to set the authentication
algorithms in the station.
8021xauthalgs
This command is used by the WPA supplicant to set the 8021.x authentication algorithm type
station.
where values can be:-
1 -- None
2 -- LEAP
4 -- TLS
8 -- TTLs
16 -- MD5
encryptionmode
This command is used by the WPA supplicant to set the encryption algorithm.
where values can be:-
0 -- NONE
1 -- WEP40
2 -- TKIP
3 -- CCMP
4 -- WEP104
pre-TBTT
This command is used to set pre-TBTT time period where value is in microseconds.
setregioncode
This command is used to set the region code in the station.
where value is 'region code' for various regions like
......@@ -270,114 +109,6 @@ getregioncode
This command is used to get the region code information set in the
station.
setbcnavg
Set the weighting factor for calculating RSSI.
getbcnavg
Get weighting factor for calculating RSSI.
setdataavg
Set the weighting factor for calculating SNR.
setlisteninter
This command is used to set the listen interval in the
station.
where the value ranges between 1 - 255
getlisteninter
This command is used to get the listen interval value set in the
station.
setmultipledtim
This command is used to set the multiple dtim value in the
station.
where the value is 1,2,3,4,5,0xfffe
0xfffe means the firmware will use listen interval in association
command for waking up
getmultipledtim
This command is used to get the multiple dtim value set in the station.
atimwindow
This command is used to set the atim value in the
station.
where the value ranges between 0 - 50
deauth
This command is used to send the de-authentication to the AP with which
the station is associated. This command is valid only when
station is in Infrastructure mode.
Note: This command is available only when STA is connected.
adhocstop
This command is used to stop beacon transmission from the station and
go into idle state in ad-hoc mode.
Note: This command is available only when STA is connected.
radioon
This command is used to turn on the RF antenna.
radiooff
This command is sued to turn off the RF antenna.
scanmode
This command is used to set the station to scan for either IBSS
networks or BSS networks or both BSS and IBSS networks. This
command can be used with sub commands,
where the value for
bss -- Scan All the BSS networks.
ibss -- Scan All the IBSS networks.
any -- Scan both BSS and IBSS networks.
setwpaie
This command is used by WPA supplicant to send the WPA-IE to the driver.
wlanidle-off
This command is used to get into idle state.
Note: This command is available only when STA is connected.
wlanidle-on
This command is used to get off the idle state.
Note: This command is available only when STA is connected.
getlog
This command is used to get the 802.11 statistics available in the
station.
Note: This command is available only when STA is connected.
getadhocstatus
This command is used to get the ad-hoc Network Status.
The various status codes are:
AdhocStarted
AdhocJoined
AdhocIdle
InfraMode
AutoUnknownMode
Note: This command is available only when STA is connected.
adhocgrate
This command is used to enable(1) g_rate, Disable(0) g_rate
and request(2) the status which g_rate is disabled/enabled,
for Ad-hoc creator.
where value is:-
0 -- Disabled
1 -- Enabled
2 -- Get
ledgpio
This command is used to set/get LEDs.
......@@ -400,253 +131,6 @@ ledgpio
Note: LED0 is invalid
Note: Maximum Number of LEDs are 16.
inactivityto
This command is used by the host to set/get the inactivity timeout value,
which specifies when WLAN device is put to sleep.
Usage:
iwpriv ethX inactivityto [<timeout>]
where the parameter are:
timeout: timeout value in milliseconds.
Example:
iwpriv eth1 inactivityto
"get the timeout value"
iwpriv eth1 inactivityto X
"set timeout value to X ms"
sleeppd
This command is used to configure the sleep period of the WLAN device.
Usage:
iwpriv ethX sleeppd [<sleep period>]
where the parameter are:
Period: sleep period in milliseconds. Range 10~60.
Example:
iwpriv eth1 sleeppd 10
"set period as 10 ms"
iwpriv eth1 sleeppd
"get the sleep period configuration"
enable11d
This command is used to control 11d
where value is:-
1 -- Enabled
0 -- Disabled
2 -- Get
tpccfg
Enables or disables automatic transmit power control.
The first parameter turns this feature on (1) or off (0). When turning
on, the user must also supply four more parameters in the following
order:
-UseSNR (Use SNR (in addition to PER) for TPC algorithm),
-P0 (P0 power level for TPC),
-P1 (P1 power level for TPC),
-P2 (P2 power level for TPC).
Usage:
iwpriv ethX tpccfg: Get current configuration
iwpriv ethX tpccfg 0: disable auto TPC
iwpriv ethX tpccfg 0x01 0x00 0x05 0x0a 0x0d: enable auto TPC; do not use SNR;
P0=0x05; P1=0x0a; P2=0x0d;
iwpriv ethX tpccfg 0x01 0x01 0x05 0x0a 0x0d: enable auto TPC; use SNR;
P0=0x05; P1=0x0a; P2=0x0d.
powercfg
Enables or disables power adaptation.
The first parameter turns this feature on (1) or off (0). When turning
on, the user must also supply three more parameters in the following
order:
-P0 (P0 power level for Power Adaptation),
-P1 (P1 power level for Power Adaptation),
-P2 (P2 power level for Power Adaptation).
Usage:
iwpriv ethX powercfg: Get current configuration
iwpriv ethX powercfg 0: disable power adaptation
iwpriv ethX powercfg 1 0x0d 0x0f 0x12: enable power adaptation;
P0=0x0d; P1=0x0f; P2=0x12.
getafc
This command returns automatic frequency control parameters. It returns
three integers:
-P0: automatic is on (1), or off (0),
-P1: current timing offset in PPM (part per million), and
-P2: current frequency offset in PPM.
setafc
Set automatic frequency control options.
The first parameter turns automatic on (1) or off (0).
The user must supply two more parameters in either case, in the following
order:
When auto is on:
-P0 (automatic adjustment frequency threshold in PPM),
-P1 (automatic adjustment period in beacon period),
When auto is off:
-P0 (manual adjustment timing offset in PPM), and
-P1 (manual adjustment frequency offset in PPM).
Usage:
iwpriv ethX setafc 0 10 10: manual adjustment, both timing and frequcncy
offset are 10 PPM.
iwpriv ethX setafc 1 10 10 enable afc, automatic adjustment,
frequency threshold 10 PPM, for every 10 beacon periods.
scanprobes
This command sets number of probe requests per channel.
Usage:
iwpriv ethX scanprobes 3 (set scan probes to 3)
iwpriv ethX scanprobes (get scan probes)
lolisteninter
This command sets the value of listen interval.
Usage:
iwpriv ethX lolisteninter 234 (set the lolisteninter to 234)
iwpriv ethX lolisteninter (get the lolisteninter value)
rateadapt
This command sets the data rates bitmap.
Where <n>
0: Disable auto rate adapt
1: Enable auto rate adapt
<m>
data rate bitmap
Bit Data rate
0 1 Mbps
1 2 Mbps
2 5.5 Mbps
3 11 Mbps
4 Reserved
5 6 Mbps
6 9 Mbps
7 12 Mbps
8 18 Mbps
9 24 Mbps
10 36 Mbps
11 48 Mbps
12 54 Mbps
12-15 Reserved
Usage:
iwpriv ethX rateadapt
read the currect data rate setting
iwpriv ethX rateadapt 1 0x07
enable auto data rate adapt and
data rates are 1Mbps, 2Mbsp and 5.5Mbps
txcontrol
This command is used to set the Tx rate, ack policy, and retry limit on a per packet basis.
Where value <n> is:
if bit[4] == 1:
bit[3:0] -- 0 1 2 3 4 5 6 7 8 9 10 11 12 13-16
Data Rate(Mbps) -- 1 2 5.5 11 Rsv 6 9 12 18 24 36 48 54 Rsv
bit[12:8]
if bit[12] == 1, bit[11:8] specifies the Tx retry limit.
bit[14:13] specifies per packet ack policy:
bit[14:13]
1 0 use immediate ack policy for this packet
1 1 use no ack policy for this packet
0 x use the per-packet ack policy setting
Usage:
iwpriv ethX txcontrol 0x7513
Use no-ack policy, 5 retires for Tx, 11Mbps rate
psnullinterval
This command is used to set/request NULL package interval for Power Save
under infrastructure mode.
where value is:-
-1 -- Disabled
n>0 -- Set interval as n (seconds)
prescan
This command is used to enable (1)/disable(0) auto prescan before assoicate to the ap
where value is:-
0 -- Disabled
1 -- Enabled
2 -- Get
getrxinfo
This command gets non average value of Signal to Noise Ratio of Data and rate index.
The following table shows RateIndex and Rate
RateIndex Data rate
0 1 Mbps
1 2 Mbps
2 5.5 Mbps
3 11 Mbps
4 Reserved
5 6 Mbps
6 9 Mbps
7 12 Mbps
8 18 Mbps
9 24 Mbps
10 36 Mbps
11 48 Mbps
12 54 Mbps
13-15 Reserved
gettxrate
This command gets current Tx rate index of the first packet associated with Rate Adaptation.
The following table shows RateIndex and Rate
RateIndex Data rate
0 1 Mbps
1 2 Mbps
2 5.5 Mbps
3 11 Mbps
4 Reserved
5 6 Mbps
6 9 Mbps
7 12 Mbps
8 18 Mbps
9 24 Mbps
10 36 Mbps
11 48 Mbps
12 54 Mbps
13-15 Reserved
bcninterval
This command is used to sets beacon interval in adhoc mode when an argument is given, and gets current adhoc
beacon interval when no argument is given. The valid beacon interval is between 20 - 1000,
default beacon interval is 100.
Usage:
iwpriv ethX bcninterval 100 (set adhoc beacon interval to 100)
iwpriv ethX bcninterval (get adhoc beacon interval)
fwt_add
This command is used to insert an entry into the FWT table. The list of
parameters must follow the following structure:
......
......@@ -23,13 +23,13 @@ static int assoc_helper_essid(wlan_private *priv,
ENTER();
lbs_pr_debug(1, "New SSID requested: %s\n", assoc_req->ssid.ssid);
if (assoc_req->mode == wlan802_11infrastructure) {
if (assoc_req->mode == IW_MODE_INFRA) {
if (adapter->prescan) {
libertas_send_specific_SSID_scan(priv, &assoc_req->ssid, 1);
}
i = libertas_find_SSID_in_list(adapter, &assoc_req->ssid,
NULL, wlan802_11infrastructure);
NULL, IW_MODE_INFRA);
if (i >= 0) {
lbs_pr_debug(1,
"SSID found in scan list ... associating...\n");
......@@ -44,7 +44,7 @@ static int assoc_helper_essid(wlan_private *priv,
lbs_pr_debug(1, "SSID '%s' not found; cannot associate\n",
assoc_req->ssid.ssid);
}
} else if (assoc_req->mode == wlan802_11ibss) {
} else if (assoc_req->mode == IW_MODE_ADHOC) {
/* Scan for the network, do not save previous results. Stale
* scan data will cause us to join a non-existant adhoc network
*/
......@@ -52,7 +52,7 @@ static int assoc_helper_essid(wlan_private *priv,
/* Search for the requested SSID in the scan table */
i = libertas_find_SSID_in_list(adapter, &assoc_req->ssid, NULL,
wlan802_11ibss);
IW_MODE_ADHOC);
if (i >= 0) {
lbs_pr_debug(1, "SSID found at %d in List, so join\n", ret);
libertas_join_adhoc_network(priv, &adapter->scantable[i]);
......@@ -90,10 +90,10 @@ static int assoc_helper_bssid(wlan_private *priv,
goto out;
}
if (assoc_req->mode == wlan802_11infrastructure) {
if (assoc_req->mode == IW_MODE_INFRA) {
ret = wlan_associate(priv, &adapter->scantable[i]);
lbs_pr_debug(1, "ASSOC: return from wlan_associate(bssd) was %d\n", ret);
} else if (assoc_req->mode == wlan802_11ibss) {
} else if (assoc_req->mode == IW_MODE_ADHOC) {
libertas_join_adhoc_network(priv, &adapter->scantable[i]);
}
memcpy(&assoc_req->ssid, &adapter->scantable[i].ssid,
......@@ -142,23 +142,23 @@ static int assoc_helper_mode(wlan_private *priv,
ENTER();
if (assoc_req->mode == adapter->inframode) {
if (assoc_req->mode == adapter->mode) {
LEAVE();
return 0;
}
if (assoc_req->mode == wlan802_11infrastructure) {
if (assoc_req->mode == IW_MODE_INFRA) {
if (adapter->psstate != PS_STATE_FULL_POWER)
libertas_ps_wakeup(priv, cmd_option_waitforrsp);
adapter->psmode = wlan802_11powermodecam;
}
adapter->inframode = assoc_req->mode;
adapter->mode = assoc_req->mode;
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_snmp_mib,
0, cmd_option_waitforrsp,
OID_802_11_INFRASTRUCTURE_MODE,
(void *) assoc_req->mode);
(void *) (size_t) assoc_req->mode);
LEAVE();
return ret;
......@@ -196,7 +196,7 @@ static int assoc_helper_wep_keys(wlan_private *priv,
goto out;
/* enable/disable the MAC's WEP packet filter */
if (assoc_req->secinfo.WEPstatus == wlan802_11WEPenabled)
if (assoc_req->secinfo.wep_enabled)
adapter->currentpacketfilter |= cmd_act_mac_wep_enable;
else
adapter->currentpacketfilter &= ~cmd_act_mac_wep_enable;
......@@ -300,8 +300,7 @@ static int should_deauth_infrastructure(wlan_adapter *adapter,
}
if (test_bit(ASSOC_FLAG_SECINFO, &assoc_req->flags)) {
if (adapter->secinfo.authmode !=
assoc_req->secinfo.authmode) {
if (adapter->secinfo.auth_mode != assoc_req->secinfo.auth_mode) {
lbs_pr_debug(1, "Deauthenticating due to updated security "
"info in configuration request.\n");
return 1;
......@@ -316,7 +315,7 @@ static int should_deauth_infrastructure(wlan_adapter *adapter,
/* FIXME: deal with 'auto' mode somehow */
if (test_bit(ASSOC_FLAG_MODE, &assoc_req->flags)) {
if (assoc_req->mode != wlan802_11infrastructure)
if (assoc_req->mode != IW_MODE_INFRA)
return 1;
}
......@@ -333,12 +332,12 @@ static int should_stop_adhoc(wlan_adapter *adapter,
if (adapter->curbssparams.ssid.ssidlength != assoc_req->ssid.ssidlength)
return 1;
if (memcmp(adapter->curbssparams.ssid.ssid, assoc_req->ssid.ssid,
sizeof(struct WLAN_802_11_SSID)))
adapter->curbssparams.ssid.ssidlength))
return 1;
/* FIXME: deal with 'auto' mode somehow */
if (test_bit(ASSOC_FLAG_MODE, &assoc_req->flags)) {
if (assoc_req->mode != wlan802_11ibss)
if (assoc_req->mode != IW_MODE_ADHOC)
return 1;
}
......@@ -382,7 +381,7 @@ void wlan_association_worker(struct work_struct *work)
}
if (find_any_ssid) {
enum WLAN_802_11_NETWORK_INFRASTRUCTURE new_mode;
u8 new_mode;
ret = libertas_find_best_network_SSID(priv, &assoc_req->ssid,
assoc_req->mode, &new_mode);
......@@ -393,7 +392,7 @@ void wlan_association_worker(struct work_struct *work)
}
/* Ensure we switch to the mode of the AP */
if (assoc_req->mode == wlan802_11autounknown) {
if (assoc_req->mode == IW_MODE_AUTO) {
set_bit(ASSOC_FLAG_MODE, &assoc_req->flags);
assoc_req->mode = new_mode;
}
......@@ -403,7 +402,7 @@ void wlan_association_worker(struct work_struct *work)
* Check if the attributes being changing require deauthentication
* from the currently associated infrastructure access point.
*/
if (adapter->inframode == wlan802_11infrastructure) {
if (adapter->mode == IW_MODE_INFRA) {
if (should_deauth_infrastructure(adapter, assoc_req)) {
ret = libertas_send_deauthentication(priv);
if (ret) {
......@@ -412,7 +411,7 @@ void wlan_association_worker(struct work_struct *work)
ret);
}
}
} else if (adapter->inframode == wlan802_11ibss) {
} else if (adapter->mode == IW_MODE_ADHOC) {
if (should_stop_adhoc(adapter, assoc_req)) {
ret = libertas_stop_adhoc_network(priv);
if (ret) {
......@@ -543,7 +542,7 @@ struct assoc_request * wlan_get_association_request(wlan_adapter *adapter)
assoc_req->channel = adapter->curbssparams.channel;
if (!test_bit(ASSOC_FLAG_MODE, &assoc_req->flags))
assoc_req->mode = adapter->inframode;
assoc_req->mode = adapter->mode;
if (!test_bit(ASSOC_FLAG_BSSID, &assoc_req->flags)) {
memcpy(&assoc_req->bssid, adapter->curbssparams.bssid,
......
......@@ -381,15 +381,16 @@ static int wlan_cmd_802_11_snmp_mib(wlan_private * priv,
switch (cmd_oid) {
case OID_802_11_INFRASTRUCTURE_MODE:
{
enum WLAN_802_11_NETWORK_INFRASTRUCTURE mode =
(enum WLAN_802_11_NETWORK_INFRASTRUCTURE) pdata_buf;
u8 mode = (u8) (size_t) pdata_buf;
pSNMPMIB->querytype = cpu_to_le16(cmd_act_set);
pSNMPMIB->oid = cpu_to_le16((u16) desired_bsstype_i);
pSNMPMIB->bufsize = sizeof(u8);
if (mode == wlan802_11infrastructure)
ucTemp = SNMP_MIB_VALUE_INFRA;
else
if (mode == IW_MODE_ADHOC) {
ucTemp = SNMP_MIB_VALUE_ADHOC;
} else {
/* Infra and Auto modes */
ucTemp = SNMP_MIB_VALUE_INFRA;
}
memmove(pSNMPMIB->value, &ucTemp, sizeof(u8));
......@@ -947,8 +948,8 @@ void libertas_queue_cmd(wlan_adapter * adapter, struct cmd_ctrl_node *cmdnode, u
spin_unlock_irqrestore(&adapter->driver_lock, flags);
lbs_pr_debug(1, "QUEUE_CMD: Inserted node=0x%x, cmd=0x%x in cmdpendingq\n",
(u32) cmdnode,
lbs_pr_debug(1, "QUEUE_CMD: Inserted node=%p, cmd=0x%x in cmdpendingq\n",
cmdnode,
((struct cmd_ds_gen*)cmdnode->bufvirtualaddr)->command);
done:
......@@ -976,8 +977,8 @@ static int DownloadcommandToStation(wlan_private * priv,
ENTER();
if (!adapter || !cmdnode) {
lbs_pr_debug(1, "DNLD_CMD: adapter = %#x, cmdnode = %#x\n",
(int)adapter, (int)cmdnode);
lbs_pr_debug(1, "DNLD_CMD: adapter = %p, cmdnode = %p\n",
adapter, cmdnode);
if (cmdnode) {
spin_lock_irqsave(&adapter->driver_lock, flags);
__libertas_cleanup_and_insert_cmd(priv, cmdnode);
......@@ -1174,8 +1175,8 @@ int libertas_prepare_and_send_command(wlan_private * priv,
cmdptr = (struct cmd_ds_command *)cmdnode->bufvirtualaddr;
lbs_pr_debug(1, "PREP_CMD: Val of cmd ptr =0x%x, command=0x%X\n",
(u32) cmdptr, cmd_no);
lbs_pr_debug(1, "PREP_CMD: Val of cmd ptr=%p, command=0x%X\n",
cmdptr, cmd_no);
if (!cmdptr) {
lbs_pr_debug(1, "PREP_CMD: bufvirtualaddr of cmdnode is NULL\n");
......
......@@ -72,8 +72,6 @@ void libertas_mac_event_disconnected(wlan_private * priv)
adapter->secinfo.WPAenabled = 0;
adapter->secinfo.WPA2enabled = 0;
adapter->wpa_ie_len = 0;
adapter->secinfo.auth1xalg = WLAN_1X_AUTH_ALG_NONE;
adapter->secinfo.Encryptionmode = CIPHER_NONE;
adapter->connect_status = libertas_disconnected;
......@@ -811,7 +809,7 @@ int libertas_process_rx_command(wlan_private * priv)
if (result) {
lbs_pr_debug(1, "CMD_RESP: PS command failed- %#x \n",
resp->result);
if (adapter->inframode == wlan802_11ibss) {
if (adapter->mode == IW_MODE_ADHOC) {
/*
* We should not re-try enter-ps command in
* ad-hoc mode. It takes place in
......
......@@ -7,6 +7,7 @@
#include "dev.h"
#include "decl.h"
#include "host.h"
#include "debugfs.h"
static struct dentry *libertas_dir = NULL;
static char *szStates[] = {
......@@ -276,7 +277,7 @@ static void libertas_parse_ssid(char *buf, size_t count,
if (!end)
end = buf + count - 1;
size = min(IW_ESSID_MAX_SIZE, end - hold);
size = min((size_t)IW_ESSID_MAX_SIZE, (size_t) (end - hold));
strncpy(scan_cfg->specificSSID, hold, size);
return;
......@@ -1648,7 +1649,7 @@ struct libertas_debugfs_files {
struct file_operations fops;
};
struct libertas_debugfs_files debugfs_files[] = {
static struct libertas_debugfs_files debugfs_files[] = {
{ "info", 0444, FOPS(libertas_dev_info, write_file_dummy), },
{ "getscantable", 0444, FOPS(libertas_getscantable,
write_file_dummy), },
......@@ -1658,7 +1659,7 @@ struct libertas_debugfs_files debugfs_files[] = {
{ "setuserscan", 0600, FOPS(NULL, libertas_setuserscan), },
};
struct libertas_debugfs_files debugfs_events_files[] = {
static struct libertas_debugfs_files debugfs_events_files[] = {
{"low_rssi", 0644, FOPS(libertas_lowrssi_read,
libertas_lowrssi_write), },
{"low_snr", 0644, FOPS(libertas_lowsnr_read,
......@@ -1673,7 +1674,7 @@ struct libertas_debugfs_files debugfs_events_files[] = {
libertas_highsnr_write), },
};
struct libertas_debugfs_files debugfs_regs_files[] = {
static struct libertas_debugfs_files debugfs_regs_files[] = {
{"rdmac", 0644, FOPS(libertas_rdmac_read, libertas_rdmac_write), },
{"wrmac", 0600, FOPS(NULL, libertas_wrmac_write), },
{"rdbbp", 0644, FOPS(libertas_rdbbp_read, libertas_rdbbp_write), },
......@@ -1778,7 +1779,7 @@ void libertas_debugfs_remove_one(wlan_private *priv)
struct debug_data {
char name[32];
u32 size;
u32 addr;
size_t addr;
};
/* To debug any member of wlan_adapter, simply add one line here.
......@@ -1825,6 +1826,8 @@ static ssize_t wlan_debugfs_read(struct file *file, char __user *userbuf,
val = *((u16 *) d[i].addr);
else if (d[i].size == 4)
val = *((u32 *) d[i].addr);
else if (d[i].size == 8)
val = *((u64 *) d[i].addr);
pos += sprintf(p + pos, "%s=%d\n", d[i].name, val);
}
......@@ -1844,7 +1847,7 @@ static ssize_t wlan_debugfs_read(struct file *file, char __user *userbuf,
* @param data data to write
* @return number of data
*/
static int wlan_debugfs_write(struct file *f, const char __user *buf,
static ssize_t wlan_debugfs_write(struct file *f, const char __user *buf,
size_t cnt, loff_t *ppos)
{
int r, i;
......@@ -1886,12 +1889,14 @@ static int wlan_debugfs_write(struct file *f, const char __user *buf,
*((u16 *) d[i].addr) = (u16) r;
else if (d[i].size == 4)
*((u32 *) d[i].addr) = (u32) r;
else if (d[i].size == 8)
*((u64 *) d[i].addr) = (u64) r;
break;
} while (1);
}
kfree(pdata);
return cnt;
return (ssize_t)cnt;
}
static struct file_operations libertas_debug_fops = {
......@@ -1916,20 +1921,10 @@ void libertas_debug_init(wlan_private * priv, struct net_device *dev)
return;
for (i = 0; i < num_of_items; i++)
items[i].addr += (u32) priv->adapter;
items[i].addr += (size_t) priv->adapter;
priv->debugfs_debug = debugfs_create_file("debug", 0644,
priv->debugfs_dir, &items[0],
&libertas_debug_fops);
}
/**
* @brief remove proc file
*
* @param priv pointer wlan_private
* @return N/A
*/
void libertas_debug_remove(wlan_private * priv)
{
debugfs_remove(priv->debugfs_debug);
}
......@@ -9,6 +9,11 @@
extern unsigned int libertas_debug;
#ifdef CONFIG_LIBERTAS_DEBUG
#define DEBUG
#define PROC_DEBUG
#endif
#define DRV_NAME "usb8xxx"
#define lbs_pr_info(format, args...) \
......@@ -223,31 +228,6 @@ enum SNRNF_DATA {
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,
......@@ -292,28 +272,6 @@ enum mv_ms_type {
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,
......
......@@ -10,6 +10,7 @@
#include <linux/wireless.h>
#include <linux/ethtool.h>
#include <linux/debugfs.h>
#include <net/ieee80211.h>
#include "defs.h"
#include "scan.h"
......@@ -56,10 +57,8 @@ struct region_channel {
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;
u8 wep_enabled;
u8 auth_mode;
};
/** Current Basic Service Set State Structure */
......@@ -184,7 +183,7 @@ struct assoc_request {
struct WLAN_802_11_SSID ssid;
u8 channel;
enum WLAN_802_11_NETWORK_INFRASTRUCTURE mode;
u8 mode;
u8 bssid[ETH_ALEN];
/** WEP keys */
......@@ -198,7 +197,6 @@ struct assoc_request {
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;
};
......@@ -254,7 +252,8 @@ struct _wlan_adapter {
/** current ssid/bssid related parameters*/
struct current_bss_params curbssparams;
enum WLAN_802_11_NETWORK_INFRASTRUCTURE inframode;
/* IW_MODE_* */
u8 mode;
struct bss_descriptor *pattemptedbssdesc;
......@@ -339,7 +338,6 @@ struct _wlan_adapter {
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;
......
......@@ -194,16 +194,13 @@ static void wlan_init_adapter(wlan_private * priv)
adapter->scanmode = cmd_bss_type_any;
/* 802.11 specific */
adapter->secinfo.WEPstatus = wlan802_11WEPdisabled;
adapter->secinfo.wep_enabled = 0;
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->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
adapter->mode = IW_MODE_INFRA;
adapter->assoc_req = NULL;
......
......@@ -388,7 +388,7 @@ static int __if_usb_submit_rx_urb(wlan_private * priv,
usb_fill_bulk_urb(cardp->rx_urb, cardp->udev,
usb_rcvbulkpipe(cardp->udev,
cardp->bulk_in_endpointAddr),
skb->tail + IPFIELD_ALIGN_OFFSET,
(void *) (skb->tail + (size_t) IPFIELD_ALIGN_OFFSET),
MRVDRV_ETH_RX_PACKET_BUFFER_SIZE, callbackfn,
rinfo);
......@@ -626,6 +626,7 @@ static void if_usb_receive(struct urb *urb)
cardp->usb_event_cause);
if (cardp->usb_event_cause & 0xffff0000) {
libertas_send_tx_feedback(priv);
spin_unlock(&priv->adapter->driver_lock);
break;
}
cardp->usb_event_cause = le32_to_cpu(cardp->usb_event_cause) << 3;
......@@ -775,7 +776,6 @@ int libertas_sbi_prog_firmware(wlan_private * priv)
return -1;
}
#ifdef SUPPORT_BOOT_COMMAND
cardp->bootcmdresp = 0;
do {
int j = 0;
......@@ -796,7 +796,6 @@ int libertas_sbi_prog_firmware(wlan_private * priv)
}
return -1;
}
#endif
i = 0;
priv->adapter->fw_ready = 0;
......
......@@ -12,7 +12,6 @@
#define USB8388_VID_2 0x05a3
#define USB8388_PID_2 0x8388
#ifdef SUPPORT_BOOT_COMMAND
#define BOOT_CMD_FW_BY_USB 0x01
#define BOOT_CMD_FW_IN_EEPROM 0x02
#define BOOT_CMD_UPDATE_BOOT2 0x03
......@@ -36,7 +35,6 @@ struct bootcmdrespStr
u8 u8result;
u8 au8dumy[2];
};
#endif /* SUPPORT_BOOT_COMMAND */
/* read callback private data */
struct read_cb_info {
......
......@@ -27,1112 +27,31 @@
#define WAIT_FOR_SCAN_RRESULT_MAX_TIME (10 * HZ)
static int setrxantenna(wlan_private * priv, int mode)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
if (mode != RF_ANTENNA_1 && mode != RF_ANTENNA_2
&& mode != RF_ANTENNA_AUTO) {
return -EINVAL;
}
adapter->rxantennamode = mode;
lbs_pr_debug(1, "SET RX Antenna mode to 0x%04x\n", adapter->rxantennamode);
ret = libertas_prepare_and_send_command(priv, cmd_802_11_rf_antenna,
cmd_act_set_rx,
cmd_option_waitforrsp, 0,
&adapter->rxantennamode);
return ret;
}
static int settxantenna(wlan_private * priv, int mode)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
if ((mode != RF_ANTENNA_1) && (mode != RF_ANTENNA_2)
&& (mode != RF_ANTENNA_AUTO)) {
return -EINVAL;
}
adapter->txantennamode = mode;
lbs_pr_debug(1, "SET TX Antenna mode to 0x%04x\n", adapter->txantennamode);
ret = libertas_prepare_and_send_command(priv, cmd_802_11_rf_antenna,
cmd_act_set_tx,
cmd_option_waitforrsp, 0,
&adapter->txantennamode);
return ret;
}
static int getrxantenna(wlan_private * priv, char *buf)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
// clear it, so we will know if the value
// returned below is correct or not.
adapter->rxantennamode = 0;
ret = libertas_prepare_and_send_command(priv, cmd_802_11_rf_antenna,
cmd_act_get_rx,
cmd_option_waitforrsp, 0, NULL);
if (ret) {
LEAVE();
return ret;
}
lbs_pr_debug(1, "Get Rx Antenna mode:0x%04x\n", adapter->rxantennamode);
return sprintf(buf, "0x%04x", adapter->rxantennamode) + 1;
}
static int gettxantenna(wlan_private * priv, char *buf)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
// clear it, so we will know if the value
// returned below is correct or not.
adapter->txantennamode = 0;
ret = libertas_prepare_and_send_command(priv, cmd_802_11_rf_antenna,
cmd_act_get_tx,
cmd_option_waitforrsp, 0, NULL);
if (ret) {
LEAVE();
return ret;
}
lbs_pr_debug(1, "Get Tx Antenna mode:0x%04x\n", adapter->txantennamode);
return sprintf(buf, "0x%04x", adapter->txantennamode) + 1;
}
static int wlan_set_region(wlan_private * priv, u16 region_code)
{
int i;
for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) {
// use the region code to search for the index
if (region_code == libertas_region_code_to_index[i]) {
priv->adapter->regiontableindex = (u16) i;
priv->adapter->regioncode = region_code;
break;
}
}
// if it's unidentified region code
if (i >= MRVDRV_MAX_REGION_CODE) {
lbs_pr_debug(1, "region Code not identified\n");
LEAVE();
return -1;
}
if (libertas_set_regiontable(priv, priv->adapter->regioncode, 0)) {
LEAVE();
return -EINVAL;
}
return 0;
}
/**
* @brief Get/Set Firmware wakeup method
*
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to user data
* @return 0--success, otherwise fail
*/
static int wlan_txcontrol(wlan_private * priv, struct iwreq *wrq)
{
wlan_adapter *adapter = priv->adapter;
int data;
ENTER();
if ((int)wrq->u.data.length == 0) {
if (copy_to_user
(wrq->u.data.pointer, &adapter->pkttxctrl, sizeof(u32))) {
lbs_pr_alert("copy_to_user failed!\n");
return -EFAULT;
}
} else {
if ((int)wrq->u.data.length > 1) {
lbs_pr_alert("ioctl too many args!\n");
return -EFAULT;
}
if (copy_from_user(&data, wrq->u.data.pointer, sizeof(int))) {
lbs_pr_alert("Copy from user failed\n");
return -EFAULT;
}
adapter->pkttxctrl = (u32) data;
}
wrq->u.data.length = 1;
LEAVE();
return 0;
}
/**
* @brief Get/Set NULL Package generation interval
*
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to user data
* @return 0--success, otherwise fail
*/
static int wlan_null_pkt_interval(wlan_private * priv, struct iwreq *wrq)
{
wlan_adapter *adapter = priv->adapter;
int data;
ENTER();
if ((int)wrq->u.data.length == 0) {
data = adapter->nullpktinterval;
if (copy_to_user(wrq->u.data.pointer, &data, sizeof(int))) {
lbs_pr_alert( "copy_to_user failed!\n");
return -EFAULT;
}
} else {
if ((int)wrq->u.data.length > 1) {
lbs_pr_alert( "ioctl too many args!\n");
return -EFAULT;
}
if (copy_from_user(&data, wrq->u.data.pointer, sizeof(int))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
adapter->nullpktinterval = data;
}
wrq->u.data.length = 1;
LEAVE();
return 0;
}
static int wlan_get_rxinfo(wlan_private * priv, struct iwreq *wrq)
{
wlan_adapter *adapter = priv->adapter;
int data[2];
ENTER();
data[0] = adapter->SNR[TYPE_RXPD][TYPE_NOAVG];
data[1] = adapter->rxpd_rate;
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int) * 2)) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
wrq->u.data.length = 2;
LEAVE();
return 0;
}
static int wlan_get_snr(wlan_private * priv, struct iwreq *wrq)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
int data[4];
ENTER();
memset(data, 0, sizeof(data));
if (wrq->u.data.length) {
if (copy_from_user(data, wrq->u.data.pointer,
min_t(size_t, wrq->u.data.length, 4) * sizeof(int)))
return -EFAULT;
}
if ((wrq->u.data.length == 0) || (data[0] == 0) || (data[0] == 1)) {
if (adapter->connect_status == libertas_connected) {
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_rssi,
0,
cmd_option_waitforrsp,
0, NULL);
if (ret) {
LEAVE();
return ret;
}
}
}
if (wrq->u.data.length == 0) {
data[0] = adapter->SNR[TYPE_BEACON][TYPE_NOAVG];
data[1] = adapter->SNR[TYPE_BEACON][TYPE_AVG];
data[2] = adapter->SNR[TYPE_RXPD][TYPE_NOAVG];
data[3] = adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int) * 4))
return -EFAULT;
wrq->u.data.length = 4;
} else if (data[0] == 0) {
data[0] = adapter->SNR[TYPE_BEACON][TYPE_NOAVG];
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int)))
return -EFAULT;
wrq->u.data.length = 1;
} else if (data[0] == 1) {
data[0] = adapter->SNR[TYPE_BEACON][TYPE_AVG];
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int)))
return -EFAULT;
wrq->u.data.length = 1;
} else if (data[0] == 2) {
data[0] = adapter->SNR[TYPE_RXPD][TYPE_NOAVG];
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int)))
return -EFAULT;
wrq->u.data.length = 1;
} else if (data[0] == 3) {
data[0] = adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int)))
return -EFAULT;
wrq->u.data.length = 1;
} else
return -ENOTSUPP;
LEAVE();
return 0;
}
static int wlan_beacon_interval(wlan_private * priv, struct iwreq *wrq)
{
int data;
wlan_adapter *adapter = priv->adapter;
if (wrq->u.data.length > 0) {
if (copy_from_user(&data, wrq->u.data.pointer, sizeof(int)))
return -EFAULT;
lbs_pr_debug(1, "WLAN SET BEACON INTERVAL: %d\n", data);
if ((data > MRVDRV_MAX_BEACON_INTERVAL)
|| (data < MRVDRV_MIN_BEACON_INTERVAL))
return -ENOTSUPP;
adapter->beaconperiod = data;
}
data = adapter->beaconperiod;
if (copy_to_user(wrq->u.data.pointer, &data, sizeof(int)))
return -EFAULT;
wrq->u.data.length = 1;
return 0;
}
static int wlan_get_rssi(wlan_private * priv, struct iwreq *wrq)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
int temp;
int data = 0;
int *val;
ENTER();
data = SUBCMD_DATA(wrq);
if ((data == 0) || (data == 1)) {
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_rssi,
0, cmd_option_waitforrsp,
0, NULL);
if (ret) {
LEAVE();
return ret;
}
}
switch (data) {
case 0:
temp = CAL_RSSI(adapter->SNR[TYPE_BEACON][TYPE_NOAVG],
adapter->NF[TYPE_BEACON][TYPE_NOAVG]);
break;
case 1:
temp = CAL_RSSI(adapter->SNR[TYPE_BEACON][TYPE_AVG],
adapter->NF[TYPE_BEACON][TYPE_AVG]);
break;
case 2:
temp = CAL_RSSI(adapter->SNR[TYPE_RXPD][TYPE_NOAVG],
adapter->NF[TYPE_RXPD][TYPE_NOAVG]);
break;
case 3:
temp = CAL_RSSI(adapter->SNR[TYPE_RXPD][TYPE_AVG] / AVG_SCALE,
adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE);
break;
default:
return -ENOTSUPP;
}
val = (int *)wrq->u.name;
*val = temp;
LEAVE();
return 0;
}
static int wlan_get_nf(wlan_private * priv, struct iwreq *wrq)
{
int ret = 0;
wlan_adapter *adapter = priv->adapter;
int temp;
int data = 0;
int *val;
data = SUBCMD_DATA(wrq);
if ((data == 0) || (data == 1)) {
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_rssi,
0, cmd_option_waitforrsp,
0, NULL);
if (ret) {
LEAVE();
return ret;
}
}
switch (data) {
case 0:
temp = adapter->NF[TYPE_BEACON][TYPE_NOAVG];
break;
case 1:
temp = adapter->NF[TYPE_BEACON][TYPE_AVG];
break;
case 2:
temp = adapter->NF[TYPE_RXPD][TYPE_NOAVG];
break;
case 3:
temp = adapter->NF[TYPE_RXPD][TYPE_AVG] / AVG_SCALE;
break;
default:
return -ENOTSUPP;
}
temp = CAL_NF(temp);
lbs_pr_debug(1, "%s: temp = %d\n", __FUNCTION__, temp);
val = (int *)wrq->u.name;
*val = temp;
return 0;
}
static int wlan_get_txrate_ioctl(wlan_private * priv, struct ifreq *req)
{
wlan_adapter *adapter = priv->adapter;
int *pdata;
struct iwreq *wrq = (struct iwreq *)req;
int ret = 0;
adapter->txrate = 0;
lbs_pr_debug(1, "wlan_get_txrate_ioctl\n");
ret = libertas_prepare_and_send_command(priv, cmd_802_11_tx_rate_query,
cmd_act_get, cmd_option_waitforrsp,
0, NULL);
if (ret)
return ret;
pdata = (int *)wrq->u.name;
*pdata = (int)adapter->txrate;
return 0;
}
static int wlan_get_adhoc_status_ioctl(wlan_private * priv, struct iwreq *wrq)
{
char status[64];
wlan_adapter *adapter = priv->adapter;
memset(status, 0, sizeof(status));
switch (adapter->inframode) {
case wlan802_11ibss:
if (adapter->connect_status == libertas_connected) {
if (adapter->adhoccreate)
memcpy(&status, "AdhocStarted", sizeof(status));
else
memcpy(&status, "AdhocJoined", sizeof(status));
} else {
memcpy(&status, "AdhocIdle", sizeof(status));
}
break;
case wlan802_11infrastructure:
memcpy(&status, "Inframode", sizeof(status));
break;
default:
memcpy(&status, "AutoUnknownmode", sizeof(status));
break;
}
lbs_pr_debug(1, "status = %s\n", status);
wrq->u.data.length = strlen(status) + 1;
if (wrq->u.data.pointer) {
if (copy_to_user(wrq->u.data.pointer,
&status, wrq->u.data.length))
return -EFAULT;
}
LEAVE();
return 0;
}
/**
* @brief Set/Get WPA IE
* @param priv A pointer to wlan_private structure
* @param req A pointer to ifreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_setwpaie_ioctl(wlan_private * priv, struct ifreq *req)
{
struct iwreq *wrq = (struct iwreq *)req;
wlan_adapter *adapter = priv->adapter;
int ret = 0;
ENTER();
if (wrq->u.data.length) {
if (wrq->u.data.length > sizeof(adapter->wpa_ie)) {
lbs_pr_debug(1, "failed to copy WPA IE, too big \n");
return -EFAULT;
}
if (copy_from_user(adapter->wpa_ie, wrq->u.data.pointer,
wrq->u.data.length)) {
lbs_pr_debug(1, "failed to copy WPA IE \n");
return -EFAULT;
}
adapter->wpa_ie_len = wrq->u.data.length;
lbs_pr_debug(1, "Set wpa_ie_len=%d IE=%#x\n", adapter->wpa_ie_len,
adapter->wpa_ie[0]);
lbs_dbg_hex("wpa_ie", adapter->wpa_ie, adapter->wpa_ie_len);
if (adapter->wpa_ie[0] == WPA_IE)
adapter->secinfo.WPAenabled = 1;
else if (adapter->wpa_ie[0] == WPA2_IE)
adapter->secinfo.WPA2enabled = 1;
else {
adapter->secinfo.WPAenabled = 0;
adapter->secinfo.WPA2enabled = 0;
}
} else {
memset(adapter->wpa_ie, 0, sizeof(adapter->wpa_ie));
adapter->wpa_ie_len = wrq->u.data.length;
lbs_pr_debug(1, "Reset wpa_ie_len=%d IE=%#x\n",
adapter->wpa_ie_len, adapter->wpa_ie[0]);
adapter->secinfo.WPAenabled = 0;
adapter->secinfo.WPA2enabled = 0;
}
// enable/disable RSN in firmware if WPA is enabled/disabled
// depending on variable adapter->secinfo.WPAenabled is set or not
ret = libertas_prepare_and_send_command(priv, cmd_802_11_enable_rsn,
cmd_act_set, cmd_option_waitforrsp,
0, NULL);
LEAVE();
return ret;
}
/**
* @brief Set Auto prescan
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to iwreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_subcmd_setprescan_ioctl(wlan_private * priv, struct iwreq *wrq)
{
int data;
wlan_adapter *adapter = priv->adapter;
int *val;
data = SUBCMD_DATA(wrq);
lbs_pr_debug(1, "WLAN_SUBCMD_SET_PRESCAN %d\n", data);
adapter->prescan = data;
val = (int *)wrq->u.name;
*val = data;
return 0;
}
static int wlan_set_multiple_dtim_ioctl(wlan_private * priv, struct ifreq *req)
{
struct iwreq *wrq = (struct iwreq *)req;
u32 mdtim;
int idata;
int ret = -EINVAL;
ENTER();
idata = SUBCMD_DATA(wrq);
mdtim = (u32) idata;
if (((mdtim >= MRVDRV_MIN_MULTIPLE_DTIM)
&& (mdtim <= MRVDRV_MAX_MULTIPLE_DTIM))
|| (mdtim == MRVDRV_IGNORE_MULTIPLE_DTIM)) {
priv->adapter->multipledtim = mdtim;
ret = 0;
}
if (ret)
lbs_pr_debug(1, "Invalid parameter, multipledtim not changed.\n");
LEAVE();
return ret;
}
/**
* @brief Set authentication mode
* @param priv A pointer to wlan_private structure
* @param req A pointer to ifreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_setauthalg_ioctl(wlan_private * priv, struct ifreq *req)
{
int alg;
struct iwreq *wrq = (struct iwreq *)req;
wlan_adapter *adapter = priv->adapter;
if (wrq->u.data.flags == 0) {
//from iwpriv subcmd
alg = SUBCMD_DATA(wrq);
} else {
//from wpa_supplicant subcmd
if (copy_from_user(&alg, wrq->u.data.pointer, sizeof(alg))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
}
lbs_pr_debug(1, "auth alg is %#x\n", alg);
switch (alg) {
case AUTH_ALG_SHARED_KEY:
adapter->secinfo.authmode = wlan802_11authmodeshared;
break;
case AUTH_ALG_NETWORK_EAP:
adapter->secinfo.authmode =
wlan802_11authmodenetworkEAP;
break;
case AUTH_ALG_OPEN_SYSTEM:
default:
adapter->secinfo.authmode = wlan802_11authmodeopen;
break;
}
return 0;
}
/**
* @brief Set 802.1x authentication mode
* @param priv A pointer to wlan_private structure
* @param req A pointer to ifreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_set8021xauthalg_ioctl(wlan_private * priv, struct ifreq *req)
{
int alg;
struct iwreq *wrq = (struct iwreq *)req;
if (wrq->u.data.flags == 0) {
//from iwpriv subcmd
alg = SUBCMD_DATA(wrq);
} else {
//from wpa_supplicant subcmd
if (copy_from_user(&alg, wrq->u.data.pointer, sizeof(int))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
}
lbs_pr_debug(1, "802.1x auth alg is %#x\n", alg);
priv->adapter->secinfo.auth1xalg = alg;
return 0;
}
static int wlan_setencryptionmode_ioctl(wlan_private * priv, struct ifreq *req)
{
int mode;
struct iwreq *wrq = (struct iwreq *)req;
ENTER();
if (wrq->u.data.flags == 0) {
//from iwpriv subcmd
mode = SUBCMD_DATA(wrq);
} else {
//from wpa_supplicant subcmd
if (copy_from_user(&mode, wrq->u.data.pointer, sizeof(int))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
}
lbs_pr_debug(1, "encryption mode is %#x\n", mode);
priv->adapter->secinfo.Encryptionmode = mode;
LEAVE();
return 0;
}
static void adjust_mtu(wlan_private * priv)
{
int mtu_increment = 0;
if (priv->adapter->linkmode == WLAN_LINKMODE_802_11)
mtu_increment += sizeof(struct ieee80211_hdr_4addr);
if (priv->adapter->radiomode == WLAN_RADIOMODE_RADIOTAP)
mtu_increment += max(sizeof(struct tx_radiotap_hdr),
sizeof(struct rx_radiotap_hdr));
priv->wlan_dev.netdev->mtu = ETH_FRAME_LEN
- sizeof(struct ethhdr)
+ mtu_increment;
}
/**
* @brief Set Link-Layer Layer mode
* @param priv A pointer to wlan_private structure
* @param req A pointer to ifreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_set_linkmode_ioctl(wlan_private * priv, struct ifreq *req)
{
int mode;
mode = (int)((struct ifreq *)((u8 *) req + 4))->ifr_data;
switch (mode) {
case WLAN_LINKMODE_802_3:
priv->adapter->linkmode = mode;
break;
case WLAN_LINKMODE_802_11:
priv->adapter->linkmode = mode;
break;
default:
lbs_pr_info("usb8388-5: invalid link-layer mode (%#x)\n",
mode);
return -EINVAL;
break;
}
lbs_pr_debug(1, "usb8388-5: link-layer mode is %#x\n", mode);
adjust_mtu(priv);
return 0;
}
/**
* @brief Set Radio header mode
* @param priv A pointer to wlan_private structure
* @param req A pointer to ifreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_set_radiomode_ioctl(wlan_private * priv, struct ifreq *req)
{
int mode;
mode = (int)((struct ifreq *)((u8 *) req + 4))->ifr_data;
switch (mode) {
case WLAN_RADIOMODE_NONE:
priv->adapter->radiomode = mode;
break;
case WLAN_RADIOMODE_RADIOTAP:
priv->adapter->radiomode = mode;
break;
default:
lbs_pr_debug(1, "usb8388-5: invalid radio header mode (%#x)\n",
mode);
return -EINVAL;
}
lbs_pr_debug(1, "usb8388-5: radio-header mode is %#x\n", mode);
adjust_mtu(priv);
return 0;
}
/**
* @brief Set Debug header mode
* @param priv A pointer to wlan_private structure
* @param req A pointer to ifreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_set_debugmode_ioctl(wlan_private * priv, struct ifreq *req)
{
priv->adapter->debugmode = (int)((struct ifreq *)
((u8 *) req + 4))->ifr_data;
return 0;
}
static int wlan_subcmd_getrxantenna_ioctl(wlan_private * priv,
struct ifreq *req)
{
int len;
char buf[8];
struct iwreq *wrq = (struct iwreq *)req;
lbs_pr_debug(1, "WLAN_SUBCMD_GETRXANTENNA\n");
len = getrxantenna(priv, buf);
wrq->u.data.length = len;
if (wrq->u.data.pointer) {
if (copy_to_user(wrq->u.data.pointer, &buf, len)) {
lbs_pr_debug(1, "CopyToUser failed\n");
return -EFAULT;
}
}
return 0;
}
static int wlan_subcmd_gettxantenna_ioctl(wlan_private * priv,
struct ifreq *req)
{
int len;
char buf[8];
struct iwreq *wrq = (struct iwreq *)req;
lbs_pr_debug(1, "WLAN_SUBCMD_GETTXANTENNA\n");
len = gettxantenna(priv, buf);
wrq->u.data.length = len;
if (wrq->u.data.pointer) {
if (copy_to_user(wrq->u.data.pointer, &buf, len)) {
lbs_pr_debug(1, "CopyToUser failed\n");
return -EFAULT;
}
}
return 0;
}
/**
* @brief Get the MAC TSF value from the firmware
*
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to iwreq structure containing buffer
* space to store a TSF value retrieved from the firmware
*
* @return 0 if successful; IOCTL error code otherwise
*/
static int wlan_get_tsf_ioctl(wlan_private * priv, struct iwreq *wrq)
{
u64 tsfval;
int ret;
ret = libertas_prepare_and_send_command(priv,
cmd_get_tsf,
0, cmd_option_waitforrsp, 0, &tsfval);
lbs_pr_debug(1, "IOCTL: Get TSF = 0x%016llx\n", tsfval);
if (ret != 0) {
lbs_pr_debug(1, "IOCTL: Get TSF; command exec failed\n");
ret = -EFAULT;
} else {
if (copy_to_user(wrq->u.data.pointer,
&tsfval,
min_t(size_t, wrq->u.data.length,
sizeof(tsfval))) != 0) {
lbs_pr_debug(1, "IOCTL: Get TSF; Copy to user failed\n");
ret = -EFAULT;
} else {
ret = 0;
}
}
return ret;
}
/**
* @brief Get/Set adapt rate
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to iwreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_adapt_rateset(wlan_private * priv, struct iwreq *wrq)
{
int ret;
wlan_adapter *adapter = priv->adapter;
int data[2];
memset(data, 0, sizeof(data));
if (!wrq->u.data.length) {
lbs_pr_debug(1, "Get ADAPT RATE SET\n");
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_rate_adapt_rateset,
cmd_act_get,
cmd_option_waitforrsp, 0, NULL);
data[0] = adapter->enablehwauto;
data[1] = adapter->ratebitmap;
if (copy_to_user(wrq->u.data.pointer, data, sizeof(int) * 2)) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
#define GET_TWO_INT 2
wrq->u.data.length = GET_TWO_INT;
} else {
lbs_pr_debug(1, "Set ADAPT RATE SET\n");
if (wrq->u.data.length > 2)
return -EINVAL;
if (copy_from_user
(data, wrq->u.data.pointer,
sizeof(int) * wrq->u.data.length)) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
adapter->enablehwauto = data[0];
adapter->ratebitmap = data[1];
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_rate_adapt_rateset,
cmd_act_set,
cmd_option_waitforrsp, 0, NULL);
}
return ret;
}
/**
* @brief Get/Set inactivity timeout
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to iwreq structure
* @return 0 --success, otherwise fail
*/
static int wlan_inactivity_timeout(wlan_private * priv, struct iwreq *wrq)
{
int ret;
int data = 0;
u16 timeout = 0;
ENTER();
if (wrq->u.data.length > 1)
return -ENOTSUPP;
if (wrq->u.data.length == 0) {
/* Get */
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_inactivity_timeout,
cmd_act_get,
cmd_option_waitforrsp, 0,
&timeout);
data = timeout;
if (copy_to_user(wrq->u.data.pointer, &data, sizeof(int))) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
} else {
/* Set */
if (copy_from_user(&data, wrq->u.data.pointer, sizeof(int))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
timeout = data;
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_inactivity_timeout,
cmd_act_set,
cmd_option_waitforrsp, 0,
&timeout);
}
wrq->u.data.length = 1;
LEAVE();
return ret;
}
static int wlan_do_getlog_ioctl(wlan_private * priv, struct iwreq *wrq)
{
int ret;
char buf[GETLOG_BUFSIZE - 1];
wlan_adapter *adapter = priv->adapter;
lbs_pr_debug(1, " GET STATS\n");
ret = libertas_prepare_and_send_command(priv, cmd_802_11_get_log,
0, cmd_option_waitforrsp, 0, NULL);
if (ret) {
return ret;
}
if (wrq->u.data.pointer) {
sprintf(buf, "\n mcasttxframe %u failed %u retry %u "
"multiretry %u framedup %u "
"rtssuccess %u rtsfailure %u ackfailure %u\n"
"rxfrag %u mcastrxframe %u fcserror %u "
"txframe %u wepundecryptable %u ",
adapter->logmsg.mcasttxframe,
adapter->logmsg.failed,
adapter->logmsg.retry,
adapter->logmsg.multiretry,
adapter->logmsg.framedup,
adapter->logmsg.rtssuccess,
adapter->logmsg.rtsfailure,
adapter->logmsg.ackfailure,
adapter->logmsg.rxfrag,
adapter->logmsg.mcastrxframe,
adapter->logmsg.fcserror,
adapter->logmsg.txframe,
adapter->logmsg.wepundecryptable);
wrq->u.data.length = strlen(buf) + 1;
if (copy_to_user(wrq->u.data.pointer, buf, wrq->u.data.length)) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
}
return 0;
}
static int wlan_scan_type_ioctl(wlan_private * priv, struct iwreq *wrq)
{
u8 buf[12];
u8 *option[] = { "active", "passive", "get", };
int i, max_options = (sizeof(option) / sizeof(option[0]));
int ret = 0;
wlan_adapter *adapter = priv->adapter;
if (priv->adapter->enable11d) {
lbs_pr_debug(1, "11D: Cannot set scantype when 11D enabled\n");
return -EFAULT;
}
memset(buf, 0, sizeof(buf));
if (copy_from_user(buf, wrq->u.data.pointer, min_t(size_t, sizeof(buf),
wrq->u.data.length)))
return -EFAULT;
lbs_pr_debug(1, "Scan type Option = %s\n", buf);
buf[sizeof(buf) - 1] = '\0';
for (i = 0; i < max_options; i++) {
if (!strcmp(buf, option[i]))
break;
}
switch (i) {
case 0:
adapter->scantype = cmd_scan_type_active;
break;
case 1:
adapter->scantype = cmd_scan_type_passive;
break;
case 2:
wrq->u.data.length = strlen(option[adapter->scantype]) + 1;
if (copy_to_user(wrq->u.data.pointer,
option[adapter->scantype],
wrq->u.data.length)) {
lbs_pr_debug(1, "Copy to user failed\n");
ret = -EFAULT;
}
break;
default:
lbs_pr_debug(1, "Invalid Scan type Ioctl Option\n");
ret = -EINVAL;
break;
}
return ret;
}
static int wlan_scan_mode_ioctl(wlan_private * priv, struct iwreq *wrq)
{
wlan_adapter *adapter = priv->adapter;
u8 buf[12];
u8 *option[] = { "bss", "ibss", "any", "get" };
int i, max_options = (sizeof(option) / sizeof(option[0]));
int ret = 0;
ENTER();
memset(buf, 0, sizeof(buf));
if (copy_from_user(buf, wrq->u.data.pointer, min_t(size_t, sizeof(buf),
wrq->u.data.length))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
lbs_pr_debug(1, "Scan mode Option = %s\n", buf);
buf[sizeof(buf) - 1] = '\0';
static int wlan_set_region(wlan_private * priv, u16 region_code)
{
int i;
for (i = 0; i < max_options; i++) {
if (!strcmp(buf, option[i]))
for (i = 0; i < MRVDRV_MAX_REGION_CODE; i++) {
// use the region code to search for the index
if (region_code == libertas_region_code_to_index[i]) {
priv->adapter->regiontableindex = (u16) i;
priv->adapter->regioncode = region_code;
break;
}
switch (i) {
case 0:
adapter->scanmode = cmd_bss_type_bss;
break;
case 1:
adapter->scanmode = cmd_bss_type_ibss;
break;
case 2:
adapter->scanmode = cmd_bss_type_any;
break;
case 3:
wrq->u.data.length = strlen(option[adapter->scanmode - 1]) + 1;
lbs_pr_debug(1, "Get Scan mode Option = %s\n",
option[adapter->scanmode - 1]);
lbs_pr_debug(1, "Scan mode length %d\n", wrq->u.data.length);
if (copy_to_user(wrq->u.data.pointer,
option[adapter->scanmode - 1],
wrq->u.data.length)) {
lbs_pr_debug(1, "Copy to user failed\n");
ret = -EFAULT;
}
lbs_pr_debug(1, "GET Scan type Option after copy = %s\n",
(char *)wrq->u.data.pointer);
break;
default:
lbs_pr_debug(1, "Invalid Scan mode Ioctl Option\n");
ret = -EINVAL;
break;
}
LEAVE();
return ret;
}
/**
* @brief Get/Set Adhoc G Rate
*
* @param priv A pointer to wlan_private structure
* @param wrq A pointer to user data
* @return 0--success, otherwise fail
*/
static int wlan_do_set_grate_ioctl(wlan_private * priv, struct iwreq *wrq)
{
wlan_adapter *adapter = priv->adapter;
int data, data1;
int *val;
ENTER();
// if it's unidentified region code
if (i >= MRVDRV_MAX_REGION_CODE) {
lbs_pr_debug(1, "region Code not identified\n");
LEAVE();
return -1;
}
data1 = SUBCMD_DATA(wrq);
switch (data1) {
case 0:
adapter->adhoc_grate_enabled = 0;
break;
case 1:
adapter->adhoc_grate_enabled = 1;
break;
case 2:
break;
default:
if (libertas_set_regiontable(priv, priv->adapter->regioncode, 0)) {
LEAVE();
return -EINVAL;
}
data = adapter->adhoc_grate_enabled;
val = (int *)wrq->u.name;
*val = data;
LEAVE();
return 0;
}
......@@ -1761,6 +680,7 @@ static int wlan_fwt_list_neighbor_ioctl(wlan_private * priv, struct ifreq *req)
*/
static int wlan_fwt_cleanup_ioctl(wlan_private * priv, struct ifreq *req)
{
struct iwreq *wrq = (struct iwreq *)req;
static struct cmd_ds_fwt_access fwt_access;
int ret;
......@@ -1776,7 +696,7 @@ static int wlan_fwt_cleanup_ioctl(wlan_private * priv, struct ifreq *req)
(void *)&fwt_access);
if (ret == 0)
req->ifr_data = (char *)(le32_to_cpu(fwt_access.references));
wrq->u.param.value = le32_to_cpu(fwt_access.references);
else
return -EFAULT;
......@@ -1792,6 +712,7 @@ static int wlan_fwt_cleanup_ioctl(wlan_private * priv, struct ifreq *req)
*/
static int wlan_fwt_time_ioctl(wlan_private * priv, struct ifreq *req)
{
struct iwreq *wrq = (struct iwreq *)req;
static struct cmd_ds_fwt_access fwt_access;
int ret;
......@@ -1807,7 +728,7 @@ static int wlan_fwt_time_ioctl(wlan_private * priv, struct ifreq *req)
(void *)&fwt_access);
if (ret == 0)
req->ifr_data = (char *)(le32_to_cpu(fwt_access.references));
wrq->u.param.value = le32_to_cpu(fwt_access.references);
else
return -EFAULT;
......@@ -1823,6 +744,7 @@ static int wlan_fwt_time_ioctl(wlan_private * priv, struct ifreq *req)
*/
static int wlan_mesh_get_ttl_ioctl(wlan_private * priv, struct ifreq *req)
{
struct iwreq *wrq = (struct iwreq *)req;
struct cmd_ds_mesh_access mesh_access;
int ret;
......@@ -1835,9 +757,8 @@ static int wlan_mesh_get_ttl_ioctl(wlan_private * priv, struct ifreq *req)
cmd_option_waitforrsp, 0,
(void *)&mesh_access);
if (ret == 0) {
req->ifr_data = (char *)(le32_to_cpu(mesh_access.data[0]));
}
if (ret == 0)
wrq->u.param.value = le32_to_cpu(mesh_access.data[0]);
else
return -EFAULT;
......@@ -1898,36 +819,8 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
lbs_pr_debug(1, "libertas_do_ioctl: ioctl cmd = 0x%x\n", cmd);
switch (cmd) {
case WLANSCAN_TYPE:
lbs_pr_debug(1, "Scan type Ioctl\n");
ret = wlan_scan_type_ioctl(priv, wrq);
break;
case WLAN_SETNONE_GETNONE: /* set WPA mode on/off ioctl #20 */
switch (wrq->u.data.flags) {
case WLANDEAUTH:
lbs_pr_debug(1, "Deauth\n");
libertas_send_deauth(priv);
break;
case WLANADHOCSTOP:
lbs_pr_debug(1, "Adhoc stop\n");
ret = libertas_do_adhocstop_ioctl(priv);
break;
case WLANRADIOON:
wlan_radio_ioctl(priv, 1);
break;
case WLANRADIOOFF:
wlan_radio_ioctl(priv, 0);
break;
case WLANWLANIDLEON:
libertas_idle_on(priv);
break;
case WLANWLANIDLEOFF:
libertas_idle_off(priv);
break;
case WLAN_SUBCMD_BT_RESET: /* bt_reset */
wlan_bt_reset_ioctl(priv);
break;
......@@ -1937,162 +830,19 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
} /* End of switch */
break;
case WLANSETWPAIE:
ret = wlan_setwpaie_ioctl(priv, req);
break;
case WLAN_SETINT_GETINT:
/* The first 4 bytes of req->ifr_data is sub-ioctl number
* after 4 bytes sits the payload.
*/
subcmd = (int)req->ifr_data; //from iwpriv subcmd
switch (subcmd) {
case WLANNF:
ret = wlan_get_nf(priv, wrq);
break;
case WLANRSSI:
ret = wlan_get_rssi(priv, wrq);
break;
case WLANENABLE11D:
ret = libertas_cmd_enable_11d(priv, wrq);
break;
case WLANADHOCGRATE:
ret = wlan_do_set_grate_ioctl(priv, wrq);
break;
case WLAN_SUBCMD_SET_PRESCAN:
ret = wlan_subcmd_setprescan_ioctl(priv, wrq);
break;
}
break;
case WLAN_SETONEINT_GETONEINT:
switch (wrq->u.data.flags) {
case WLAN_BEACON_INTERVAL:
ret = wlan_beacon_interval(priv, wrq);
break;
case WLAN_LISTENINTRVL:
if (!wrq->u.data.length) {
int data;
lbs_pr_debug(1, "Get locallisteninterval value\n");
#define GET_ONE_INT 1
data = adapter->locallisteninterval;
if (copy_to_user(wrq->u.data.pointer,
&data, sizeof(int))) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
wrq->u.data.length = GET_ONE_INT;
} else {
int data;
if (copy_from_user
(&data, wrq->u.data.pointer, sizeof(int))) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
lbs_pr_debug(1, "Set locallisteninterval = %d\n",
data);
#define MAX_U16_VAL 65535
if (data > MAX_U16_VAL) {
lbs_pr_debug(1, "Exceeds U16 value\n");
return -EINVAL;
}
adapter->locallisteninterval = data;
}
break;
case WLAN_TXCONTROL:
ret = wlan_txcontrol(priv, wrq); //adds for txcontrol ioctl
break;
case WLAN_NULLPKTINTERVAL:
ret = wlan_null_pkt_interval(priv, wrq);
break;
default:
ret = -EOPNOTSUPP;
break;
}
break;
case WLAN_SETONEINT_GETNONE:
/* The first 4 bytes of req->ifr_data is sub-ioctl number
* after 4 bytes sits the payload.
*/
subcmd = wrq->u.data.flags; //from wpa_supplicant subcmd
subcmd = wrq->u.data.flags;
if (!subcmd)
subcmd = (int)req->ifr_data; //from iwpriv subcmd
subcmd = (int)wrq->u.param.value;
switch (subcmd) {
case WLAN_SUBCMD_SETRXANTENNA: /* SETRXANTENNA */
idata = SUBCMD_DATA(wrq);
ret = setrxantenna(priv, idata);
break;
case WLAN_SUBCMD_SETTXANTENNA: /* SETTXANTENNA */
idata = SUBCMD_DATA(wrq);
ret = settxantenna(priv, idata);
break;
case WLAN_SET_ATIM_WINDOW:
adapter->atimwindow = SUBCMD_DATA(wrq);
adapter->atimwindow = min_t(__u16, adapter->atimwindow, 50);
break;
case WLANSETBCNAVG:
adapter->bcn_avg_factor = SUBCMD_DATA(wrq);
if (adapter->bcn_avg_factor == 0)
adapter->bcn_avg_factor =
DEFAULT_BCN_AVG_FACTOR;
if (adapter->bcn_avg_factor > DEFAULT_BCN_AVG_FACTOR)
adapter->bcn_avg_factor =
DEFAULT_BCN_AVG_FACTOR;
break;
case WLANSETDATAAVG:
adapter->data_avg_factor = SUBCMD_DATA(wrq);
if (adapter->data_avg_factor == 0)
adapter->data_avg_factor =
DEFAULT_DATA_AVG_FACTOR;
if (adapter->data_avg_factor > DEFAULT_DATA_AVG_FACTOR)
adapter->data_avg_factor =
DEFAULT_DATA_AVG_FACTOR;
break;
case WLANSETREGION:
idata = SUBCMD_DATA(wrq);
ret = wlan_set_region(priv, (u16) idata);
break;
case WLAN_SET_LISTEN_INTERVAL:
idata = SUBCMD_DATA(wrq);
adapter->listeninterval = (u16) idata;
break;
case WLAN_SET_MULTIPLE_DTIM:
ret = wlan_set_multiple_dtim_ioctl(priv, req);
break;
case WLANSETAUTHALG:
ret = wlan_setauthalg_ioctl(priv, req);
break;
case WLANSET8021XAUTHALG:
ret = wlan_set8021xauthalg_ioctl(priv, req);
break;
case WLANSETENCRYPTIONMODE:
ret = wlan_setencryptionmode_ioctl(priv, req);
break;
case WLAN_SET_LINKMODE:
ret = wlan_set_linkmode_ioctl(priv, req);
break;
case WLAN_SET_RADIOMODE:
ret = wlan_set_radiomode_ioctl(priv, req);
break;
case WLAN_SET_DEBUGMODE:
ret = wlan_set_debugmode_ioctl(priv, req);
break;
case WLAN_SUBCMD_MESH_SET_TTL:
idata = SUBCMD_DATA(wrq);
ret = wlan_mesh_set_ttl_ioctl(priv, idata);
......@@ -2105,38 +855,8 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
break;
case WLAN_SETNONE_GETTWELVE_CHAR: /* Get Antenna settings */
/*
* We've not used IW_PRIV_TYPE_FIXED so sub-ioctl number is
* in flags of iwreq structure, otherwise it will be in
* mode member of iwreq structure.
*/
switch ((int)wrq->u.data.flags) {
case WLAN_SUBCMD_GETRXANTENNA: /* Get Rx Antenna */
ret = wlan_subcmd_getrxantenna_ioctl(priv, req);
break;
case WLAN_SUBCMD_GETTXANTENNA: /* Get Tx Antenna */
ret = wlan_subcmd_gettxantenna_ioctl(priv, req);
break;
case WLAN_GET_TSF:
ret = wlan_get_tsf_ioctl(priv, wrq);
break;
}
break;
case WLAN_SET128CHAR_GET128CHAR:
switch ((int)wrq->u.data.flags) {
case WLANSCAN_MODE:
lbs_pr_debug(1, "Scan mode Ioctl\n");
ret = wlan_scan_mode_ioctl(priv, wrq);
break;
case WLAN_GET_ADHOC_STATUS:
ret = wlan_get_adhoc_status_ioctl(priv, wrq);
break;
case WLAN_SUBCMD_BT_ADD:
ret = wlan_bt_add_ioctl(priv, req);
break;
......@@ -2168,41 +888,11 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
break;
case WLAN_SETNONE_GETONEINT:
switch ((int)req->ifr_data) {
case WLANGETBCNAVG:
pdata = (int *)wrq->u.name;
*pdata = (int)adapter->bcn_avg_factor;
break;
switch (wrq->u.param.value) {
case WLANGETREGION:
pdata = (int *)wrq->u.name;
*pdata = (int)adapter->regioncode;
break;
case WLAN_GET_LISTEN_INTERVAL:
pdata = (int *)wrq->u.name;
*pdata = (int)adapter->listeninterval;
break;
case WLAN_GET_LINKMODE:
req->ifr_data = (char *)((u32) adapter->linkmode);
break;
case WLAN_GET_RADIOMODE:
req->ifr_data = (char *)((u32) adapter->radiomode);
break;
case WLAN_GET_DEBUGMODE:
req->ifr_data = (char *)((u32) adapter->debugmode);
break;
case WLAN_GET_MULTIPLE_DTIM:
pdata = (int *)wrq->u.name;
*pdata = (int)adapter->multipledtim;
break;
case WLAN_GET_TX_RATE:
ret = wlan_get_txrate_ioctl(priv, req);
break;
case WLAN_SUBCMD_FWT_CLEANUP: /* fwt_cleanup */
ret = wlan_fwt_cleanup_ioctl(priv, req);
break;
......@@ -2222,196 +912,8 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
break;
case WLANGETLOG:
ret = wlan_do_getlog_ioctl(priv, wrq);
break;
case WLAN_SET_GET_SIXTEEN_INT:
switch ((int)wrq->u.data.flags) {
case WLAN_TPCCFG:
{
int data[5];
struct cmd_ds_802_11_tpc_cfg cfg;
memset(&cfg, 0, sizeof(cfg));
if ((wrq->u.data.length > 1)
&& (wrq->u.data.length != 5))
return -1;
if (wrq->u.data.length == 0) {
cfg.action =
cpu_to_le16
(cmd_act_get);
} else {
if (copy_from_user
(data, wrq->u.data.pointer,
sizeof(int) * 5)) {
lbs_pr_debug(1,
"Copy from user failed\n");
return -EFAULT;
}
cfg.action =
cpu_to_le16
(cmd_act_set);
cfg.enable = data[0];
cfg.usesnr = data[1];
cfg.P0 = data[2];
cfg.P1 = data[3];
cfg.P2 = data[4];
}
ret =
libertas_prepare_and_send_command(priv,
cmd_802_11_tpc_cfg,
0,
cmd_option_waitforrsp,
0, (void *)&cfg);
data[0] = cfg.enable;
data[1] = cfg.usesnr;
data[2] = cfg.P0;
data[3] = cfg.P1;
data[4] = cfg.P2;
if (copy_to_user
(wrq->u.data.pointer, data,
sizeof(int) * 5)) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
wrq->u.data.length = 5;
}
break;
case WLAN_POWERCFG:
{
int data[4];
struct cmd_ds_802_11_pwr_cfg cfg;
memset(&cfg, 0, sizeof(cfg));
if ((wrq->u.data.length > 1)
&& (wrq->u.data.length != 4))
return -1;
if (wrq->u.data.length == 0) {
cfg.action =
cpu_to_le16
(cmd_act_get);
} else {
if (copy_from_user
(data, wrq->u.data.pointer,
sizeof(int) * 4)) {
lbs_pr_debug(1,
"Copy from user failed\n");
return -EFAULT;
}
cfg.action =
cpu_to_le16
(cmd_act_set);
cfg.enable = data[0];
cfg.PA_P0 = data[1];
cfg.PA_P1 = data[2];
cfg.PA_P2 = data[3];
}
ret =
libertas_prepare_and_send_command(priv,
cmd_802_11_pwr_cfg,
0,
cmd_option_waitforrsp,
0, (void *)&cfg);
data[0] = cfg.enable;
data[1] = cfg.PA_P0;
data[2] = cfg.PA_P1;
data[3] = cfg.PA_P2;
if (copy_to_user
(wrq->u.data.pointer, data,
sizeof(int) * 4)) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
wrq->u.data.length = 4;
}
break;
case WLAN_AUTO_FREQ_SET:
{
int data[3];
struct cmd_ds_802_11_afc afc;
memset(&afc, 0, sizeof(afc));
if (wrq->u.data.length != 3)
return -1;
if (copy_from_user
(data, wrq->u.data.pointer,
sizeof(int) * 3)) {
lbs_pr_debug(1, "Copy from user failed\n");
return -EFAULT;
}
afc.afc_auto = data[0];
if (afc.afc_auto != 0) {
afc.threshold = data[1];
afc.period = data[2];
} else {
afc.timing_offset = data[1];
afc.carrier_offset = data[2];
}
ret =
libertas_prepare_and_send_command(priv,
cmd_802_11_set_afc,
0,
cmd_option_waitforrsp,
0, (void *)&afc);
}
break;
case WLAN_AUTO_FREQ_GET:
{
int data[3];
struct cmd_ds_802_11_afc afc;
memset(&afc, 0, sizeof(afc));
ret =
libertas_prepare_and_send_command(priv,
cmd_802_11_get_afc,
0,
cmd_option_waitforrsp,
0, (void *)&afc);
data[0] = afc.afc_auto;
data[1] = afc.timing_offset;
data[2] = afc.carrier_offset;
if (copy_to_user
(wrq->u.data.pointer, data,
sizeof(int) * 3)) {
lbs_pr_debug(1, "Copy to user failed\n");
return -EFAULT;
}
wrq->u.data.length = 3;
}
break;
case WLAN_SCANPROBES:
{
int data;
if (wrq->u.data.length > 0) {
if (copy_from_user
(&data, wrq->u.data.pointer,
sizeof(int))) {
lbs_pr_debug(1,
"Copy from user failed\n");
return -EFAULT;
}
adapter->scanprobes = data;
} else {
data = adapter->scanprobes;
if (copy_to_user
(wrq->u.data.pointer, &data,
sizeof(int))) {
lbs_pr_debug(1,
"Copy to user failed\n");
return -EFAULT;
}
}
wrq->u.data.length = 1;
}
break;
case WLAN_LED_GPIO_CTRL:
{
int i;
......@@ -2475,17 +977,6 @@ int libertas_do_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
wrq->u.data.length = gpio->header.len;
}
break;
case WLAN_ADAPT_RATESET:
ret = wlan_adapt_rateset(priv, wrq);
break;
case WLAN_INACTIVITY_TIMEOUT:
ret = wlan_inactivity_timeout(priv, wrq);
break;
case WLANSNR:
ret = wlan_get_snr(priv, wrq);
break;
case WLAN_GET_RXINFO:
ret = wlan_get_rxinfo(priv, wrq);
}
break;
......
......@@ -15,6 +15,8 @@
#include "join.h"
#include "dev.h"
#define AD_HOC_CAP_PRIVACY_ON 1
/**
* @brief This function finds out the common rates between rate1 and rate2.
*
......@@ -85,7 +87,7 @@ int libertas_send_deauth(wlan_private * priv)
wlan_adapter *adapter = priv->adapter;
int ret = 0;
if (adapter->inframode == wlan802_11infrastructure &&
if (adapter->mode == IW_MODE_INFRA &&
adapter->connect_status == libertas_connected)
ret = libertas_send_deauthentication(priv);
else
......@@ -94,20 +96,6 @@ int libertas_send_deauth(wlan_private * priv)
return ret;
}
int libertas_do_adhocstop_ioctl(wlan_private * priv)
{
wlan_adapter *adapter = priv->adapter;
int ret = 0;
if (adapter->inframode == wlan802_11ibss &&
adapter->connect_status == libertas_connected)
ret = libertas_stop_adhoc_network(priv);
else
ret = -ENOTSUPP;
return ret;
}
/**
* @brief Associate to a specific BSS discovered in a scan
*
......@@ -207,8 +195,7 @@ int libertas_join_adhoc_network(wlan_private * priv, struct bss_descriptor * pbs
/* check if the requested SSID is already joined */
if (adapter->curbssparams.ssid.ssidlength
&& !libertas_SSID_cmp(&pbssdesc->ssid, &adapter->curbssparams.ssid)
&& (adapter->curbssparams.bssdescriptor.inframode ==
wlan802_11ibss)) {
&& (adapter->mode == IW_MODE_ADHOC)) {
lbs_pr_debug(1,
"ADHOC_J_CMD: New ad-hoc SSID is the same as current, "
......@@ -260,130 +247,6 @@ int libertas_send_deauthentication(wlan_private * priv)
0, cmd_option_waitforrsp, 0, NULL);
}
/**
* @brief Set Idle Off
*
* @param priv A pointer to wlan_private structure
* @return 0 --success, otherwise fail
*/
int libertas_idle_off(wlan_private * priv)
{
wlan_adapter *adapter = priv->adapter;
int ret = 0;
const u8 zeromac[] = { 0, 0, 0, 0, 0, 0 };
int i;
ENTER();
if (adapter->connect_status == libertas_disconnected) {
if (adapter->inframode == wlan802_11infrastructure) {
if (memcmp(adapter->previousbssid, zeromac,
sizeof(zeromac)) != 0) {
lbs_pr_debug(1, "Previous SSID = %s\n",
adapter->previousssid.ssid);
lbs_pr_debug(1, "Previous BSSID = "
"%02x:%02x:%02x:%02x:%02x:%02x:\n",
adapter->previousbssid[0],
adapter->previousbssid[1],
adapter->previousbssid[2],
adapter->previousbssid[3],
adapter->previousbssid[4],
adapter->previousbssid[5]);
i = libertas_find_SSID_in_list(adapter,
&adapter->previousssid,
adapter->previousbssid,
adapter->inframode);
if (i < 0) {
libertas_send_specific_BSSID_scan(priv,
adapter->
previousbssid,
1);
i = libertas_find_SSID_in_list(adapter,
&adapter->
previousssid,
adapter->
previousbssid,
adapter->
inframode);
}
if (i < 0) {
/* If the BSSID could not be found, try just the SSID */
i = libertas_find_SSID_in_list(adapter,
&adapter->
previousssid, NULL,
adapter->
inframode);
}
if (i < 0) {
libertas_send_specific_SSID_scan(priv,
&adapter->
previousssid,
1);
i = libertas_find_SSID_in_list(adapter,
&adapter->
previousssid, NULL,
adapter->
inframode);
}
if (i >= 0) {
ret =
wlan_associate(priv,
&adapter->
scantable[i]);
}
}
} else if (adapter->inframode == wlan802_11ibss) {
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_ad_hoc_start,
0,
cmd_option_waitforrsp,
0, &adapter->previousssid);
}
}
/* else it is connected */
lbs_pr_debug(1, "\nwlanidle is off");
LEAVE();
return ret;
}
/**
* @brief Set Idle On
*
* @param priv A pointer to wlan_private structure
* @return 0 --success, otherwise fail
*/
int libertas_idle_on(wlan_private * priv)
{
wlan_adapter *adapter = priv->adapter;
int ret = 0;
if (adapter->connect_status == libertas_connected) {
if (adapter->inframode == wlan802_11infrastructure) {
lbs_pr_debug(1, "Previous SSID = %s\n",
adapter->previousssid.ssid);
memmove(&adapter->previousssid,
&adapter->curbssparams.ssid,
sizeof(struct WLAN_802_11_SSID));
libertas_send_deauth(priv);
} else if (adapter->inframode == wlan802_11ibss) {
ret = libertas_stop_adhoc_network(priv);
}
}
lbs_pr_debug(1, "\nwlanidle is on");
return ret;
}
/**
* @brief This function prepares command of authenticate.
*
......@@ -398,22 +261,39 @@ int libertas_cmd_80211_authenticate(wlan_private * priv,
void *pdata_buf)
{
wlan_adapter *adapter = priv->adapter;
struct cmd_ds_802_11_authenticate *pauthenticate =
&cmd->params.auth;
struct cmd_ds_802_11_authenticate *pauthenticate = &cmd->params.auth;
int ret = -1;
u8 *bssid = pdata_buf;
cmd->command = cpu_to_le16(cmd_802_11_authenticate);
cmd->size =
cpu_to_le16(sizeof(struct cmd_ds_802_11_authenticate)
+ S_DS_GEN);
cmd->size = cpu_to_le16(sizeof(struct cmd_ds_802_11_authenticate)
+ S_DS_GEN);
/* translate auth mode to 802.11 defined wire value */
switch (adapter->secinfo.auth_mode) {
case IW_AUTH_ALG_OPEN_SYSTEM:
pauthenticate->authtype = 0x00;
break;
case IW_AUTH_ALG_SHARED_KEY:
pauthenticate->authtype = 0x01;
break;
case IW_AUTH_ALG_LEAP:
pauthenticate->authtype = 0x80;
break;
default:
lbs_pr_debug(1, "AUTH_CMD: invalid auth alg 0x%X\n",
adapter->secinfo.auth_mode);
goto out;
}
pauthenticate->authtype = adapter->secinfo.authmode;
memcpy(pauthenticate->macaddr, bssid, ETH_ALEN);
lbs_pr_debug(1, "AUTH_CMD: Bssid is : %x:%x:%x:%x:%x:%x\n",
bssid[0], bssid[1], bssid[2], bssid[3], bssid[4], bssid[5]);
ret = 0;
return 0;
out:
return ret;
}
int libertas_cmd_80211_deauthenticate(wlan_private * priv,
......@@ -550,7 +430,7 @@ int libertas_cmd_80211_associate(wlan_private * priv,
lbs_pr_debug(1, "ASSOC_CMD: rates->header.len = %d\n", rates->header.len);
/* set IBSS field */
if (pbssdesc->inframode == wlan802_11infrastructure) {
if (pbssdesc->mode == IW_MODE_INFRA) {
#define CAPINFO_ESS_MODE 1
passo->capinfo.ess = CAPINFO_ESS_MODE;
}
......@@ -624,7 +504,7 @@ int libertas_cmd_80211_ad_hoc_start(wlan_private * priv,
/* set the BSS type */
adhs->bsstype = cmd_bss_type_ibss;
pbssdesc->inframode = wlan802_11ibss;
pbssdesc->mode = IW_MODE_ADHOC;
adhs->beaconperiod = adapter->beaconperiod;
/* set Physical param set */
......@@ -666,15 +546,12 @@ int libertas_cmd_80211_ad_hoc_start(wlan_private * priv,
adhs->probedelay = cpu_to_le16(cmd_scan_probe_delay_time);
/* set up privacy in adapter->scantable[i] */
if (adapter->secinfo.WEPstatus == wlan802_11WEPenabled) {
#define AD_HOC_CAP_PRIVACY_ON 1
lbs_pr_debug(1, "ADHOC_S_CMD: WEPstatus set, privacy to WEP\n");
if (adapter->secinfo.wep_enabled) {
lbs_pr_debug(1, "ADHOC_S_CMD: WEP enabled, setting privacy on\n");
pbssdesc->privacy = wlan802_11privfilter8021xWEP;
adhs->cap.privacy = AD_HOC_CAP_PRIVACY_ON;
} else {
lbs_pr_debug(1, "ADHOC_S_CMD: WEPstatus NOT set, Setting "
"privacy to ACCEPT ALL\n");
lbs_pr_debug(1, "ADHOC_S_CMD: WEP disabled, setting privacy off\n");
pbssdesc->privacy = wlan802_11privfilteracceptall;
}
......@@ -786,9 +663,6 @@ int libertas_cmd_80211_ad_hoc_join(wlan_private * priv,
padhocjoin->bssdescriptor.BSSID[5],
padhocjoin->bssdescriptor.SSID);
lbs_pr_debug(1, "ADHOC_J_CMD: Data Rate = %x\n",
(u32) padhocjoin->bssdescriptor.datarates);
/* failtimeout */
padhocjoin->failtimeout = cpu_to_le16(MRVDRV_ASSOCIATION_TIME_OUT);
......@@ -832,7 +706,7 @@ int libertas_cmd_80211_ad_hoc_join(wlan_private * priv,
padhocjoin->bssdescriptor.ssparamset.ibssparamset.atimwindow =
cpu_to_le16(pbssdesc->atimwindow);
if (adapter->secinfo.WEPstatus == wlan802_11WEPenabled) {
if (adapter->secinfo.wep_enabled) {
padhocjoin->bssdescriptor.cap.privacy = AD_HOC_CAP_PRIVACY_ON;
}
......
/* -*- mode: C; tab-width: 4; indent-tabs-mode: nil -*- */
/* vi: set expandtab shiftwidth=4 tabstop=4 textwidth=78: */
/**
* Interface for the wlan infrastructure and adhoc join routines
*
......@@ -40,10 +37,6 @@ extern int libertas_ret_80211_disassociate(wlan_private * priv,
extern int libertas_ret_80211_associate(wlan_private * priv,
struct cmd_ds_command *resp);
extern int libertas_idle_on(wlan_private * priv);
extern int libertas_idle_off(wlan_private * priv);
extern int libertas_do_adhocstop_ioctl(wlan_private * priv);
extern int libertas_reassociation_thread(void *data);
struct WLAN_802_11_SSID;
......
......@@ -21,6 +21,13 @@
#include "debugfs.h"
#include "assoc.h"
#define DRIVER_RELEASE_VERSION "320.p0"
const char libertas_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION
#ifdef DEBUG
"-dbg"
#endif
"";
#ifdef ENABLE_PM
static struct pm_dev *wlan_pm_dev = NULL;
#endif
......
......@@ -210,7 +210,7 @@ int libertas_process_rxed_packet(wlan_private * priv, struct sk_buff *skb)
goto done;
}
lbs_pr_debug(1, "RX Data: skb->len - sizeof(RxPd) = %d - %d = %d\n",
lbs_pr_debug(1, "RX Data: skb->len - sizeof(RxPd) = %d - %zd = %zd\n",
skb->len, sizeof(struct rxpd), skb->len - sizeof(struct rxpd));
lbs_dbg_hex("RX Data: Dest", p_rx_pkt->eth803_hdr.dest_addr,
......@@ -364,7 +364,7 @@ static int process_rxed_802_11_packet(wlan_private * priv, struct sk_buff *skb)
priv->stats.rx_errors++;
}
lbs_pr_debug(1, "RX Data: skb->len - sizeof(RxPd) = %d - %d = %d\n",
lbs_pr_debug(1, "RX Data: skb->len - sizeof(RxPd) = %d - %zd = %zd\n",
skb->len, sizeof(struct rxpd), skb->len - sizeof(struct rxpd));
/* create the exported radio header */
......
/* -*- mode: C; tab-width: 4; indent-tabs-mode: nil -*- */
/* vi: set expandtab shiftwidth=4 tabstop=4 textwidth=78: */
/**
* Functions implementing wlan scan IOCTL and firmware command APIs
*
......@@ -87,118 +84,95 @@
*
* @return Index in scantable, or error code if negative
*/
static int is_network_compatible(wlan_adapter * adapter, int index, int mode)
static int is_network_compatible(wlan_adapter * adapter, int index, u8 mode)
{
ENTER();
if (adapter->scantable[index].inframode == mode) {
if (adapter->secinfo.WEPstatus == wlan802_11WEPdisabled
if (adapter->scantable[index].mode == mode) {
if ( !adapter->secinfo.wep_enabled
&& !adapter->secinfo.WPAenabled
&& !adapter->secinfo.WPA2enabled
&& adapter->scantable[index].wpa_supplicant.wpa_ie[0] !=
WPA_IE
&& adapter->scantable[index].wpa2_supplicant.wpa_ie[0] !=
WPA2_IE && adapter->secinfo.Encryptionmode == CIPHER_NONE
&& adapter->scantable[index].wpa_ie[0] != WPA_IE
&& adapter->scantable[index].rsn_ie[0] != WPA2_IE
&& !adapter->scantable[index].privacy) {
/* no security */
LEAVE();
return index;
} else if (adapter->secinfo.WEPstatus == wlan802_11WEPenabled
} else if ( adapter->secinfo.wep_enabled
&& !adapter->secinfo.WPAenabled
&& !adapter->secinfo.WPA2enabled
&& adapter->scantable[index].privacy) {
/* static WEP enabled */
LEAVE();
return index;
} else if (adapter->secinfo.WEPstatus == wlan802_11WEPdisabled
} else if ( !adapter->secinfo.wep_enabled
&& adapter->secinfo.WPAenabled
&& !adapter->secinfo.WPA2enabled
&& (adapter->scantable[index].wpa_supplicant.
wpa_ie[0]
== WPA_IE)
&& (adapter->scantable[index].wpa_ie[0] == WPA_IE)
/* privacy bit may NOT be set in some APs like LinkSys WRT54G
&& adapter->scantable[index].privacy */
) {
/* WPA enabled */
lbs_pr_debug(1,
lbs_pr_debug(1,
"is_network_compatible() WPA: index=%d wpa_ie=%#x "
"wpa2_ie=%#x WEP=%s WPA=%s WPA2=%s Encmode=%#x "
"wpa2_ie=%#x WEP=%s WPA=%s WPA2=%s "
"privacy=%#x\n", index,
adapter->scantable[index].wpa_supplicant.
wpa_ie[0],
adapter->scantable[index].wpa2_supplicant.
wpa_ie[0],
(adapter->secinfo.WEPstatus ==
wlan802_11WEPenabled) ? "e" : "d",
(adapter->secinfo.WPAenabled) ? "e" : "d",
(adapter->secinfo.WPA2enabled) ? "e" : "d",
adapter->secinfo.Encryptionmode,
adapter->scantable[index].wpa_ie[0],
adapter->scantable[index].rsn_ie[0],
adapter->secinfo.wep_enabled ? "e" : "d",
adapter->secinfo.WPAenabled ? "e" : "d",
adapter->secinfo.WPA2enabled ? "e" : "d",
adapter->scantable[index].privacy);
LEAVE();
return index;
} else if (adapter->secinfo.WEPstatus == wlan802_11WEPdisabled
} else if ( !adapter->secinfo.wep_enabled
&& !adapter->secinfo.WPAenabled
&& adapter->secinfo.WPA2enabled
&& (adapter->scantable[index].wpa2_supplicant.
wpa_ie[0]
== WPA2_IE)
&& (adapter->scantable[index].rsn_ie[0] == WPA2_IE)
/* privacy bit may NOT be set in some APs like LinkSys WRT54G
&& adapter->scantable[index].privacy */
) {
/* WPA2 enabled */
lbs_pr_debug(1,
lbs_pr_debug(1,
"is_network_compatible() WPA2: index=%d wpa_ie=%#x "
"wpa2_ie=%#x WEP=%s WPA=%s WPA2=%s Encmode=%#x "
"wpa2_ie=%#x WEP=%s WPA=%s WPA2=%s "
"privacy=%#x\n", index,
adapter->scantable[index].wpa_supplicant.
wpa_ie[0],
adapter->scantable[index].wpa2_supplicant.
wpa_ie[0],
(adapter->secinfo.WEPstatus ==
wlan802_11WEPenabled) ? "e" : "d",
(adapter->secinfo.WPAenabled) ? "e" : "d",
(adapter->secinfo.WPA2enabled) ? "e" : "d",
adapter->secinfo.Encryptionmode,
adapter->scantable[index].wpa_ie[0],
adapter->scantable[index].rsn_ie[0],
adapter->secinfo.wep_enabled ? "e" : "d",
adapter->secinfo.WPAenabled ? "e" : "d",
adapter->secinfo.WPA2enabled ? "e" : "d",
adapter->scantable[index].privacy);
LEAVE();
return index;
} else if (adapter->secinfo.WEPstatus == wlan802_11WEPdisabled
} else if ( !adapter->secinfo.wep_enabled
&& !adapter->secinfo.WPAenabled
&& !adapter->secinfo.WPA2enabled
&& (adapter->scantable[index].wpa_supplicant.
wpa_ie[0]
!= WPA_IE)
&& (adapter->scantable[index].wpa2_supplicant.
wpa_ie[0]
!= WPA2_IE)
&& adapter->secinfo.Encryptionmode != CIPHER_NONE
&& (adapter->scantable[index].wpa_ie[0] != WPA_IE)
&& (adapter->scantable[index].rsn_ie[0] != WPA2_IE)
&& adapter->scantable[index].privacy) {
/* dynamic WEP enabled */
lbs_pr_debug(1,
lbs_pr_debug(1,
"is_network_compatible() dynamic WEP: index=%d "
"wpa_ie=%#x wpa2_ie=%#x Encmode=%#x privacy=%#x\n",
"wpa_ie=%#x wpa2_ie=%#x privacy=%#x\n",
index,
adapter->scantable[index].wpa_supplicant.
wpa_ie[0],
adapter->scantable[index].wpa2_supplicant.
wpa_ie[0], adapter->secinfo.Encryptionmode,
adapter->scantable[index].wpa_ie[0],
adapter->scantable[index].rsn_ie[0],
adapter->scantable[index].privacy);
LEAVE();
return index;
}
/* security doesn't match */
lbs_pr_debug(1,
lbs_pr_debug(1,
"is_network_compatible() FAILED: index=%d wpa_ie=%#x "
"wpa2_ie=%#x WEP=%s WPA=%s WPA2=%s Encmode=%#x privacy=%#x\n",
"wpa2_ie=%#x WEP=%s WPA=%s WPA2=%s privacy=%#x\n",
index,
adapter->scantable[index].wpa_supplicant.wpa_ie[0],
adapter->scantable[index].wpa2_supplicant.wpa_ie[0],
(adapter->secinfo.WEPstatus ==
wlan802_11WEPenabled) ? "e" : "d",
(adapter->secinfo.WPAenabled) ? "e" : "d",
(adapter->secinfo.WPA2enabled) ? "e" : "d",
adapter->secinfo.Encryptionmode,
adapter->scantable[index].wpa_ie[0],
adapter->scantable[index].rsn_ie[0],
adapter->secinfo.wep_enabled ? "e" : "d",
adapter->secinfo.WPAenabled ? "e" : "d",
adapter->secinfo.WPA2enabled ? "e" : "d",
adapter->scantable[index].privacy);
LEAVE();
return -ECONNREFUSED;
......@@ -924,8 +898,6 @@ static int InterpretBSSDescriptionWithIE(struct bss_descriptor * pBSSEntry,
u8 founddatarateie;
int bytesleftforcurrentbeacon;
struct WPA_SUPPLICANT *pwpa_supplicant;
struct WPA_SUPPLICANT *pwpa2_supplicant;
struct IE_WPA *pIe;
const u8 oui01[4] = { 0x00, 0x50, 0xf2, 0x01 };
......@@ -962,9 +934,6 @@ static int InterpretBSSDescriptionWithIE(struct bss_descriptor * pBSSEntry,
bytesleftforcurrentbeacon = beaconsize;
pwpa_supplicant = &pBSSEntry->wpa_supplicant;
pwpa2_supplicant = &pBSSEntry->wpa2_supplicant;
memcpy(pBSSEntry->macaddress, pcurrentptr, ETH_ALEN);
lbs_pr_debug(1, "InterpretIE: AP MAC Addr-%x:%x:%x:%x:%x:%x\n",
pBSSEntry->macaddress[0], pBSSEntry->macaddress[1],
......@@ -1027,9 +996,9 @@ static int InterpretBSSDescriptionWithIE(struct bss_descriptor * pBSSEntry,
}
if (pcap->ibss == 1) {
pBSSEntry->inframode = wlan802_11ibss;
pBSSEntry->mode = IW_MODE_ADHOC;
} else {
pBSSEntry->inframode = wlan802_11infrastructure;
pBSSEntry->mode = IW_MODE_INFRA;
}
/* process variable IE */
......@@ -1116,7 +1085,7 @@ static int InterpretBSSDescriptionWithIE(struct bss_descriptor * pBSSEntry,
sizeof(pcountryinfo->countrycode)
|| pcountryinfo->len > 254) {
lbs_pr_debug(1, "InterpretIE: 11D- Err "
"CountryInfo len =%d min=%d max=254\n",
"CountryInfo len =%d min=%zd max=254\n",
pcountryinfo->len,
sizeof(pcountryinfo->countrycode));
LEAVE();
......@@ -1160,27 +1129,27 @@ static int InterpretBSSDescriptionWithIE(struct bss_descriptor * pBSSEntry,
#define IE_ID_LEN_FIELDS_BYTES 2
pIe = (struct IE_WPA *)pcurrentptr;
if (!memcmp(pIe->oui, oui01, sizeof(oui01))) {
pwpa_supplicant->wpa_ie_len
= min_t(size_t, elemlen + IE_ID_LEN_FIELDS_BYTES,
sizeof(pwpa_supplicant->wpa_ie));
memcpy(pwpa_supplicant->wpa_ie,
pcurrentptr,
pwpa_supplicant->wpa_ie_len);
lbs_dbg_hex("InterpretIE: Resp WPA_IE",
pwpa_supplicant->wpa_ie, elemlen);
}
if (memcmp(pIe->oui, oui01, sizeof(oui01)))
break;
pBSSEntry->wpa_ie_len = min_t(size_t,
elemlen + IE_ID_LEN_FIELDS_BYTES,
sizeof(pBSSEntry->wpa_ie));
memcpy(pBSSEntry->wpa_ie, pcurrentptr,
pBSSEntry->wpa_ie_len);
lbs_dbg_hex("InterpretIE: Resp WPA_IE",
pBSSEntry->wpa_ie, elemlen);
break;
case WPA2_IE:
pIe = (struct IE_WPA *)pcurrentptr;
pwpa2_supplicant->wpa_ie_len
= min_t(size_t, elemlen + IE_ID_LEN_FIELDS_BYTES,
sizeof(pwpa2_supplicant->wpa_ie));
memcpy(pwpa2_supplicant->wpa_ie,
pcurrentptr, pwpa2_supplicant->wpa_ie_len);
pBSSEntry->rsn_ie_len = min_t(size_t,
elemlen + IE_ID_LEN_FIELDS_BYTES,
sizeof(pBSSEntry->rsn_ie));
memcpy(pBSSEntry->rsn_ie, pcurrentptr,
pBSSEntry->rsn_ie_len);
lbs_dbg_hex("InterpretIE: Resp WPA2_IE",
pwpa2_supplicant->wpa_ie, elemlen);
pBSSEntry->rsn_ie, elemlen);
break;
case TIM:
break;
......@@ -1227,7 +1196,7 @@ int libertas_SSID_cmp(struct WLAN_802_11_SSID *ssid1, struct WLAN_802_11_SSID *s
*
* @return index in BSSID list, or error return code (< 0)
*/
int libertas_find_BSSID_in_list(wlan_adapter * adapter, u8 * bssid, int mode)
int libertas_find_BSSID_in_list(wlan_adapter * adapter, u8 * bssid, u8 mode)
{
int ret = -ENETUNREACH;
int i;
......@@ -1247,8 +1216,8 @@ int libertas_find_BSSID_in_list(wlan_adapter * adapter, u8 * bssid, int mode)
for (i = 0; ret < 0 && i < adapter->numinscantable; i++) {
if (!memcmp(adapter->scantable[i].macaddress, bssid, ETH_ALEN)) {
switch (mode) {
case wlan802_11infrastructure:
case wlan802_11ibss:
case IW_MODE_INFRA:
case IW_MODE_ADHOC:
ret = is_network_compatible(adapter, i, mode);
break;
default:
......@@ -1272,7 +1241,7 @@ int libertas_find_BSSID_in_list(wlan_adapter * adapter, u8 * bssid, int mode)
* @return index in BSSID list
*/
int libertas_find_SSID_in_list(wlan_adapter * adapter,
struct WLAN_802_11_SSID *ssid, u8 * bssid, int mode)
struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode)
{
int net = -ENETUNREACH;
u8 bestrssi = 0;
......@@ -1287,8 +1256,8 @@ int libertas_find_SSID_in_list(wlan_adapter * adapter,
!memcmp(adapter->scantable[i].
macaddress, bssid, ETH_ALEN))) {
switch (mode) {
case wlan802_11infrastructure:
case wlan802_11ibss:
case IW_MODE_INFRA:
case IW_MODE_ADHOC:
j = is_network_compatible(adapter, i, mode);
if (j >= 0) {
......@@ -1311,7 +1280,7 @@ int libertas_find_SSID_in_list(wlan_adapter * adapter,
}
}
break;
case wlan802_11autounknown:
case IW_MODE_AUTO:
default:
if (SCAN_RSSI(adapter->scantable[i].rssi)
> bestrssi) {
......@@ -1338,8 +1307,7 @@ int libertas_find_SSID_in_list(wlan_adapter * adapter,
*
* @return index in BSSID list
*/
int libertas_find_best_SSID_in_list(wlan_adapter * adapter,
enum WLAN_802_11_NETWORK_INFRASTRUCTURE mode)
int libertas_find_best_SSID_in_list(wlan_adapter * adapter, u8 mode)
{
int bestnet = -ENETUNREACH;
u8 bestrssi = 0;
......@@ -1351,8 +1319,8 @@ int libertas_find_best_SSID_in_list(wlan_adapter * adapter,
for (i = 0; i < adapter->numinscantable; i++) {
switch (mode) {
case wlan802_11infrastructure:
case wlan802_11ibss:
case IW_MODE_INFRA:
case IW_MODE_ADHOC:
if (is_network_compatible(adapter, i, mode) >= 0) {
if (SCAN_RSSI(adapter->scantable[i].rssi) >
bestrssi) {
......@@ -1363,7 +1331,7 @@ int libertas_find_best_SSID_in_list(wlan_adapter * adapter,
}
}
break;
case wlan802_11autounknown:
case IW_MODE_AUTO:
default:
if (SCAN_RSSI(adapter->scantable[i].rssi) > bestrssi) {
bestrssi =
......@@ -1388,8 +1356,7 @@ int libertas_find_best_SSID_in_list(wlan_adapter * adapter,
*/
int libertas_find_best_network_SSID(wlan_private * priv,
struct WLAN_802_11_SSID *pSSID,
enum WLAN_802_11_NETWORK_INFRASTRUCTURE preferred_mode,
enum WLAN_802_11_NETWORK_INFRASTRUCTURE *out_mode)
u8 preferred_mode, u8 *out_mode)
{
wlan_adapter *adapter = priv->adapter;
int ret = 0;
......@@ -1414,7 +1381,7 @@ int libertas_find_best_network_SSID(wlan_private * priv,
preqbssid = &adapter->scantable[i];
memcpy(pSSID, &preqbssid->ssid,
sizeof(struct WLAN_802_11_SSID));
*out_mode = preqbssid->inframode;
*out_mode = preqbssid->mode;
if (!pSSID->ssidlength) {
ret = -1;
......@@ -1584,7 +1551,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
for (i = 0; i < adapter->numinscantable; i++) {
if ((current_ev + MAX_SCAN_CELL_SIZE) >= end_buf) {
lbs_pr_debug(1, "i=%d break out: current_ev=%p end_buf=%p "
"MAX_SCAN_CELL_SIZE=%d\n",
"MAX_SCAN_CELL_SIZE=%zd\n",
i, current_ev, end_buf, MAX_SCAN_CELL_SIZE);
break;
}
......@@ -1632,7 +1599,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
//Add mode
iwe.cmd = SIOCGIWMODE;
iwe.u.mode = adapter->scantable[i].inframode + 1;
iwe.u.mode = adapter->scantable[i].mode;
iwe.len = IW_EV_UINT_LEN;
current_ev =
iwe_stream_add_event(current_ev, end_buf, &iwe, iwe.len);
......@@ -1666,7 +1633,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
iwe.u.qual.noise =
CAL_NF(adapter->NF[TYPE_BEACON][TYPE_NOAVG]);
}
if ((adapter->inframode == wlan802_11ibss) &&
if ((adapter->mode == IW_MODE_ADHOC) &&
!libertas_SSID_cmp(&adapter->curbssparams.ssid,
&adapter->scantable[i].ssid)
&& adapter->adhoccreate) {
......@@ -1731,7 +1698,7 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
end_buf, &iwe, iwe.len);
}
if ((adapter->scantable[i].inframode == wlan802_11ibss)
if ((adapter->scantable[i].mode == IW_MODE_ADHOC)
&& !libertas_SSID_cmp(&adapter->curbssparams.ssid,
&adapter->scantable[i].ssid)
&& adapter->adhoccreate) {
......@@ -1745,30 +1712,24 @@ int libertas_get_scan(struct net_device *dev, struct iw_request_info *info,
/* Add new value to event */
current_val = current_ev + IW_EV_LCP_LEN;
if (adapter->scantable[i].wpa2_supplicant.wpa_ie[0] == WPA2_IE) {
if (adapter->scantable[i].rsn_ie[0] == WPA2_IE) {
memset(&iwe, 0, sizeof(iwe));
memset(buf, 0, sizeof(buf));
memcpy(buf, adapter->scantable[i].
wpa2_supplicant.wpa_ie,
adapter->scantable[i].wpa2_supplicant.
wpa_ie_len);
memcpy(buf, adapter->scantable[i].rsn_ie,
adapter->scantable[i].rsn_ie_len);
iwe.cmd = IWEVGENIE;
iwe.u.data.length = adapter->scantable[i].
wpa2_supplicant.wpa_ie_len;
iwe.u.data.length = adapter->scantable[i].rsn_ie_len;
iwe.len = IW_EV_POINT_LEN + iwe.u.data.length;
current_ev = iwe_stream_add_point(current_ev, end_buf,
&iwe, buf);
}
if (adapter->scantable[i].wpa_supplicant.wpa_ie[0] == WPA_IE) {
if (adapter->scantable[i].wpa_ie[0] == WPA_IE) {
memset(&iwe, 0, sizeof(iwe));
memset(buf, 0, sizeof(buf));
memcpy(buf, adapter->scantable[i].
wpa_supplicant.wpa_ie,
adapter->scantable[i].wpa_supplicant.
wpa_ie_len);
memcpy(buf, adapter->scantable[i].wpa_ie,
adapter->scantable[i].wpa_ie_len);
iwe.cmd = IWEVGENIE;
iwe.u.data.length = adapter->scantable[i].
wpa_supplicant.wpa_ie_len;
iwe.u.data.length = adapter->scantable[i].wpa_ie_len;
iwe.len = IW_EV_POINT_LEN + iwe.u.data.length;
current_ev = iwe_stream_add_point(current_ev, end_buf,
&iwe, buf);
......
/* -*- mode: C; tab-width: 4; indent-tabs-mode: nil -*- */
/* vi: set expandtab shiftwidth=4 tabstop=4 textwidth=78: */
/**
* Interface for the wlan network scan routines
*
......@@ -10,6 +7,7 @@
#ifndef _WLAN_SCAN_H
#define _WLAN_SCAN_H
#include <net/ieee80211.h>
#include "hostcmd.h"
/**
......@@ -155,7 +153,7 @@ struct bss_descriptor {
u32 atimwindow;
enum WLAN_802_11_NETWORK_INFRASTRUCTURE inframode;
u8 mode;
u8 libertas_supported_rates[WLAN_SUPPORTED_RATES];
int extra_ie;
......@@ -170,22 +168,22 @@ struct bss_descriptor {
struct ieeetypes_countryinfofullset countryinfo;
struct WPA_SUPPLICANT wpa_supplicant;
struct WPA_SUPPLICANT wpa2_supplicant;
u8 wpa_ie[MAX_WPA_IE_LEN];
size_t wpa_ie_len;
u8 rsn_ie[MAX_WPA_IE_LEN];
size_t rsn_ie_len;
};
extern int libertas_SSID_cmp(struct WLAN_802_11_SSID *ssid1,
struct WLAN_802_11_SSID *ssid2);
extern int libertas_find_SSID_in_list(wlan_adapter * adapter, struct WLAN_802_11_SSID *ssid,
u8 * bssid, int mode);
int libertas_find_best_SSID_in_list(wlan_adapter * adapter, enum WLAN_802_11_NETWORK_INFRASTRUCTURE mode);
extern int libertas_find_BSSID_in_list(wlan_adapter * adapter, u8 * bssid, int mode);
u8 * bssid, u8 mode);
int libertas_find_best_SSID_in_list(wlan_adapter * adapter, u8 mode);
extern int libertas_find_BSSID_in_list(wlan_adapter * adapter, u8 * bssid, u8 mode);
int libertas_find_best_network_SSID(wlan_private * priv,
struct WLAN_802_11_SSID *pSSID,
enum WLAN_802_11_NETWORK_INFRASTRUCTURE preferred_mode,
enum WLAN_802_11_NETWORK_INFRASTRUCTURE *out_mode);
u8 preferred_mode, u8 *out_mode);
extern int libertas_send_specific_SSID_scan(wlan_private * priv,
struct WLAN_802_11_SSID *prequestedssid,
......
......@@ -78,7 +78,7 @@ static int SendSinglePacket(wlan_private * priv, struct sk_buff *skb)
min_t(unsigned int, skb->len, 100));
if (!skb->len || (skb->len > MRVDRV_ETH_TX_PACKET_BUFFER_SIZE)) {
lbs_pr_debug(1, "Tx error: Bad skb length %d : %d\n",
lbs_pr_debug(1, "Tx error: Bad skb length %d : %zd\n",
skb->len, MRVDRV_ETH_TX_PACKET_BUFFER_SIZE);
ret = -1;
goto done;
......
#define DRIVER_RELEASE_VERSION "320.p0"
const char libertas_driver_version[] = "COMM-USB8388-" DRIVER_RELEASE_VERSION
#ifdef DEBUG
"-dbg"
#endif
"";
......@@ -17,7 +17,6 @@
#include "defs.h"
#include "dev.h"
#include "join.h"
#include "version.h"
#include "wext.h"
#include "assoc.h"
......@@ -233,7 +232,7 @@ static int changeadhocchannel(wlan_private * priv, int channel)
// find out the BSSID that matches the current SSID
i = libertas_find_SSID_in_list(adapter, &curadhocssid, NULL,
wlan802_11ibss);
IW_MODE_ADHOC);
if (i >= 0) {
lbs_pr_debug(1, "SSID found at %d in List,"
......@@ -316,13 +315,11 @@ static int get_active_data_rates(wlan_adapter * adapter,
ENTER();
if (adapter->connect_status != libertas_connected) {
if (adapter->inframode == wlan802_11infrastructure) {
//Infra. mode
if (adapter->mode == IW_MODE_INFRA) {
lbs_pr_debug(1, "Infra\n");
k = copyrates(rates, k, libertas_supported_rates,
sizeof(libertas_supported_rates));
} else {
//ad-hoc mode
lbs_pr_debug(1, "Adhoc G\n");
k = copyrates(rates, k, libertas_adhoc_rates_g,
sizeof(libertas_adhoc_rates_g));
......@@ -586,20 +583,7 @@ static int wlan_get_mode(struct net_device *dev,
ENTER();
switch (adapter->inframode) {
case wlan802_11ibss:
*uwrq = IW_MODE_ADHOC;
break;
case wlan802_11infrastructure:
*uwrq = IW_MODE_INFRA;
break;
default:
case wlan802_11autounknown:
*uwrq = IW_MODE_AUTO;
break;
}
*uwrq = adapter->mode;
LEAVE();
return 0;
......@@ -1002,148 +986,17 @@ static const struct iw_priv_args wlan_private_args[] = {
/*
* { cmd, set_args, get_args, name }
*/
{
WLANSCAN_TYPE,
IW_PRIV_TYPE_CHAR | 8,
IW_PRIV_TYPE_CHAR | 8,
"scantype"},
{
WLAN_SETINT_GETINT,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
""},
{
WLANNF,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"getNF"},
{
WLANRSSI,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"getRSSI"},
{
WLANENABLE11D,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"enable11d"},
{
WLANADHOCGRATE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"adhocgrate"},
{
WLAN_SUBCMD_SET_PRESCAN,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"prescan"},
{
WLAN_SETONEINT_GETONEINT,
IW_PRIV_TYPE_INT | 1,
IW_PRIV_TYPE_INT | 1,
""},
{
WLAN_BEACON_INTERVAL,
IW_PRIV_TYPE_INT | 1,
IW_PRIV_TYPE_INT | 1,
"bcninterval"},
{
WLAN_LISTENINTRVL,
IW_PRIV_TYPE_INT | 1,
IW_PRIV_TYPE_INT | 1,
"lolisteninter"},
{
WLAN_TXCONTROL,
IW_PRIV_TYPE_INT | 1,
IW_PRIV_TYPE_INT | 1,
"txcontrol"},
{
WLAN_NULLPKTINTERVAL,
IW_PRIV_TYPE_INT | 1,
IW_PRIV_TYPE_INT | 1,
"psnullinterval"},
/* Using iwpriv sub-command feature */
{
WLAN_SETONEINT_GETNONE, /* IOCTL: 24 */
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
""},
{
WLAN_SUBCMD_SETRXANTENNA,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"setrxant"},
{
WLAN_SUBCMD_SETTXANTENNA,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"settxant"},
{
WLANSETAUTHALG,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"authalgs",
},
{
WLANSET8021XAUTHALG,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"8021xauthalgs",
},
{
WLANSETENCRYPTIONMODE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"encryptionmode",
},
{
WLANSETREGION,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"setregioncode"},
{
WLAN_SET_LISTEN_INTERVAL,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"setlisteninter"},
{
WLAN_SET_MULTIPLE_DTIM,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"setmultipledtim"},
{
WLAN_SET_ATIM_WINDOW,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"atimwindow"},
{
WLANSETBCNAVG,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"setbcnavg"},
{
WLANSETDATAAVG,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"setdataavg"},
{
WLAN_SET_LINKMODE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"linkmode"},
{
WLAN_SET_RADIOMODE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"radiomode"},
{
WLAN_SET_DEBUGMODE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
IW_PRIV_TYPE_NONE,
"debugmode"},
{
WLAN_SUBCMD_MESH_SET_TTL,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
......@@ -1159,41 +1012,6 @@ static const struct iw_priv_args wlan_private_args[] = {
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"getregioncode"},
{
WLAN_GET_LISTEN_INTERVAL,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"getlisteninter"},
{
WLAN_GET_MULTIPLE_DTIM,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"getmultipledtim"},
{
WLAN_GET_TX_RATE,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"gettxrate"},
{
WLANGETBCNAVG,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"getbcnavg"},
{
WLAN_GET_LINKMODE,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"get_linkmode"},
{
WLAN_GET_RADIOMODE,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"get_radiomode"},
{
WLAN_GET_DEBUGMODE,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"get_debugmode"},
{
WLAN_SUBCMD_FWT_CLEANUP,
IW_PRIV_TYPE_NONE,
......@@ -1209,61 +1027,11 @@ static const struct iw_priv_args wlan_private_args[] = {
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_INT | IW_PRIV_SIZE_FIXED | 1,
"mesh_get_ttl"},
{
WLAN_SETNONE_GETTWELVE_CHAR,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_CHAR | 12,
""},
{
WLAN_SUBCMD_GETRXANTENNA,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_CHAR | 12,
"getrxant"},
{
WLAN_SUBCMD_GETTXANTENNA,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_CHAR | 12,
"gettxant"},
{
WLAN_GET_TSF,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_CHAR | 12,
"gettsf"},
{
WLAN_SETNONE_GETNONE,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
""},
{
WLANDEAUTH,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
"deauth"},
{
WLANADHOCSTOP,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
"adhocstop"},
{
WLANRADIOON,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
"radioon"},
{
WLANRADIOOFF,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
"radiooff"},
{
WLANWLANIDLEON,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
"wlanidle-on"},
{
WLANWLANIDLEOFF,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_NONE,
"wlanidle-off"},
{
WLAN_SUBCMD_FWT_RESET,
IW_PRIV_TYPE_NONE,
......@@ -1326,91 +1094,16 @@ static const struct iw_priv_args wlan_private_args[] = {
IW_PRIV_TYPE_CHAR | 128,
IW_PRIV_TYPE_CHAR | 128,
"fwt_list_route"},
{
WLANSCAN_MODE,
IW_PRIV_TYPE_CHAR | 128,
IW_PRIV_TYPE_CHAR | 128,
"scanmode"},
{
WLAN_GET_ADHOC_STATUS,
IW_PRIV_TYPE_CHAR | 128,
IW_PRIV_TYPE_CHAR | 128,
"getadhocstatus"},
{
WLAN_SETNONE_GETWORDCHAR,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_CHAR | 128,
""},
{
WLANSETWPAIE,
IW_PRIV_TYPE_CHAR | IW_PRIV_SIZE_FIXED | 24,
IW_PRIV_TYPE_NONE,
"setwpaie"},
{
WLANGETLOG,
IW_PRIV_TYPE_NONE,
IW_PRIV_TYPE_CHAR | GETLOG_BUFSIZE,
"getlog"},
{
WLAN_SET_GET_SIXTEEN_INT,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
""},
{
WLAN_TPCCFG,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"tpccfg"},
{
WLAN_POWERCFG,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"powercfg"},
{
WLAN_AUTO_FREQ_SET,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"setafc"},
{
WLAN_AUTO_FREQ_GET,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"getafc"},
{
WLAN_SCANPROBES,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"scanprobes"},
{
WLAN_LED_GPIO_CTRL,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"ledgpio"},
{
WLAN_ADAPT_RATESET,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"rateadapt"},
{
WLAN_INACTIVITY_TIMEOUT,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"inactivityto"},
{
WLANSNR,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"getSNR"},
{
WLAN_GET_RATE,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"getrate"},
{
WLAN_GET_RXINFO,
IW_PRIV_TYPE_INT | 16,
IW_PRIV_TYPE_INT | 16,
"getrxinfo"},
};
static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
......@@ -1434,7 +1127,7 @@ static struct iw_statistics *wlan_get_wireless_stats(struct net_device *dev)
ENTER();
priv->wstats.status = adapter->inframode;
priv->wstats.status = adapter->mode;
/* If we're not associated, all quality values are meaningless */
if (adapter->connect_status != libertas_connected)
......@@ -1568,13 +1261,12 @@ static int wlan_set_freq(struct net_device *dev, struct iw_request_info *info,
if (!cfp) {
rc = -EINVAL;
} else {
if (adapter->inframode == wlan802_11ibss) {
if (adapter->mode == IW_MODE_ADHOC) {
rc = changeadhocchannel(priv, channel);
/* If station is WEP enabled, send the
* command to set WEP in firmware
*/
if (adapter->secinfo.WEPstatus ==
wlan802_11WEPenabled) {
if (adapter->secinfo.wep_enabled) {
lbs_pr_debug(1, "set_freq: WEP enabled\n");
ret = libertas_prepare_and_send_command(priv,
cmd_802_11_set_wep,
......@@ -1716,49 +1408,31 @@ static int wlan_set_mode(struct net_device *dev,
wlan_private *priv = dev->priv;
wlan_adapter *adapter = priv->adapter;
struct assoc_request * assoc_req;
enum WLAN_802_11_NETWORK_INFRASTRUCTURE new_mode;
ENTER();
switch (*uwrq) {
case IW_MODE_ADHOC:
lbs_pr_debug(1, "Wanted mode is ad-hoc: current datarate=%#x\n",
adapter->datarate);
new_mode = wlan802_11ibss;
adapter->adhocchannel = DEFAULT_AD_HOC_CHANNEL;
break;
case IW_MODE_INFRA:
lbs_pr_debug(1, "Wanted mode is Infrastructure\n");
new_mode = wlan802_11infrastructure;
break;
case IW_MODE_AUTO:
lbs_pr_debug(1, "Wanted mode is Auto\n");
new_mode = wlan802_11autounknown;
break;
default:
lbs_pr_debug(1, "Wanted mode is Unknown: 0x%x\n", *uwrq);
return -EINVAL;
if ( (*uwrq != IW_MODE_ADHOC)
&& (*uwrq != IW_MODE_INFRA)
&& (*uwrq != IW_MODE_AUTO)) {
lbs_pr_debug(1, "Invalid mode: 0x%x\n", *uwrq);
ret = -EINVAL;
goto out;
}
mutex_lock(&adapter->lock);
assoc_req = wlan_get_association_request(adapter);
if (!assoc_req) {
ret = -ENOMEM;
wlan_cancel_association_work(priv);
} else {
assoc_req->mode = new_mode;
}
if (ret == 0) {
assoc_req->mode = *uwrq;
set_bit(ASSOC_FLAG_MODE, &assoc_req->flags);
wlan_postpone_association_work(priv);
} else {
wlan_cancel_association_work(priv);
lbs_pr_debug(1, "Switching to mode: 0x%x\n", *uwrq);
}
mutex_unlock(&adapter->lock);
out:
LEAVE();
return ret;
}
......@@ -1789,13 +1463,13 @@ static int wlan_get_encode(struct net_device *dev,
dwrq->flags = 0;
/* Authentication method */
switch (adapter->secinfo.authmode) {
case wlan802_11authmodeopen:
switch (adapter->secinfo.auth_mode) {
case IW_AUTH_ALG_OPEN_SYSTEM:
dwrq->flags = IW_ENCODE_OPEN;
break;
case wlan802_11authmodeshared:
case wlan802_11authmodenetworkEAP:
case IW_AUTH_ALG_SHARED_KEY:
case IW_AUTH_ALG_LEAP:
dwrq->flags = IW_ENCODE_RESTRICTED;
break;
default:
......@@ -1803,8 +1477,9 @@ static int wlan_get_encode(struct net_device *dev,
break;
}
if ((adapter->secinfo.WEPstatus == wlan802_11WEPenabled)
|| adapter->secinfo.WPAenabled || adapter->secinfo.WPA2enabled) {
if ( adapter->secinfo.wep_enabled
|| adapter->secinfo.WPAenabled
|| adapter->secinfo.WPA2enabled) {
dwrq->flags &= ~IW_ENCODE_DISABLED;
} else {
dwrq->flags |= IW_ENCODE_DISABLED;
......@@ -1818,8 +1493,7 @@ static int wlan_get_encode(struct net_device *dev,
if (index < 0)
index = adapter->wep_tx_keyidx;
if ((adapter->wep_keys[index].len) &&
(adapter->secinfo.WEPstatus == wlan802_11WEPenabled)) {
if ((adapter->wep_keys[index].len) && adapter->secinfo.wep_enabled) {
memcpy(extra, adapter->wep_keys[index].key,
adapter->wep_keys[index].len);
dwrq->length = adapter->wep_keys[index].len;
......@@ -1903,7 +1577,7 @@ static int wlan_set_wep_key(struct assoc_request *assoc_req,
assoc_req->wep_tx_keyidx = index;
}
assoc_req->secinfo.WEPstatus = wlan802_11WEPenabled;
assoc_req->secinfo.wep_enabled = 1;
LEAVE();
return 0;
......@@ -1932,10 +1606,10 @@ static void disable_wep(struct assoc_request *assoc_req)
int i;
/* Set Open System auth mode */
assoc_req->secinfo.authmode = wlan802_11authmodeopen;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
/* Clear WEP keys and mark WEP as disabled */
assoc_req->secinfo.WEPstatus = wlan802_11WEPdisabled;
assoc_req->secinfo.wep_enabled = 0;
for (i = 0; i < 4; i++)
assoc_req->wep_keys[i].len = 0;
......@@ -1987,8 +1661,7 @@ static int wlan_set_encode(struct net_device *dev,
/* If WEP isn't enabled, or if there is no key data but a valid
* index, set the TX key.
*/
if ((assoc_req->secinfo.WEPstatus != wlan802_11WEPenabled)
|| (dwrq->length == 0 && !is_default))
if (!assoc_req->secinfo.wep_enabled || (dwrq->length == 0 && !is_default))
set_tx_key = 1;
ret = wlan_set_wep_key(assoc_req, extra, dwrq->length, index, set_tx_key);
......@@ -2001,9 +1674,9 @@ static int wlan_set_encode(struct net_device *dev,
set_bit(ASSOC_FLAG_WEP_TX_KEYIDX, &assoc_req->flags);
if (dwrq->flags & IW_ENCODE_RESTRICTED) {
assoc_req->secinfo.authmode = wlan802_11authmodeshared;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
} else if (dwrq->flags & IW_ENCODE_OPEN) {
assoc_req->secinfo.authmode = wlan802_11authmodeopen;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
}
out:
......@@ -2056,30 +1729,31 @@ static int wlan_get_encodeext(struct net_device *dev,
if (!ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY &&
ext->alg != IW_ENCODE_ALG_WEP) {
if (index != 0 || adapter->inframode != wlan802_11infrastructure)
if (index != 0 || adapter->mode != IW_MODE_INFRA)
goto out;
}
dwrq->flags = index + 1;
memset(ext, 0, sizeof(*ext));
if ((adapter->secinfo.WEPstatus == wlan802_11WEPdisabled)
&& !adapter->secinfo.WPAenabled && !adapter->secinfo.WPA2enabled) {
if ( !adapter->secinfo.wep_enabled
&& !adapter->secinfo.WPAenabled
&& !adapter->secinfo.WPA2enabled) {
ext->alg = IW_ENCODE_ALG_NONE;
ext->key_len = 0;
dwrq->flags |= IW_ENCODE_DISABLED;
} else {
u8 *key = NULL;
if ((adapter->secinfo.WEPstatus == wlan802_11WEPenabled)
if ( adapter->secinfo.wep_enabled
&& !adapter->secinfo.WPAenabled
&& !adapter->secinfo.WPA2enabled) {
ext->alg = IW_ENCODE_ALG_WEP;
ext->key_len = adapter->wep_keys[index].len;
key = &adapter->wep_keys[index].key[0];
} else if ((adapter->secinfo.WEPstatus == wlan802_11WEPdisabled) &&
(adapter->secinfo.WPAenabled ||
adapter->secinfo.WPA2enabled)) {
} else if ( !adapter->secinfo.wep_enabled
&& (adapter->secinfo.WPAenabled ||
adapter->secinfo.WPA2enabled)) {
/* WPA */
ext->alg = IW_ENCODE_ALG_TKIP;
ext->key_len = 0;
......@@ -2149,7 +1823,7 @@ static int wlan_set_encodeext(struct net_device *dev,
/* If WEP isn't enabled, or if there is no key data but a valid
* index, or if the set-TX-key flag was passed, set the TX key.
*/
if ((assoc_req->secinfo.WEPstatus != wlan802_11WEPenabled)
if ( !assoc_req->secinfo.wep_enabled
|| (dwrq->length == 0 && !is_default)
|| (ext->ext_flags & IW_ENCODE_EXT_SET_TX_KEY))
set_tx_key = 1;
......@@ -2161,11 +1835,9 @@ static int wlan_set_encodeext(struct net_device *dev,
goto out;
if (dwrq->flags & IW_ENCODE_RESTRICTED) {
assoc_req->secinfo.authmode =
wlan802_11authmodeshared;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
} else if (dwrq->flags & IW_ENCODE_OPEN) {
assoc_req->secinfo.authmode =
wlan802_11authmodeopen;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
}
/* Mark the various WEP bits as modified */
......@@ -2350,15 +2022,13 @@ static int wlan_set_auth(struct net_device *dev,
}
if (dwrq->value & IW_AUTH_WPA_VERSION_WPA) {
assoc_req->secinfo.WPAenabled = 1;
assoc_req->secinfo.WEPstatus = wlan802_11WEPdisabled;
assoc_req->secinfo.authmode =
wlan802_11authmodeopen;
assoc_req->secinfo.wep_enabled = 0;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
}
if (dwrq->value & IW_AUTH_WPA_VERSION_WPA2) {
assoc_req->secinfo.WPA2enabled = 1;
assoc_req->secinfo.WEPstatus = wlan802_11WEPdisabled;
assoc_req->secinfo.authmode =
wlan802_11authmodeopen;
assoc_req->secinfo.wep_enabled = 0;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
}
updated = 1;
break;
......@@ -2376,14 +2046,11 @@ static int wlan_set_auth(struct net_device *dev,
case IW_AUTH_80211_AUTH_ALG:
if (dwrq->value & IW_AUTH_ALG_SHARED_KEY) {
assoc_req->secinfo.authmode =
wlan802_11authmodeshared;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_SHARED_KEY;
} else if (dwrq->value & IW_AUTH_ALG_OPEN_SYSTEM) {
assoc_req->secinfo.authmode =
wlan802_11authmodeopen;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
} else if (dwrq->value & IW_AUTH_ALG_LEAP) {
assoc_req->secinfo.authmode =
wlan802_11authmodenetworkEAP;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_LEAP;
} else {
ret = -EINVAL;
}
......@@ -2396,9 +2063,8 @@ static int wlan_set_auth(struct net_device *dev,
!assoc_req->secinfo.WPA2enabled) {
assoc_req->secinfo.WPAenabled = 1;
assoc_req->secinfo.WPA2enabled = 1;
assoc_req->secinfo.WEPstatus = wlan802_11WEPdisabled;
assoc_req->secinfo.authmode =
wlan802_11authmodeopen;
assoc_req->secinfo.wep_enabled = 0;
assoc_req->secinfo.auth_mode = IW_AUTH_ALG_OPEN_SYSTEM;
}
} else {
assoc_req->secinfo.WPAenabled = 0;
......@@ -2455,19 +2121,7 @@ static int wlan_get_auth(struct net_device *dev,
break;
case IW_AUTH_80211_AUTH_ALG:
switch (adapter->secinfo.authmode) {
case wlan802_11authmodeshared:
dwrq->value = IW_AUTH_ALG_SHARED_KEY;
break;
case wlan802_11authmodeopen:
dwrq->value = IW_AUTH_ALG_OPEN_SYSTEM;
break;
case wlan802_11authmodenetworkEAP:
dwrq->value = IW_AUTH_ALG_LEAP;
break;
default:
break;
}
dwrq->value = adapter->secinfo.auth_mode;
break;
case IW_AUTH_WPA_ENABLED:
......
......@@ -10,88 +10,22 @@
/** PRIVATE CMD ID */
#define WLANIOCTL SIOCIWFIRSTPRIV
#define WLANSETWPAIE (WLANIOCTL + 0)
#define WLAN_SETINT_GETINT (WLANIOCTL + 7)
#define WLANNF 1
#define WLANRSSI 2
#define WLANENABLE11D 5
#define WLANADHOCGRATE 6
#define WLAN_SUBCMD_SET_PRESCAN 11
#define WLAN_SETNONE_GETNONE (WLANIOCTL + 8)
#define WLANDEAUTH 1
#define WLANRADIOON 2
#define WLANRADIOOFF 3
#define WLANREMOVEADHOCAES 4
#define WLANADHOCSTOP 5
#define WLANCIPHERTEST 6
#define WLANCRYPTOTEST 7
#define WLANWLANIDLEON 10
#define WLANWLANIDLEOFF 11
#define WLAN_SUBCMD_BT_RESET 13
#define WLAN_SUBCMD_FWT_RESET 14
#define WLANGETLOG (WLANIOCTL + 9)
#define GETLOG_BUFSIZE 300
#define WLANSCAN_TYPE (WLANIOCTL + 11)
#define WLAN_SETNONE_GETONEINT (WLANIOCTL + 15)
#define WLANGETREGION 1
#define WLAN_GET_LISTEN_INTERVAL 2
#define WLAN_GET_MULTIPLE_DTIM 3
#define WLAN_GET_TX_RATE 4
#define WLANGETBCNAVG 5
#define WLAN_GET_LINKMODE 6
#define WLAN_GET_RADIOMODE 7
#define WLAN_GET_DEBUGMODE 8
#define WLAN_SUBCMD_FWT_CLEANUP 15
#define WLAN_SUBCMD_FWT_TIME 16
#define WLAN_SUBCMD_MESH_GET_TTL 17
#define WLANREGCFRDWR (WLANIOCTL + 18)
#define WLAN_SETNONE_GETTWELVE_CHAR (WLANIOCTL + 19)
#define WLAN_SUBCMD_GETRXANTENNA 1
#define WLAN_SUBCMD_GETTXANTENNA 2
#define WLAN_GET_TSF 3
#define WLAN_SETNONE_GETWORDCHAR (WLANIOCTL + 21)
#define WLANGETADHOCAES 1
#define WLAN_SETONEINT_GETONEINT (WLANIOCTL + 23)
#define WLAN_BEACON_INTERVAL 1
#define WLAN_LISTENINTRVL 4
#define WLAN_TXCONTROL 6
#define WLAN_NULLPKTINTERVAL 7
#define WLAN_SETONEINT_GETNONE (WLANIOCTL + 24)
#define WLAN_SUBCMD_SETRXANTENNA 1
#define WLAN_SUBCMD_SETTXANTENNA 2
#define WLANSETAUTHALG 5
#define WLANSET8021XAUTHALG 6
#define WLANSETENCRYPTIONMODE 7
#define WLANSETREGION 8
#define WLAN_SET_LISTEN_INTERVAL 9
#define WLAN_SET_MULTIPLE_DTIM 10
#define WLAN_SET_ATIM_WINDOW 11
#define WLANSETBCNAVG 13
#define WLANSETDATAAVG 14
#define WLAN_SET_LINKMODE 15
#define WLAN_SET_RADIOMODE 16
#define WLAN_SET_DEBUGMODE 17
#define WLAN_SUBCMD_MESH_SET_TTL 18
#define WLAN_SET128CHAR_GET128CHAR (WLANIOCTL + 25)
#define WLANSCAN_MODE 6
#define WLAN_GET_ADHOC_STATUS 9
#define WLAN_SUBCMD_BT_ADD 18
#define WLAN_SUBCMD_BT_DEL 19
#define WLAN_SUBCMD_BT_LIST 20
......@@ -103,27 +37,8 @@
#define WLAN_SUBCMD_FWT_LIST_ROUTE 26
#define WLAN_SET_GET_SIXTEEN_INT (WLANIOCTL + 29)
#define WLAN_TPCCFG 1
#define WLAN_POWERCFG 2
#define WLAN_AUTO_FREQ_SET 3
#define WLAN_AUTO_FREQ_GET 4
#define WLAN_LED_GPIO_CTRL 5
#define WLAN_SCANPROBES 6
#define WLAN_ADAPT_RATESET 8
#define WLAN_INACTIVITY_TIMEOUT 9
#define WLANSNR 10
#define WLAN_GET_RATE 11
#define WLAN_GET_RXINFO 12
#define WLANCMD52RDWR (WLANIOCTL + 30)
#define WLANCMD53RDWR (WLANIOCTL + 31)
#define CMD53BUFLEN 32
#define REG_MAC 0x19
#define REG_BBP 0x1a
#define REG_RF 0x1b
#define REG_EEPROM 0x59
#define WLAN_LINKMODE_802_3 0
#define WLAN_LINKMODE_802_11 2
#define WLAN_RADIOMODE_NONE 0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment