wmi.c (240d279940ef496e9456db2287b7989f6521e2e2) wmi.c (6765d0aa5ff5b92098f5e571f26904106eae6ff3)
1/*
2 * Copyright (c) 2004-2011 Atheros Communications Inc.
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES

--- 67 unchanged lines hidden (view full) ---

76 wmi->ep_id = ep_id;
77}
78
79enum htc_endpoint_id ath6kl_wmi_get_control_ep(struct wmi *wmi)
80{
81 return wmi->ep_id;
82}
83
1/*
2 * Copyright (c) 2004-2011 Atheros Communications Inc.
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES

--- 67 unchanged lines hidden (view full) ---

76 wmi->ep_id = ep_id;
77}
78
79enum htc_endpoint_id ath6kl_wmi_get_control_ep(struct wmi *wmi)
80{
81 return wmi->ep_id;
82}
83
84static struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx)
84struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx)
85{
86 if (WARN_ON(if_idx > (MAX_NUM_VIF - 1)))
87 return NULL;
88
89 return ar->vif;
90}
91
92/* Performs DIX to 802.3 encapsulation for transmit packets.

--- 72 unchanged lines hidden (view full) ---

165 }
166
167 return 0;
168}
169
170int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
171 u8 msg_type, bool more_data,
172 enum wmi_data_hdr_data_type data_type,
85{
86 if (WARN_ON(if_idx > (MAX_NUM_VIF - 1)))
87 return NULL;
88
89 return ar->vif;
90}
91
92/* Performs DIX to 802.3 encapsulation for transmit packets.

--- 72 unchanged lines hidden (view full) ---

165 }
166
167 return 0;
168}
169
170int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
171 u8 msg_type, bool more_data,
172 enum wmi_data_hdr_data_type data_type,
173 u8 meta_ver, void *tx_meta_info)
173 u8 meta_ver, void *tx_meta_info, u8 if_idx)
174{
175 struct wmi_data_hdr *data_hdr;
176 int ret;
177
174{
175 struct wmi_data_hdr *data_hdr;
176 int ret;
177
178 if (WARN_ON(skb == NULL))
178 if (WARN_ON(skb == NULL || (if_idx > MAX_NUM_VIF - 1)))
179 return -EINVAL;
180
181 if (tx_meta_info) {
182 ret = ath6kl_wmi_meta_add(wmi, skb, &meta_ver, tx_meta_info);
183 if (ret)
184 return ret;
185 }
186

--- 5 unchanged lines hidden (view full) ---

192 data_hdr->info = msg_type << WMI_DATA_HDR_MSG_TYPE_SHIFT;
193 data_hdr->info |= data_type << WMI_DATA_HDR_DATA_TYPE_SHIFT;
194
195 if (more_data)
196 data_hdr->info |=
197 WMI_DATA_HDR_MORE_MASK << WMI_DATA_HDR_MORE_SHIFT;
198
199 data_hdr->info2 = cpu_to_le16(meta_ver << WMI_DATA_HDR_META_SHIFT);
179 return -EINVAL;
180
181 if (tx_meta_info) {
182 ret = ath6kl_wmi_meta_add(wmi, skb, &meta_ver, tx_meta_info);
183 if (ret)
184 return ret;
185 }
186

--- 5 unchanged lines hidden (view full) ---

192 data_hdr->info = msg_type << WMI_DATA_HDR_MSG_TYPE_SHIFT;
193 data_hdr->info |= data_type << WMI_DATA_HDR_DATA_TYPE_SHIFT;
194
195 if (more_data)
196 data_hdr->info |=
197 WMI_DATA_HDR_MORE_MASK << WMI_DATA_HDR_MORE_SHIFT;
198
199 data_hdr->info2 = cpu_to_le16(meta_ver << WMI_DATA_HDR_META_SHIFT);
200 data_hdr->info3 = 0;
200 data_hdr->info3 = cpu_to_le16(if_idx & WMI_DATA_HDR_IF_IDX_MASK);
201
202 return 0;
203}
204
205static u8 ath6kl_wmi_determine_user_priority(u8 *pkt, u32 layer2_pri)
206{
207 struct iphdr *ip_hdr = (struct iphdr *) pkt;
208 u8 ip_pri;

--- 1417 unchanged lines hidden (view full) ---

1626 cmd_hdr = (struct wmi_cmd_hdr *) skb->data;
1627 cmd_hdr->cmd_id = cpu_to_le16(cmd_id);
1628 info1 = if_idx & WMI_CMD_HDR_IF_ID_MASK;
1629 cmd_hdr->info1 = cpu_to_le16(info1);
1630
1631 /* Only for OPT_TX_CMD, use BE endpoint. */
1632 if (cmd_id == WMI_OPT_TX_FRAME_CMDID) {
1633 ret = ath6kl_wmi_data_hdr_add(wmi, skb, OPT_MSGTYPE,
201
202 return 0;
203}
204
205static u8 ath6kl_wmi_determine_user_priority(u8 *pkt, u32 layer2_pri)
206{
207 struct iphdr *ip_hdr = (struct iphdr *) pkt;
208 u8 ip_pri;

--- 1417 unchanged lines hidden (view full) ---

1626 cmd_hdr = (struct wmi_cmd_hdr *) skb->data;
1627 cmd_hdr->cmd_id = cpu_to_le16(cmd_id);
1628 info1 = if_idx & WMI_CMD_HDR_IF_ID_MASK;
1629 cmd_hdr->info1 = cpu_to_le16(info1);
1630
1631 /* Only for OPT_TX_CMD, use BE endpoint. */
1632 if (cmd_id == WMI_OPT_TX_FRAME_CMDID) {
1633 ret = ath6kl_wmi_data_hdr_add(wmi, skb, OPT_MSGTYPE,
1634 false, false, 0, NULL);
1634 false, false, 0, NULL, if_idx);
1635 if (ret) {
1636 dev_kfree_skb(skb);
1637 return ret;
1638 }
1639 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev, WMM_AC_BE);
1640 }
1641
1642 ath6kl_control_tx(wmi->parent_dev, skb, ep_id);

