aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Puzyniak <marek.puzyniak@tieto.com>2015-03-30 02:51:52 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2015-03-30 08:00:33 -0400
commit7390ed3467fc2261d0f524f928e17baf0ff5c046 (patch)
tree87d5bc54255bafe4951b4c54c900315ad3e3e9f1
parentd740d8fd243933dfd399c9f8d78063ca020eb8bf (diff)
ath10k: make peer type configurable
Peer type was hardcoded to default value. For future implementation it is required to make is configurable. Signed-off-by: Marek Puzyniak <marek.puzyniak@tieto.com> Signed-off-by: Marek Kwaczynski <marek.kwaczynski@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c17
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-ops.h8
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi-tlv.c5
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.c3
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.h6
5 files changed, 27 insertions, 12 deletions
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index 7a21aee204f4..e8f95949d223 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -429,7 +429,8 @@ static u8 ath10k_parse_mpdudensity(u8 mpdudensity)
429 } 429 }
430} 430}
431 431
432static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr) 432static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr,
433 enum wmi_peer_type peer_type)
433{ 434{
434 int ret; 435 int ret;
435 436
@@ -438,7 +439,7 @@ static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr)
438 if (ar->num_peers >= ar->max_num_peers) 439 if (ar->num_peers >= ar->max_num_peers)
439 return -ENOBUFS; 440 return -ENOBUFS;
440 441
441 ret = ath10k_wmi_peer_create(ar, vdev_id, addr); 442 ret = ath10k_wmi_peer_create(ar, vdev_id, addr, peer_type);
442 if (ret) { 443 if (ret) {
443 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n", 444 ath10k_warn(ar, "failed to create wmi peer %pM on vdev %i: %i\n",
444 addr, vdev_id, ret); 445 addr, vdev_id, ret);
@@ -1291,7 +1292,8 @@ static void ath10k_control_ibss(struct ath10k_vif *arvif,
1291 return; 1292 return;
1292 } 1293 }
1293 1294
1294 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer); 1295 ret = ath10k_peer_create(arvif->ar, arvif->vdev_id, self_peer,
1296 WMI_PEER_TYPE_DEFAULT);
1295 if (ret) { 1297 if (ret) {
1296 ath10k_warn(ar, "failed to create IBSS self peer %pM for vdev %d: %d\n", 1298 ath10k_warn(ar, "failed to create IBSS self peer %pM for vdev %d: %d\n",
1297 self_peer, arvif->vdev_id, ret); 1299 self_peer, arvif->vdev_id, ret);
@@ -2756,7 +2758,8 @@ void ath10k_offchan_tx_work(struct work_struct *work)
2756 peer_addr, vdev_id); 2758 peer_addr, vdev_id);
2757 2759
2758 if (!peer) { 2760 if (!peer) {
2759 ret = ath10k_peer_create(ar, vdev_id, peer_addr); 2761 ret = ath10k_peer_create(ar, vdev_id, peer_addr,
2762 WMI_PEER_TYPE_DEFAULT);
2760 if (ret) 2763 if (ret)
2761 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n", 2764 ath10k_warn(ar, "failed to create peer %pM on vdev %d: %d\n",
2762 peer_addr, vdev_id, ret); 2765 peer_addr, vdev_id, ret);
@@ -3675,7 +3678,8 @@ static int ath10k_add_interface(struct ieee80211_hw *hw,
3675 } 3678 }
3676 3679
3677 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { 3680 if (arvif->vdev_type == WMI_VDEV_TYPE_AP) {
3678 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr); 3681 ret = ath10k_peer_create(ar, arvif->vdev_id, vif->addr,
3682 WMI_PEER_TYPE_DEFAULT);
3679 if (ret) { 3683 if (ret) {
3680 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n", 3684 ath10k_warn(ar, "failed to create vdev %i peer for AP: %d\n",
3681 arvif->vdev_id, ret); 3685 arvif->vdev_id, ret);
@@ -4471,7 +4475,8 @@ static int ath10k_sta_state(struct ieee80211_hw *hw,
4471 goto exit; 4475 goto exit;
4472 } 4476 }
4473 4477
4474 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr); 4478 ret = ath10k_peer_create(ar, arvif->vdev_id, sta->addr,
4479 WMI_PEER_TYPE_DEFAULT);
4475 if (ret) { 4480 if (ret) {
4476 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n", 4481 ath10k_warn(ar, "failed to add peer %pM for vdev %d when adding a new sta: %i\n",
4477 sta->addr, arvif->vdev_id, ret); 4482 sta->addr, arvif->vdev_id, ret);
diff --git a/drivers/net/wireless/ath/ath10k/wmi-ops.h b/drivers/net/wireless/ath/ath10k/wmi-ops.h
index 684b632fe75c..9a40e9922039 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-ops.h
+++ b/drivers/net/wireless/ath/ath10k/wmi-ops.h
@@ -85,7 +85,8 @@ struct wmi_ops {
85 struct sk_buff *(*gen_vdev_wmm_conf)(struct ath10k *ar, u32 vdev_id, 85 struct sk_buff *(*gen_vdev_wmm_conf)(struct ath10k *ar, u32 vdev_id,
86 const struct wmi_wmm_params_all_arg *arg); 86 const struct wmi_wmm_params_all_arg *arg);
87 struct sk_buff *(*gen_peer_create)(struct ath10k *ar, u32 vdev_id, 87 struct sk_buff *(*gen_peer_create)(struct ath10k *ar, u32 vdev_id,
88 const u8 peer_addr[ETH_ALEN]); 88 const u8 peer_addr[ETH_ALEN],
89 enum wmi_peer_type peer_type);
89 struct sk_buff *(*gen_peer_delete)(struct ath10k *ar, u32 vdev_id, 90 struct sk_buff *(*gen_peer_delete)(struct ath10k *ar, u32 vdev_id,
90 const u8 peer_addr[ETH_ALEN]); 91 const u8 peer_addr[ETH_ALEN]);
91 struct sk_buff *(*gen_peer_flush)(struct ath10k *ar, u32 vdev_id, 92 struct sk_buff *(*gen_peer_flush)(struct ath10k *ar, u32 vdev_id,
@@ -661,14 +662,15 @@ ath10k_wmi_vdev_wmm_conf(struct ath10k *ar, u32 vdev_id,
661 662
662static inline int 663static inline int
663ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id, 664ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id,
664 const u8 peer_addr[ETH_ALEN]) 665 const u8 peer_addr[ETH_ALEN],
666 enum wmi_peer_type peer_type)
665{ 667{
666 struct sk_buff *skb; 668 struct sk_buff *skb;
667 669
668 if (!ar->wmi.ops->gen_peer_create) 670 if (!ar->wmi.ops->gen_peer_create)
669 return -EOPNOTSUPP; 671 return -EOPNOTSUPP;
670 672
671 skb = ar->wmi.ops->gen_peer_create(ar, vdev_id, peer_addr); 673 skb = ar->wmi.ops->gen_peer_create(ar, vdev_id, peer_addr, peer_type);
672 if (IS_ERR(skb)) 674 if (IS_ERR(skb))
673 return PTR_ERR(skb); 675 return PTR_ERR(skb);
674 676
diff --git a/drivers/net/wireless/ath/ath10k/wmi-tlv.c b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
index afb822caca94..02d59cce3b6d 100644
--- a/drivers/net/wireless/ath/ath10k/wmi-tlv.c
+++ b/drivers/net/wireless/ath/ath10k/wmi-tlv.c
@@ -1892,7 +1892,8 @@ ath10k_wmi_tlv_op_gen_sta_keepalive(struct ath10k *ar,
1892 1892
1893static struct sk_buff * 1893static struct sk_buff *
1894ath10k_wmi_tlv_op_gen_peer_create(struct ath10k *ar, u32 vdev_id, 1894ath10k_wmi_tlv_op_gen_peer_create(struct ath10k *ar, u32 vdev_id,
1895 const u8 peer_addr[ETH_ALEN]) 1895 const u8 peer_addr[ETH_ALEN],
1896 enum wmi_peer_type peer_type)
1896{ 1897{
1897 struct wmi_tlv_peer_create_cmd *cmd; 1898 struct wmi_tlv_peer_create_cmd *cmd;
1898 struct wmi_tlv *tlv; 1899 struct wmi_tlv *tlv;
@@ -1907,7 +1908,7 @@ ath10k_wmi_tlv_op_gen_peer_create(struct ath10k *ar, u32 vdev_id,
1907 tlv->len = __cpu_to_le16(sizeof(*cmd)); 1908 tlv->len = __cpu_to_le16(sizeof(*cmd));
1908 cmd = (void *)tlv->value; 1909 cmd = (void *)tlv->value;
1909 cmd->vdev_id = __cpu_to_le32(vdev_id); 1910 cmd->vdev_id = __cpu_to_le32(vdev_id);
1910 cmd->peer_type = __cpu_to_le32(WMI_TLV_PEER_TYPE_DEFAULT); /* FIXME */ 1911 cmd->peer_type = __cpu_to_le32(peer_type);
1911 ether_addr_copy(cmd->peer_addr.addr, peer_addr); 1912 ether_addr_copy(cmd->peer_addr.addr, peer_addr);
1912 1913
1913 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv peer create\n"); 1914 ath10k_dbg(ar, ATH10K_DBG_WMI, "wmi tlv peer create\n");
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index a5ed54959a10..ae6a038f04ab 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -4522,7 +4522,8 @@ ath10k_wmi_op_gen_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id,
4522 4522
4523static struct sk_buff * 4523static struct sk_buff *
4524ath10k_wmi_op_gen_peer_create(struct ath10k *ar, u32 vdev_id, 4524ath10k_wmi_op_gen_peer_create(struct ath10k *ar, u32 vdev_id,
4525 const u8 peer_addr[ETH_ALEN]) 4525 const u8 peer_addr[ETH_ALEN],
4526 enum wmi_peer_type peer_type)
4526{ 4527{
4527 struct wmi_peer_create_cmd *cmd; 4528 struct wmi_peer_create_cmd *cmd;
4528 struct sk_buff *skb; 4529 struct sk_buff *skb;
diff --git a/drivers/net/wireless/ath/ath10k/wmi.h b/drivers/net/wireless/ath/ath10k/wmi.h
index f95b6982af92..72ab3dad8ee1 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.h
+++ b/drivers/net/wireless/ath/ath10k/wmi.h
@@ -4333,6 +4333,12 @@ struct wmi_peer_create_cmd {
4333 struct wmi_mac_addr peer_macaddr; 4333 struct wmi_mac_addr peer_macaddr;
4334} __packed; 4334} __packed;
4335 4335
4336enum wmi_peer_type {
4337 WMI_PEER_TYPE_DEFAULT = 0,
4338 WMI_PEER_TYPE_BSS = 1,
4339 WMI_PEER_TYPE_TDLS = 2,
4340};
4341
4336struct wmi_peer_delete_cmd { 4342struct wmi_peer_delete_cmd {
4337 __le32 vdev_id; 4343 __le32 vdev_id;
4338 struct wmi_mac_addr peer_macaddr; 4344 struct wmi_mac_addr peer_macaddr;