qcacld-3.0: Add interface changes for supporting NAN data path

Add interface changes to enable NAN data path feature

Propagation from qcacld-2.0 to qcacld-3.0

CRs-Fixed: 962367
Change-Id: I12a1d0cf37db22ff0bcb8165cb3f6b3847f8bf5b
This commit is contained in:
Ravi Joshi 2016-05-26 15:09:23 -07:00 • committed by Nandini Suresh
commit 412f23deb2
8 changed files with 696 additions and 2 deletions

View file

@ -5877,4 +5877,354 @@ enum ht_capability_fields {
HT_CAPS_RX_STBC = 0x0300
};
#ifdef WLAN_FEATURE_NAN_DATAPATH
#define IFACE_NAME_SIZE 64
/**
* enum ndp_accept_policy - nan data path accept policy
* @NDP_ACCEPT_POLICY_NONE: the framework will decide the policy
* @NDP_ACCEPT_POLICY_ALL: accept policy offloaded to fw
*
*/
enum ndp_accept_policy {
NDP_ACCEPT_POLICY_NONE = 0,
NDP_ACCEPT_POLICY_ALL = 1,
};
/**
* enum ndp_self_role - nan data path role
* @NDP_ROLE_INITIATOR: initiator of nan data path request
* @NDP_ROLE_RESPONDER: responder to nan data path request
*
*/
enum ndp_self_role {
NDP_ROLE_INITIATOR = 0,
NDP_ROLE_RESPONDER = 1,
};
/**
* enum ndp_response_code - responder's response code to nan data path request
* @NDP_RESPONSE_ACCEPT: ndp request accepted
* @NDP_RESPONSE_REJECT: ndp request rejected
* @NDP_RESPONSE_DEFER: ndp request deferred until later (response to follow
* any time later)
*
*/
enum ndp_response_code {
NDP_RESPONSE_ACCEPT = 0,
NDP_RESPONSE_REJECT = 1,
NDP_RESPONSE_DEFER = 2,
};
/**
* struct ndp_cfg - ndp configuration
* @tag: unique identifier
* @ndp_cfg_len: ndp configuration length
* @ndp_cfg: variable length ndp configuration
*
*/
struct ndp_cfg {
uint32_t tag;
uint32_t ndp_cfg_len;
uint8_t ndp_cfg[];
};
/**
* struct ndp_qos_cfg - ndp qos configuration
* @tag: unique identifier
* @ndp_qos_cfg_len: ndp qos configuration length
* @ndp_qos_cfg: variable length ndp qos configuration
*
*/
struct ndp_qos_cfg {
uint32_t tag;
uint32_t ndp_qos_cfg_len;
uint8_t ndp_qos_cfg[];
};
/**
* struct ndp_app_info - application info shared during ndp setup
* @tag: unique identifier
* @ndp_app_info_len: ndp app info length
* @ndp_app_info: variable length application information
*
*/
struct ndp_app_info {
uint32_t tag;
uint32_t ndp_app_info_len;
uint8_t ndp_app_info[];
};
/**
* struct ndi_create_req - ndi create request params
* @transaction_id: unique identifier
* @iface_name: interface name
*
*/
struct ndi_create_req {
uint32_t transaction_id;
char iface_name[IFACE_NAME_SIZE];
};
/**
* struct ndi_create_rsp - ndi create response params
* @transaction_id: unique identifier
* @status: request status
* @reason: reason if any
*
*/
struct ndi_create_rsp {
uint32_t transaction_id;
uint32_t status;
uint32_t reason;
};
/**
* struct ndi_delete_req - ndi delete request params
* @transaction_id: unique identifier
* @iface_name: interface name
*
*/
struct ndi_delete_req {
uint32_t transaction_id;
char iface_name[IFACE_NAME_SIZE];
};
/**
* struct ndi_delete_rsp - ndi delete response params
* @transaction_id: unique identifier
* @status: request status
* @reason: reason if any
*
*/
struct ndi_delete_rsp {
uint32_t transaction_id;
uint32_t status;
uint32_t reason;
};
/**
* struct ndp_initiator_req - ndp initiator request params
* @transaction_id: unique identifier
* @vdev_id: session id of the interface over which ndp is being created
* @channel: suggested channel for ndp creation
* @service_instance_id: Service identifier
* @peer_discovery_mac_addr: Peer's discovery mac address
* @self_ndi_mac_addr: self NDI mac address
* @ndp_config: ndp configuration params
* @ndp_info: ndp application info
*
*/
struct ndp_initiator_req {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t channel;
uint32_t service_instance_id;
struct qdf_mac_addr peer_discovery_mac_addr;
struct qdf_mac_addr self_ndi_mac_addr;
struct ndp_cfg ndp_config;
struct ndp_app_info ndp_info;
};
/**
* struct ndp_initiator_rsp_event - response event from FW
* @transaction_id: unique identifier
* @vdev_id: session id of the interface over which ndp is being created
* @ndp_instance_id: locally created NDP instance ID
* @status: status of the ndp request
* @reason: reason for failure if any
*
*/
struct ndp_initiator_rsp_event {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t ndp_instance_id;
uint32_t status;
uint32_t reason;
};
/**
* struct ndp_indication_event - create ndp indication on the responder
* @vdev_id: session id of the interface over which ndp is being created
* @service_instance_id: Service identifier
* @peer_discovery_mac_addr: Peer's discovery mac address
* @ndp_initiator_mac_addr: NDI mac address of the peer initiating NDP
* @ndp_instance_id: locally created NDP instance ID
* @role: self role for NDP
* @ndp_accept_policy: accept policy configured by the upper layer
* @ndp_config: ndp configuration params
* @ndp_info: ndp application info
*
*/
struct ndp_indication_event {
uint32_t vdev_id;
uint32_t service_instance_id;
struct qdf_mac_addr peer_discovery_mac_addr;
struct qdf_mac_addr ndp_initiator_mac_addr;
uint32_t ndp_instance_id;
enum ndp_self_role role;
enum ndp_accept_policy policy;
struct ndp_cfg ndp_config;
struct ndp_app_info ndp_info;
};
/**
* struct ndp_responder_req - responder's response to ndp create request
* @transaction_id: unique identifier
* @vdev_id: session id of the interface over which ndp is being created
* @ndp_instance_id: locally created NDP instance ID
* @ndp_rsp: response to the ndp create request
* @ndp_config: ndp configuration params
* @ndp_info: ndp application info
*
*/
struct ndp_responder_req {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t ndp_instance_id;
enum ndp_response_code ndp_rsp;
struct ndp_cfg ndp_config;
struct ndp_app_info ndp_info;
};
/**
* struct ndp_responder_rsp_event - response to responder's request
* @transaction_id: unique identifier
* @vdev_id: session id of the interface over which ndp is being created
* @status: command status
* @reason: reason for failure if any
*
*/
struct ndp_responder_rsp_event {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t status;
uint32_t reason;
};
/**
* struct ndp_confirm_event - ndp confirmation event from FW
* @vdev_id: session id of the interface over which ndp is being created
* @ndp_instance_id: ndp instance id for which confirm is being generated
* @peer_ndi_mac_addr: peer NDI mac address
* @rsp_code: ndp response code
* @ndp_config: ndp configuration
* @ndp_info: ndp application info
*
*/
struct ndp_confirm_event {
uint32_t vdev_id;
uint32_t ndp_instance_id;
struct qdf_mac_addr peer_ndi_mac_addr;
enum ndp_response_code rsp_code;
struct ndp_cfg ndp_config;
struct ndp_app_info ndp_info;
};
/**
* struct ndp_end_req - ndp end request
* @transaction_id: unique transaction identifier
* @vdev_id: session id of the interface over which ndp is being created
* @num_ndp_instances: number of ndp instances to be terminated
* @ndp_instances: list of ndp instances to be terminated
*
*/
struct ndp_end_req {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t num_ndp_instances;
uint32_t ndp_instances[];
};
/**
* struct peer_ndp_map - mapping of NDP instances to peer to VDEV
* @vdev_id: session id of the interface over which ndp is being created
* @peer_ndi_mac_addr: peer NDI mac address
* @num_active_ndp_sessions: number of active NDP sessions on the peer
*
*/
struct peer_ndp_map {
uint32_t vdev_id;
struct qdf_mac_addr peer_ndi_mac_addr;
uint32_t num_active_ndp_sessions;
};
/**
* struct ndp_end_rsp_event - firmware response to ndp end request
* @transaction_id: unique identifier for the request
* @vdev_id: session id of the interface over which ndp is being created
* @ndp_map: mapping of NDP instances to peer to VDEV
*
*/
struct ndp_end_rsp_event {
uint32_t transaction_id;
uint32_t vdev_id;
struct peer_ndp_map ndp_map[];
};
/**
* struct ndp_end_indication_event - ndp termination notification from FW
* @vdev_id: session id of the interface over which ndp is being created
* @reason: reason code for failure if any
* @status: status of the request
* @ndp_map: mapping of NDP instances to peer to VDEV
*
*/
struct ndp_end_indication_event {
uint32_t vdev_id;
uint32_t status;
uint32_t reason;
struct peer_ndp_map ndp_map[];
};
/**
* struct ndp_schedule_update_req - ndp schedule update request
* @transaction_id: unique identifier
* @vdev_id: session id of the interface over which ndp is being created
* @ndp_instance_id: ndp instance id for which schedule update is requested
* @ndp_qos: new set of qos parameters
*
*/
struct ndp_schedule_update_req {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t ndp_instance_id;
struct ndp_qos_cfg ndp_qos;
};
/**
* struct ndp_schedule_update_rsp - ndp schedule update response
* @transaction_id: unique identifier
* @vdev_id: session id of the interface over which ndp is being created
* @status: status of the request
* @reason: reason code for failure if any
*
*/
struct ndp_schedule_update_rsp {
uint32_t transaction_id;
uint32_t vdev_id;
uint32_t status;
uint32_t reason;
};
/**
* struct sme_ndp_peer_ind - ndp peer indication
* @msg_type: message id
* @msg_len: message length
* @session_id: session id
* @peer_mac_addr: peer mac address
* @sta_id: station id
*
*/
struct sme_ndp_peer_ind {
uint16_t msg_type;
uint16_t msg_len;
uint8_t session_id;
struct qdf_mac_addr peer_mac_addr;
uint16_t sta_id;
};
#endif /* WLAN_FEATURE_NAN_DATAPATH */
#endif /* __SIR_API_H */