--- 450 unchanged lines hidden (view full) ---

2093
2094 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_PMKID_CMDID,
2095 NO_SYNC_WMIFLAG);
2096
2097 return ret;
2098}
2099
2100static int ath6kl_wmi_data_sync_send(struct wmi *wmi, struct sk_buff *skb,
1635 if (ret) {
1636 dev_kfree_skb(skb);
1637 return ret;
1638 }
1639 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev, WMM_AC_BE);
1640 }
1641
1642 ath6kl_control_tx(wmi->parent_dev, skb, ep_id);

--- 450 unchanged lines hidden (view full) ---

2093
2094 ret = ath6kl_wmi_cmd_send(wmi, if_idx, skb, WMI_SET_PMKID_CMDID,
2095 NO_SYNC_WMIFLAG);
2096
2097 return ret;
2098}
2099
2100static int ath6kl_wmi_data_sync_send(struct wmi *wmi, struct sk_buff *skb,
2101 enum htc_endpoint_id ep_id)
2101 enum htc_endpoint_id ep_id, u8 if_idx)
2102{
2103 struct wmi_data_hdr *data_hdr;
2104 int ret;
2105
2106 if (WARN_ON(skb == NULL || ep_id == wmi->ep_id))
2107 return -EINVAL;
2108
2109 skb_push(skb, sizeof(struct wmi_data_hdr));
2110
2111 data_hdr = (struct wmi_data_hdr *) skb->data;
2112 data_hdr->info = SYNC_MSGTYPE << WMI_DATA_HDR_MSG_TYPE_SHIFT;
2102{
2103 struct wmi_data_hdr *data_hdr;
2104 int ret;
2105
2106 if (WARN_ON(skb == NULL || ep_id == wmi->ep_id))
2107 return -EINVAL;
2108
2109 skb_push(skb, sizeof(struct wmi_data_hdr));
2110
2111 data_hdr = (struct wmi_data_hdr *) skb->data;
2112 data_hdr->info = SYNC_MSGTYPE << WMI_DATA_HDR_MSG_TYPE_SHIFT;
2113 data_hdr->info3 = 0;
2113 data_hdr->info3 = cpu_to_le16(if_idx & WMI_DATA_HDR_IF_IDX_MASK);
2114
2115 ret = ath6kl_control_tx(wmi->parent_dev, skb, ep_id);
2116
2117 return ret;
2118}
2119
2120static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx)
2121{

--- 65 unchanged lines hidden (view full) ---

2187 if (WARN_ON(!data_sync_bufs[index].skb))
2188 break;
2189
2190 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev,
2191 data_sync_bufs[index].
2192 traffic_class);
2193 ret =
2194 ath6kl_wmi_data_sync_send(wmi, data_sync_bufs[index].skb,
2114
2115 ret = ath6kl_control_tx(wmi->parent_dev, skb, ep_id);
2116
2117 return ret;
2118}
2119
2120static int ath6kl_wmi_sync_point(struct wmi *wmi, u8 if_idx)
2121{

--- 65 unchanged lines hidden (view full) ---

2187 if (WARN_ON(!data_sync_bufs[index].skb))
2188 break;
2189
2190 ep_id = ath6kl_ac2_endpoint_id(wmi->parent_dev,
2191 data_sync_bufs[index].
2192 traffic_class);
2193 ret =
2194 ath6kl_wmi_data_sync_send(wmi, data_sync_bufs[index].skb,
2195 ep_id);
2195 ep_id, if_idx);
2196
2197 if (ret)
2198 break;
2199
2200 data_sync_bufs[index].skb = NULL;
2201 }
2202
2203free_skb:

--- 1025 unchanged lines hidden ---
2196
2197 if (ret)
2198 break;
2199
2200 data_sync_bufs[index].skb = NULL;
2201 }
2202
2203free_skb:

--- 1025 unchanged lines hidden ---