diff options
author | Marek Puzyniak <marek.puzyniak@tieto.com> | 2015-03-30 02:51:52 -0400 |
---|---|---|
committer | Kalle Valo <kvalo@qca.qualcomm.com> | 2015-03-30 08:00:33 -0400 |
commit | 7390ed3467fc2261d0f524f928e17baf0ff5c046 (patch) | |
tree | 87d5bc54255bafe4951b4c54c900315ad3e3e9f1 | |
parent | d740d8fd243933dfd399c9f8d78063ca020eb8bf (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.c | 17 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi-ops.h | 8 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi-tlv.c | 5 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi.c | 3 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/wmi.h | 6 |
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 | ||
432 | static int ath10k_peer_create(struct ath10k *ar, u32 vdev_id, const u8 *addr) | 432 | static 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 | ||
662 | static inline int | 663 | static inline int |
663 | ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id, | 664 | ath10k_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 | ||
1893 | static struct sk_buff * | 1893 | static struct sk_buff * |
1894 | ath10k_wmi_tlv_op_gen_peer_create(struct ath10k *ar, u32 vdev_id, | 1894 | ath10k_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 | ||
4523 | static struct sk_buff * | 4523 | static struct sk_buff * |
4524 | ath10k_wmi_op_gen_peer_create(struct ath10k *ar, u32 vdev_id, | 4524 | ath10k_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 | ||
4336 | enum wmi_peer_type { | ||
4337 | WMI_PEER_TYPE_DEFAULT = 0, | ||
4338 | WMI_PEER_TYPE_BSS = 1, | ||
4339 | WMI_PEER_TYPE_TDLS = 2, | ||
4340 | }; | ||
4341 | |||
4336 | struct wmi_peer_delete_cmd { | 4342 | struct 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; |