From 4af5290d9777618a4a3cdcb505078aeba5f98f0e Mon Sep 17 00:00:00 2001 From: Sravan Kumar Kairam Date: Tue, 6 Mar 2018 21:52:48 +0530 Subject: [PATCH] qcacmn: Add QDF abstraction for IPA enums Add QDF abstraction for Linux kernel IPA driver enums. Change-Id: I9b61917768a109d12aefdc19a7822287337c9c18 CRs-Fixed: 2194166 --- qdf/inc/qdf_ipa.h | 59 ++++++++++++++++++++++++- qdf/inc/qdf_ipa_wdi3.h | 5 ++- qdf/linux/src/i_qdf_ipa.h | 31 +++++++++++++- qdf/linux/src/i_qdf_ipa_wdi3.h | 5 ++- qdf/linux/src/qdf_ipa.c | 78 ++++++++++++++++++++++++++++++++++ 5 files changed, 174 insertions(+), 4 deletions(-) create mode 100644 qdf/linux/src/qdf_ipa.c diff --git a/qdf/inc/qdf_ipa.h b/qdf/inc/qdf_ipa.h index c1da7a7cb3..015ced8d51 100644 --- a/qdf/inc/qdf_ipa.h +++ b/qdf/inc/qdf_ipa.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -17,8 +17,40 @@ #ifndef _QDF_IPA_H #define _QDF_IPA_H +#ifdef IPA_OFFLOAD + #include +/** + * enum qdf_ipa_wlan_event - QDF IPA events + * @QDF_IPA_CLIENT_CONNECT: Client Connects + * @QDF_IPA_CLIENT_DISCONNECT: Client Disconnects + * @QDF_IPA_AP_CONNECT: SoftAP is started + * @QDF_IPA_AP_DISCONNECT: SoftAP is stopped + * @QDF_IPA_STA_CONNECT: STA associates to AP + * @QDF_IPA_STA_DISCONNECT: STA dissociates from AP + * @QDF_IPA_CLIENT_CONNECT_EX: Peer associates/re-associates to softap + * @QDF_SWITCH_TO_SCC: WLAN interfaces in scc mode + * @QDF_SWITCH_TO_MCC: WLAN interfaces in mcc mode + * @QDF_WDI_ENABLE: WDI enable complete + * @QDF_WDI_DISABLE: WDI teardown + * @QDF_IPA_WLAN_EVENT_MAX: Max value for the enum + */ +typedef enum { + QDF_IPA_CLIENT_CONNECT, + QDF_IPA_CLIENT_DISCONNECT, + QDF_IPA_AP_CONNECT, + QDF_IPA_AP_DISCONNECT, + QDF_IPA_STA_CONNECT, + QDF_IPA_STA_DISCONNECT, + QDF_IPA_CLIENT_CONNECT_EX, + QDF_SWITCH_TO_SCC, + QDF_SWITCH_TO_MCC, + QDF_WDI_ENABLE, + QDF_WDI_DISABLE, + QDF_IPA_WLAN_EVENT_MAX +} qdf_ipa_wlan_event; + /** * qdf_ipa_wdi_meter_evt_type_t - type of event client callback is * for AP+STA mode metering @@ -200,6 +232,23 @@ typedef __qdf_ipa_wlan_hdr_attrib_val_t qdf_ipa_wlan_hdr_attrib_val_t; typedef int (*qdf_ipa_msg_pull_fn)(void *buff, u32 len, u32 type); typedef void (*qdf_ipa_ready_cb)(void *user_data); +#define QDF_IPA_SET_META_MSG_TYPE(meta, msg_type) \ + __QDF_IPA_SET_META_MSG_TYPE(meta, msg_type) + +#define QDF_IPA_RM_RESOURCE_GRANTED __QDF_IPA_RM_RESOURCE_GRANTED +#define QDF_IPA_RM_RESOURCE_RELEASED __QDF_IPA_RM_RESOURCE_RELEASED + +#define QDF_IPA_VOLTAGE_LEVEL __QDF_IPA_VOLTAGE_LEVEL + +#define QDF_IPA_RM_RESOURCE_WLAN_PROD __QDF_IPA_RM_RESOURCE_WLAN_PROD +#define QDF_IPA_RM_RESOURCE_WLAN_CONS __QDF_IPA_RM_RESOURCE_WLAN_CONS +#define QDF_IPA_RM_RESOURCE_APPS_CONS __QDF_IPA_RM_RESOURCE_APPS_CONS + +#define QDF_IPA_CLIENT_WLAN1_PROD __QDF_IPA_CLIENT_WLAN1_PROD +#define QDF_IPA_CLIENT_WLAN2_CONS __QDF_IPA_CLIENT_WLAN2_CONS +#define QDF_IPA_CLIENT_WLAN3_CONS __QDF_IPA_CLIENT_WLAN3_CONS +#define QDF_IPA_CLIENT_WLAN4_CONS __QDF_IPA_CLIENT_WLAN4_CONS + /* * Resume / Suspend */ @@ -590,4 +639,12 @@ static inline int qdf_ipa_register_ipa_ready_cb( return __qdf_ipa_register_ipa_ready_cb(qdf_ipa_ready_cb, user_data); } +#ifdef FEATURE_METERING +static inline int qdf_ipa_broadcast_wdi_quota_reach_ind(uint32_t index, + uint64_t quota_bytes) +{ + return __qdf_ipa_broadcast_wdi_quota_reach_ind(index, quota_bytes); +} +#endif +#endif /* IPA_OFFLOAD */ #endif /* _QDF_IPA_H */ diff --git a/qdf/inc/qdf_ipa_wdi3.h b/qdf/inc/qdf_ipa_wdi3.h index a9aeed24f0..1d6f815346 100644 --- a/qdf/inc/qdf_ipa_wdi3.h +++ b/qdf/inc/qdf_ipa_wdi3.h @@ -22,6 +22,8 @@ #ifndef _QDF_IPA_WDI3_H #define _QDF_IPA_WDI3_H +#ifdef IPA_OFFLOAD + #ifdef CONFIG_IPA_WDI_UNIFIED_API #include @@ -341,4 +343,5 @@ static inline int qdf_ipa_wdi3_set_perf_profile( #endif /* CONFIG_IPA_WDI_UNIFIED_API */ -#endif +#endif /* IPA_OFFLOAD */ +#endif /* _QDF_IPA_WDI3_H */ diff --git a/qdf/linux/src/i_qdf_ipa.h b/qdf/linux/src/i_qdf_ipa.h index 091cdea6fd..d96c6b6ad5 100644 --- a/qdf/linux/src/i_qdf_ipa.h +++ b/qdf/linux/src/i_qdf_ipa.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. * * Permission to use, copy, modify, and/or distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -17,6 +17,8 @@ #ifndef _I_QDF_IPA_H #define _I_QDF_IPA_H +#ifdef IPA_OFFLOAD + #include /** @@ -482,6 +484,23 @@ typedef struct ipa_ioc_rx_intf_prop __qdf_ipa_ioc_rx_intf_prop_t; typedef struct ipa_wlan_hdr_attrib_val __qdf_ipa_wlan_hdr_attrib_val_t; +#define __QDF_IPA_SET_META_MSG_TYPE(meta, msg_type) \ + __qdf_ipa_set_meta_msg_type(meta, msg_type) + +#define __QDF_IPA_RM_RESOURCE_GRANTED IPA_RM_RESOURCE_GRANTED +#define __QDF_IPA_RM_RESOURCE_RELEASED IPA_RM_RESOURCE_RELEASED + +#define __QDF_IPA_RM_RESOURCE_WLAN_PROD IPA_RM_RESOURCE_WLAN_PROD +#define __QDF_IPA_RM_RESOURCE_WLAN_CONS IPA_RM_RESOURCE_WLAN_CONS +#define __QDF_IPA_RM_RESOURCE_APPS_CONS IPA_RM_RESOURCE_APPS_CONS + +#define __QDF_IPA_VOLTAGE_LEVEL IPA_VOLTAGE_SVS + +#define __QDF_IPA_CLIENT_WLAN1_PROD IPA_CLIENT_WLAN1_PROD +#define __QDF_IPA_CLIENT_WLAN2_CONS IPA_CLIENT_WLAN2_CONS +#define __QDF_IPA_CLIENT_WLAN3_CONS IPA_CLIENT_WLAN3_CONS +#define __QDF_IPA_CLIENT_WLAN4_CONS IPA_CLIENT_WLAN4_CONS + /* * Resume / Suspend */ @@ -886,4 +905,14 @@ static inline int __qdf_ipa_register_ipa_ready_cb( return ipa_register_ipa_ready_cb(ipa_ready_cb, user_data); } +#ifdef FEATURE_METERING +static inline int __qdf_ipa_broadcast_wdi_quota_reach_ind(uint32_t index, + uint64_t quota_bytes) +{ + return ipa_broadcast_wdi_quota_reach_ind(index, quota_bytes); +} +#endif + +void __qdf_ipa_set_meta_msg_type(__qdf_ipa_msg_meta_t *meta, int type); +#endif /* IPA_OFFLOAD */ #endif /* _I_QDF_IPA_H */ diff --git a/qdf/linux/src/i_qdf_ipa_wdi3.h b/qdf/linux/src/i_qdf_ipa_wdi3.h index 26ddd4fa9b..bffdd44db8 100644 --- a/qdf/linux/src/i_qdf_ipa_wdi3.h +++ b/qdf/linux/src/i_qdf_ipa_wdi3.h @@ -22,6 +22,8 @@ #ifndef I_QDF_IPA_WDI_H #define I_QDF_IPA_WDI_H +#ifdef IPA_OFFLOAD + #include /* QDF_STATUS */ #include @@ -552,4 +554,5 @@ static inline int __qdf_ipa_wdi3_set_perf_profile( #endif /* CONFIG_IPA_WDI_UNIFIED_API */ -#endif +#endif /* IPA_OFFLOAD */ +#endif /* I_QDF_IPA_WDI_H */ diff --git a/qdf/linux/src/qdf_ipa.c b/qdf/linux/src/qdf_ipa.c new file mode 100644 index 0000000000..4f3f7ab247 --- /dev/null +++ b/qdf/linux/src/qdf_ipa.c @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2018 The Linux Foundation. All rights reserved. + * + * Permission to use, copy, modify, and/or distribute this software for + * any purpose with or without fee is hereby granted, provided that the + * above copyright notice and this permission notice appear in all + * copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE + * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/** + * DOC: qdf_ipa.c + * + * This source file contains linux specific definitions for QDF IPA APIs + */ + +/* Include Files */ +#include + +static enum ipa_wlan_event __qdf_to_ipa_wlan_event(int qdf_ipa_event) +{ + enum ipa_wlan_event ipa_event; + + switch (qdf_ipa_event) { + case QDF_IPA_CLIENT_CONNECT: + ipa_event = WLAN_CLIENT_CONNECT; + break; + case QDF_IPA_CLIENT_DISCONNECT: + ipa_event = WLAN_CLIENT_DISCONNECT; + break; + case QDF_IPA_AP_CONNECT: + ipa_event = WLAN_AP_CONNECT; + break; + case QDF_IPA_AP_DISCONNECT: + ipa_event = WLAN_AP_DISCONNECT; + break; + case QDF_IPA_STA_CONNECT: + ipa_event = WLAN_STA_CONNECT; + break; + case QDF_IPA_STA_DISCONNECT: + ipa_event = WLAN_STA_DISCONNECT; + break; + case QDF_IPA_CLIENT_CONNECT_EX: + ipa_event = WLAN_CLIENT_CONNECT_EX; + break; + case QDF_SWITCH_TO_SCC: + ipa_event = WLAN_SWITCH_TO_SCC; + break; + case QDF_SWITCH_TO_MCC: + ipa_event = WLAN_SWITCH_TO_MCC; + break; + case QDF_WDI_ENABLE: + ipa_event = WLAN_WDI_ENABLE; + break; + case QDF_WDI_DISABLE: + ipa_event = WLAN_WDI_DISABLE; + break; + case QDF_IPA_WLAN_EVENT_MAX: + default: + ipa_event = IPA_WLAN_EVENT_MAX; + break; + } + + return ipa_event; +} + +void __qdf_ipa_set_meta_msg_type(__qdf_ipa_msg_meta_t *meta, int type) +{ + meta->msg_type = __qdf_to_ipa_wlan_event(type); +}