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
12d95683
Commit
12d95683
authored
May 16, 2012
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linville' of
git://github.com/kvalo/ath6kl
parents
5f561f68
f3740572
Changes
13
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
455 additions
and
178 deletions
+455
-178
drivers/net/wireless/ath/ath6kl/cfg80211.c
drivers/net/wireless/ath/ath6kl/cfg80211.c
+167
-71
drivers/net/wireless/ath/ath6kl/cfg80211.h
drivers/net/wireless/ath/ath6kl/cfg80211.h
+2
-0
drivers/net/wireless/ath/ath6kl/core.h
drivers/net/wireless/ath/ath6kl/core.h
+24
-9
drivers/net/wireless/ath/ath6kl/debug.c
drivers/net/wireless/ath/ath6kl/debug.c
+11
-1
drivers/net/wireless/ath/ath6kl/htc_mbox.c
drivers/net/wireless/ath/ath6kl/htc_mbox.c
+28
-17
drivers/net/wireless/ath/ath6kl/htc_pipe.c
drivers/net/wireless/ath/ath6kl/htc_pipe.c
+3
-8
drivers/net/wireless/ath/ath6kl/init.c
drivers/net/wireless/ath/ath6kl/init.c
+24
-5
drivers/net/wireless/ath/ath6kl/main.c
drivers/net/wireless/ath/ath6kl/main.c
+88
-16
drivers/net/wireless/ath/ath6kl/sdio.c
drivers/net/wireless/ath/ath6kl/sdio.c
+11
-6
drivers/net/wireless/ath/ath6kl/txrx.c
drivers/net/wireless/ath/ath6kl/txrx.c
+4
-8
drivers/net/wireless/ath/ath6kl/usb.c
drivers/net/wireless/ath/ath6kl/usb.c
+12
-0
drivers/net/wireless/ath/ath6kl/wmi.c
drivers/net/wireless/ath/ath6kl/wmi.c
+57
-37
drivers/net/wireless/ath/ath6kl/wmi.h
drivers/net/wireless/ath/ath6kl/wmi.h
+24
-0
No files found.
drivers/net/wireless/ath/ath6kl/cfg80211.c
View file @
12d95683
This diff is collapsed.
Click to expand it.
drivers/net/wireless/ath/ath6kl/cfg80211.h
View file @
12d95683
...
...
@@ -28,6 +28,8 @@ enum ath6kl_cfg_suspend_mode {
struct
net_device
*
ath6kl_interface_add
(
struct
ath6kl
*
ar
,
char
*
name
,
enum
nl80211_iftype
type
,
u8
fw_vif_idx
,
u8
nw_type
);
void
ath6kl_cfg80211_ch_switch_notify
(
struct
ath6kl_vif
*
vif
,
int
freq
,
enum
wmi_phy_mode
mode
);
void
ath6kl_cfg80211_scan_complete_event
(
struct
ath6kl_vif
*
vif
,
bool
aborted
);
void
ath6kl_cfg80211_connect_event
(
struct
ath6kl_vif
*
vif
,
u16
channel
,
...
...
drivers/net/wireless/ath/ath6kl/core.h
View file @
12d95683
...
...
@@ -126,9 +126,9 @@ struct ath6kl_fw_ie {
#define AR6003_HW_2_0_FIRMWARE_FILE "athwlan.bin.z77"
#define AR6003_HW_2_0_TCMD_FIRMWARE_FILE "athtcmd_ram.bin"
#define AR6003_HW_2_0_PATCH_FILE "data.patch.bin"
#define AR6003_HW_2_0_BOARD_DATA_FILE
"ath6k/AR6003/hw2.0
/bdata.bin"
#define AR6003_HW_2_0_BOARD_DATA_FILE
AR6003_HW_2_0_FW_DIR "
/bdata.bin"
#define AR6003_HW_2_0_DEFAULT_BOARD_DATA_FILE \
"ath6k/AR6003/hw2.0
/bdata.SD31.bin"
AR6003_HW_2_0_FW_DIR "
/bdata.SD31.bin"
/* AR6003 3.0 definitions */
#define AR6003_HW_2_1_1_VERSION 0x30000582
...
...
@@ -139,25 +139,33 @@ struct ath6kl_fw_ie {
#define AR6003_HW_2_1_1_UTF_FIRMWARE_FILE "utf.bin"
#define AR6003_HW_2_1_1_TESTSCRIPT_FILE "nullTestFlow.bin"
#define AR6003_HW_2_1_1_PATCH_FILE "data.patch.bin"
#define AR6003_HW_2_1_1_BOARD_DATA_FILE
"ath6k/AR6003/hw2.1.1
/bdata.bin"
#define AR6003_HW_2_1_1_BOARD_DATA_FILE
AR6003_HW_2_1_1_FW_DIR "
/bdata.bin"
#define AR6003_HW_2_1_1_DEFAULT_BOARD_DATA_FILE \
"ath6k/AR6003/hw2.1.1
/bdata.SD31.bin"
AR6003_HW_2_1_1_FW_DIR "
/bdata.SD31.bin"
/* AR6004 1.0 definitions */
#define AR6004_HW_1_0_VERSION 0x30000623
#define AR6004_HW_1_0_FW_DIR "ath6k/AR6004/hw1.0"
#define AR6004_HW_1_0_FIRMWARE_FILE "fw.ram.bin"
#define AR6004_HW_1_0_BOARD_DATA_FILE
"ath6k/AR6004/hw1.0
/bdata.bin"
#define AR6004_HW_1_0_BOARD_DATA_FILE
AR6004_HW_1_0_FW_DIR "
/bdata.bin"
#define AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE \
"ath6k/AR6004/hw1.0
/bdata.DB132.bin"
AR6004_HW_1_0_FW_DIR "
/bdata.DB132.bin"
/* AR6004 1.1 definitions */
#define AR6004_HW_1_1_VERSION 0x30000001
#define AR6004_HW_1_1_FW_DIR "ath6k/AR6004/hw1.1"
#define AR6004_HW_1_1_FIRMWARE_FILE "fw.ram.bin"
#define AR6004_HW_1_1_BOARD_DATA_FILE
"ath6k/AR6004/hw1.1
/bdata.bin"
#define AR6004_HW_1_1_BOARD_DATA_FILE
AR6004_HW_1_1_FW_DIR "
/bdata.bin"
#define AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE \
"ath6k/AR6004/hw1.1/bdata.DB132.bin"
AR6004_HW_1_1_FW_DIR "/bdata.DB132.bin"
/* AR6004 1.2 definitions */
#define AR6004_HW_1_2_VERSION 0x300007e8
#define AR6004_HW_1_2_FW_DIR "ath6k/AR6004/hw1.2"
#define AR6004_HW_1_2_FIRMWARE_FILE "fw.ram.bin"
#define AR6004_HW_1_2_BOARD_DATA_FILE AR6004_HW_1_2_FW_DIR "/bdata.bin"
#define AR6004_HW_1_2_DEFAULT_BOARD_DATA_FILE \
AR6004_HW_1_2_FW_DIR "/bdata.bin"
/* Per STA data, used in AP mode */
#define STA_PS_AWAKE BIT(0)
...
...
@@ -502,6 +510,8 @@ enum ath6kl_vif_state {
WLAN_ENABLED
,
STATS_UPDATE_PEND
,
HOST_SLEEP_MODE_CMD_PROCESSED
,
NETDEV_MCAST_ALL_ON
,
NETDEV_MCAST_ALL_OFF
,
};
struct
ath6kl_vif
{
...
...
@@ -549,9 +559,11 @@ struct ath6kl_vif {
u16
assoc_bss_beacon_int
;
u16
listen_intvl_t
;
u16
bmiss_time_t
;
u16
bg_scan_period
;
u8
assoc_bss_dtim_period
;
struct
net_device_stats
net_stats
;
struct
target_stats
target_stats
;
struct
wmi_connect_cmd
profile
;
struct
list_head
mc_filter
;
};
...
...
@@ -640,6 +652,7 @@ struct ath6kl {
u8
sta_list_index
;
struct
ath6kl_req_key
ap_mode_bkey
;
struct
sk_buff_head
mcastpsq
;
u32
want_ch_switch
;
/*
* FIXME: protects access to mcastpsq but is actually useless as
...
...
@@ -672,6 +685,7 @@ struct ath6kl {
u32
refclk_hz
;
u32
uarttx_pin
;
u32
testscript_addr
;
enum
wmi_phy_cap
cap
;
struct
ath6kl_hw_fw
{
const
char
*
dir
;
...
...
@@ -805,7 +819,8 @@ void aggr_reset_state(struct aggr_info_conn *aggr_conn);
struct
ath6kl_sta
*
ath6kl_find_sta
(
struct
ath6kl_vif
*
vif
,
u8
*
node_addr
);
struct
ath6kl_sta
*
ath6kl_find_sta_by_aid
(
struct
ath6kl
*
ar
,
u8
aid
);
void
ath6kl_ready_event
(
void
*
devt
,
u8
*
datap
,
u32
sw_ver
,
u32
abi_ver
);
void
ath6kl_ready_event
(
void
*
devt
,
u8
*
datap
,
u32
sw_ver
,
u32
abi_ver
,
enum
wmi_phy_cap
cap
);
int
ath6kl_control_tx
(
void
*
devt
,
struct
sk_buff
*
skb
,
enum
htc_endpoint_id
eid
);
void
ath6kl_connect_event
(
struct
ath6kl_vif
*
vif
,
u16
channel
,
...
...
drivers/net/wireless/ath/ath6kl/debug.c
View file @
12d95683
...
...
@@ -401,8 +401,10 @@ static ssize_t ath6kl_fwlog_block_read(struct file *file,
ret
=
wait_for_completion_interruptible
(
&
ar
->
debug
.
fwlog_completion
);
if
(
ret
==
-
ERESTARTSYS
)
if
(
ret
==
-
ERESTARTSYS
)
{
vfree
(
buf
);
return
ret
;
}
spin_lock
(
&
ar
->
debug
.
fwlog_queue
.
lock
);
}
...
...
@@ -1570,10 +1572,15 @@ static ssize_t ath6kl_bgscan_int_write(struct file *file,
size_t
count
,
loff_t
*
ppos
)
{
struct
ath6kl
*
ar
=
file
->
private_data
;
struct
ath6kl_vif
*
vif
;
u16
bgscan_int
;
char
buf
[
32
];
ssize_t
len
;
vif
=
ath6kl_vif_first
(
ar
);
if
(
!
vif
)
return
-
EIO
;
len
=
min
(
count
,
sizeof
(
buf
)
-
1
);
if
(
copy_from_user
(
buf
,
user_buf
,
len
))
return
-
EFAULT
;
...
...
@@ -1585,6 +1592,8 @@ static ssize_t ath6kl_bgscan_int_write(struct file *file,
if
(
bgscan_int
==
0
)
bgscan_int
=
0xffff
;
vif
->
bg_scan_period
=
bgscan_int
;
ath6kl_wmi_scanparams_cmd
(
ar
->
wmi
,
0
,
0
,
0
,
bgscan_int
,
0
,
0
,
0
,
3
,
0
,
0
,
0
);
...
...
@@ -1809,6 +1818,7 @@ int ath6kl_debug_init_fs(struct ath6kl *ar)
void
ath6kl_debug_cleanup
(
struct
ath6kl
*
ar
)
{
skb_queue_purge
(
&
ar
->
debug
.
fwlog_queue
);
complete
(
&
ar
->
debug
.
fwlog_completion
);
kfree
(
ar
->
debug
.
roam_tbl
);
}
...
...
drivers/net/wireless/ath/ath6kl/htc_mbox.c
View file @
12d95683
...
...
@@ -83,10 +83,7 @@ static void ath6kl_credit_init(struct ath6kl_htc_credit_info *cred_info,
* never goes inactive EVER.
*/
cur_ep_dist
->
dist_flags
|=
HTC_EP_ACTIVE
;
}
else
if
(
cur_ep_dist
->
svc_id
==
WMI_DATA_BK_SVC
)
/* this is the lowest priority data endpoint */
/* FIXME: this looks fishy, check */
cred_info
->
lowestpri_ep_dist
=
cur_ep_dist
->
list
;
}
/*
* Streams have to be created (explicit | implicit) for all
...
...
@@ -100,6 +97,13 @@ static void ath6kl_credit_init(struct ath6kl_htc_credit_info *cred_info,
*/
}
/*
* For ath6kl_credit_seek function,
* it use list_for_each_entry_reverse to walk around the whole ep list.
* Therefore assign this lowestpri_ep_dist after walk around the ep_list
*/
cred_info
->
lowestpri_ep_dist
=
cur_ep_dist
->
list
;
WARN_ON
(
cred_info
->
cur_free_credits
<=
0
);
list_for_each_entry
(
cur_ep_dist
,
ep_list
,
list
)
{
...
...
@@ -758,7 +762,7 @@ static void ath6kl_htc_tx_bundle(struct htc_endpoint *endpoint,
u32
txb_mask
;
u8
ac
=
WMM_NUM_AC
;
if
((
HTC_CTRL_RSVD_SVC
!=
endpoint
->
svc_id
)
||
if
((
HTC_CTRL_RSVD_SVC
!=
endpoint
->
svc_id
)
&&
(
WMI_CONTROL_SVC
!=
endpoint
->
svc_id
))
ac
=
target
->
dev
->
ar
->
ep2ac_map
[
endpoint
->
eid
];
...
...
@@ -793,16 +797,17 @@ static void ath6kl_htc_tx_bundle(struct htc_endpoint *endpoint,
* itself
*/
txb_mask
=
((
1
<<
ac
)
-
1
);
/*
* when the scatter request resources drop below a
* certain threshold, disable Tx bundling for all
* AC's with priority lower than the current requesting
* AC. Otherwise re-enable Tx bundling for them
*/
if
(
scat_req
->
scat_q_depth
<
ATH6KL_SCATTER_REQS
)
target
->
tx_bndl_mask
&=
~
txb_mask
;
else
target
->
tx_bndl_mask
|=
txb_mask
;
/*
* when the scatter request resources drop below a
* certain threshold, disable Tx bundling for all
* AC's with priority lower than the current requesting
* AC. Otherwise re-enable Tx bundling for them
*/
if
(
scat_req
->
scat_q_depth
<
ATH6KL_SCATTER_REQS
)
target
->
tx_bndl_mask
&=
~
txb_mask
;
else
target
->
tx_bndl_mask
|=
txb_mask
;
}
ath6kl_dbg
(
ATH6KL_DBG_HTC
,
"htc tx pkts to scatter: %d
\n
"
,
...
...
@@ -849,6 +854,7 @@ static void ath6kl_htc_tx_from_queue(struct htc_target *target,
int
bundle_sent
;
int
n_pkts_bundle
;
u8
ac
=
WMM_NUM_AC
;
int
status
;
spin_lock_bh
(
&
target
->
tx_lock
);
...
...
@@ -866,7 +872,7 @@ static void ath6kl_htc_tx_from_queue(struct htc_target *target,
*/
INIT_LIST_HEAD
(
&
txq
);
if
((
HTC_CTRL_RSVD_SVC
!=
endpoint
->
svc_id
)
||
if
((
HTC_CTRL_RSVD_SVC
!=
endpoint
->
svc_id
)
&&
(
WMI_CONTROL_SVC
!=
endpoint
->
svc_id
))
ac
=
target
->
dev
->
ar
->
ep2ac_map
[
endpoint
->
eid
];
...
...
@@ -910,7 +916,12 @@ static void ath6kl_htc_tx_from_queue(struct htc_target *target,
ath6kl_htc_tx_prep_pkt
(
packet
,
packet
->
info
.
tx
.
flags
,
0
,
packet
->
info
.
tx
.
seqno
);
ath6kl_htc_tx_issue
(
target
,
packet
);
status
=
ath6kl_htc_tx_issue
(
target
,
packet
);
if
(
status
)
{
packet
->
status
=
status
;
packet
->
completion
(
packet
->
context
,
packet
);
}
}
spin_lock_bh
(
&
target
->
tx_lock
);
...
...
drivers/net/wireless/ath/ath6kl/htc_pipe.c
View file @
12d95683
...
...
@@ -108,8 +108,6 @@ static void get_htc_packet_credit_based(struct htc_target *target,
/* get packet at head, but don't remove it */
packet
=
list_first_entry
(
&
ep
->
txq
,
struct
htc_packet
,
list
);
if
(
packet
==
NULL
)
break
;
ath6kl_dbg
(
ATH6KL_DBG_HTC
,
"%s: got head packet:0x%p , queue depth: %d
\n
"
,
...
...
@@ -803,8 +801,6 @@ static int htc_send_packets_multiple(struct htc_target *target,
/* get first packet to find out which ep the packets will go into */
packet
=
list_first_entry
(
pkt_queue
,
struct
htc_packet
,
list
);
if
(
packet
==
NULL
)
return
-
EINVAL
;
if
(
packet
->
endpoint
>=
ENDPOINT_MAX
)
{
WARN_ON_ONCE
(
1
);
...
...
@@ -1382,6 +1378,9 @@ static int ath6kl_htc_pipe_conn_service(struct htc_target *target,
/* copy all the callbacks */
ep
->
ep_cb
=
conn_req
->
ep_cb
;
/* initialize tx_drop_packet_threshold */
ep
->
tx_drop_packet_threshold
=
MAX_HI_COOKIE_NUM
;
status
=
ath6kl_hif_pipe_map_service
(
ar
,
ep
->
svc_id
,
&
ep
->
pipe
.
pipeid_ul
,
&
ep
->
pipe
.
pipeid_dl
);
...
...
@@ -1636,10 +1635,6 @@ static int ath6kl_htc_pipe_add_rxbuf_multiple(struct htc_target *target,
return
-
EINVAL
;
first
=
list_first_entry
(
pkt_queue
,
struct
htc_packet
,
list
);
if
(
first
==
NULL
)
{
WARN_ON_ONCE
(
1
);
return
-
EINVAL
;
}
if
(
first
->
endpoint
>=
ENDPOINT_MAX
)
{
WARN_ON_ONCE
(
1
);
...
...
drivers/net/wireless/ath/ath6kl/init.c
View file @
12d95683
...
...
@@ -119,6 +119,24 @@ static const struct ath6kl_hw hw_list[] = {
.
fw_board
=
AR6004_HW_1_1_BOARD_DATA_FILE
,
.
fw_default_board
=
AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE
,
},
{
.
id
=
AR6004_HW_1_2_VERSION
,
.
name
=
"ar6004 hw 1.2"
,
.
dataset_patch_addr
=
0x436ecc
,
.
app_load_addr
=
0x1234
,
.
board_ext_data_addr
=
0x437000
,
.
reserved_ram_size
=
9216
,
.
board_addr
=
0x435c00
,
.
refclk_hz
=
40000000
,
.
uarttx_pin
=
11
,
.
fw
=
{
.
dir
=
AR6004_HW_1_2_FW_DIR
,
.
fw
=
AR6004_HW_1_2_FIRMWARE_FILE
,
},
.
fw_board
=
AR6004_HW_1_2_BOARD_DATA_FILE
,
.
fw_default_board
=
AR6004_HW_1_2_DEFAULT_BOARD_DATA_FILE
,
},
};
/*
...
...
@@ -445,9 +463,9 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar, int idx)
P2P_FLAG_MACADDR_REQ
|
P2P_FLAG_HMODEL_REQ
);
if
(
ret
)
{
ath6kl_dbg
(
ATH6KL_DBG_TRC
,
"failed to request P2P "
"
capabilities (%d) - assuming P2P not "
"supported
\n
"
,
ret
);
ath6kl_dbg
(
ATH6KL_DBG_TRC
,
"
failed to request P2P capabilities (%d) - assuming P2P not supported
\n
"
,
ret
);
ar
->
p2p
=
false
;
}
}
...
...
@@ -456,8 +474,9 @@ static int ath6kl_target_config_wlan_params(struct ath6kl *ar, int idx)
/* Enable Probe Request reporting for P2P */
ret
=
ath6kl_wmi_probe_report_req_cmd
(
ar
->
wmi
,
idx
,
true
);
if
(
ret
)
{
ath6kl_dbg
(
ATH6KL_DBG_TRC
,
"failed to enable Probe "
"Request reporting (%d)
\n
"
,
ret
);
ath6kl_dbg
(
ATH6KL_DBG_TRC
,
"failed to enable Probe Request reporting (%d)
\n
"
,
ret
);
}
}
...
...
drivers/net/wireless/ath/ath6kl/main.c
View file @
12d95683
...
...
@@ -421,8 +421,8 @@ void ath6kl_connect_ap_mode_bss(struct ath6kl_vif *vif, u16 channel)
if
(
!
ik
->
valid
)
break
;
ath6kl_dbg
(
ATH6KL_DBG_WLAN_CFG
,
"Delayed addkey for "
"the initial group key for AP mode
\n
"
);
ath6kl_dbg
(
ATH6KL_DBG_WLAN_CFG
,
"
Delayed addkey for
the initial group key for AP mode
\n
"
);
memset
(
key_rsc
,
0
,
sizeof
(
key_rsc
));
res
=
ath6kl_wmi_addkey_cmd
(
ar
->
wmi
,
vif
->
fw_vif_idx
,
ik
->
key_index
,
ik
->
key_type
,
...
...
@@ -430,12 +430,19 @@ void ath6kl_connect_ap_mode_bss(struct ath6kl_vif *vif, u16 channel)
ik
->
key
,
KEY_OP_INIT_VAL
,
NULL
,
SYNC_BOTH_WMIFLAG
);
if
(
res
)
{
ath6kl_dbg
(
ATH6KL_DBG_WLAN_CFG
,
"Delayed "
"addkey failed: %d
\n
"
,
res
);
ath6kl_dbg
(
ATH6KL_DBG_WLAN_CFG
,
"
Delayed
addkey failed: %d
\n
"
,
res
);
}
break
;
}
if
(
ar
->
want_ch_switch
&
(
1
<<
vif
->
fw_vif_idx
))
{
ar
->
want_ch_switch
&=
~
(
1
<<
vif
->
fw_vif_idx
);
/* we actually don't know the phymode, default to HT20 */
ath6kl_cfg80211_ch_switch_notify
(
vif
,
channel
,
WMI_11G_HT20
);
}
ath6kl_wmi_bssfilter_cmd
(
ar
->
wmi
,
vif
->
fw_vif_idx
,
NONE_BSS_FILTER
,
0
);
set_bit
(
CONNECTED
,
&
vif
->
flags
);
netif_carrier_on
(
vif
->
ndev
);
...
...
@@ -541,7 +548,8 @@ void ath6kl_disconnect(struct ath6kl_vif *vif)
/* WMI Event handlers */
void
ath6kl_ready_event
(
void
*
devt
,
u8
*
datap
,
u32
sw_ver
,
u32
abi_ver
)
void
ath6kl_ready_event
(
void
*
devt
,
u8
*
datap
,
u32
sw_ver
,
u32
abi_ver
,
enum
wmi_phy_cap
cap
)
{
struct
ath6kl
*
ar
=
devt
;
...
...
@@ -551,6 +559,7 @@ void ath6kl_ready_event(void *devt, u8 *datap, u32 sw_ver, u32 abi_ver)
ar
->
version
.
wlan_ver
=
sw_ver
;
ar
->
version
.
abi_ver
=
abi_ver
;
ar
->
hw
.
cap
=
cap
;
snprintf
(
ar
->
wiphy
->
fw_version
,
sizeof
(
ar
->
wiphy
->
fw_version
),
...
...
@@ -584,6 +593,45 @@ void ath6kl_scan_complete_evt(struct ath6kl_vif *vif, int status)
ath6kl_dbg
(
ATH6KL_DBG_WLAN_CFG
,
"scan complete: %d
\n
"
,
status
);
}
static
int
ath6kl_commit_ch_switch
(
struct
ath6kl_vif
*
vif
,
u16
channel
)
{
struct
ath6kl
*
ar
=
vif
->
ar
;
vif
->
next_chan
=
channel
;
vif
->
profile
.
ch
=
cpu_to_le16
(
channel
);
switch
(
vif
->
nw_type
)
{
case
AP_NETWORK
:
return
ath6kl_wmi_ap_profile_commit
(
ar
->
wmi
,
vif
->
fw_vif_idx
,
&
vif
->
profile
);
default:
ath6kl_err
(
"won't switch channels nw_type=%d
\n
"
,
vif
->
nw_type
);
return
-
ENOTSUPP
;
}
}
static
void
ath6kl_check_ch_switch
(
struct
ath6kl
*
ar
,
u16
channel
)
{
struct
ath6kl_vif
*
vif
;
int
res
=
0
;
if
(
!
ar
->
want_ch_switch
)
return
;
spin_lock_bh
(
&
ar
->
list_lock
);
list_for_each_entry
(
vif
,
&
ar
->
vif_list
,
list
)
{
if
(
ar
->
want_ch_switch
&
(
1
<<
vif
->
fw_vif_idx
))
res
=
ath6kl_commit_ch_switch
(
vif
,
channel
);
if
(
res
)
ath6kl_err
(
"channel switch failed nw_type %d res %d
\n
"
,
vif
->
nw_type
,
res
);
}
spin_unlock_bh
(
&
ar
->
list_lock
);
}
void
ath6kl_connect_event
(
struct
ath6kl_vif
*
vif
,
u16
channel
,
u8
*
bssid
,
u16
listen_int
,
u16
beacon_int
,
enum
network_type
net_type
,
u8
beacon_ie_len
,
...
...
@@ -601,9 +649,11 @@ void ath6kl_connect_event(struct ath6kl_vif *vif, u16 channel, u8 *bssid,
memcpy
(
vif
->
bssid
,
bssid
,
sizeof
(
vif
->
bssid
));
vif
->
bss_ch
=
channel
;
if
((
vif
->
nw_type
==
INFRA_NETWORK
))
if
((
vif
->
nw_type
==
INFRA_NETWORK
))
{
ath6kl_wmi_listeninterval_cmd
(
ar
->
wmi
,
vif
->
fw_vif_idx
,
vif
->
listen_intvl_t
,
0
);
ath6kl_check_ch_switch
(
ar
,
channel
);
}
netif_wake_queue
(
vif
->
ndev
);
...
...
@@ -926,6 +976,11 @@ void ath6kl_disconnect_event(struct ath6kl_vif *vif, u8 reason, u8 *bssid,
struct
ath6kl
*
ar
=
vif
->
ar
;
if
(
vif
->
nw_type
==
AP_NETWORK
)
{
/* disconnect due to other STA vif switching channels */
if
(
reason
==
BSS_DISCONNECTED
&&
prot_reason_status
==
WMI_AP_REASON_STA_ROAM
)
ar
->
want_ch_switch
|=
1
<<
vif
->
fw_vif_idx
;
if
(
!
ath6kl_remove_sta
(
ar
,
bssid
,
prot_reason_status
))
return
;
...
...
@@ -1090,7 +1145,7 @@ static int ath6kl_set_features(struct net_device *dev,
static
void
ath6kl_set_multicast_list
(
struct
net_device
*
ndev
)
{
struct
ath6kl_vif
*
vif
=
netdev_priv
(
ndev
);
bool
mc_all_on
=
false
,
mc_all_off
=
false
;
bool
mc_all_on
=
false
;
int
mc_count
=
netdev_mc_count
(
ndev
);
struct
netdev_hw_addr
*
ha
;
bool
found
;
...
...
@@ -1102,24 +1157,41 @@ static void ath6kl_set_multicast_list(struct net_device *ndev)
!
test_bit
(
WLAN_ENABLED
,
&
vif
->
flags
))
return
;
/* Enable multicast-all filter. */
mc_all_on
=
!!
(
ndev
->
flags
&
IFF_PROMISC
)
||
!!
(
ndev
->
flags
&
IFF_ALLMULTI
)
||
!!
(
mc_count
>
ATH6K_MAX_MC_FILTERS_PER_LIST
);
mc_all_off
=
!
(
ndev
->
flags
&
IFF_MULTICAST
)
||
mc_count
==
0
;
if
(
mc_all_on
)
set_bit
(
NETDEV_MCAST_ALL_ON
,
&
vif
->
flags
);
else
clear_bit
(
NETDEV_MCAST_ALL_ON
,
&
vif
->
flags
);
mc_all_on
=
mc_all_on
||
(
vif
->
ar
->
state
==
ATH6KL_STATE_ON
);
if
(
mc_all_on
||
mc_all_off
)
{
/* Enable/disable all multicast */
ath6kl_dbg
(
ATH6KL_DBG_TRC
,
"%s multicast filter
\n
"
,
mc_all_on
?
"enabling"
:
"disabling"
);
ret
=
ath6kl_wmi_mcast_filter_cmd
(
vif
->
ar
->
wmi
,
vif
->
fw_vif_idx
,
if
(
!
(
ndev
->
flags
&
IFF_MULTICAST
))
{
mc_all_on
=
false
;
set_bit
(
NETDEV_MCAST_ALL_OFF
,
&
vif
->
flags
);
}
else
{
clear_bit
(
NETDEV_MCAST_ALL_OFF
,
&
vif
->
flags
);
}
/* Enable/disable "multicast-all" filter*/
ath6kl_dbg
(
ATH6KL_DBG_TRC
,
"%s multicast-all filter
\n
"
,
mc_all_on
?
"enabling"
:
"disabling"
);
ret
=
ath6kl_wmi_mcast_filter_cmd
(
vif
->
ar
->
wmi
,
vif
->
fw_vif_idx
,
mc_all_on
);
if
(
ret
)
ath6kl_warn
(
"Failed to %s multicast
receive
\n
"
,
mc_all_on
?
"enable"
:
"disable"
);
if
(
ret
)
{
ath6kl_warn
(
"Failed to %s multicast-all
receive
\n
"
,
mc_all_on
?
"enable"
:
"disable"
);
return
;
}
if
(
test_bit
(
NETDEV_MCAST_ALL_ON
,
&
vif
->
flags
))
return
;
/* Keep the driver and firmware mcast list in sync. */
list_for_each_entry_safe
(
mc_filter
,
tmp
,
&
vif
->
mc_filter
,
list
)
{
found
=
false
;
netdev_for_each_mc_addr
(
ha
,
ndev
)
{
...
...
drivers/net/wireless/ath/ath6kl/sdio.c
View file @
12d95683
...
...
@@ -552,7 +552,7 @@ static int ath6kl_sdio_write_async(struct ath6kl *ar, u32 address, u8 *buffer,
bus_req
=
ath6kl_sdio_alloc_busreq
(
ar_sdio
);
if
(
!
bus_req
)
if
(
WARN_ON_ONCE
(
!
bus_req
)
)
return
-
ENOMEM
;
bus_req
->
address
=
address
;
...
...
@@ -915,6 +915,9 @@ static int ath6kl_sdio_suspend(struct ath6kl *ar, struct cfg80211_wowlan *wow)
}
cut_pwr:
if
(
func
->
card
&&
func
->
card
->
host
)
func
->
card
->
host
->
pm_flags
&=
~
MMC_PM_KEEP_POWER
;
return
ath6kl_cfg80211_suspend
(
ar
,
ATH6KL_CFG_SUSPEND_CUTPOWER
,
NULL
);
}
...
...
@@ -985,9 +988,8 @@ static int ath6kl_set_addrwin_reg(struct ath6kl *ar, u32 reg_addr, u32 addr)
}
if
(
status
)
{
ath6kl_err
(
"%s: failed to write initial bytes of 0x%x "
"to window reg: 0x%X
\n
"
,
__func__
,
addr
,
reg_addr
);
ath6kl_err
(
"%s: failed to write initial bytes of 0x%x to window reg: 0x%X
\n
"
,
__func__
,
addr
,
reg_addr
);
return
status
;
}
...
...
@@ -1076,8 +1078,8 @@ static int ath6kl_sdio_bmi_credits(struct ath6kl *ar)
(
u8
*
)
&
ar
->
bmi
.
cmd_credits
,
4
,
HIF_RD_SYNC_BYTE_INC
);
if
(
ret
)
{
ath6kl_err
(
"Unable to decrement the command credit
"
"count register: %d
\n
"
,
ret
);
ath6kl_err
(
"Unable to decrement the command credit
count register: %d
\n
"
,
ret
);
return
ret
;
}
...
...
@@ -1457,3 +1459,6 @@ MODULE_FIRMWARE(AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE);
MODULE_FIRMWARE
(
AR6004_HW_1_1_FW_DIR
"/"
AR6004_HW_1_1_FIRMWARE_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_1_BOARD_DATA_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_2_FW_DIR
"/"
AR6004_HW_1_2_FIRMWARE_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_2_BOARD_DATA_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_2_DEFAULT_BOARD_DATA_FILE
);
drivers/net/wireless/ath/ath6kl/txrx.c
View file @
12d95683
...
...
@@ -362,15 +362,11 @@ int ath6kl_data_tx(struct sk_buff *skb, struct net_device *dev)
skb
,
skb
->
data
,
skb
->
len
);
/* If target is not associated */
if
(
!
test_bit
(
CONNECTED
,
&
vif
->
flags
))
{
dev_kfree_skb
(
skb
);
return
0
;
}
if
(
!
test_bit
(
CONNECTED
,
&
vif
->
flags
))
goto
fail_tx
;
if
(
WARN_ON_ONCE
(
ar
->
state
!=
ATH6KL_STATE_ON
))
{
dev_kfree_skb
(
skb
);
return
0
;
}
if
(
WARN_ON_ONCE
(
ar
->
state
!=
ATH6KL_STATE_ON
))
goto
fail_tx
;
if
(
!
test_bit
(
WMI_READY
,
&
ar
->
flag
))
goto
fail_tx
;
...
...
drivers/net/wireless/ath/ath6kl/usb.c
View file @
12d95683
...
...
@@ -1037,6 +1037,14 @@ static void ath6kl_usb_stop(struct ath6kl *ar)
hif_stop
(
ar
);
}
static
void
ath6kl_usb_cleanup_scatter
(
struct
ath6kl
*
ar
)
{
/*
* USB doesn't support it. Just return.
*/
return
;
}
static
const
struct
ath6kl_hif_ops
ath6kl_usb_ops
=
{
.
diag_read32
=
ath6kl_usb_diag_read32
,
.
diag_write32
=
ath6kl_usb_diag_write32
,
...
...
@@ -1049,6 +1057,7 @@ static const struct ath6kl_hif_ops ath6kl_usb_ops = {
.
pipe_get_default
=
ath6kl_usb_get_default_pipe
,
.
pipe_map_service
=
ath6kl_usb_map_service_pipe
,
.
pipe_get_free_queue_number
=
ath6kl_usb_get_free_queue_number
,
.
cleanup_scatter
=
ath6kl_usb_cleanup_scatter
,
};
/* ath6kl usb driver registered functions */
...
...
@@ -1207,3 +1216,6 @@ MODULE_FIRMWARE(AR6004_HW_1_0_DEFAULT_BOARD_DATA_FILE);
MODULE_FIRMWARE
(
AR6004_HW_1_1_FIRMWARE_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_1_BOARD_DATA_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_1_DEFAULT_BOARD_DATA_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_2_FIRMWARE_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_2_BOARD_DATA_FILE
);
MODULE_FIRMWARE
(
AR6004_HW_1_2_DEFAULT_BOARD_DATA_FILE
);
drivers/net/wireless/ath/ath6kl/wmi.c
View file @
12d95683
...
...
@@ -16,6 +16,7 @@
*/
#include <linux/ip.h>
#include <linux/in.h>
#include "core.h"
#include "debug.h"
#include "testmode.h"
...
...
@@ -289,6 +290,13 @@ int ath6kl_wmi_implicit_create_pstream(struct wmi *wmi, u8 if_idx,
layer2_priority
);
}
else
usr_pri
=
layer2_priority
&
0x7
;
/*
* Queue the EAPOL frames in the same WMM_AC_VO queue
* as that of management frames.
*/
if
(
skb
->
protocol
==
cpu_to_be16
(
ETH_P_PAE
))
usr_pri
=
WMI_VOICE_USER_PRIORITY
;
}
/*
...
...
@@ -460,8 +468,9 @@ static int ath6kl_wmi_remain_on_chnl_event_rx(struct wmi *wmi, u8 *datap,
freq
,
dur
);
chan
=
ieee80211_get_channel
(
ar
->
wiphy
,
freq
);
if
(
!
chan
)
{
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"remain_on_chnl: Unknown channel "
"(freq=%u)
\n
"
,
freq
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"remain_on_chnl: Unknown channel (freq=%u)
\n
"
,
freq
);
return
-
EINVAL
;
}
id
=
vif
->
last_roc_id
;
...
...
@@ -488,12 +497,14 @@ static int ath6kl_wmi_cancel_remain_on_chnl_event_rx(struct wmi *wmi,
ev
=
(
struct
wmi_cancel_remain_on_chnl_event
*
)
datap
;
freq
=
le32_to_cpu
(
ev
->
freq
);
dur
=
le32_to_cpu
(
ev
->
duration
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"cancel_remain_on_chnl: freq=%u dur=%u "
"status=%u
\n
"
,
freq
,
dur
,
ev
->
status
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"cancel_remain_on_chnl: freq=%u dur=%u status=%u
\n
"
,
freq
,
dur
,
ev
->
status
);
chan
=
ieee80211_get_channel
(
ar
->
wiphy
,
freq
);
if
(
!
chan
)
{
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"cancel_remain_on_chnl: Unknown "
"channel (freq=%u)
\n
"
,
freq
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"cancel_remain_on_chnl: Unknown channel (freq=%u)
\n
"
,
freq
);
return
-
EINVAL
;
}
if
(
vif
->
last_cancel_roc_id
&&
...
...
@@ -548,12 +559,12 @@ static int ath6kl_wmi_rx_probe_req_event_rx(struct wmi *wmi, u8 *datap, int len,
freq
=
le32_to_cpu
(
ev
->
freq
);
dlen
=
le16_to_cpu
(
ev
->
len
);
if
(
datap
+
len
<
ev
->
data
+
dlen
)
{
ath6kl_err
(
"invalid wmi_p2p_rx_probe_req_event:
"
"len=%d dlen=%u
\n
"
,
len
,
dlen
);
ath6kl_err
(
"invalid wmi_p2p_rx_probe_req_event:
len=%d dlen=%u
\n
"
,
len
,
dlen
);
return
-
EINVAL
;
}
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"rx_probe_req: len=%u freq=%u "
"probe_req_report=%d
\n
"
,
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"
rx_probe_req: len=%u freq=%u
probe_req_report=%d
\n
"
,
dlen
,
freq
,
vif
->
probe_req_report
);
if
(
vif
->
probe_req_report
||
vif
->
nw_type
==
AP_NETWORK
)
...
...
@@ -592,8 +603,8 @@ static int ath6kl_wmi_rx_action_event_rx(struct wmi *wmi, u8 *datap, int len,
freq
=
le32_to_cpu
(
ev
->
freq
);
dlen
=
le16_to_cpu
(
ev
->
len
);
if
(
datap
+
len
<
ev
->
data
+
dlen
)
{
ath6kl_err
(
"invalid wmi_rx_action_event:
"
"len=%d dlen=%u
\n
"
,
len
,
dlen
);
ath6kl_err
(
"invalid wmi_rx_action_event:
len=%d dlen=%u
\n
"
,
len
,
dlen
);
return
-
EINVAL
;
}
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"rx_action: len=%u freq=%u
\n
"
,
dlen
,
freq
);
...
...
@@ -687,7 +698,7 @@ static int ath6kl_wmi_ready_event_rx(struct wmi *wmi, u8 *datap, int len)
ath6kl_ready_event
(
wmi
->
parent_dev
,
ev
->
mac_addr
,
le32_to_cpu
(
ev
->
sw_version
),
le32_to_cpu
(
ev
->
abi_version
));
le32_to_cpu
(
ev
->
abi_version
)
,
ev
->
phy_cap
);
return
0
;
}
...
...
@@ -777,16 +788,15 @@ static int ath6kl_wmi_connect_event_rx(struct wmi *wmi, u8 *datap, int len,
/* AP mode start/STA connected event */
struct
net_device
*
dev
=
vif
->
ndev
;
if
(
memcmp
(
dev
->
dev_addr
,
ev
->
u
.
ap_bss
.
bssid
,
ETH_ALEN
)
==
0
)
{
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"%s: freq %d bssid %pM "
"(AP started)
\n
"
,
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"
%s: freq %d bssid %pM
(AP started)
\n
"
,
__func__
,
le16_to_cpu
(
ev
->
u
.
ap_bss
.
ch
),
ev
->
u
.
ap_bss
.
bssid
);
ath6kl_connect_ap_mode_bss
(
vif
,
le16_to_cpu
(
ev
->
u
.
ap_bss
.
ch
));
}
else
{
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"%s: aid %u mac_addr %pM "
"auth=%u keymgmt=%u cipher=%u apsd_info=%u "
"(STA connected)
\n
"
,
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"%s: aid %u mac_addr %pM auth=%u keymgmt=%u cipher=%u apsd_info=%u (STA connected)
\n
"
,
__func__
,
ev
->
u
.
ap_sta
.
aid
,
ev
->
u
.
ap_sta
.
mac_addr
,
ev
->
u
.
ap_sta
.
auth
,
...
...
@@ -1229,8 +1239,9 @@ static int ath6kl_wmi_neighbor_report_event_rx(struct wmi *wmi, u8 *datap,
ev
=
(
struct
wmi_neighbor_report_event
*
)
datap
;
if
(
sizeof
(
*
ev
)
+
ev
->
num_neighbors
*
sizeof
(
struct
wmi_neighbor_info
)
>
len
)
{
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"truncated neighbor event "
"(num=%d len=%d)
\n
"
,
ev
->
num_neighbors
,
len
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"truncated neighbor event (num=%d len=%d)
\n
"
,
ev
->
num_neighbors
,
len
);
return
-
EINVAL
;
}
for
(
i
=
0
;
i
<
ev
->
num_neighbors
;
i
++
)
{
...
...
@@ -1814,12 +1825,14 @@ int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
u32
home_dwell_time
,
u32
force_scan_interval
,
s8
num_chan
,
u16
*
ch_list
,
u32
no_cck
,
u32
*
rates
)
{
struct
ieee80211_supported_band
*
sband
;
struct
sk_buff
*
skb
;
struct
wmi_begin_scan_cmd
*
sc
;
s8
size
;
s8
size
,
*
supp_rates
;
int
i
,
band
,
ret
;
struct
ath6kl
*
ar
=
wmi
->
parent_dev
;
int
num_rates
;
u32
ratemask
;
size
=
sizeof
(
struct
wmi_begin_scan_cmd
);
...
...
@@ -1846,10 +1859,13 @@ int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
sc
->
num_ch
=
num_chan
;
for
(
band
=
0
;
band
<
IEEE80211_NUM_BANDS
;
band
++
)
{
struct
ieee80211_supported_band
*
sband
=
ar
->
wiphy
->
bands
[
band
];
u32
ratemask
=
rates
[
band
];
u8
*
supp_rates
=
sc
->
supp_rates
[
band
].
rates
;
sband
=
ar
->
wiphy
->
bands
[
band
];
if
(
!
sband
)
continue
;
ratemask
=
rates
[
band
];
supp_rates
=
sc
->
supp_rates
[
band
].
rates
;
num_rates
=
0
;
for
(
i
=
0
;
i
<
sband
->
n_bitrates
;
i
++
)
{
...
...
@@ -2129,8 +2145,8 @@ int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
struct
wmi_add_cipher_key_cmd
*
cmd
;
int
ret
;
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"addkey cmd: key_index=%u key_type=%d "
"key_usage=%d key_len=%d key_op_ctrl=%d
\n
"
,
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"
addkey cmd: key_index=%u key_type=%d
key_usage=%d key_len=%d key_op_ctrl=%d
\n
"
,
key_index
,
key_type
,
key_usage
,
key_len
,
key_op_ctrl
);
if
((
key_index
>
WMI_MAX_KEY_INDEX
)
||
(
key_len
>
WMI_MAX_KEY_LEN
)
||
...
...
@@ -3047,8 +3063,8 @@ int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, u8 if_idx,
res
=
ath6kl_wmi_cmd_send
(
wmip
,
if_idx
,
skb
,
WMI_AP_CONFIG_COMMIT_CMDID
,
NO_SYNC_WMIFLAG
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"%s: nw_type=%u auth_mode=%u ch=%u "
"ctrl_flags=0x%x-> res=%d
\n
"
,
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"
%s: nw_type=%u auth_mode=%u ch=%u
ctrl_flags=0x%x-> res=%d
\n
"
,
__func__
,
p
->
nw_type
,
p
->
auth_mode
,
le16_to_cpu
(
p
->
ch
),
le32_to_cpu
(
p
->
ctrl_flags
),
res
);
return
res
;
...
...
@@ -3208,8 +3224,9 @@ int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
if
(
!
skb
)
return
-
ENOMEM
;
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"set_appie_cmd: mgmt_frm_type=%u "
"ie_len=%u
\n
"
,
mgmt_frm_type
,
ie_len
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"set_appie_cmd: mgmt_frm_type=%u ie_len=%u
\n
"
,
mgmt_frm_type
,
ie_len
);
p
=
(
struct
wmi_set_appie_cmd
*
)
skb
->
data
;
p
->
mgmt_frm_type
=
mgmt_frm_type
;
p
->
ie_len
=
ie_len
;
...
...
@@ -3310,8 +3327,9 @@ static int ath6kl_wmi_send_action_cmd(struct wmi *wmi, u8 if_idx, u32 id,
wmi
->
last_mgmt_tx_frame
=
buf
;
wmi
->
last_mgmt_tx_frame_len
=
data_len
;
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"send_action_cmd: id=%u freq=%u wait=%u "
"len=%u
\n
"
,
id
,
freq
,
wait
,
data_len
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"send_action_cmd: id=%u freq=%u wait=%u len=%u
\n
"
,
id
,
freq
,
wait
,
data_len
);
p
=
(
struct
wmi_send_action_cmd
*
)
skb
->
data
;
p
->
id
=
cpu_to_le32
(
id
);
p
->
freq
=
cpu_to_le32
(
freq
);
...
...
@@ -3348,8 +3366,9 @@ static int __ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id,
wmi
->
last_mgmt_tx_frame
=
buf
;
wmi
->
last_mgmt_tx_frame_len
=
data_len
;
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"send_action_cmd: id=%u freq=%u wait=%u "
"len=%u
\n
"
,
id
,
freq
,
wait
,
data_len
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"send_action_cmd: id=%u freq=%u wait=%u len=%u
\n
"
,
id
,
freq
,
wait
,
data_len
);
p
=
(
struct
wmi_send_mgmt_cmd
*
)
skb
->
data
;
p
->
id
=
cpu_to_le32
(
id
);
p
->
freq
=
cpu_to_le32
(
freq
);
...
...
@@ -3402,8 +3421,9 @@ int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
if
(
!
skb
)
return
-
ENOMEM
;
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"send_probe_response_cmd: freq=%u dst=%pM "
"len=%u
\n
"
,
freq
,
dst
,
data_len
);
ath6kl_dbg
(
ATH6KL_DBG_WMI
,
"send_probe_response_cmd: freq=%u dst=%pM len=%u
\n
"
,
freq
,
dst
,
data_len
);
p
=
(
struct
wmi_p2p_probe_response_cmd
*
)
skb
->
data
;
p
->
freq
=
cpu_to_le32
(
freq
);
memcpy
(
p
->
destination_addr
,
dst
,
ETH_ALEN
);
...
...
drivers/net/wireless/ath/ath6kl/wmi.h
View file @
12d95683
...
...
@@ -106,6 +106,8 @@ struct wmi_data_sync_bufs {
#define WMM_AC_VI 2
/* video */
#define WMM_AC_VO 3
/* voice */
#define WMI_VOICE_USER_PRIORITY 0x7
struct
wmi
{
u16
stream_exist_for_ac
[
WMM_NUM_AC
];
u8
fat_pipe_exist
;
...
...
@@ -1151,6 +1153,7 @@ enum wmi_phy_mode {
WMI_11AG_MODE
=
0x3
,
WMI_11B_MODE
=
0x4
,
WMI_11GONLY_MODE
=
0x5
,
WMI_11G_HT20
=
0x6
,
};
#define WMI_MAX_CHANNELS 32
...
...
@@ -1416,6 +1419,16 @@ struct wmi_ready_event_2 {
u8
phy_cap
;
}
__packed
;
/* WMI_PHY_CAPABILITY */
enum
wmi_phy_cap
{
WMI_11A_CAP
=
0x01
,
WMI_11G_CAP
=
0x02
,
WMI_11AG_CAP
=
0x03
,
WMI_11AN_CAP
=
0x04
,
WMI_11GN_CAP
=
0x05
,
WMI_11AGN_CAP
=
0x06
,
};
/* Connect Event */
struct
wmi_connect_event
{
union
{
...
...
@@ -1468,6 +1481,17 @@ enum wmi_disconnect_reason {
IBSS_MERGE
=
0xe
,
};
/* AP mode disconnect proto_reasons */
enum
ap_disconnect_reason
{
WMI_AP_REASON_STA_LEFT
=
101
,
WMI_AP_REASON_FROM_HOST
=
102
,
WMI_AP_REASON_COMM_TIMEOUT
=
103
,
WMI_AP_REASON_MAX_STA
=
104
,
WMI_AP_REASON_ACL
=
105
,
WMI_AP_REASON_STA_ROAM
=
106
,
WMI_AP_REASON_DFS_CHANNEL
=
107
,
};
#define ATH6KL_COUNTRY_RD_SHIFT 16
struct
ath6kl_wmi_regdomain
{
...
...
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