View file

@ -26,3 +26,26 @@
#include "nan_datapath.h"
/**
* handle_ndp_request_message() - Function to handle NDP requests from SME
* @mac_ctx: handle to mac structure
* @msg: pointer to message
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS handle_ndp_request_message(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
{
return QDF_STATUS_SUCCESS;
}
/**
* handle_ndp_event_message() - Handler for NDP events from WMA
* @mac_ctx: handle to mac structure
* @msg: pointer to message
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS handle_ndp_event_message(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
{
return QDF_STATUS_SUCCESS;
}

View file

@ -27,5 +27,99 @@
#ifndef __MAC_NAN_DATAPATH_H
#define __MAC_NAN_DATAPATH_H
#ifdef WLAN_FEATURE_NAN_DATAPATH
#include "sir_common.h"
#include "ani_global.h"
#include "sir_params.h"
/**
* struct ndp_peer_node - structure for holding per-peer context
* @next: pointer to the next peer
* @peer_mac_addr: peer mac address
* @ext_rates_present: extended rates supported
* @edca_present: edca supported
* @wme_edca_present: WME EDCA supported
* @wme_info_present: WME info supported
* @ht_capable: HT capable
* @vht_capable: VHT capabale
* @ht_sec_chan_offset: HT secondary channel offset
* @capability_info: Generic capability info
* @supported_rates: Supported rates
* @extended_rates: Supported extended rates
* @supported_mcs_rate: Supported MCS rates
* @edca_params: EDCA parameters
* @erp_ie_present: ERP IE supported
* @ht_green_field: HT green field supported
* @ht_shortGI_40Mhz; 40 MHZ short GI support
* @ht_shortGI_20Mhz; 20 MHZ short GI support
* @ht_mimo_ps_state: MIMO power state
* @ht_ampdu_density: AMPDU density
* @ht_max_rxampdu_factor: receieve AMPDU factor
* @ht_max_amsdu_len: Max AMSDU lengh supported
* @ht_supp_chan_widthset: Supported channel widthset
* @ht_ldpc_capable: LDPC capable
* @heartbeat_failure: heart beat failure indication flag
* @vht_caps: VHT capability
* @vht_supp_chanwidth_set: VHT supported channel width
* @vht_beamformer_capable: Beam former capable
*/
struct ndp_peer_node {
struct ndp_peer_node *next;
struct qdf_mac_addr peer_mac_addr;
uint8_t ext_rates_present;
uint8_t edca_present;
uint8_t wme_edca_present;
uint8_t wme_info_present;
uint8_t ht_capable;
uint8_t vht_capable;
uint8_t ht_sec_chan_offset;
tSirMacCapabilityInfo capability_info;
tSirMacRateSet supported_rates;
tSirMacRateSet extended_rates;
uint8_t supported_mcs_rate[SIZE_OF_SUPPORTED_MCS_SET];
tSirMacEdcaParamSetIE edca_params;
uint8_t erp_ie_present;
uint8_t ht_green_field;
uint8_t ht_shortGI_40Mhz;
uint8_t ht_shortGI_20Mhz;
/* MIMO Power Save */
tSirMacHTMIMOPowerSaveState ht_mimo_ps_state;
uint8_t ht_ampdu_density;
/* Maximum Rx A-MPDU factor */
uint8_t ht_max_rxampdu_factor;
uint8_t ht_max_amsdu_len;
uint8_t ht_supp_chan_widthset;
uint8_t ht_ldpc_capable;
uint8_t heartbeat_failure;
#ifdef WLAN_FEATURE_11AC
tDot11fIEVHTCaps vht_caps;
uint8_t vht_supp_chanwidth_set;
uint8_t vht_beamformer_capable;
#endif
};
/* Function to process NDP requests */
QDF_STATUS lim_handle_ndp_request_message(tpAniSirGlobal mac_ctx,
tpSirMsgQ msg);
/* Function to process NDP events */
QDF_STATUS lim_handle_ndp_event_message(tpAniSirGlobal mac_ctx,
tpSirMsgQ msg);
#else
/* Function to process NDP requests */
static inline QDF_STATUS lim_handle_ndp_request_message(tpAniSirGlobal mac_ctx,
tpSirMsgQ msg)
{
return QDF_STATUS_SUCCESS;
}
/* Function to process NDP events */
static inline QDF_STATUS lim_handle_ndp_event_message(tpAniSirGlobal mac_ctx,
tpSirMsgQ msg)
{
return QDF_STATUS_SUCCESS;
}
#endif /* WLAN_FEATURE_NAN_DATAPATH */
#endif /* __MAC_NAN_DATAPATH_H */

