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
a72e25f7
Commit
a72e25f7
authored
Oct 18, 2013
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-linville' of
git://github.com/kvalo/ath
parents
b231070a
56b84287
Changes
15
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
15 changed files
with
2674 additions
and
388 deletions
+2674
-388
drivers/net/wireless/ath/ath10k/ce.c
drivers/net/wireless/ath/ath10k/ce.c
+8
-27
drivers/net/wireless/ath/ath10k/ce.h
drivers/net/wireless/ath/ath10k/ce.h
+1
-15
drivers/net/wireless/ath/ath10k/core.c
drivers/net/wireless/ath/ath10k/core.c
+238
-47
drivers/net/wireless/ath/ath10k/core.h
drivers/net/wireless/ath/ath10k/core.h
+44
-3
drivers/net/wireless/ath/ath10k/debug.c
drivers/net/wireless/ath/ath10k/debug.c
+14
-1
drivers/net/wireless/ath/ath10k/debug.h
drivers/net/wireless/ath/ath10k/debug.h
+5
-0
drivers/net/wireless/ath/ath10k/htt_tx.c
drivers/net/wireless/ath/ath10k/htt_tx.c
+2
-2
drivers/net/wireless/ath/ath10k/hw.h
drivers/net/wireless/ath/ath10k/hw.h
+50
-6
drivers/net/wireless/ath/ath10k/mac.c
drivers/net/wireless/ath/ath10k/mac.c
+309
-203
drivers/net/wireless/ath/ath10k/mac.h
drivers/net/wireless/ath/ath10k/mac.h
+2
-0
drivers/net/wireless/ath/ath10k/pci.c
drivers/net/wireless/ath/ath10k/pci.c
+3
-22
drivers/net/wireless/ath/ath10k/pci.h
drivers/net/wireless/ath/ath10k/pci.h
+0
-3
drivers/net/wireless/ath/ath10k/wmi.c
drivers/net/wireless/ath/ath10k/wmi.c
+1033
-54
drivers/net/wireless/ath/ath10k/wmi.h
drivers/net/wireless/ath/ath10k/wmi.h
+964
-4
drivers/net/wireless/ath/ath6kl/htc.h
drivers/net/wireless/ath/ath6kl/htc.h
+1
-1
No files found.
drivers/net/wireless/ath/ath10k/ce.c
View file @
a72e25f7
...
...
@@ -283,7 +283,7 @@ static int ath10k_ce_send_nolock(struct ath10k_ce_pipe *ce_state,
if
(
unlikely
(
CE_RING_DELTA
(
nentries_mask
,
write_index
,
sw_index
-
1
)
<=
0
))
{
ret
=
-
E
IO
;
ret
=
-
E
NOSR
;
goto
exit
;
}
...
...
@@ -338,38 +338,19 @@ int ath10k_ce_send(struct ath10k_ce_pipe *ce_state,
return
ret
;
}
int
ath10k_ce_sendlist_send
(
struct
ath10k_ce_pipe
*
ce_state
,
void
*
per_transfer_context
,
unsigned
int
transfer_id
,
u32
paddr
,
unsigned
int
nbytes
,
u32
flags
)
int
ath10k_ce_num_free_src_entries
(
struct
ath10k_ce_pipe
*
pipe
)
{
struct
ath10k_ce_ring
*
src_ring
=
ce_state
->
src_ring
;
struct
ath10k
*
ar
=
ce_state
->
ar
;
struct
ath10k
*
ar
=
pipe
->
ar
;
struct
ath10k_pci
*
ar_pci
=
ath10k_pci_priv
(
ar
);
unsigned
int
nentries_mask
=
src_ring
->
nentries_mask
;
unsigned
int
sw_index
;
unsigned
int
write_index
;
int
delta
,
ret
=
-
ENOMEM
;
int
delta
;
spin_lock_bh
(
&
ar_pci
->
ce_lock
);
sw_index
=
src_ring
->
sw_index
;
write_index
=
src_ring
->
write_index
;
delta
=
CE_RING_DELTA
(
nentries_mask
,
write_index
,
sw_index
-
1
);
if
(
delta
>=
1
)
{
ret
=
ath10k_ce_send_nolock
(
ce_state
,
per_transfer_context
,
paddr
,
nbytes
,
transfer_id
,
flags
);
if
(
ret
)
ath10k_warn
(
"CE send failed: %d
\n
"
,
ret
);
}
delta
=
CE_RING_DELTA
(
pipe
->
src_ring
->
nentries_mask
,
pipe
->
src_ring
->
write_index
,
pipe
->
src_ring
->
sw_index
-
1
);
spin_unlock_bh
(
&
ar_pci
->
ce_lock
);
return
ret
;
return
delta
;
}
int
ath10k_ce_recv_buf_enqueue
(
struct
ath10k_ce_pipe
*
ce_state
,
...
...
drivers/net/wireless/ath/ath10k/ce.h
View file @
a72e25f7
...
...
@@ -156,21 +156,7 @@ void ath10k_ce_send_cb_register(struct ath10k_ce_pipe *ce_state,
void
(
*
send_cb
)(
struct
ath10k_ce_pipe
*
),
int
disable_interrupts
);
/*
* Queue a "sendlist" of buffers to be sent using gather to a single
* anonymous destination buffer
* ce - which copy engine to use
* sendlist - list of simple buffers to send using gather
* transfer_id - arbitrary ID; reflected to destination
* Returns 0 on success; otherwise an error status.
*
* Implemenation note: Pushes multiple buffers with Gather to Source ring.
*/
int
ath10k_ce_sendlist_send
(
struct
ath10k_ce_pipe
*
ce_state
,
void
*
per_transfer_context
,
unsigned
int
transfer_id
,
u32
paddr
,
unsigned
int
nbytes
,
u32
flags
);
int
ath10k_ce_num_free_src_entries
(
struct
ath10k_ce_pipe
*
pipe
);
/*==================Recv=======================*/
...
...
drivers/net/wireless/ath/ath10k/core.c
View file @
a72e25f7
This diff is collapsed.
Click to expand it.
drivers/net/wireless/ath/ath10k/core.h
View file @
a72e25f7
...
...
@@ -43,15 +43,17 @@
/* Antenna noise floor */
#define ATH10K_DEFAULT_NOISE_FLOOR -95
#define ATH10K_MAX_NUM_MGMT_PENDING 16
struct
ath10k
;
struct
ath10k_skb_cb
{
dma_addr_t
paddr
;
bool
is_mapped
;
bool
is_aborted
;
u8
vdev_id
;
struct
{
u8
vdev_id
;
u8
tid
;
bool
is_offchan
;
...
...
@@ -102,11 +104,26 @@ struct ath10k_bmi {
bool
done_sent
;
};
#define ATH10K_MAX_MEM_REQS 16
struct
ath10k_mem_chunk
{
void
*
vaddr
;
dma_addr_t
paddr
;
u32
len
;
u32
req_id
;
};
struct
ath10k_wmi
{
enum
ath10k_htc_ep_id
eid
;
struct
completion
service_ready
;
struct
completion
unified_ready
;
wait_queue_head_t
tx_credits_wq
;
struct
wmi_cmd_map
*
cmd
;
struct
wmi_vdev_param_map
*
vdev_param
;
struct
wmi_pdev_param_map
*
pdev_param
;
u32
num_mem_chunks
;
struct
ath10k_mem_chunk
mem_chunks
[
ATH10K_MAX_MEM_REQS
];
};
struct
ath10k_peer_stat
{
...
...
@@ -188,6 +205,8 @@ struct ath10k_peer {
#define ATH10K_VDEV_SETUP_TIMEOUT_HZ (5*HZ)
struct
ath10k_vif
{
struct
list_head
list
;
u32
vdev_id
;
enum
wmi_vdev_type
vdev_type
;
enum
wmi_vdev_subtype
vdev_subtype
;
...
...
@@ -198,8 +217,10 @@ struct ath10k_vif {
struct
ath10k
*
ar
;
struct
ieee80211_vif
*
vif
;
struct
work_struct
wep_key_work
;
struct
ieee80211_key_conf
*
wep_keys
[
WMI_MAX_KEY_INDEX
+
1
];
u8
def_wep_key_index
;
u8
def_wep_key_idx
;
u8
def_wep_key_newidx
;
u16
tx_seq_no
;
...
...
@@ -268,6 +289,12 @@ enum ath10k_fw_features {
/* wmi_mgmt_rx_hdr contains extra RSSI information */
ATH10K_FW_FEATURE_EXT_WMI_MGMT_RX
=
0
,
/* firmware from 10X branch */
ATH10K_FW_FEATURE_WMI_10X
=
1
,
/* firmware support tx frame management over WMI, otherwise it's HTT */
ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX
=
2
,
/* keep last */
ATH10K_FW_FEATURE_COUNT
,
};
...
...
@@ -324,9 +351,19 @@ struct ath10k {
}
fw
;
}
hw_params
;
const
struct
firmware
*
board_data
;
const
struct
firmware
*
board
;
const
void
*
board_data
;
size_t
board_len
;
const
struct
firmware
*
otp
;
const
void
*
otp_data
;
size_t
otp_len
;
const
struct
firmware
*
firmware
;
const
void
*
firmware_data
;
size_t
firmware_len
;
int
fw_api
;
struct
{
struct
completion
started
;
...
...
@@ -369,6 +406,7 @@ struct ath10k {
/* protects shared structure data */
spinlock_t
data_lock
;
struct
list_head
arvifs
;
struct
list_head
peers
;
wait_queue_head_t
peer_mapping_wq
;
...
...
@@ -377,6 +415,9 @@ struct ath10k {
struct
completion
offchan_tx_completed
;
struct
sk_buff
*
offchan_tx_skb
;
struct
work_struct
wmi_mgmt_tx_work
;
struct
sk_buff_head
wmi_mgmt_tx_queue
;
enum
ath10k_state
state
;
struct
work_struct
restart_work
;
...
...
drivers/net/wireless/ath/ath10k/debug.c
View file @
a72e25f7
...
...
@@ -618,6 +618,8 @@ int ath10k_debug_start(struct ath10k *ar)
{
int
ret
;
lockdep_assert_held
(
&
ar
->
conf_mutex
);
ret
=
ath10k_debug_htt_stats_req
(
ar
);
if
(
ret
)
/* continue normally anyway, this isn't serious */
...
...
@@ -628,7 +630,13 @@ int ath10k_debug_start(struct ath10k *ar)
void
ath10k_debug_stop
(
struct
ath10k
*
ar
)
{
cancel_delayed_work_sync
(
&
ar
->
debug
.
htt_stats_dwork
);
lockdep_assert_held
(
&
ar
->
conf_mutex
);
/* Must not use _sync to avoid deadlock, we do that in
* ath10k_debug_destroy(). The check for htt_stats_mask is to avoid
* warning from del_timer(). */
if
(
ar
->
debug
.
htt_stats_mask
!=
0
)
cancel_delayed_work
(
&
ar
->
debug
.
htt_stats_dwork
);
}
int
ath10k_debug_create
(
struct
ath10k
*
ar
)
...
...
@@ -662,6 +670,11 @@ int ath10k_debug_create(struct ath10k *ar)
return
0
;
}
void
ath10k_debug_destroy
(
struct
ath10k
*
ar
)
{
cancel_delayed_work_sync
(
&
ar
->
debug
.
htt_stats_dwork
);
}
#endif
/* CONFIG_ATH10K_DEBUGFS */
#ifdef CONFIG_ATH10K_DEBUG
...
...
drivers/net/wireless/ath/ath10k/debug.h
View file @
a72e25f7
...
...
@@ -46,6 +46,7 @@ extern __printf(1, 2) int ath10k_warn(const char *fmt, ...);
int
ath10k_debug_start
(
struct
ath10k
*
ar
);
void
ath10k_debug_stop
(
struct
ath10k
*
ar
);
int
ath10k_debug_create
(
struct
ath10k
*
ar
);
void
ath10k_debug_destroy
(
struct
ath10k
*
ar
);
void
ath10k_debug_read_service_map
(
struct
ath10k
*
ar
,
void
*
service_map
,
size_t
map_size
);
...
...
@@ -67,6 +68,10 @@ static inline int ath10k_debug_create(struct ath10k *ar)
return
0
;
}
static
inline
void
ath10k_debug_destroy
(
struct
ath10k
*
ar
)
{
}
static
inline
void
ath10k_debug_read_service_map
(
struct
ath10k
*
ar
,
void
*
service_map
,
size_t
map_size
)
...
...
drivers/net/wireless/ath/ath10k/htt_tx.c
View file @
a72e25f7
...
...
@@ -308,7 +308,7 @@ int ath10k_htt_mgmt_tx(struct ath10k_htt *htt, struct sk_buff *msdu)
struct
sk_buff
*
txdesc
=
NULL
;
struct
htt_cmd
*
cmd
;
struct
ath10k_skb_cb
*
skb_cb
=
ATH10K_SKB_CB
(
msdu
);
u8
vdev_id
=
skb_cb
->
htt
.
vdev_id
;
u8
vdev_id
=
skb_cb
->
vdev_id
;
int
len
=
0
;
int
msdu_id
=
-
1
;
int
res
;
...
...
@@ -384,7 +384,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, struct sk_buff *msdu)
struct
ath10k_skb_cb
*
skb_cb
=
ATH10K_SKB_CB
(
msdu
);
struct
sk_buff
*
txdesc
=
NULL
;
bool
use_frags
;
u8
vdev_id
=
ATH10K_SKB_CB
(
msdu
)
->
htt
.
vdev_id
;
u8
vdev_id
=
ATH10K_SKB_CB
(
msdu
)
->
vdev_id
;
u8
tid
;
int
prefetch_len
,
desc_len
;
int
msdu_id
=
-
1
;
...
...
drivers/net/wireless/ath/ath10k/hw.h
View file @
a72e25f7
...
...
@@ -20,12 +20,6 @@
#include "targaddrs.h"
/* Supported FW version */
#define SUPPORTED_FW_MAJOR 1
#define SUPPORTED_FW_MINOR 0
#define SUPPORTED_FW_RELEASE 0
#define SUPPORTED_FW_BUILD 636
/* QCA988X 1.0 definitions (unsupported) */
#define QCA988X_HW_1_0_CHIP_ID_REV 0x0
...
...
@@ -38,6 +32,25 @@
#define QCA988X_HW_2_0_BOARD_DATA_FILE "board.bin"
#define QCA988X_HW_2_0_PATCH_LOAD_ADDR 0x1234
#define ATH10K_FW_API2_FILE "firmware-2.bin"
/* includes also the null byte */
#define ATH10K_FIRMWARE_MAGIC "QCA-ATH10K"
struct
ath10k_fw_ie
{
__le32
id
;
__le32
len
;
u8
data
[
0
];
};
enum
ath10k_fw_ie_type
{
ATH10K_FW_IE_FW_VERSION
=
0
,
ATH10K_FW_IE_TIMESTAMP
=
1
,
ATH10K_FW_IE_FEATURES
=
2
,
ATH10K_FW_IE_FW_IMAGE
=
3
,
ATH10K_FW_IE_OTP_IMAGE
=
4
,
};
/* Known pecularities:
* - current FW doesn't support raw rx mode (last tested v599)
* - current FW dumps upon raw tx mode (last tested v599)
...
...
@@ -59,6 +72,7 @@ enum ath10k_mcast2ucast_mode {
ATH10K_MCAST2UCAST_ENABLED
=
1
,
};
/* Target specific defines for MAIN firmware */
#define TARGET_NUM_VDEVS 8
#define TARGET_NUM_PEER_AST 2
#define TARGET_NUM_WDS_ENTRIES 32
...
...
@@ -93,6 +107,36 @@ enum ath10k_mcast2ucast_mode {
#define TARGET_NUM_MSDU_DESC (1024 + 400)
#define TARGET_MAX_FRAG_ENTRIES 0
/* Target specific defines for 10.X firmware */
#define TARGET_10X_NUM_VDEVS 16
#define TARGET_10X_NUM_PEER_AST 2
#define TARGET_10X_NUM_WDS_ENTRIES 32
#define TARGET_10X_DMA_BURST_SIZE 0
#define TARGET_10X_MAC_AGGR_DELIM 0
#define TARGET_10X_AST_SKID_LIMIT 16
#define TARGET_10X_NUM_PEERS (128 + (TARGET_10X_NUM_VDEVS))
#define TARGET_10X_NUM_OFFLOAD_PEERS 0
#define TARGET_10X_NUM_OFFLOAD_REORDER_BUFS 0
#define TARGET_10X_NUM_PEER_KEYS 2
#define TARGET_10X_NUM_TIDS 256
#define TARGET_10X_TX_CHAIN_MASK (BIT(0) | BIT(1) | BIT(2))
#define TARGET_10X_RX_CHAIN_MASK (BIT(0) | BIT(1) | BIT(2))
#define TARGET_10X_RX_TIMEOUT_LO_PRI 100
#define TARGET_10X_RX_TIMEOUT_HI_PRI 40
#define TARGET_10X_RX_DECAP_MODE ATH10K_HW_TXRX_NATIVE_WIFI
#define TARGET_10X_SCAN_MAX_PENDING_REQS 4
#define TARGET_10X_BMISS_OFFLOAD_MAX_VDEV 2
#define TARGET_10X_ROAM_OFFLOAD_MAX_VDEV 2
#define TARGET_10X_ROAM_OFFLOAD_MAX_AP_PROFILES 8
#define TARGET_10X_GTK_OFFLOAD_MAX_VDEV 3
#define TARGET_10X_NUM_MCAST_GROUPS 0
#define TARGET_10X_NUM_MCAST_TABLE_ELEMS 0
#define TARGET_10X_MCAST2UCAST_MODE ATH10K_MCAST2UCAST_DISABLED
#define TARGET_10X_TX_DBG_LOG_SIZE 1024
#define TARGET_10X_RX_SKIP_DEFRAG_TIMEOUT_DUP_DETECTION_CHECK 1
#define TARGET_10X_VOW_CONFIG 0
#define TARGET_10X_NUM_MSDU_DESC (1024 + 400)
#define TARGET_10X_MAX_FRAG_ENTRIES 0
/* Number of Copy Engines supported */
#define CE_COUNT 8
...
...
drivers/net/wireless/ath/ath10k/mac.c
View file @
a72e25f7
This diff is collapsed.
Click to expand it.
drivers/net/wireless/ath/ath10k/mac.h
View file @
a72e25f7
...
...
@@ -34,6 +34,8 @@ struct ath10k_vif *ath10k_get_arvif(struct ath10k *ar, u32 vdev_id);
void
ath10k_reset_scan
(
unsigned
long
ptr
);
void
ath10k_offchan_tx_purge
(
struct
ath10k
*
ar
);
void
ath10k_offchan_tx_work
(
struct
work_struct
*
work
);
void
ath10k_mgmt_over_wmi_tx_purge
(
struct
ath10k
*
ar
);
void
ath10k_mgmt_over_wmi_tx_work
(
struct
work_struct
*
work
);
void
ath10k_halt
(
struct
ath10k
*
ar
);
static
inline
struct
ath10k_vif
*
ath10k_vif_to_arvif
(
struct
ieee80211_vif
*
vif
)
...
...
drivers/net/wireless/ath/ath10k/pci.c
View file @
a72e25f7
...
...
@@ -720,18 +720,8 @@ static int ath10k_pci_hif_send_head(struct ath10k *ar, u8 pipe_id,
"ath10k tx: data: "
,
nbuf
->
data
,
nbuf
->
len
);
/* Make sure we have resources to handle this request */
spin_lock_bh
(
&
pipe_info
->
pipe_lock
);
if
(
!
pipe_info
->
num_sends_allowed
)
{
ath10k_warn
(
"Pipe: %d is full
\n
"
,
pipe_id
);
spin_unlock_bh
(
&
pipe_info
->
pipe_lock
);
return
-
ENOSR
;
}
pipe_info
->
num_sends_allowed
--
;
spin_unlock_bh
(
&
pipe_info
->
pipe_lock
);
ret
=
ath10k_ce_sendlist_send
(
ce_hdl
,
nbuf
,
transfer_id
,
skb_cb
->
paddr
,
len
,
flags
);
ret
=
ath10k_ce_send
(
ce_hdl
,
nbuf
,
skb_cb
->
paddr
,
len
,
transfer_id
,
flags
);
if
(
ret
)
ath10k_warn
(
"CE send failed: %p
\n
"
,
nbuf
);
...
...
@@ -741,14 +731,7 @@ static int ath10k_pci_hif_send_head(struct ath10k *ar, u8 pipe_id,
static
u16
ath10k_pci_hif_get_free_queue_number
(
struct
ath10k
*
ar
,
u8
pipe
)
{
struct
ath10k_pci
*
ar_pci
=
ath10k_pci_priv
(
ar
);
struct
ath10k_pci_pipe
*
pipe_info
=
&
(
ar_pci
->
pipe_info
[
pipe
]);
int
ret
;
spin_lock_bh
(
&
pipe_info
->
pipe_lock
);
ret
=
pipe_info
->
num_sends_allowed
;
spin_unlock_bh
(
&
pipe_info
->
pipe_lock
);
return
ret
;
return
ath10k_ce_num_free_src_entries
(
ar_pci
->
pipe_info
[
pipe
].
ce_hdl
);
}
static
void
ath10k_pci_hif_dump_area
(
struct
ath10k
*
ar
)
...
...
@@ -863,7 +846,6 @@ static int ath10k_pci_start_ce(struct ath10k *ar)
ath10k_pci_ce_send_done
,
disable_interrupts
);
completions
+=
attr
->
src_nentries
;
pipe_info
->
num_sends_allowed
=
attr
->
src_nentries
-
1
;
}
if
(
attr
->
dest_nentries
)
{
...
...
@@ -1033,7 +1015,6 @@ static void ath10k_pci_process_ce(struct ath10k *ar)
*/
spin_lock_bh
(
&
compl
->
pipe_info
->
pipe_lock
);
list_add_tail
(
&
compl
->
list
,
&
compl
->
pipe_info
->
compl_free
);
compl
->
pipe_info
->
num_sends_allowed
+=
send_done
;
spin_unlock_bh
(
&
compl
->
pipe_info
->
pipe_lock
);
}
...
...
drivers/net/wireless/ath/ath10k/pci.h
View file @
a72e25f7
...
...
@@ -178,9 +178,6 @@ struct ath10k_pci_pipe {
/* List of free CE completion slots */
struct
list_head
compl_free
;
/* Limit the number of outstanding send requests. */
int
num_sends_allowed
;
struct
ath10k_pci
*
ar_pci
;
struct
tasklet_struct
intr
;
};
...
...
drivers/net/wireless/ath/ath10k/wmi.c
View file @
a72e25f7
This diff is collapsed.
Click to expand it.
drivers/net/wireless/ath/ath10k/wmi.h
View file @
a72e25f7
This diff is collapsed.
Click to expand it.
drivers/net/wireless/ath/ath6kl/htc.h
View file @
a72e25f7
...
...
@@ -60,7 +60,7 @@
/* disable credit flow control on a specific service */
#define HTC_CONN_FLGS_DISABLE_CRED_FLOW_CTRL (1 << 3)
#define HTC_CONN_FLGS_SET_RECV_ALLOC_SHIFT 8
#define HTC_CONN_FLGS_SET_RECV_ALLOC_MASK 0xFF00
#define HTC_CONN_FLGS_SET_RECV_ALLOC_MASK 0xFF00
U
/* connect response status codes */
#define HTC_SERVICE_SUCCESS 0
...
...
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