From 734cfbb2cbe5052655fc403469c118159b7a5a27 Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Wed, 28 Jun 2017 16:42:31 -0700 Subject: [PATCH] qcacmn: Enable wake event config for all device modes There are several device operation modes that are not handled when configuring wake events to firmware. Ensure all of the supported device operation modes are mapped when configuring wake events to firmware. Change-Id: I82042441bcc6810a4ef91a1a6996a758f7ef4736 CRs-Fixed: 2068814 --- pmo/core/src/wlan_pmo_static_config.c | 46 +++++++++++----------- pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c | 8 ++++ 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/pmo/core/src/wlan_pmo_static_config.c b/pmo/core/src/wlan_pmo_static_config.c index 90d3edd714d7..b0653f35f618 100644 --- a/pmo/core/src/wlan_pmo_static_config.c +++ b/pmo/core/src/wlan_pmo_static_config.c @@ -35,59 +35,57 @@ void pmo_register_wow_wakeup_events(struct wlan_objmgr_vdev *vdev) { uint32_t event_bitmap[PMO_WOW_MAX_EVENT_BM_LEN] = {0}; uint8_t vdev_id; - enum tQDF_ADAPTER_MODE vdev_opmode = QDF_MAX_NO_OF_MODE; + enum tQDF_ADAPTER_MODE vdev_opmode; + const char *iface_type; vdev_opmode = pmo_get_vdev_opmode(vdev); vdev_id = pmo_vdev_get_id(vdev); pmo_info("vdev_opmode %d vdev_id %d", vdev_opmode, vdev_id); switch (vdev_opmode) { - case QDF_STA_MODE: + case QDF_P2P_CLIENT_MODE: case QDF_P2P_DEVICE_MODE: - /* Configure STA/P2P CLI mode specific default wake up events */ + case QDF_OCB_MODE: + case QDF_STA_MODE: + case QDF_MONITOR_MODE: + iface_type = "STA"; pmo_set_sta_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN); - - pmo_info("STA specific default wake up event 0x%x%x%x%x vdev id %d", - event_bitmap[0], event_bitmap[1], event_bitmap[2], - event_bitmap[3], vdev_id); break; + case QDF_IBSS_MODE: - /* Configure IBSS mode specific default wake up events */ + iface_type = "IBSS"; pmo_set_sta_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN); pmo_set_wow_event_bitmap(WOW_BEACON_EVENT, PMO_WOW_MAX_EVENT_BM_LEN, event_bitmap); - pmo_info("IBSS specific default wake up event 0x%x%x%x%x vdev id %d", - event_bitmap[0], event_bitmap[1], event_bitmap[2], - event_bitmap[3], vdev_id); break; + + case QDF_P2P_GO_MODE: case QDF_SAP_MODE: - /* Configure SAP/GO mode specific default wake up events */ + iface_type = "SAP"; pmo_set_sap_wow_bitmask(event_bitmap, PMO_WOW_MAX_EVENT_BM_LEN); - pmo_info("IBSS specific default wake up event 0x%x%x%x%x vdev id %d", - event_bitmap[0], event_bitmap[1], event_bitmap[2], - event_bitmap[3], vdev_id); break; + case QDF_NDI_MODE: - /* - * Configure NAN data path specific default wake up events. - * Following routine sends the command to firmware. - */ #ifdef WLAN_FEATURE_NAN_DATAPATH + iface_type = "NAN"; pmo_set_wow_event_bitmap(WOW_NAN_DATA_EVENT, PMO_WOW_MAX_EVENT_BM_LEN, event_bitmap); - pmo_info("IBSS specific default wake up event 0x%x%x%x%x vdev id %d", - event_bitmap[0], event_bitmap[1], event_bitmap[2], - event_bitmap[3], vdev_id); #endif break; + default: - pmo_info("unknown vdev_opmode %d", vdev_opmode); + pmo_err("Skipping wake event configuration for vdev_opmode %d", + vdev_opmode); return; } - pmo_tgt_enable_wow_wakeup_event(vdev, event_bitmap); + pmo_info("Selected %s wake event mask 0x%x%x%x%x, vdev %d", + iface_type, event_bitmap[0], event_bitmap[1], + event_bitmap[2], event_bitmap[3], vdev_id); + + pmo_tgt_enable_wow_wakeup_event(vdev, event_bitmap); } /** diff --git a/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c b/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c index 59404e60add1..c4eb60725e47 100644 --- a/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c +++ b/pmo/dispatcher/src/wlan_pmo_obj_mgmt_api.c @@ -265,8 +265,14 @@ out: QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev) { + QDF_STATUS status; + PMO_ENTER(); + status = pmo_vdev_get_ref(vdev); + if (QDF_IS_STATUS_ERROR(status)) + return status; + /* Register static configuration with firmware */ pmo_register_wow_wakeup_events(vdev); pmo_register_action_frame_patterns(vdev); @@ -274,6 +280,8 @@ QDF_STATUS pmo_vdev_ready(struct wlan_objmgr_vdev *vdev) /* Register default wow patterns with firmware */ pmo_register_wow_default_patterns(vdev); + pmo_vdev_put_ref(vdev); + PMO_EXIT(); /*