View file

@ -610,6 +610,8 @@ typedef enum {
eCSR_ROAM_RESULT_DFS_CHANSW_UPDATE_SUCCESS,
eCSR_ROAM_EXT_CHG_CHNL_UPDATE_IND,
eCSR_ROAM_RESULT_NDP_CREATE_RSP,
eCSR_ROAM_RESULT_NDP_DELETE_RSP,
eCSR_ROAM_RESULT_NDP_INITIATOR_RSP,
eCSR_ROAM_RESULT_NDP_NEW_PEER_IND,
eCSR_ROAM_RESULT_NDP_CONFIRM_IND,
@ -1372,6 +1374,21 @@ typedef struct tagCsrRoamInfo {
#endif
tSirSmeChanInfo chan_info;
uint8_t target_channel;
#ifdef WLAN_FEATURE_NAN_DATAPATH
union {
struct sme_ndp_peer_ind ndp_peer_ind_params;
struct ndp_schedule_update_rsp ndp_sched_upd_rsp_params;
struct ndp_end_indication_event ndp_end_ind_params;
struct ndp_end_rsp_event ndp_end_rsp_params;
struct ndp_confirm_event ndp_confirm_params;
struct ndp_responder_rsp_event ndp_responder_rsp_params;
struct ndp_indication_event ndp_indication_params;
struct ndp_initiator_rsp_event ndp_init_rsp_params;
struct ndi_create_rsp ndi_create_params;
struct ndi_delete_rsp ndi_delete_params;
} ndp;
#endif
} tCsrRoamInfo;
typedef struct tagCsrFreqScanInfo {

View file

@ -27,6 +27,25 @@
#ifndef __SME_NAN_DATAPATH_H
#define __SME_NAN_DATAPATH_H
#include "ani_global.h"
/* NAN initiator request handler */
QDF_STATUS sme_ndp_initiator_req_handler(uint32_t session_id,
struct ndp_initiator_req *req_params);
/* NAN responder request handler */
QDF_STATUS sme_ndp_responder_req_handler(uint32_t session_id,
struct ndp_responder_req *req_params);
/* NAN indication response handler */
QDF_STATUS sme_ndp_end_req_handler(uint32_t session_id,
struct ndp_end_req *req_params);
/* NAN schedule update request handler */
QDF_STATUS sme_ndp_sched_req_handler(uint32_t session_id,
struct ndp_schedule_update_req *req_params);
/* Function to handle NDP messages from lower layers */
void sme_ndp_message_processor(tpAniSirGlobal mac_ctx, uint16_t msg_type,
void *msg);
#endif /* __SME_NAN_DATAPATH_H */

View file

@ -24,3 +24,58 @@
* SME NAN Data path API implementation
*/
#include "sme_nan_datapath.h"
/**
* sme_ndp_initiator_req_handler() - ndp initiator req handler
* @session_id: session id over which the ndp is being created
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS sme_ndp_initiator_req_handler(uint32_t session_id,
struct ndp_initiator_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* sme_ndp_responder_req_handler() - ndp responder request handler
* @session_id: session id over which the ndp is being created
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS sme_ndp_responder_req_handler(uint32_t session_id,
struct ndp_responder_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* sme_ndp_end_req_handler() - ndp end request handler
* @session_id: session id over which the ndp is being created
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS sme_ndp_end_req_handler(uint32_t session_id,
struct ndp_end_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* sme_ndp_sched_req_handler() - ndp schedule request handler
* @session_id: session id over which the ndp is being created
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS sme_ndp_sched_req_handler(uint32_t session_id,
struct ndp_schedule_update_req *req_params)
{
return QDF_STATUS_SUCCESS;
}

View file

@ -26,3 +26,139 @@
#include "wma_nan_datapath.h"
/**
* wma_handle_ndp_initiator_req() - NDP initiator request handler
* @wma_handle: wma handle
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_handle_ndp_initiator_req(tp_wma_handle wma_handle,
struct ndp_initiator_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_handle_ndp_responder_req() - NDP responder request handler
* @wma_handle: wma handle
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_handle_ndp_responder_req(tp_wma_handle wma_handle,
struct ndp_responder_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_handle_ndp_end_req() - NDP end request handler
* @wma_handle: wma handle
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_handle_ndp_end_req(tp_wma_handle wma_handle,
struct ndp_end_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_handle_ndp_sched_update_req() - NDP schedule update request handler
* @wma_handle: wma handle
* @req_params: request parameters
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_handle_ndp_sched_update_req(tp_wma_handle wma_handle,
struct ndp_end_req *req_params)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_ndp_indication_event_handler() - NDP indication event handler
* @handle: wma handle
* @event_info: event handler data
* @len: length of event_info
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_ndp_indication_event_handler(void *handle,
uint8_t *event_info, uint32_t len)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_ndp_responder_resp_event_handler() - NDP responder response event handler
* @handle: wma handle
* @event_info: event handler data
* @len: length of event_info
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_ndp_responder_resp_event_handler(void *handle,
uint8_t *event_info, uint32_t len)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_ndp_confirm_event_handler() - NDP confirm event handler
* @handle: wma handle
* @event_info: event handler data
* @len: length of event_info
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_ndp_confirm_event_handler(void *handle,
uint8_t *event_info, uint32_t len)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_ndp_end_response_event_handler() - NDP end response event handler
* @handle: wma handle
* @event_info: event handler data
* @len: length of event_info
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_ndp_end_response_event_handler(void *handle,
uint8_t *event_info, uint32_t len)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_ndp_end_indication_event_handler() - NDP end indication event handler
* @handle: wma handle
* @event_info: event handler data
* @len: length of event_info
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_ndp_end_indication_event_handler(void *handle,
uint8_t *event_info, uint32_t len)
{
return QDF_STATUS_SUCCESS;
}
/**
* wma_ndp_sched_update_rsp_event_handler() -NDP sched update rsp event handler
* @handle: wma handle
* @event_info: event handler data
* @len: length of event_info
*
* Return: QDF_STATUS_SUCCESS on success; error number otherwise
*/
QDF_STATUS wma_ndp_sched_update_rsp_event_handler(void *handle,
uint8_t *event_info, uint32_t len)
{
return QDF_STATUS_SUCCESS;
}

View file

@ -52,6 +52,6 @@ static inline void wma_update_hdd_cfg_ndp(tp_wma_handle wma_handle,
return;
}
#endif
#endif /* WLAN_FEATURE_NAN_DATAPATH */
#endif /* __WMA_NAN_DATAPATH_H */