qcacmn: add support for CoAP

Add support for Constrained Application Protocol.

Change-Id: I425206a990778cf946a4805192eff4d54562a945
CRs-Fixed: 3254128
Цей коміт міститься в:
Yu Wang
2022-07-27 14:33:31 +08:00
зафіксовано Madan Koyyalamudi
джерело 6efe5cf271
коміт 67011a392c
8 змінених файлів з 168 додано та 1 видалено

Переглянути файл

@@ -85,6 +85,10 @@
#include <wlan_twt_api.h>
#ifdef WLAN_FEATURE_COAP
#include <wlan_coap_main.h>
#endif
/**
* DOC: This file provides various init/deinit trigger point for new
* components.
@@ -1051,6 +1055,48 @@ static QDF_STATUS mlo_mgr_psoc_disable(struct wlan_objmgr_psoc *psoc)
}
#endif
#ifdef WLAN_FEATURE_COAP
static QDF_STATUS dispatcher_coap_init(void)
{
return wlan_coap_init();
}
static QDF_STATUS dispatcher_coap_deinit(void)
{
return wlan_coap_deinit();
}
static QDF_STATUS coap_psoc_enable(struct wlan_objmgr_psoc *psoc)
{
return wlan_coap_enable(psoc);
}
static QDF_STATUS coap_psoc_disable(struct wlan_objmgr_psoc *psoc)
{
return wlan_coap_disable(psoc);
}
#else
static QDF_STATUS dispatcher_coap_init(void)
{
return QDF_STATUS_SUCCESS;
}
static QDF_STATUS dispatcher_coap_deinit(void)
{
return QDF_STATUS_SUCCESS;
}
static QDF_STATUS coap_psoc_enable(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
static QDF_STATUS coap_psoc_disable(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
#endif
QDF_STATUS dispatcher_init(void)
{
if (QDF_STATUS_SUCCESS != wlan_objmgr_global_obj_init())
@@ -1137,6 +1183,9 @@ QDF_STATUS dispatcher_init(void)
if (QDF_STATUS_SUCCESS != dispatcher_twt_init())
goto twt_init_fail;
if (QDF_STATUS_SUCCESS != dispatcher_coap_init())
goto coap_init_fail;
/*
* scheduler INIT has to be the last as each component's
* initialization has to happen first and then at the end
@@ -1148,6 +1197,8 @@ QDF_STATUS dispatcher_init(void)
return QDF_STATUS_SUCCESS;
scheduler_init_fail:
dispatcher_coap_deinit();
coap_init_fail:
dispatcher_twt_deinit();
twt_init_fail:
wlan_gpio_deinit();
@@ -1215,6 +1266,8 @@ QDF_STATUS dispatcher_deinit(void)
QDF_BUG(QDF_STATUS_SUCCESS == scheduler_deinit());
QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_coap_deinit());
QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_twt_deinit());
QDF_BUG(QDF_STATUS_SUCCESS == wlan_gpio_deinit());
@@ -1448,8 +1501,13 @@ QDF_STATUS dispatcher_psoc_enable(struct wlan_objmgr_psoc *psoc)
if (QDF_STATUS_SUCCESS != dbam_psoc_enable(psoc))
goto dbam_psoc_enable_fail;
if (QDF_STATUS_SUCCESS != coap_psoc_enable(psoc))
goto coap_psoc_enable_fail;
return QDF_STATUS_SUCCESS;
coap_psoc_enable_fail:
dbam_psoc_disable(psoc);
dbam_psoc_enable_fail:
dispatcher_twt_psoc_disable(psoc);
twt_psoc_enable_fail:
@@ -1491,6 +1549,8 @@ QDF_STATUS dispatcher_psoc_disable(struct wlan_objmgr_psoc *psoc)
{
QDF_STATUS status;
QDF_BUG(QDF_STATUS_SUCCESS == coap_psoc_disable(psoc));
QDF_BUG(QDF_STATUS_SUCCESS == dbam_psoc_disable(psoc));
QDF_BUG(QDF_STATUS_SUCCESS == dispatcher_twt_psoc_disable(psoc));

Переглянути файл

@@ -115,6 +115,10 @@
#include <target_if_mlo_mgr.h>
#endif
#ifdef WLAN_FEATURE_COAP
#include <target_if_coap.h>
#endif
static struct target_if_ctx *g_target_if_ctx;
struct target_if_ctx *target_if_get_ctx()
@@ -430,6 +434,20 @@ target_if_dbam_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops)
}
#endif
#ifdef WLAN_FEATURE_COAP
static QDF_STATUS
target_if_coap_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops)
{
return target_if_coap_register_tx_ops(tx_ops);
}
#else
static inline QDF_STATUS
target_if_coap_tx_ops_register(struct wlan_lmac_if_tx_ops *tx_ops)
{
return QDF_STATUS_SUCCESS;
}
#endif
static void target_if_target_tx_ops_register(
struct wlan_lmac_if_tx_ops *tx_ops)
{
@@ -635,6 +653,8 @@ QDF_STATUS target_if_register_umac_tx_ops(struct wlan_lmac_if_tx_ops *tx_ops)
target_if_dbam_tx_ops_register(tx_ops);
target_if_coap_tx_ops_register(tx_ops);
/* Converged UMAC components to register their TX-ops here */
return QDF_STATUS_SUCCESS;
}

