aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath10k/wmi.c
diff options
context:
space:
mode:
authorMarek Puzyniak <marek.puzyniak@tieto.com>2014-03-21 11:46:57 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2014-03-24 04:25:46 -0400
commit821af6ae26bcd024d73a1aa7f47e45c0a3814dc1 (patch)
tree2459b8a8a96426d639a1316ae214fb8be0890e42 /drivers/net/wireless/ath/ath10k/wmi.c
parent8c65699274a695df941407ccb91c633819039193 (diff)
ath10k: update regulatory domain settings for 10.x firmware
Regulatory domain settings for firmware 10.x has more options than main firmware, so handle regulatory domain setup separately for both supported firmwares. Fill in additional dfs domain parameter according to current regulatory. This patch does not solve any known bug. Not handled parameter for firmware 10.x was found during code review. Signed-off-by: Marek Puzyniak <marek.puzyniak@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/wmi.c')
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.c45
1 files changed, 43 insertions, 2 deletions
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index d61bdf6db458..d4b48ef0ec2e 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -2393,8 +2393,9 @@ int ath10k_wmi_connect_htc_service(struct ath10k *ar)
2393 return 0; 2393 return 0;
2394} 2394}
2395 2395
2396int ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, 2396static int ath10k_wmi_main_pdev_set_regdomain(struct ath10k *ar, u16 rd,
2397 u16 rd5g, u16 ctl2g, u16 ctl5g) 2397 u16 rd2g, u16 rd5g, u16 ctl2g,
2398 u16 ctl5g)
2398{ 2399{
2399 struct wmi_pdev_set_regdomain_cmd *cmd; 2400 struct wmi_pdev_set_regdomain_cmd *cmd;
2400 struct sk_buff *skb; 2401 struct sk_buff *skb;
@@ -2418,6 +2419,46 @@ int ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g,
2418 ar->wmi.cmd->pdev_set_regdomain_cmdid); 2419 ar->wmi.cmd->pdev_set_regdomain_cmdid);
2419} 2420}
2420 2421
2422static int ath10k_wmi_10x_pdev_set_regdomain(struct ath10k *ar, u16 rd,
2423 u16 rd2g, u16 rd5g,
2424 u16 ctl2g, u16 ctl5g,
2425 enum wmi_dfs_region dfs_reg)
2426{
2427 struct wmi_pdev_set_regdomain_cmd_10x *cmd;
2428 struct sk_buff *skb;
2429
2430 skb = ath10k_wmi_alloc_skb(sizeof(*cmd));
2431 if (!skb)
2432 return -ENOMEM;
2433
2434 cmd = (struct wmi_pdev_set_regdomain_cmd_10x *)skb->data;
2435 cmd->reg_domain = __cpu_to_le32(rd);
2436 cmd->reg_domain_2G = __cpu_to_le32(rd2g);
2437 cmd->reg_domain_5G = __cpu_to_le32(rd5g);
2438 cmd->conformance_test_limit_2G = __cpu_to_le32(ctl2g);
2439 cmd->conformance_test_limit_5G = __cpu_to_le32(ctl5g);
2440 cmd->dfs_domain = __cpu_to_le32(dfs_reg);
2441
2442 ath10k_dbg(ATH10K_DBG_WMI,
2443 "wmi pdev regdomain rd %x rd2g %x rd5g %x ctl2g %x ctl5g %x dfs_region %x\n",
2444 rd, rd2g, rd5g, ctl2g, ctl5g, dfs_reg);
2445
2446 return ath10k_wmi_cmd_send(ar, skb,
2447 ar->wmi.cmd->pdev_set_regdomain_cmdid);
2448}
2449
2450int ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g,
2451 u16 rd5g, u16 ctl2g, u16 ctl5g,
2452 enum wmi_dfs_region dfs_reg)
2453{
2454 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features))
2455 return ath10k_wmi_10x_pdev_set_regdomain(ar, rd, rd2g, rd5g,
2456 ctl2g, ctl5g, dfs_reg);
2457 else
2458 return ath10k_wmi_main_pdev_set_regdomain(ar, rd, rd2g, rd5g,
2459 ctl2g, ctl5g);
2460}
2461
2421int ath10k_wmi_pdev_set_channel(struct ath10k *ar, 2462int ath10k_wmi_pdev_set_channel(struct ath10k *ar,
2422 const struct wmi_channel_arg *arg) 2463 const struct wmi_channel_arg *arg)
2423{ 2464{