ath10k: deduplicate host mem chunk code
Simplify the code by deduplicating structure definitions and code. Signed-off-by: Michal Kazior <michal.kazior@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
2d66721c7b
commit
cf9fca8f89
2 changed files with 34 additions and 99 deletions
|
@ -2963,13 +2963,34 @@ int ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value)
|
||||||
return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_set_param_cmdid);
|
return ath10k_wmi_cmd_send(ar, skb, ar->wmi.cmd->pdev_set_param_cmdid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ath10k_wmi_put_host_mem_chunks(struct ath10k *ar,
|
||||||
|
struct wmi_host_mem_chunks *chunks)
|
||||||
|
{
|
||||||
|
struct host_memory_chunk *chunk;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
chunks->count = __cpu_to_le32(ar->wmi.num_mem_chunks);
|
||||||
|
|
||||||
|
for (i = 0; i < ar->wmi.num_mem_chunks; i++) {
|
||||||
|
chunk = &chunks->items[i];
|
||||||
|
chunk->ptr = __cpu_to_le32(ar->wmi.mem_chunks[i].paddr);
|
||||||
|
chunk->size = __cpu_to_le32(ar->wmi.mem_chunks[i].len);
|
||||||
|
chunk->req_id = __cpu_to_le32(ar->wmi.mem_chunks[i].req_id);
|
||||||
|
|
||||||
|
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
||||||
|
"wmi chunk %d len %d requested, addr 0x%llx\n",
|
||||||
|
i,
|
||||||
|
ar->wmi.mem_chunks[i].len,
|
||||||
|
(unsigned long long)ar->wmi.mem_chunks[i].paddr);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static int ath10k_wmi_main_cmd_init(struct ath10k *ar)
|
static int ath10k_wmi_main_cmd_init(struct ath10k *ar)
|
||||||
{
|
{
|
||||||
struct wmi_init_cmd *cmd;
|
struct wmi_init_cmd *cmd;
|
||||||
struct sk_buff *buf;
|
struct sk_buff *buf;
|
||||||
struct wmi_resource_config config = {};
|
struct wmi_resource_config config = {};
|
||||||
u32 len, val;
|
u32 len, val;
|
||||||
int i;
|
|
||||||
|
|
||||||
config.num_vdevs = __cpu_to_le32(TARGET_NUM_VDEVS);
|
config.num_vdevs = __cpu_to_le32(TARGET_NUM_VDEVS);
|
||||||
config.num_peers = __cpu_to_le32(TARGET_NUM_PEERS + TARGET_NUM_VDEVS);
|
config.num_peers = __cpu_to_le32(TARGET_NUM_PEERS + TARGET_NUM_VDEVS);
|
||||||
|
@ -3031,32 +3052,8 @@ static int ath10k_wmi_main_cmd_init(struct ath10k *ar)
|
||||||
|
|
||||||
cmd = (struct wmi_init_cmd *)buf->data;
|
cmd = (struct wmi_init_cmd *)buf->data;
|
||||||
|
|
||||||
if (ar->wmi.num_mem_chunks == 0) {
|
|
||||||
cmd->num_host_mem_chunks = 0;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi sending %d memory chunks info.\n",
|
|
||||||
ar->wmi.num_mem_chunks);
|
|
||||||
|
|
||||||
cmd->num_host_mem_chunks = __cpu_to_le32(ar->wmi.num_mem_chunks);
|
|
||||||
|
|
||||||
for (i = 0; i < ar->wmi.num_mem_chunks; i++) {
|
|
||||||
cmd->host_mem_chunks[i].ptr =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].paddr);
|
|
||||||
cmd->host_mem_chunks[i].size =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].len);
|
|
||||||
cmd->host_mem_chunks[i].req_id =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].req_id);
|
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
|
||||||
"wmi chunk %d len %d requested, addr 0x%llx\n",
|
|
||||||
i,
|
|
||||||
ar->wmi.mem_chunks[i].len,
|
|
||||||
(unsigned long long)ar->wmi.mem_chunks[i].paddr);
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
memcpy(&cmd->resource_config, &config, sizeof(config));
|
memcpy(&cmd->resource_config, &config, sizeof(config));
|
||||||
|
ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks);
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init\n");
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init\n");
|
||||||
return ath10k_wmi_cmd_send(ar, buf, ar->wmi.cmd->init_cmdid);
|
return ath10k_wmi_cmd_send(ar, buf, ar->wmi.cmd->init_cmdid);
|
||||||
|
@ -3068,7 +3065,6 @@ static int ath10k_wmi_10x_cmd_init(struct ath10k *ar)
|
||||||
struct sk_buff *buf;
|
struct sk_buff *buf;
|
||||||
struct wmi_resource_config_10x config = {};
|
struct wmi_resource_config_10x config = {};
|
||||||
u32 len, val;
|
u32 len, val;
|
||||||
int i;
|
|
||||||
|
|
||||||
config.num_vdevs = __cpu_to_le32(TARGET_10X_NUM_VDEVS);
|
config.num_vdevs = __cpu_to_le32(TARGET_10X_NUM_VDEVS);
|
||||||
config.num_peers = __cpu_to_le32(TARGET_10X_NUM_PEERS);
|
config.num_peers = __cpu_to_le32(TARGET_10X_NUM_PEERS);
|
||||||
|
@ -3122,32 +3118,8 @@ static int ath10k_wmi_10x_cmd_init(struct ath10k *ar)
|
||||||
|
|
||||||
cmd = (struct wmi_init_cmd_10x *)buf->data;
|
cmd = (struct wmi_init_cmd_10x *)buf->data;
|
||||||
|
|
||||||
if (ar->wmi.num_mem_chunks == 0) {
|
|
||||||
cmd->num_host_mem_chunks = 0;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi sending %d memory chunks info.\n",
|
|
||||||
ar->wmi.num_mem_chunks);
|
|
||||||
|
|
||||||
cmd->num_host_mem_chunks = __cpu_to_le32(ar->wmi.num_mem_chunks);
|
|
||||||
|
|
||||||
for (i = 0; i < ar->wmi.num_mem_chunks; i++) {
|
|
||||||
cmd->host_mem_chunks[i].ptr =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].paddr);
|
|
||||||
cmd->host_mem_chunks[i].size =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].len);
|
|
||||||
cmd->host_mem_chunks[i].req_id =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].req_id);
|
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
|
||||||
"wmi chunk %d len %d requested, addr 0x%llx\n",
|
|
||||||
i,
|
|
||||||
ar->wmi.mem_chunks[i].len,
|
|
||||||
(unsigned long long)ar->wmi.mem_chunks[i].paddr);
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
memcpy(&cmd->resource_config, &config, sizeof(config));
|
memcpy(&cmd->resource_config, &config, sizeof(config));
|
||||||
|
ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks);
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10x\n");
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10x\n");
|
||||||
return ath10k_wmi_cmd_send(ar, buf, ar->wmi.cmd->init_cmdid);
|
return ath10k_wmi_cmd_send(ar, buf, ar->wmi.cmd->init_cmdid);
|
||||||
|
@ -3159,7 +3131,6 @@ static int ath10k_wmi_10_2_cmd_init(struct ath10k *ar)
|
||||||
struct sk_buff *buf;
|
struct sk_buff *buf;
|
||||||
struct wmi_resource_config_10x config = {};
|
struct wmi_resource_config_10x config = {};
|
||||||
u32 len, val;
|
u32 len, val;
|
||||||
int i;
|
|
||||||
|
|
||||||
config.num_vdevs = __cpu_to_le32(TARGET_10X_NUM_VDEVS);
|
config.num_vdevs = __cpu_to_le32(TARGET_10X_NUM_VDEVS);
|
||||||
config.num_peers = __cpu_to_le32(TARGET_10X_NUM_PEERS);
|
config.num_peers = __cpu_to_le32(TARGET_10X_NUM_PEERS);
|
||||||
|
@ -3213,32 +3184,8 @@ static int ath10k_wmi_10_2_cmd_init(struct ath10k *ar)
|
||||||
|
|
||||||
cmd = (struct wmi_init_cmd_10_2 *)buf->data;
|
cmd = (struct wmi_init_cmd_10_2 *)buf->data;
|
||||||
|
|
||||||
if (ar->wmi.num_mem_chunks == 0) {
|
|
||||||
cmd->num_host_mem_chunks = 0;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi sending %d memory chunks info.\n",
|
|
||||||
ar->wmi.num_mem_chunks);
|
|
||||||
|
|
||||||
cmd->num_host_mem_chunks = __cpu_to_le32(ar->wmi.num_mem_chunks);
|
|
||||||
|
|
||||||
for (i = 0; i < ar->wmi.num_mem_chunks; i++) {
|
|
||||||
cmd->host_mem_chunks[i].ptr =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].paddr);
|
|
||||||
cmd->host_mem_chunks[i].size =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].len);
|
|
||||||
cmd->host_mem_chunks[i].req_id =
|
|
||||||
__cpu_to_le32(ar->wmi.mem_chunks[i].req_id);
|
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI,
|
|
||||||
"wmi chunk %d len %d requested, addr 0x%llx\n",
|
|
||||||
i,
|
|
||||||
ar->wmi.mem_chunks[i].len,
|
|
||||||
(unsigned long long)ar->wmi.mem_chunks[i].paddr);
|
|
||||||
}
|
|
||||||
out:
|
|
||||||
memcpy(&cmd->resource_config.common, &config, sizeof(config));
|
memcpy(&cmd->resource_config.common, &config, sizeof(config));
|
||||||
|
ath10k_wmi_put_host_mem_chunks(ar, &cmd->mem_chunks);
|
||||||
|
|
||||||
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10.2\n");
|
ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi init 10.2\n");
|
||||||
return ath10k_wmi_cmd_send(ar, buf, ar->wmi.cmd->init_cmdid);
|
return ath10k_wmi_cmd_send(ar, buf, ar->wmi.cmd->init_cmdid);
|
||||||
|
|
|
@ -1883,38 +1883,26 @@ struct host_memory_chunk {
|
||||||
__le32 size;
|
__le32 size;
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
|
struct wmi_host_mem_chunks {
|
||||||
|
__le32 count;
|
||||||
|
/* some fw revisions require at least 1 chunk regardless of count */
|
||||||
|
struct host_memory_chunk items[1];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
struct wmi_init_cmd {
|
struct wmi_init_cmd {
|
||||||
struct wmi_resource_config resource_config;
|
struct wmi_resource_config resource_config;
|
||||||
__le32 num_host_mem_chunks;
|
struct wmi_host_mem_chunks mem_chunks;
|
||||||
|
|
||||||
/*
|
|
||||||
* variable number of host memory chunks.
|
|
||||||
* This should be the last element in the structure
|
|
||||||
*/
|
|
||||||
struct host_memory_chunk host_mem_chunks[1];
|
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
/* _10x stucture is from 10.X FW API */
|
/* _10x stucture is from 10.X FW API */
|
||||||
struct wmi_init_cmd_10x {
|
struct wmi_init_cmd_10x {
|
||||||
struct wmi_resource_config_10x resource_config;
|
struct wmi_resource_config_10x resource_config;
|
||||||
__le32 num_host_mem_chunks;
|
struct wmi_host_mem_chunks mem_chunks;
|
||||||
|
|
||||||
/*
|
|
||||||
* variable number of host memory chunks.
|
|
||||||
* This should be the last element in the structure
|
|
||||||
*/
|
|
||||||
struct host_memory_chunk host_mem_chunks[1];
|
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct wmi_init_cmd_10_2 {
|
struct wmi_init_cmd_10_2 {
|
||||||
struct wmi_resource_config_10_2 resource_config;
|
struct wmi_resource_config_10_2 resource_config;
|
||||||
__le32 num_host_mem_chunks;
|
struct wmi_host_mem_chunks mem_chunks;
|
||||||
|
|
||||||
/*
|
|
||||||
* variable number of host memory chunks.
|
|
||||||
* This should be the last element in the structure
|
|
||||||
*/
|
|
||||||
struct host_memory_chunk host_mem_chunks[1];
|
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct wmi_chan_list_entry {
|
struct wmi_chan_list_entry {
|
||||||
|
|
Loading…
Add table
Reference in a new issue