Переглянути файл

@@ -295,6 +295,7 @@
* @WLAN_UMAC_COMP_TWT: Target Wake Time (TWT) Component
* @WLAN_UMAC_COMP_PRE_CAC: PRE CAC component
* @WLAN_COMP_DP: DP component
* @WLAN_UMAC_COMP_COAP: Constrained Application Protocol component
* @WLAN_UMAC_COMP_ID_MAX: Maximum components in UMAC
*
* This id is static.
@@ -349,6 +350,7 @@ enum wlan_umac_comp_id {
WLAN_UMAC_COMP_PRE_CAC = 45,
WLAN_COMP_DP = 46,
WLAN_COMP_TELEMETRY_AGENT = 47,
WLAN_UMAC_COMP_COAP = 48,
WLAN_UMAC_COMP_ID_MAX,
};

Переглянути файл

@@ -288,6 +288,7 @@ typedef void (*wlan_objmgr_peer_status_handler)(
* @WLAN_LITE_MON_ID: Lite monitor operations
* @WLAN_PRE_CAC_ID: Pre-CAC operations
* @WLAN_DP_ID: DP component
* @WLAN_COAP_ID: Constrained Application Protocol reference id
* @WLAN_REF_ID_MAX: Max id used to generate ref count tracking array
*/
/* New value added to the enum must also be reflected in function
@@ -394,6 +395,7 @@ typedef enum {
WLAN_PRE_CAC_ID = 96,
WLAN_DP_ID = 97,
WLAN_UMAC_RESET_ID = 98,
WLAN_COAP_ID = 99,
WLAN_REF_ID_MAX,
} wlan_objmgr_ref_dbgid;
@@ -504,7 +506,8 @@ static inline const char *string_from_dbgid(wlan_objmgr_ref_dbgid id)
"WLAN_TWT_ID",
"WLAN_LITE_MON_ID",
"WLAN_PRE_CAC_ID",
"WLAN_DP_ID"
"WLAN_DP_ID",
"WLAN_COAP_ID"
};
if (id >= WLAN_REF_ID_MAX)

Переглянути файл

@@ -102,6 +102,10 @@ struct dbr_module_config;
#include "wlan_coex_public_structs.h"
#endif
#ifdef WLAN_FEATURE_COAP
#include "wlan_coap_public_structs.h"
#endif
/**
* typedef cp_stats_event - Definition of cp stats event
* Define stats_event from external cp stats component to cp_stats_event
@@ -1471,6 +1475,35 @@ struct wlan_lmac_if_twt_rx_ops {
struct wlan_lmac_if_spatial_reuse_tx_ops {
QDF_STATUS (*send_cfg)(struct wlan_objmgr_vdev *vdev, uint8_t sr_ctrl,
uint8_t non_srg_max_pd_offset);
};
#endif
#ifdef WLAN_FEATURE_COAP
/**
* struct wlan_lmac_if_coap_tx_ops - south bound tx function pointers for CoAP
* @attach: function pointer to attach CoAP component
* @detach: function pointer to detach CoAP component
* @offload_reply_enable: function pointer to enable CoAP offload reply
* @offload_reply_disable: function pointer to disable CoAP offload reply
* @offload_periodic_tx_enable: function pointer to enable CoAP offload
* periodic transmitting
* @offload_periodic_tx_disable: function pointer to disable CoAP offload
* periodic transmitting
* @offload_cache_get: function pointer to get cached CoAP messages
*/
struct wlan_lmac_if_coap_tx_ops {
QDF_STATUS (*attach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*detach)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*offload_reply_enable)(struct wlan_objmgr_vdev *vdev,
struct coap_offload_reply_param *param);
QDF_STATUS (*offload_reply_disable)(struct wlan_objmgr_vdev *vdev,
uint32_t req_id);
QDF_STATUS (*offload_periodic_tx_enable)(struct wlan_objmgr_vdev *vdev,
struct coap_offload_periodic_tx_param *param);
QDF_STATUS (*offload_periodic_tx_disable)(struct wlan_objmgr_vdev *vdev,
uint32_t req_id);
QDF_STATUS (*offload_cache_get)(struct wlan_objmgr_vdev *vdev,
uint32_t req_id);
};
#endif
@@ -1586,6 +1619,10 @@ struct wlan_lmac_if_tx_ops {
#if defined WLAN_FEATURE_11AX
struct wlan_lmac_if_spatial_reuse_tx_ops spatial_reuse_tx_ops;
#endif
#ifdef WLAN_FEATURE_COAP
struct wlan_lmac_if_coap_tx_ops coap_ops;
#endif
};
/**

Переглянути файл

@@ -5102,6 +5102,9 @@ typedef enum {
wmi_coex_dbam_complete_event_id,
#endif
wmi_spectral_capabilities_eventid,
#ifdef WLAN_FEATURE_COAP
wmi_wow_coap_buf_info_eventid,
#endif
wmi_events_max,
} wmi_conv_event_id;

Переглянути файл

@@ -107,6 +107,10 @@
#include "wlan_coex_public_structs.h"
#endif
#ifdef WLAN_FEATURE_COAP
#include "wlan_coap_public_structs.h"
#endif
#define WMI_UNIFIED_MAX_EVENT 0x100
#ifdef WMI_EXT_DBG
@@ -3086,6 +3090,31 @@ QDF_STATUS
(*feature_set_cmd_send)(wmi_unified_t wmi_handle,
struct target_feature_set *feature_set);
#endif
#ifdef WLAN_FEATURE_COAP
QDF_STATUS
(*send_coap_add_pattern_cmd)(wmi_unified_t wmi_handle,
struct coap_offload_reply_param *param);
QDF_STATUS
(*send_coap_del_pattern_cmd)(wmi_unified_t wmi_handle,
uint8_t vdev_id, uint32_t pattern_id);
QDF_STATUS
(*send_coap_add_keepalive_pattern_cmd)(wmi_unified_t wmi_handle,
struct coap_offload_periodic_tx_param *param);
QDF_STATUS
(*send_coap_del_keepalive_pattern_cmd)(wmi_unified_t wmi_handle,
uint8_t vdev_id, uint32_t pattern_id);
QDF_STATUS
(*send_coap_cache_get_cmd)(wmi_unified_t wmi_handle,
uint8_t vdev_id, uint32_t pattern_id);
QDF_STATUS (*extract_coap_buf_info)(wmi_unified_t wmi_handle, void *evt_buf,
struct coap_buf_info *info);
#endif
};
/* Forward declartion for psoc*/
@@ -3673,6 +3702,14 @@ static inline void wmi_mc_cp_stats_attach_tlv(struct wmi_unified *wmi_handle)
}
#endif /* QCA_SUPPORT_MC_CP_STATS */
#ifdef WLAN_FEATURE_COAP
void wmi_coap_attach_tlv(wmi_unified_t wmi_handle);
#else
static inline void wmi_coap_attach_tlv(wmi_unified_t wmi_handle)
{
}
#endif
/*
* wmi_map_ch_width() - map wmi channel width to host channel width
* @wmi_width: wmi channel width

Переглянути файл

@@ -19791,6 +19791,10 @@ static void populate_tlv_events_id(uint32_t *event_ids)
#endif
event_ids[wmi_spectral_capabilities_eventid] =
WMI_SPECTRAL_CAPABILITIES_EVENTID;
#ifdef WLAN_FEATURE_COAP
event_ids[wmi_wow_coap_buf_info_eventid] =
WMI_WOW_COAP_BUF_INFO_EVENTID;
#endif
}
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
@@ -20366,6 +20370,7 @@ void wmi_tlv_attach(wmi_unified_t wmi_handle)
wmi_cp_stats_attach_tlv(wmi_handle);
wmi_gpio_attach_tlv(wmi_handle);
wmi_11be_attach_tlv(wmi_handle);
wmi_coap_attach_tlv(wmi_handle);
}
qdf_export_symbol(wmi_tlv_attach);