aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/ath/ath10k/wmi.c
diff options
context:
space:
mode:
authorBartosz Markowski <bartosz.markowski@tieto.com>2013-09-26 11:47:08 -0400
committerKalle Valo <kvalo@qca.qualcomm.com>2013-09-27 07:58:14 -0400
commit8a6618b00f280a35cef36f6156cb7f80b35553c3 (patch)
tree85ed2cc5d907802e23744d7efc9ea34591038d22 /drivers/net/wireless/ath/ath10k/wmi.c
parent553215592f148ec94151a11d4f13ebf8fb2ca516 (diff)
ath10k: implement WMI events handling frame for both firmwares
We still use the same function handlers for both main and 10.X paths. Next step is to track down and make the split needed. Signed-off-by: Bartosz Markowski <bartosz.markowski@tieto.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/wmi.c')
-rw-r--r--drivers/net/wireless/ath/ath10k/wmi.c131
1 files changed, 130 insertions, 1 deletions
diff --git a/drivers/net/wireless/ath/ath10k/wmi.c b/drivers/net/wireless/ath/ath10k/wmi.c
index 8386050b1010..ef80291737b4 100644
--- a/drivers/net/wireless/ath/ath10k/wmi.c
+++ b/drivers/net/wireless/ath/ath10k/wmi.c
@@ -1212,6 +1212,24 @@ static void ath10k_wmi_event_vdev_install_key_complete(struct ath10k *ar,
1212 ath10k_dbg(ATH10K_DBG_WMI, "WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID\n"); 1212 ath10k_dbg(ATH10K_DBG_WMI, "WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID\n");
1213} 1213}
1214 1214
1215static void ath10k_wmi_event_inst_rssi_stats(struct ath10k *ar,
1216 struct sk_buff *skb)
1217{
1218 ath10k_dbg(ATH10K_DBG_WMI, "WMI_INST_RSSI_STATS_EVENTID\n");
1219}
1220
1221static void ath10k_wmi_event_vdev_standby_req(struct ath10k *ar,
1222 struct sk_buff *skb)
1223{
1224 ath10k_dbg(ATH10K_DBG_WMI, "WMI_VDEV_STANDBY_REQ_EVENTID\n");
1225}
1226
1227static void ath10k_wmi_event_vdev_resume_req(struct ath10k *ar,
1228 struct sk_buff *skb)
1229{
1230 ath10k_dbg(ATH10K_DBG_WMI, "WMI_VDEV_RESUME_REQ_EVENTID\n");
1231}
1232
1215static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar, 1233static void ath10k_wmi_service_ready_event_rx(struct ath10k *ar,
1216 struct sk_buff *skb) 1234 struct sk_buff *skb)
1217{ 1235{
@@ -1422,10 +1440,121 @@ static void ath10k_wmi_main_process_rx(struct ath10k *ar, struct sk_buff *skb)
1422 dev_kfree_skb(skb); 1440 dev_kfree_skb(skb);
1423} 1441}
1424 1442
1443static void ath10k_wmi_10x_process_rx(struct ath10k *ar, struct sk_buff *skb)
1444{
1445 struct wmi_cmd_hdr *cmd_hdr;
1446 enum wmi_10x_event_id id;
1447 u16 len;
1448
1449 cmd_hdr = (struct wmi_cmd_hdr *)skb->data;
1450 id = MS(__le32_to_cpu(cmd_hdr->cmd_id), WMI_CMD_HDR_CMD_ID);
1451
1452 if (skb_pull(skb, sizeof(struct wmi_cmd_hdr)) == NULL)
1453 return;
1454
1455 len = skb->len;
1456
1457 trace_ath10k_wmi_event(id, skb->data, skb->len);
1458
1459 switch (id) {
1460 case WMI_10X_MGMT_RX_EVENTID:
1461 ath10k_wmi_event_mgmt_rx(ar, skb);
1462 /* mgmt_rx() owns the skb now! */
1463 return;
1464 case WMI_10X_SCAN_EVENTID:
1465 ath10k_wmi_event_scan(ar, skb);
1466 break;
1467 case WMI_10X_CHAN_INFO_EVENTID:
1468 ath10k_wmi_event_chan_info(ar, skb);
1469 break;
1470 case WMI_10X_ECHO_EVENTID:
1471 ath10k_wmi_event_echo(ar, skb);
1472 break;
1473 case WMI_10X_DEBUG_MESG_EVENTID:
1474 ath10k_wmi_event_debug_mesg(ar, skb);
1475 break;
1476 case WMI_10X_UPDATE_STATS_EVENTID:
1477 ath10k_wmi_event_update_stats(ar, skb);
1478 break;
1479 case WMI_10X_VDEV_START_RESP_EVENTID:
1480 ath10k_wmi_event_vdev_start_resp(ar, skb);
1481 break;
1482 case WMI_10X_VDEV_STOPPED_EVENTID:
1483 ath10k_wmi_event_vdev_stopped(ar, skb);
1484 break;
1485 case WMI_10X_PEER_STA_KICKOUT_EVENTID:
1486 ath10k_wmi_event_peer_sta_kickout(ar, skb);
1487 break;
1488 case WMI_10X_HOST_SWBA_EVENTID:
1489 ath10k_wmi_event_host_swba(ar, skb);
1490 break;
1491 case WMI_10X_TBTTOFFSET_UPDATE_EVENTID:
1492 ath10k_wmi_event_tbttoffset_update(ar, skb);
1493 break;
1494 case WMI_10X_PHYERR_EVENTID:
1495 ath10k_wmi_event_phyerr(ar, skb);
1496 break;
1497 case WMI_10X_ROAM_EVENTID:
1498 ath10k_wmi_event_roam(ar, skb);
1499 break;
1500 case WMI_10X_PROFILE_MATCH:
1501 ath10k_wmi_event_profile_match(ar, skb);
1502 break;
1503 case WMI_10X_DEBUG_PRINT_EVENTID:
1504 ath10k_wmi_event_debug_print(ar, skb);
1505 break;
1506 case WMI_10X_PDEV_QVIT_EVENTID:
1507 ath10k_wmi_event_pdev_qvit(ar, skb);
1508 break;
1509 case WMI_10X_WLAN_PROFILE_DATA_EVENTID:
1510 ath10k_wmi_event_wlan_profile_data(ar, skb);
1511 break;
1512 case WMI_10X_RTT_MEASUREMENT_REPORT_EVENTID:
1513 ath10k_wmi_event_rtt_measurement_report(ar, skb);
1514 break;
1515 case WMI_10X_TSF_MEASUREMENT_REPORT_EVENTID:
1516 ath10k_wmi_event_tsf_measurement_report(ar, skb);
1517 break;
1518 case WMI_10X_RTT_ERROR_REPORT_EVENTID:
1519 ath10k_wmi_event_rtt_error_report(ar, skb);
1520 break;
1521 case WMI_10X_WOW_WAKEUP_HOST_EVENTID:
1522 ath10k_wmi_event_wow_wakeup_host(ar, skb);
1523 break;
1524 case WMI_10X_DCS_INTERFERENCE_EVENTID:
1525 ath10k_wmi_event_dcs_interference(ar, skb);
1526 break;
1527 case WMI_10X_PDEV_TPC_CONFIG_EVENTID:
1528 ath10k_wmi_event_pdev_tpc_config(ar, skb);
1529 break;
1530 case WMI_10X_INST_RSSI_STATS_EVENTID:
1531 ath10k_wmi_event_inst_rssi_stats(ar, skb);
1532 break;
1533 case WMI_10X_VDEV_STANDBY_REQ_EVENTID:
1534 ath10k_wmi_event_vdev_standby_req(ar, skb);
1535 break;
1536 case WMI_10X_VDEV_RESUME_REQ_EVENTID:
1537 ath10k_wmi_event_vdev_resume_req(ar, skb);
1538 break;
1539 case WMI_10X_SERVICE_READY_EVENTID:
1540 ath10k_wmi_service_ready_event_rx(ar, skb);
1541 break;
1542 case WMI_10X_READY_EVENTID:
1543 ath10k_wmi_ready_event_rx(ar, skb);
1544 break;
1545 default:
1546 ath10k_warn("Unknown eventid: %d\n", id);
1547 break;
1548 }
1549
1550 dev_kfree_skb(skb);
1551}
1552
1553
1425static void ath10k_wmi_process_rx(struct ath10k *ar, struct sk_buff *skb) 1554static void ath10k_wmi_process_rx(struct ath10k *ar, struct sk_buff *skb)
1426{ 1555{
1427 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) 1556 if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features))
1428 ath10k_warn("Firmware 10.X is not yet supported\n"); 1557 ath10k_wmi_10x_process_rx(ar, skb);
1429 else 1558 else
1430 ath10k_wmi_main_process_rx(ar, skb); 1559 ath10k_wmi_main_process_rx(ar, skb);
1431} 1560}