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 --- |