wmi.c (ef094103233344271990d15045d6a776386c3784) | wmi.c (b9b6ee603923be45c4022a0dce5fa8ccf4284524) |
---|---|
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 --- 707 unchanged lines hidden (view full) --- 716 ev->u.ap_sta.auth, ev->assoc_req_len, 717 ev->assoc_info + ev->beacon_ie_len); 718 } 719 return 0; 720 } 721 722 /* STA/IBSS mode connection event */ 723 | 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 --- 707 unchanged lines hidden (view full) --- 716 ev->u.ap_sta.auth, ev->assoc_req_len, 717 ev->assoc_info + ev->beacon_ie_len); 718 } 719 return 0; 720 } 721 722 /* STA/IBSS mode connection event */ 723 |
724 ath6kl_dbg(ATH6KL_DBG_WMI, "%s: freq %d bssid %pM\n", 725 __func__, le16_to_cpu(ev->u.sta.ch), ev->u.sta.bssid); | 724 ath6kl_dbg(ATH6KL_DBG_WMI, 725 "wmi event connect freq %d bssid %pM listen_intvl %d beacon_intvl %d type %d\n", 726 le16_to_cpu(ev->u.sta.ch), ev->u.sta.bssid, 727 le16_to_cpu(ev->u.sta.listen_intvl), 728 le16_to_cpu(ev->u.sta.beacon_intvl), 729 le32_to_cpu(ev->u.sta.nw_type)); |
726 727 /* Start of assoc rsp IEs */ 728 pie = ev->assoc_info + ev->beacon_ie_len + 729 ev->assoc_req_len + (sizeof(u16) * 3); /* capinfo, status, aid */ 730 731 /* End of assoc rsp IEs */ 732 peie = ev->assoc_info + ev->beacon_ie_len + ev->assoc_req_len + 733 ev->assoc_resp_len; --- 83 unchanged lines hidden (view full) --- 817 reg_code = le32_to_cpu(ev->reg_code); 818 819 if ((reg_code >> ATH6KL_COUNTRY_RD_SHIFT) & COUNTRY_ERD_FLAG) 820 country = ath6kl_regd_find_country((u16) reg_code); 821 else if (!(((u16) reg_code & WORLD_SKU_MASK) == WORLD_SKU_PREFIX)) { 822 823 regpair = ath6kl_get_regpair((u16) reg_code); 824 country = ath6kl_regd_find_country_by_rd((u16) reg_code); | 730 731 /* Start of assoc rsp IEs */ 732 pie = ev->assoc_info + ev->beacon_ie_len + 733 ev->assoc_req_len + (sizeof(u16) * 3); /* capinfo, status, aid */ 734 735 /* End of assoc rsp IEs */ 736 peie = ev->assoc_info + ev->beacon_ie_len + ev->assoc_req_len + 737 ev->assoc_resp_len; --- 83 unchanged lines hidden (view full) --- 821 reg_code = le32_to_cpu(ev->reg_code); 822 823 if ((reg_code >> ATH6KL_COUNTRY_RD_SHIFT) & COUNTRY_ERD_FLAG) 824 country = ath6kl_regd_find_country((u16) reg_code); 825 else if (!(((u16) reg_code & WORLD_SKU_MASK) == WORLD_SKU_PREFIX)) { 826 827 regpair = ath6kl_get_regpair((u16) reg_code); 828 country = ath6kl_regd_find_country_by_rd((u16) reg_code); |
825 ath6kl_dbg(ATH6KL_DBG_WMI, "ath6kl: Regpair used: 0x%0x\n", | 829 ath6kl_dbg(ATH6KL_DBG_WMI, "Regpair used: 0x%0x\n", |
826 regpair->regDmnEnum); 827 } 828 829 if (country) { 830 alpha2[0] = country->isoName[0]; 831 alpha2[1] = country->isoName[1]; 832 833 regulatory_hint(wmi->parent_dev->wdev->wiphy, alpha2); 834 | 830 regpair->regDmnEnum); 831 } 832 833 if (country) { 834 alpha2[0] = country->isoName[0]; 835 alpha2[1] = country->isoName[1]; 836 837 regulatory_hint(wmi->parent_dev->wdev->wiphy, alpha2); 838 |
835 ath6kl_dbg(ATH6KL_DBG_WMI, "ath6kl: Country alpha2 being used: %c%c\n", | 839 ath6kl_dbg(ATH6KL_DBG_WMI, "Country alpha2 being used: %c%c\n", |
836 alpha2[0], alpha2[1]); 837 } 838} 839 840static int ath6kl_wmi_disconnect_event_rx(struct wmi *wmi, u8 *datap, int len) 841{ 842 struct wmi_disconnect_event *ev; 843 wmi->traffic_class = 100; 844 845 if (len < sizeof(struct wmi_disconnect_event)) 846 return -EINVAL; 847 848 ev = (struct wmi_disconnect_event *) datap; 849 | 840 alpha2[0], alpha2[1]); 841 } 842} 843 844static int ath6kl_wmi_disconnect_event_rx(struct wmi *wmi, u8 *datap, int len) 845{ 846 struct wmi_disconnect_event *ev; 847 wmi->traffic_class = 100; 848 849 if (len < sizeof(struct wmi_disconnect_event)) 850 return -EINVAL; 851 852 ev = (struct wmi_disconnect_event *) datap; 853 |
854 ath6kl_dbg(ATH6KL_DBG_WMI, 855 "wmi event disconnect proto_reason %d bssid %pM wmi_reason %d assoc_resp_len %d\n", 856 le16_to_cpu(ev->proto_reason_status), ev->bssid, 857 ev->disconn_reason, ev->assoc_resp_len); 858 |
|
850 wmi->is_wmm_enabled = false; 851 wmi->pair_crypto_type = NONE_CRYPT; 852 wmi->grp_crypto_type = NONE_CRYPT; 853 854 ath6kl_disconnect_event(wmi->parent_dev, ev->disconn_reason, 855 ev->bssid, ev->assoc_resp_len, ev->assoc_info, 856 le16_to_cpu(ev->proto_reason_status)); 857 --- 663 unchanged lines hidden (view full) --- 1521 1522int ath6kl_wmi_cmd_send(struct wmi *wmi, struct sk_buff *skb, 1523 enum wmi_cmd_id cmd_id, enum wmi_sync_flag sync_flag) 1524{ 1525 struct wmi_cmd_hdr *cmd_hdr; 1526 enum htc_endpoint_id ep_id = wmi->ep_id; 1527 int ret; 1528 | 859 wmi->is_wmm_enabled = false; 860 wmi->pair_crypto_type = NONE_CRYPT; 861 wmi->grp_crypto_type = NONE_CRYPT; 862 863 ath6kl_disconnect_event(wmi->parent_dev, ev->disconn_reason, 864 ev->bssid, ev->assoc_resp_len, ev->assoc_info, 865 le16_to_cpu(ev->proto_reason_status)); 866 --- 663 unchanged lines hidden (view full) --- 1530 1531int ath6kl_wmi_cmd_send(struct wmi *wmi, struct sk_buff *skb, 1532 enum wmi_cmd_id cmd_id, enum wmi_sync_flag sync_flag) 1533{ 1534 struct wmi_cmd_hdr *cmd_hdr; 1535 enum htc_endpoint_id ep_id = wmi->ep_id; 1536 int ret; 1537 |
1529 ath6kl_dbg(ATH6KL_DBG_WMI, "%s: cmd_id=%d\n", __func__, cmd_id); 1530 | |
1531 if (WARN_ON(skb == NULL)) 1532 return -EINVAL; 1533 | 1538 if (WARN_ON(skb == NULL)) 1539 return -EINVAL; 1540 |
1541 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi tx id %d len %d flag %d\n", 1542 cmd_id, skb->len, sync_flag); 1543 ath6kl_dbg_dump(ATH6KL_DBG_WMI_DUMP, NULL, "wmi tx ", 1544 skb->data, skb->len); 1545 |
|
1534 if (sync_flag >= END_WMIFLAG) { 1535 dev_kfree_skb(skb); 1536 return -EINVAL; 1537 } 1538 1539 if ((sync_flag == SYNC_BEFORE_WMIFLAG) || 1540 (sync_flag == SYNC_BOTH_WMIFLAG)) { 1541 /* --- 42 unchanged lines hidden (view full) --- 1584 enum crypto_type group_crypto, 1585 u8 group_crypto_len, int ssid_len, u8 *ssid, 1586 u8 *bssid, u16 channel, u32 ctrl_flags) 1587{ 1588 struct sk_buff *skb; 1589 struct wmi_connect_cmd *cc; 1590 int ret; 1591 | 1546 if (sync_flag >= END_WMIFLAG) { 1547 dev_kfree_skb(skb); 1548 return -EINVAL; 1549 } 1550 1551 if ((sync_flag == SYNC_BEFORE_WMIFLAG) || 1552 (sync_flag == SYNC_BOTH_WMIFLAG)) { 1553 /* --- 42 unchanged lines hidden (view full) --- 1596 enum crypto_type group_crypto, 1597 u8 group_crypto_len, int ssid_len, u8 *ssid, 1598 u8 *bssid, u16 channel, u32 ctrl_flags) 1599{ 1600 struct sk_buff *skb; 1601 struct wmi_connect_cmd *cc; 1602 int ret; 1603 |
1604 ath6kl_dbg(ATH6KL_DBG_WMI, 1605 "wmi connect bssid %pM freq %d flags 0x%x ssid_len %d " 1606 "type %d dot11_auth %d auth %d pairwise %d group %d\n", 1607 bssid, channel, ctrl_flags, ssid_len, nw_type, 1608 dot11_auth_mode, auth_mode, pairwise_crypto, group_crypto); 1609 ath6kl_dbg_dump(ATH6KL_DBG_WMI, NULL, "ssid ", ssid, ssid_len); 1610 |
|
1592 wmi->traffic_class = 100; 1593 1594 if ((pairwise_crypto == NONE_CRYPT) && (group_crypto != NONE_CRYPT)) 1595 return -EINVAL; 1596 1597 if ((pairwise_crypto != NONE_CRYPT) && (group_crypto == NONE_CRYPT)) 1598 return -EINVAL; 1599 --- 29 unchanged lines hidden (view full) --- 1629} 1630 1631int ath6kl_wmi_reconnect_cmd(struct wmi *wmi, u8 *bssid, u16 channel) 1632{ 1633 struct sk_buff *skb; 1634 struct wmi_reconnect_cmd *cc; 1635 int ret; 1636 | 1611 wmi->traffic_class = 100; 1612 1613 if ((pairwise_crypto == NONE_CRYPT) && (group_crypto != NONE_CRYPT)) 1614 return -EINVAL; 1615 1616 if ((pairwise_crypto != NONE_CRYPT) && (group_crypto == NONE_CRYPT)) 1617 return -EINVAL; 1618 --- 29 unchanged lines hidden (view full) --- 1648} 1649 1650int ath6kl_wmi_reconnect_cmd(struct wmi *wmi, u8 *bssid, u16 channel) 1651{ 1652 struct sk_buff *skb; 1653 struct wmi_reconnect_cmd *cc; 1654 int ret; 1655 |
1656 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi reconnect bssid %pM freq %d\n", 1657 bssid, channel); 1658 |
|
1637 wmi->traffic_class = 100; 1638 1639 skb = ath6kl_wmi_get_new_buf(sizeof(struct wmi_reconnect_cmd)); 1640 if (!skb) 1641 return -ENOMEM; 1642 1643 cc = (struct wmi_reconnect_cmd *) skb->data; 1644 cc->channel = cpu_to_le16(channel); --- 6 unchanged lines hidden (view full) --- 1651 1652 return ret; 1653} 1654 1655int ath6kl_wmi_disconnect_cmd(struct wmi *wmi) 1656{ 1657 int ret; 1658 | 1659 wmi->traffic_class = 100; 1660 1661 skb = ath6kl_wmi_get_new_buf(sizeof(struct wmi_reconnect_cmd)); 1662 if (!skb) 1663 return -ENOMEM; 1664 1665 cc = (struct wmi_reconnect_cmd *) skb->data; 1666 cc->channel = cpu_to_le16(channel); --- 6 unchanged lines hidden (view full) --- 1673 1674 return ret; 1675} 1676 1677int ath6kl_wmi_disconnect_cmd(struct wmi *wmi) 1678{ 1679 int ret; 1680 |
1681 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi disconnect\n"); 1682 |
|
1659 wmi->traffic_class = 100; 1660 1661 /* Disconnect command does not need to do a SYNC before. */ 1662 ret = ath6kl_wmi_simple_cmd(wmi, WMI_DISCONNECT_CMDID); 1663 1664 return ret; 1665} 1666 --- 1136 unchanged lines hidden (view full) --- 2803 2804 skb_pull(skb, sizeof(struct wmix_cmd_hdr)); 2805 2806 datap = skb->data; 2807 len = skb->len; 2808 2809 switch (id) { 2810 case WMIX_HB_CHALLENGE_RESP_EVENTID: | 1683 wmi->traffic_class = 100; 1684 1685 /* Disconnect command does not need to do a SYNC before. */ 1686 ret = ath6kl_wmi_simple_cmd(wmi, WMI_DISCONNECT_CMDID); 1687 1688 return ret; 1689} 1690 --- 1136 unchanged lines hidden (view full) --- 2827 2828 skb_pull(skb, sizeof(struct wmix_cmd_hdr)); 2829 2830 datap = skb->data; 2831 len = skb->len; 2832 2833 switch (id) { 2834 case WMIX_HB_CHALLENGE_RESP_EVENTID: |
2835 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi event hb challenge resp\n"); |
|
2811 break; 2812 case WMIX_DBGLOG_EVENTID: | 2836 break; 2837 case WMIX_DBGLOG_EVENTID: |
2838 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi event dbglog len %d\n", len); |
|
2813 ath6kl_debug_fwlog_event(wmi->parent_dev, datap, len); 2814 break; 2815 default: | 2839 ath6kl_debug_fwlog_event(wmi->parent_dev, datap, len); 2840 break; 2841 default: |
2816 ath6kl_err("unknown cmd id 0x%x\n", id); | 2842 ath6kl_warn("unknown cmd id 0x%x\n", id); |
2817 wmi->stat.cmd_id_err++; 2818 ret = -EINVAL; 2819 break; 2820 } 2821 2822 return ret; 2823} 2824 --- 19 unchanged lines hidden (view full) --- 2844 cmd = (struct wmi_cmd_hdr *) skb->data; 2845 id = le16_to_cpu(cmd->cmd_id); 2846 2847 skb_pull(skb, sizeof(struct wmi_cmd_hdr)); 2848 2849 datap = skb->data; 2850 len = skb->len; 2851 | 2843 wmi->stat.cmd_id_err++; 2844 ret = -EINVAL; 2845 break; 2846 } 2847 2848 return ret; 2849} 2850 --- 19 unchanged lines hidden (view full) --- 2870 cmd = (struct wmi_cmd_hdr *) skb->data; 2871 id = le16_to_cpu(cmd->cmd_id); 2872 2873 skb_pull(skb, sizeof(struct wmi_cmd_hdr)); 2874 2875 datap = skb->data; 2876 len = skb->len; 2877 |
2852 ath6kl_dbg(ATH6KL_DBG_WMI, "%s: wmi id: %d\n", __func__, id); 2853 ath6kl_dbg_dump(ATH6KL_DBG_RAW_BYTES, "msg payload ", "wmi rx ", | 2878 ath6kl_dbg(ATH6KL_DBG_WMI, "wmi rx id %d len %d\n", id, len); 2879 ath6kl_dbg_dump(ATH6KL_DBG_WMI_DUMP, NULL, "wmi rx ", |
2854 datap, len); 2855 2856 switch (id) { 2857 case WMI_GET_BITRATE_CMDID: 2858 ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_GET_BITRATE_CMDID\n"); 2859 ret = ath6kl_wmi_bitrate_reply_rx(wmi, datap, len); 2860 break; 2861 case WMI_GET_CHANNEL_LIST_CMDID: --- 240 unchanged lines hidden --- | 2880 datap, len); 2881 2882 switch (id) { 2883 case WMI_GET_BITRATE_CMDID: 2884 ath6kl_dbg(ATH6KL_DBG_WMI, "WMI_GET_BITRATE_CMDID\n"); 2885 ret = ath6kl_wmi_bitrate_reply_rx(wmi, datap, len); 2886 break; 2887 case WMI_GET_CHANNEL_LIST_CMDID: --- 240 unchanged lines hidden --- |