Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
bd1a2728
Commit
bd1a2728
authored
Sep 16, 2011
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linville' of
git://github.com/lucacoelho/wl12xx
parents
55768fa6
c6ceb872
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
103 additions
and
29 deletions
+103
-29
drivers/net/wireless/wl12xx/boot.c
drivers/net/wireless/wl12xx/boot.c
+1
-3
drivers/net/wireless/wl12xx/main.c
drivers/net/wireless/wl12xx/main.c
+34
-16
drivers/net/wireless/wl12xx/scan.c
drivers/net/wireless/wl12xx/scan.c
+59
-7
drivers/net/wireless/wl12xx/tx.c
drivers/net/wireless/wl12xx/tx.c
+5
-3
drivers/net/wireless/wl12xx/tx.h
drivers/net/wireless/wl12xx/tx.h
+1
-0
drivers/net/wireless/wl12xx/wl12xx.h
drivers/net/wireless/wl12xx/wl12xx.h
+3
-0
No files found.
drivers/net/wireless/wl12xx/boot.c
View file @
bd1a2728
...
...
@@ -294,9 +294,7 @@ static int wl1271_boot_upload_nvs(struct wl1271 *wl)
*/
if
(
wl
->
nvs_len
==
sizeof
(
struct
wl1271_nvs_file
)
||
wl
->
nvs_len
==
WL1271_INI_LEGACY_NVS_FILE_SIZE
)
{
/* for now 11a is unsupported in AP mode */
if
(
wl
->
bss_type
!=
BSS_TYPE_AP_BSS
&&
nvs
->
general_params
.
dual_mode_select
)
if
(
nvs
->
general_params
.
dual_mode_select
)
wl
->
enable_11a
=
true
;
}
...
...
drivers/net/wireless/wl12xx/main.c
View file @
bd1a2728
...
...
@@ -236,7 +236,7 @@ static struct conf_drv_settings default_conf = {
.
ps_poll_recovery_period
=
700
,
.
bet_enable
=
CONF_BET_MODE_ENABLE
,
.
bet_max_consecutive
=
50
,
.
psm_entry_retries
=
5
,
.
psm_entry_retries
=
8
,
.
psm_exit_retries
=
16
,
.
psm_entry_nullfunc_retries
=
3
,
.
psm_entry_hangover_period
=
1
,
...
...
@@ -2064,6 +2064,7 @@ static void __wl1271_op_remove_interface(struct wl1271 *wl,
wl
->
session_counter
=
0
;
wl
->
rate_set
=
CONF_TX_RATE_MASK_BASIC
;
wl
->
vif
=
NULL
;
wl
->
tx_spare_blocks
=
TX_HW_BLOCK_SPARE_DEFAULT
;
wl1271_free_ap_keys
(
wl
);
memset
(
wl
->
ap_hlid_map
,
0
,
sizeof
(
wl
->
ap_hlid_map
));
wl
->
ap_fw_ps_map
=
0
;
...
...
@@ -2199,10 +2200,14 @@ static int wl1271_unjoin(struct wl1271 *wl)
static
void
wl1271_set_band_rate
(
struct
wl1271
*
wl
)
{
if
(
wl
->
band
==
IEEE80211_BAND_2GHZ
)
if
(
wl
->
band
==
IEEE80211_BAND_2GHZ
)
{
wl
->
basic_rate_set
=
wl
->
conf
.
tx
.
basic_rate
;
else
wl
->
rate_set
=
wl
->
conf
.
tx
.
basic_rate
;
}
else
{
wl
->
basic_rate_set
=
wl
->
conf
.
tx
.
basic_rate_5
;
wl
->
rate_set
=
wl
->
conf
.
tx
.
basic_rate_5
;
}
}
static
bool
wl12xx_is_roc
(
struct
wl1271
*
wl
)
...
...
@@ -2653,6 +2658,17 @@ static int wl1271_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
,
0xff
};
/*
* A STA set to GEM cipher requires 2 tx spare blocks.
* Return to default value when GEM cipher key is removed
*/
if
(
key_type
==
KEY_GEM
)
{
if
(
action
==
KEY_ADD_OR_REPLACE
)
wl
->
tx_spare_blocks
=
2
;
else
if
(
action
==
KEY_REMOVE
)
wl
->
tx_spare_blocks
=
TX_HW_BLOCK_SPARE_DEFAULT
;
}
addr
=
sta
?
sta
->
addr
:
bcast_addr
;
if
(
is_zero_ether_addr
(
addr
))
{
...
...
@@ -3345,19 +3361,6 @@ static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
ret
=
wl1271_acx_conn_monit_params
(
wl
,
true
);
if
(
ret
<
0
)
goto
out
;
/* If we want to go in PSM but we're not there yet */
if
(
test_bit
(
WL1271_FLAG_PSM_REQUESTED
,
&
wl
->
flags
)
&&
!
test_bit
(
WL1271_FLAG_PSM
,
&
wl
->
flags
))
{
enum
wl1271_cmd_ps_mode
mode
;
mode
=
STATION_POWER_SAVE_MODE
;
ret
=
wl1271_ps_set_mode
(
wl
,
mode
,
wl
->
basic_rate
,
true
);
if
(
ret
<
0
)
goto
out
;
}
}
else
{
/* use defaults when not associated */
bool
was_assoc
=
...
...
@@ -3501,6 +3504,19 @@ static void wl1271_bss_info_changed_sta(struct wl1271 *wl,
if
(
ret
<
0
)
goto
out
;
}
/* If we want to go in PSM but we're not there yet */
if
(
test_bit
(
WL1271_FLAG_PSM_REQUESTED
,
&
wl
->
flags
)
&&
!
test_bit
(
WL1271_FLAG_PSM
,
&
wl
->
flags
))
{
enum
wl1271_cmd_ps_mode
mode
;
mode
=
STATION_POWER_SAVE_MODE
;
ret
=
wl1271_ps_set_mode
(
wl
,
mode
,
wl
->
basic_rate
,
true
);
if
(
ret
<
0
)
goto
out
;
}
}
/* Handle new association with HT. Do this after join. */
...
...
@@ -4475,6 +4491,7 @@ int wl1271_init_ieee80211(struct wl1271 *wl)
wl
->
hw
->
wiphy
->
interface_modes
=
BIT
(
NL80211_IFTYPE_STATION
)
|
BIT
(
NL80211_IFTYPE_ADHOC
)
|
BIT
(
NL80211_IFTYPE_AP
);
wl
->
hw
->
wiphy
->
max_scan_ssids
=
1
;
wl
->
hw
->
wiphy
->
max_sched_scan_ssids
=
8
;
/*
* Maximum length of elements in scanning probe request templates
* should be the maximum length possible for a template, without
...
...
@@ -4599,6 +4616,7 @@ struct ieee80211_hw *wl1271_alloc_hw(void)
wl
->
sched_scanning
=
false
;
wl
->
tx_security_seq
=
0
;
wl
->
tx_security_last_seq_lsb
=
0
;
wl
->
tx_spare_blocks
=
TX_HW_BLOCK_SPARE_DEFAULT
;
wl
->
role_id
=
WL12XX_INVALID_ROLE_ID
;
wl
->
system_hlid
=
WL12XX_SYSTEM_HLID
;
wl
->
sta_hlid
=
WL12XX_INVALID_LINK_ID
;
...
...
drivers/net/wireless/wl12xx/scan.c
View file @
bd1a2728
...
...
@@ -473,6 +473,51 @@ wl1271_scan_sched_scan_channels(struct wl1271 *wl,
cfg
->
passive
[
2
]
||
cfg
->
active
[
2
];
}
/* Returns 0 if no wildcard is used, 1 if wildcard is used or a
* negative value on error */
static
int
wl12xx_scan_sched_scan_ssid_list
(
struct
wl1271
*
wl
,
struct
cfg80211_sched_scan_request
*
req
)
{
struct
wl1271_cmd_sched_scan_ssid_list
*
cmd
=
NULL
;
struct
cfg80211_ssid
*
ssid
=
req
->
ssids
;
int
ret
,
wildcard
=
0
;
wl1271_debug
(
DEBUG_CMD
,
"cmd sched scan ssid list"
);
cmd
=
kzalloc
(
sizeof
(
*
cmd
),
GFP_KERNEL
);
if
(
!
cmd
)
return
-
ENOMEM
;
while
((
cmd
->
n_ssids
<
req
->
n_ssids
)
&&
ssid
)
{
if
(
ssid
->
ssid_len
==
0
)
{
wildcard
=
1
;
cmd
->
ssids
[
cmd
->
n_ssids
].
type
=
SCAN_SSID_TYPE_PUBLIC
;
}
else
{
cmd
->
ssids
[
cmd
->
n_ssids
].
type
=
SCAN_SSID_TYPE_HIDDEN
;
}
cmd
->
ssids
[
cmd
->
n_ssids
].
len
=
ssid
->
ssid_len
;
memcpy
(
cmd
->
ssids
[
cmd
->
n_ssids
].
ssid
,
ssid
->
ssid
,
ssid
->
ssid_len
);
ssid
++
;
cmd
->
n_ssids
++
;
}
wl1271_dump
(
DEBUG_SCAN
,
"SSID_LIST: "
,
cmd
,
sizeof
(
*
cmd
));
ret
=
wl1271_cmd_send
(
wl
,
CMD_CONNECTION_SCAN_SSID_CFG
,
cmd
,
sizeof
(
*
cmd
),
0
);
if
(
ret
<
0
)
{
wl1271_error
(
"cmd sched scan ssid list failed"
);
goto
out
;
}
ret
=
wildcard
;
out:
kfree
(
cmd
);
return
ret
;
}
int
wl1271_scan_sched_scan_config
(
struct
wl1271
*
wl
,
struct
cfg80211_sched_scan_request
*
req
,
struct
ieee80211_sched_scan_ies
*
ies
)
...
...
@@ -504,14 +549,21 @@ int wl1271_scan_sched_scan_config(struct wl1271 *wl,
for
(
i
=
0
;
i
<
SCAN_MAX_CYCLE_INTERVALS
;
i
++
)
cfg
->
intervals
[
i
]
=
cpu_to_le32
(
req
->
interval
);
if
(
!
force_passive
&&
req
->
ssids
[
0
].
ssid_len
&&
req
->
ssids
[
0
].
ssid
)
{
cfg
->
filter_type
=
SCAN_SSID_FILTER_SPECIFIC
;
cfg
->
ssid_len
=
req
->
ssids
[
0
].
ssid_len
;
memcpy
(
cfg
->
ssid
,
req
->
ssids
[
0
].
ssid
,
req
->
ssids
[
0
].
ssid_len
);
}
else
{
cfg
->
filter_type
=
SCAN_SSID_FILTER_ANY
;
cfg
->
ssid_len
=
0
;
if
(
req
->
n_ssids
==
0
)
{
wl1271_debug
(
DEBUG_SCAN
,
"using SCAN_SSID_FILTER_ANY"
);
cfg
->
filter_type
=
SCAN_SSID_FILTER_ANY
;
}
else
{
ret
=
wl12xx_scan_sched_scan_ssid_list
(
wl
,
req
);
if
(
ret
<
0
)
goto
out
;
if
(
ret
)
{
wl1271_debug
(
DEBUG_SCAN
,
"using SCAN_SSID_FILTER_DISABLED"
);
cfg
->
filter_type
=
SCAN_SSID_FILTER_DISABLED
;
}
else
{
wl1271_debug
(
DEBUG_SCAN
,
"using SCAN_SSID_FILTER_LIST"
);
cfg
->
filter_type
=
SCAN_SSID_FILTER_LIST
;
}
}
if
(
!
wl1271_scan_sched_scan_channels
(
wl
,
req
,
cfg
))
{
...
...
drivers/net/wireless/wl12xx/tx.c
View file @
bd1a2728
...
...
@@ -204,9 +204,7 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra,
u32
len
;
u32
total_blocks
;
int
id
,
ret
=
-
EBUSY
,
ac
;
/* we use 1 spare block */
u32
spare_blocks
=
1
;
u32
spare_blocks
=
wl
->
tx_spare_blocks
;
if
(
buf_offset
+
total_len
>
WL1271_AGGR_BUFFER_SIZE
)
return
-
EAGAIN
;
...
...
@@ -220,6 +218,10 @@ static int wl1271_tx_allocate(struct wl1271 *wl, struct sk_buff *skb, u32 extra,
in the firmware */
len
=
wl12xx_calc_packet_alignment
(
wl
,
total_len
);
/* in case of a dummy packet, use default amount of spare mem blocks */
if
(
unlikely
(
wl12xx_is_dummy_packet
(
wl
,
skb
)))
spare_blocks
=
TX_HW_BLOCK_SPARE_DEFAULT
;
total_blocks
=
(
len
+
TX_HW_BLOCK_SIZE
-
1
)
/
TX_HW_BLOCK_SIZE
+
spare_blocks
;
...
...
drivers/net/wireless/wl12xx/tx.h
View file @
bd1a2728
...
...
@@ -25,6 +25,7 @@
#ifndef __TX_H__
#define __TX_H__
#define TX_HW_BLOCK_SPARE_DEFAULT 1
#define TX_HW_BLOCK_SIZE 252
#define TX_HW_MGMT_PKT_LIFETIME_TU 2000
...
...
drivers/net/wireless/wl12xx/wl12xx.h
View file @
bd1a2728
...
...
@@ -425,6 +425,9 @@ struct wl1271 {
u32
tx_allocated_blocks
;
u32
tx_results_count
;
/* amount of spare TX blocks to use */
u32
tx_spare_blocks
;
/* Accounting for allocated / available Tx packets in HW */
u32
tx_pkts_freed
[
NUM_TX_QUEUES
];
u32
tx_allocated_pkts
[
NUM_TX_QUEUES
];
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment