Commit 5c01aa3d authored by Michal Kazior's avatar Michal Kazior Committed by Kalle Valo

ath10k: deduplicate wmi service ready logic

The logic responsible for processing the event is
no different across different firmware binaries.
The difference that needs to be dealt with is the
ABI of data structures.

The intermediate structure uses __le32 to avoid
extra memory allocations to byteswap
variable-length substructures (i.e. host mem
chunks).
Signed-off-by: default avatarMichal Kazior <michal.kazior@tieto.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent b79b9baa
...@@ -96,8 +96,6 @@ struct ath10k_bmi { ...@@ -96,8 +96,6 @@ struct ath10k_bmi {
bool done_sent; bool done_sent;
}; };
#define ATH10K_MAX_MEM_REQS 16
struct ath10k_mem_chunk { struct ath10k_mem_chunk {
void *vaddr; void *vaddr;
dma_addr_t paddr; dma_addr_t paddr;
...@@ -115,7 +113,7 @@ struct ath10k_wmi { ...@@ -115,7 +113,7 @@ struct ath10k_wmi {
struct wmi_pdev_param_map *pdev_param; struct wmi_pdev_param_map *pdev_param;
u32 num_mem_chunks; u32 num_mem_chunks;
struct ath10k_mem_chunk mem_chunks[ATH10K_MAX_MEM_REQS]; struct ath10k_mem_chunk mem_chunks[WMI_MAX_MEM_REQS];
}; };
struct ath10k_peer_stat { struct ath10k_peer_stat {
......
...@@ -182,7 +182,7 @@ EXPORT_SYMBOL(ath10k_warn); ...@@ -182,7 +182,7 @@ EXPORT_SYMBOL(ath10k_warn);
#ifdef CONFIG_ATH10K_DEBUGFS #ifdef CONFIG_ATH10K_DEBUGFS
void ath10k_debug_read_service_map(struct ath10k *ar, void ath10k_debug_read_service_map(struct ath10k *ar,
void *service_map, const void *service_map,
size_t map_size) size_t map_size)
{ {
memcpy(ar->debug.wmi_service_bitmap, service_map, map_size); memcpy(ar->debug.wmi_service_bitmap, service_map, map_size);
......
...@@ -53,7 +53,7 @@ void ath10k_debug_destroy(struct ath10k *ar); ...@@ -53,7 +53,7 @@ void ath10k_debug_destroy(struct ath10k *ar);
int ath10k_debug_register(struct ath10k *ar); int ath10k_debug_register(struct ath10k *ar);
void ath10k_debug_unregister(struct ath10k *ar); void ath10k_debug_unregister(struct ath10k *ar);
void ath10k_debug_read_service_map(struct ath10k *ar, void ath10k_debug_read_service_map(struct ath10k *ar,
void *service_map, const void *service_map,
size_t map_size); size_t map_size);
void ath10k_debug_read_target_stats(struct ath10k *ar, void ath10k_debug_read_target_stats(struct ath10k *ar,
struct wmi_stats_event *ev); struct wmi_stats_event *ev);
...@@ -93,7 +93,7 @@ static inline void ath10k_debug_unregister(struct ath10k *ar) ...@@ -93,7 +93,7 @@ static inline void ath10k_debug_unregister(struct ath10k *ar)
} }
static inline void ath10k_debug_read_service_map(struct ath10k *ar, static inline void ath10k_debug_read_service_map(struct ath10k *ar,
void *service_map, const void *service_map,
size_t map_size) size_t map_size)
{ {
} }
......
This diff is collapsed.
...@@ -1428,11 +1428,11 @@ struct wmi_service_ready_event { ...@@ -1428,11 +1428,11 @@ struct wmi_service_ready_event {
* where FW can access this memory directly (or) by DMA. * where FW can access this memory directly (or) by DMA.
*/ */
__le32 num_mem_reqs; __le32 num_mem_reqs;
struct wlan_host_mem_req mem_reqs[1]; struct wlan_host_mem_req mem_reqs[0];
} __packed; } __packed;
/* This is the definition from 10.X firmware branch */ /* This is the definition from 10.X firmware branch */
struct wmi_service_ready_event_10x { struct wmi_10x_service_ready_event {
__le32 sw_version; __le32 sw_version;
__le32 abi_version; __le32 abi_version;
...@@ -1467,7 +1467,7 @@ struct wmi_service_ready_event_10x { ...@@ -1467,7 +1467,7 @@ struct wmi_service_ready_event_10x {
*/ */
__le32 num_mem_reqs; __le32 num_mem_reqs;
struct wlan_host_mem_req mem_reqs[1]; struct wlan_host_mem_req mem_reqs[0];
} __packed; } __packed;
#define WMI_SERVICE_READY_TIMEOUT_HZ (5*HZ) #define WMI_SERVICE_READY_TIMEOUT_HZ (5*HZ)
...@@ -4702,6 +4702,23 @@ struct wmi_dbglog_cfg_cmd { ...@@ -4702,6 +4702,23 @@ struct wmi_dbglog_cfg_cmd {
/* By default disable power save for IBSS */ /* By default disable power save for IBSS */
#define ATH10K_DEFAULT_ATIM 0 #define ATH10K_DEFAULT_ATIM 0
#define WMI_MAX_MEM_REQS 16
struct wmi_svc_rdy_ev_arg {
__le32 min_tx_power;
__le32 max_tx_power;
__le32 ht_cap;
__le32 vht_cap;
__le32 sw_ver0;
__le32 sw_ver1;
__le32 phy_capab;
__le32 num_rf_chains;
__le32 eeprom_rd;
__le32 num_mem_reqs;
const __le32 *service_map;
const struct wlan_host_mem_req *mem_reqs[WMI_MAX_MEM_REQS];
};
struct ath10k; struct ath10k;
struct ath10k_vif; struct ath10k_vif;
......
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