qcacld-3.0: Skeleton for DISA component

Create a skeleton for the DISA component. This is a CLD
component. Add files for disa core, dispatcher and
target_if. Define DISA related public structures and
objmgr objects. Add API's as stubs.

Change-Id: I63b32a0e7da0283d091815aaccea6b8703f5184c
CRs-Fixed: 2159579
This commit is contained in:
Nachiket Kukade
2017-12-15 12:18:07 +05:30
committed by snandini
parent 7e2c874db0
commit ba2253d2af
14 changed files with 1207 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
/*
* 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: declare various api which shall be used by
* DISA user configuration and target interface
*/
#ifndef _WLAN_DISA_MAIN_H_
#define _WLAN_DISA_MAIN_H_
#include "wlan_disa_public_struct.h"
#include "wlan_disa_obj_mgmt_public_struct.h"
#include "wlan_disa_priv.h"
#include "wlan_disa_objmgr.h"
#define disa_log(level, args...) QDF_TRACE(QDF_MODULE_ID_DISA, level, ## args)
#define disa_logfl(level, format, args...) disa_log(level, FL(format), ## args)
#define disa_fatal(format, args...) \
disa_logfl(QDF_TRACE_LEVEL_FATAL, format, ## args)
#define disa_err(format, args...) \
disa_logfl(QDF_TRACE_LEVEL_ERROR, format, ## args)
#define disa_warn(format, args...) \
disa_logfl(QDF_TRACE_LEVEL_WARN, format, ## args)
#define disa_info(format, args...) \
disa_logfl(QDF_TRACE_LEVEL_INFO, format, ## args)
#define disa_debug(format, args...) \
disa_logfl(QDF_TRACE_LEVEL_DEBUG, format, ## args)
#define DISA_ENTER() disa_debug("enter")
#define DISA_EXIT() disa_debug("exit")
/**
* disa_allocate_ctx() - Api to allocate disa ctx
*
* Helper function to allocate disa ctx
*
* Return: Success or failure.
*/
QDF_STATUS disa_allocate_ctx(void);
/**
* disa_free_ctx() - to free disa context
*
* Helper function to free disa context
*
* Return: None.
*/
void disa_free_ctx(void);
/**
* disa_get_context() - to get disa context
*
* Helper function to get disa context
*
* Return: disa context.
*/
struct wlan_disa_ctx *disa_get_context(void);
/**
* disa_core_encrypt_decrypt_req() - Form encrypt/decrypt request
* @psoc: objmgr psoc object
* @req: DISA encrypt/decrypt request parameters
*
* Return: QDF status success or failure
*/
QDF_STATUS disa_core_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req,
encrypt_decrypt_resp_callback cb,
void *cookie);
/**
* disa_core_encrypt_decrypt_resp() - Collect encrypt/decrypt request resp
* @psoc: objmgr psoc object
* @resp: DISA encrypt/decrypt request response parameters
*
* Return: QDF status success or failure
*/
QDF_STATUS disa_core_encrypt_decrypt_resp(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_resp_params *resp);
#endif /* end of _WLAN_DISA_MAIN_H_ */

View File

@@ -0,0 +1,195 @@
/*
* 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: This file contains various object manager related wrappers and helpers
*/
#ifndef _WLAN_DISA_OBJMGR_H
#define _WLAN_DISA_OBJMGR_H
#include "wlan_cmn.h"
#include "wlan_objmgr_cmn.h"
#include "wlan_objmgr_vdev_obj.h"
#include "wlan_objmgr_pdev_obj.h"
#include "wlan_objmgr_psoc_obj.h"
#include "wlan_disa_obj_mgmt_public_struct.h"
/* Get/Put Ref */
/**
* disa_psoc_get_ref() - DISA wrapper to increment ref count, if allowed
* @psoc: PSOC object
*
* DISA wrapper to increment ref count after checking valid object state
*
* Return: SUCCESS/FAILURE
*/
static inline QDF_STATUS disa_psoc_get_ref(struct wlan_objmgr_psoc *psoc)
{
return wlan_objmgr_psoc_try_get_ref(psoc, WLAN_DISA_ID);
}
/**
* disa_psoc_put_ref() - DISA wrapper to decrement ref count
* @psoc: PSOC object
*
* DISA wrapper to decrement ref count of psoc
*
* Return: SUCCESS/FAILURE
*/
static inline void disa_psoc_put_ref(struct wlan_objmgr_psoc *psoc)
{
return wlan_objmgr_psoc_release_ref(psoc, WLAN_DISA_ID);
}
/* Private Data */
/**
* disa_psoc_get_priv_nolock(): DISA wrapper to retrieve component object
* @psoc: Psoc pointer
*
* DISA wrapper used to get the component private object pointer
*
* Return: Component private object
*/
static inline void *disa_psoc_get_priv_nolock(struct wlan_objmgr_psoc *psoc)
{
return wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_DISA);
}
/* Ids */
static inline uint8_t
disa_vdev_get_id(struct wlan_objmgr_vdev *vdev)
{
uint8_t vdev_id;
vdev_id = wlan_vdev_get_id(vdev);
QDF_BUG(vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS);
return vdev_id;
}
/* Tree Navigation */
/**
* !PLEASE READ!
*
* The following are objmgr navigation helpers for traversing objmgr object
* trees.
*
* Objmgr ensures parents of an objmgr object cannot be freed while a valid
* reference to one of its children is held. Based on this fact, all of these
* navigation helpers make the following assumptions to ensure safe usage:
*
* 1) The caller must hold a valid reference to the input objmgr object!
* E.g. Use disa_[peer|vdev|pdev|psoc]_get_ref() on the input objmgr
* object before using these APIs
* 2) Given assumption #1, the caller does not need to hold a reference to the
* parents of the input objmgr object
* 3) Given assumption #1, parents of the input objmgr object cannot be null
* 4) Given assumption #1, private contexts of any parent of the input objmgr
* object cannot be null
*
* These characteristics remove the need for most sanity checks when dealing
* with objmgr objects. However, please note that if you ever walk the tree
* from parent to child, references must be acquired all the way down!
*
* Example #1:
*
* psoc = disa_vdev_get_psoc(vdev);
* if (!psoc)
* // this is dead code
*
* Example #2:
*
* psoc_priv = disa_psoc_get_priv(psoc);
* if (!psoc_priv)
* // this is dead code
*
* Example #3:
*
* status = disa_psoc_get_ref(psoc);
*
* ...
*
* psoc = disa_vdev_get_psoc(vdev);
*
* // the next line is redundant, don't do it!
* status = disa_psoc_get_ref(psoc);
*/
/* Tree Navigation: psoc */
static inline struct disa_psoc_priv_obj *
disa_psoc_get_priv(struct wlan_objmgr_psoc *psoc)
{
struct disa_psoc_priv_obj *psoc_priv;
psoc_priv = disa_psoc_get_priv_nolock(psoc);
QDF_BUG(psoc_priv);
return psoc_priv;
}
static inline struct wlan_objmgr_vdev *
disa_psoc_get_vdev(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id)
{
struct wlan_objmgr_vdev *vdev;
QDF_BUG(vdev_id < WLAN_UMAC_PSOC_MAX_VDEVS);
if (vdev_id >= WLAN_UMAC_PSOC_MAX_VDEVS)
return NULL;
wlan_psoc_obj_lock(psoc);
vdev = psoc->soc_objmgr.wlan_vdev_list[vdev_id];
wlan_psoc_obj_unlock(psoc);
return vdev;
}
/* Tree Navigation: pdev */
static inline struct wlan_objmgr_psoc *
disa_pdev_get_psoc(struct wlan_objmgr_pdev *pdev)
{
struct wlan_objmgr_psoc *psoc;
psoc = wlan_pdev_get_psoc(pdev);
QDF_BUG(psoc);
return psoc;
}
/* Tree Navigation: vdev */
static inline struct wlan_objmgr_pdev *
disa_vdev_get_pdev(struct wlan_objmgr_vdev *vdev)
{
struct wlan_objmgr_pdev *pdev;
pdev = wlan_vdev_get_pdev(vdev);
QDF_BUG(pdev);
return pdev;
}
static inline struct wlan_objmgr_psoc *
disa_vdev_get_psoc(struct wlan_objmgr_vdev *vdev)
{
return disa_pdev_get_psoc(disa_vdev_get_pdev(vdev));
}
#endif /* _WLAN_DISA_OBJMGR_H */

View File

@@ -0,0 +1,57 @@
/*
* 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: Declare various struct, macros which are used privately in DISA
* component.
*
* Note: This file shall not contain public API's prototype/declarations.
*
*/
#ifndef _WLAN_DISA_PRIV_STRUCT_H_
#define _WLAN_DISA_PRIV_STRUCT_H_
#include "wlan_disa_public_struct.h"
/**
* struct disa_psoc_priv_obj -psoc specific user configuration required for disa
*
* @disa_rx_ops: rx operations for disa
* @disa_tx_ops: tx operations for disa
* @disa_psoc_lock: spin lock for disa psoc priv ctx
*/
struct disa_psoc_priv_obj {
struct wlan_disa_rx_ops disa_rx_ops;
struct wlan_disa_tx_ops disa_tx_ops;
qdf_spinlock_t lock;
};
/**
* struct wlan_disa_ctx - disa context for single command
*
* @callback: hdd callback for disa encrypt/decrypt resp
* @callback_context: context for the callback
* @lock: spin lock for disa context
*/
struct wlan_disa_ctx {
encrypt_decrypt_resp_callback callback;
void *callback_context;
qdf_spinlock_t lock;
};
#endif /* end of _WLAN_DISA_PRIV_STRUCT_H_ */

View File

@@ -0,0 +1,55 @@
/*
* 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: Implement various api / helper function which shall be used for
* DISA user and target interface.
*/
#include "wlan_disa_main.h"
#include "wlan_disa_obj_mgmt_public_struct.h"
#include "wlan_disa_tgt_api.h"
static struct wlan_disa_ctx *gp_disa_ctx;
QDF_STATUS disa_allocate_ctx(void)
{
return QDF_STATUS_SUCCESS;
}
void disa_free_ctx(void)
{
}
struct wlan_disa_ctx *disa_get_context(void)
{
return gp_disa_ctx;
}
QDF_STATUS disa_core_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req,
encrypt_decrypt_resp_callback cb,
void *cookie)
{
return tgt_disa_encrypt_decrypt_req(psoc, req);
}
QDF_STATUS disa_core_encrypt_decrypt_resp(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_resp_params *resp)
{
return QDF_STATUS_SUCCESS;
}

View File

@@ -0,0 +1,85 @@
/*
* 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: declare utility API related to the disa component
* called by other components
*/
#ifndef _WLAN_DISA_OBJ_MGMT_API_H_
#define _WLAN_DISA_OBJ_MGMT_API_H_
#include "wlan_disa_obj_mgmt_public_struct.h"
/**
* disa_init() - register disa notification handlers.
*
* This function registers disa related notification handlers.
*
* Return: QDF_STATUS_SUCCESS - in case of success else return error
*/
QDF_STATUS disa_init(void);
/**
* disa_deinit() - unregister disa notification handlers.
*
* This function unregisters disa related notification handlers.
*
* Return: QDF_STATUS_SUCCESS - in case of success else return error
*/
QDF_STATUS disa_deinit(void);
/**
* disa_psoc_object_created_notification(): disa psoc create handler
* @psoc: psoc which is going to created by objmgr
* @arg: argument for psoc create handler
*
* Attach psoc private object, register rx/tx ops and event handlers
*
* Return QDF_STATUS status in case of success else return error
*/
QDF_STATUS disa_psoc_object_created_notification(
struct wlan_objmgr_psoc *psoc, void *arg);
/**
* disa_psoc_object_destroyed_notification(): disa psoc destroy handler
* @psoc: objmgr object corresponding to psoc which is going to be destroyed
* @arg: argument for psoc destroy handler
*
* Detach and free psoc private object, unregister event handlers
*
* Return QDF_STATUS status in case of success else return error
*/
QDF_STATUS disa_psoc_object_destroyed_notification(
struct wlan_objmgr_psoc *psoc, void *arg);
/**
* disa_psoc_enable() - Trigger psoc enable for DISA
* @psoc: objmgr psoc object
*
* Return: QDF status success or failure
*/
QDF_STATUS disa_psoc_enable(struct wlan_objmgr_psoc *psoc);
/**
* disa_psoc_disable() - Trigger psoc disable for DISA
* @psoc: objmgr psoc object
*
* Return: QDF status success or failure
*/
QDF_STATUS disa_psoc_disable(struct wlan_objmgr_psoc *psoc);
#endif /* end of _WLAN_DISA_OBJ_MGMT_API_H_ */

View File

@@ -0,0 +1,56 @@
/*
* 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: Declare various struct, macros which are used for object mgmt in disa.
*
* Note: This file shall not contain public API's prototype/declarations.
*
*/
#ifndef _WLAN_DISA_OBJ_MGMT_PUBLIC_STRUCT_H_
#define _WLAN_DISA_OBJ_MGMT_PUBLIC_STRUCT_H_
#include "wlan_disa_public_struct.h"
#include "wlan_objmgr_cmn.h"
#include "wlan_objmgr_psoc_obj.h"
/**
* struct wlan_disa_tx_ops - structure of tx operation function
* pointers for disa component
* @disa_encrypt_decrypt_req: send encrypt/decrypt request
* @disa_register_ev_handlers: register disa event handlers
* @disa_unregister_ev_handlers: unregister disa event handlers
*/
struct wlan_disa_tx_ops {
QDF_STATUS (*disa_encrypt_decrypt_req)(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req);
QDF_STATUS (*disa_register_ev_handlers)(struct wlan_objmgr_psoc *psoc);
QDF_STATUS (*disa_unregister_ev_handlers)
(struct wlan_objmgr_psoc *psoc);
};
/**
* struct wlan_disa_rx_ops - structure of rx operation function
* pointers for disa component
* @encrypt_decrypt_msg_resp: send response of encrypt/decrypt request
*/
struct wlan_disa_rx_ops {
QDF_STATUS (*encrypt_decrypt_msg_resp)(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_resp_params *resp);
};
#endif /* end of _WLAN_DISA_OBJ_MGMT_PUBLIC_STRUCT_H_ */

View File

@@ -0,0 +1,86 @@
/*
* 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: Declare various struct, macros which shall be used in the DISA
* component.
*
* Note: This file shall not contain public API's prototype/declarations.
*
*/
#ifndef _WLAN_DISA_PUBLIC_STRUCT_H_
#define _WLAN_DISA_PUBLIC_STRUCT_H_
#include <wlan_cmn.h>
#include <qdf_status.h>
#define MAC_MAX_KEY_LENGTH 32
#define MAC_PN_LENGTH 8
#define MAX_MAC_HEADER_LEN 32
#define MIN_MAC_HEADER_LEN 24
/**
* struct disa_encrypt_decrypt_req_params - disa encrypt request
* @vdev_id: virtual device id
* @key_flag: This indicates firmware to encrypt/decrypt payload
* see ENCRYPT_DECRYPT_FLAG
* @key_idx: Index used in storing key
* @key_cipher: cipher used for encryption/decryption
* Eg: see WMI_CIPHER_AES_CCM for CCMP
* @key_len: length of key data
* @key_txmic_len: length of Tx MIC
* @key_rxmic_len: length of Rx MIC
* @key_data: Key
* @pn: packet number
* @mac_header: MAC header
* @data_len: length of data
* @data: pointer to payload
*/
struct disa_encrypt_decrypt_req_params {
uint32_t vdev_id;
uint8_t key_flag;
uint32_t key_idx;
uint32_t key_cipher;
uint32_t key_len;
uint32_t key_txmic_len;
uint32_t key_rxmic_len;
uint8_t key_data[MAC_MAX_KEY_LENGTH];
uint8_t pn[MAC_PN_LENGTH];
uint8_t mac_header[MAX_MAC_HEADER_LEN];
uint32_t data_len;
uint8_t *data;
};
/**
* struct disa_encrypt_decrypt_resp_params - disa encrypt response
* @vdev_id: vdev id
* @status: status
* @data_length: data length
* @data: data pointer
*/
struct disa_encrypt_decrypt_resp_params {
uint32_t vdev_id;
int32_t status;
uint32_t data_len;
uint8_t *data;
};
typedef void (*encrypt_decrypt_resp_callback)(void *cookie,
struct disa_encrypt_decrypt_resp_params *resp) ;
#endif /* end of _WLAN_DISA_PUBLIC_STRUCT_H_ */

View File

@@ -0,0 +1,68 @@
/*
* 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: Declare public API for disa to interact with target/WMI
*/
#ifndef _WLAN_DISA_TGT_API_H_
#define _WLAN_DISA_TGT_API_H_
#include "wlan_disa_obj_mgmt_public_struct.h"
#include "wlan_disa_public_struct.h"
#define GET_DISA_TX_OPS_FROM_VDEV(vedv) \
(disa_psoc_get_priv(psoc)->disa_tx_ops)
/**
* tgt_disa_encrypt_decrypt_req() - send encrypt/decrypt request to target if
* @psoc: objmgr psoc object
* @req: encrypt/decrypt parameters
*
* Return: QDF_STATUS
*/
QDF_STATUS tgt_disa_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req);
/**
* tgt_disa_encrypt_decrypt_resp() - receive encrypt/decrypt response
* from target if
* @psoc: objmgr psoc object
* @resp: encrypt/decrypt response containing results
*
* Return: QDF_STATUS
*/
QDF_STATUS tgt_disa_encrypt_decrypt_resp(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_resp_params *resp);
/**
* tgt_disa_register_ev_handlers() - API to register disa event handlers
* @psoc: objmgr psoc object
*
* Return: QDF_STATUS_SUCCESS in case of success else return error
*/
QDF_STATUS tgt_disa_register_ev_handlers(struct wlan_objmgr_psoc *psoc);
/**
* tgt_disa_unregister_ev_handlers() - API to unregister disa event handlers
* @psoc: objmgr psoc object
*
* Return: QDF_STATUS_SUCCESS in case of success else return error
*/
QDF_STATUS tgt_disa_unregister_ev_handlers(struct wlan_objmgr_psoc *psoc);
#endif /* end of _WLAN_DISA_TGT_API_H_ */

View File

@@ -0,0 +1,44 @@
/*
* 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: Declare public API related to the disa called by north bound HDD/OSIF
*/
#ifndef _WLAN_DISA_UCFG_API_H_
#define _WLAN_DISA_UCFG_API_H_
#include "wlan_disa_public_struct.h"
#include "wlan_disa_obj_mgmt_api.h"
/**
* ucfg_disa_encrypt_decrypt_req() - Send encrypt/decrypt request to the DISA
* core
* @psoc: objmgr psoc object
* @req: DISA encrypt/decrypt request parameters
* @cb: Response callback for the encrypt/decrypt request
* @cookie: Cookie to pass to the response callback
*
* Return: QDF status success or failure
*/
QDF_STATUS ucfg_disa_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req,
encrypt_decrypt_resp_callback cb,
void *cookie);
#endif /* end of _WLAN_DISA_UCFG_API_H_ */

View File

@@ -0,0 +1,210 @@
/*
* 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: define utility API related to the DISA component
* called by other components
*/
#include "wlan_disa_obj_mgmt_api.h"
#include "wlan_disa_main.h"
#include "target_if_disa.h"
#include "wlan_disa_tgt_api.h"
/**
* disa_init() - register disa notification handlers.
*
* This function registers disa related notification handlers and
* allocates disa context.
*
* Return: QDF_STATUS_SUCCESS - in case of success else return error
*/
QDF_STATUS disa_init(void)
{
QDF_STATUS status;
DISA_ENTER();
if (disa_allocate_ctx() != QDF_STATUS_SUCCESS) {
disa_err("unable to allocate disa ctx");
status = QDF_STATUS_E_FAULT;
goto out;
}
status = wlan_objmgr_register_psoc_create_handler(
WLAN_UMAC_COMP_DISA,
disa_psoc_object_created_notification,
NULL);
if (status != QDF_STATUS_SUCCESS) {
disa_err("unable to register psoc create handler");
goto err_free_ctx;
}
status = wlan_objmgr_register_psoc_destroy_handler(
WLAN_UMAC_COMP_DISA,
disa_psoc_object_destroyed_notification,
NULL);
if (status != QDF_STATUS_SUCCESS) {
disa_err("unable to register psoc destroy handler");
wlan_objmgr_unregister_psoc_create_handler(
WLAN_UMAC_COMP_DISA,
disa_psoc_object_created_notification,
NULL);
} else {
goto out;
}
err_free_ctx:
disa_free_ctx();
out:
DISA_EXIT();
return status;
}
/**
* disa_deinit() - unregister disa notification handlers.
*
* This function unregisters disa related notification handlers and
* frees disa context.
*
* Return: QDF_STATUS_SUCCESS - in case of success else return error
*/
QDF_STATUS disa_deinit(void)
{
QDF_STATUS status;
DISA_ENTER();
status = wlan_objmgr_unregister_psoc_destroy_handler(
WLAN_UMAC_COMP_DISA,
disa_psoc_object_destroyed_notification,
NULL);
if (status != QDF_STATUS_SUCCESS)
disa_err("unable to unregister psoc create handle");
status = wlan_objmgr_unregister_psoc_create_handler(
WLAN_UMAC_COMP_DISA,
disa_psoc_object_created_notification,
NULL);
if (status != QDF_STATUS_SUCCESS)
disa_err("unable to unregister psoc create handle");
disa_free_ctx();
DISA_EXIT();
return status;
}
/**
* disa_psoc_object_created_notification(): disa psoc create handler
* @psoc: psoc which is going to created by objmgr
* @arg: argument for psoc create handler
*
* Attach psoc private object, register rx/tx ops and event handlers
*
* Return QDF_STATUS status in case of success else return error
*/
QDF_STATUS disa_psoc_object_created_notification(
struct wlan_objmgr_psoc *psoc, void *arg)
{
struct disa_psoc_priv_obj *disa_priv;
QDF_STATUS status;
DISA_ENTER();
disa_priv = qdf_mem_malloc(sizeof(*disa_priv));
if (disa_priv == NULL) {
disa_err("Failed to allocate disa_priv");
status = QDF_STATUS_E_NOMEM;
goto out;
}
status = wlan_objmgr_psoc_component_obj_attach(psoc,
WLAN_UMAC_COMP_DISA,
(void *)disa_priv, QDF_STATUS_SUCCESS);
if (status != QDF_STATUS_SUCCESS) {
disa_err("Failed to attach disa_priv with psoc");
qdf_mem_free(disa_priv);
goto out;
}
qdf_spinlock_create(&disa_priv->lock);
target_if_disa_register_tx_ops(&disa_priv->disa_tx_ops);
out:
DISA_EXIT();
return status;
}
/**
* disa_psoc_object_destroyed_notification(): disa psoc destroy handler
* @psoc: objmgr object corresponding to psoc which is going to be destroyed
* @arg: argument for psoc destroy handler
*
* Detach and free psoc private object, unregister event handlers
*
* Return QDF_STATUS status in case of success else return error
*/
QDF_STATUS disa_psoc_object_destroyed_notification(
struct wlan_objmgr_psoc *psoc, void *arg)
{
struct disa_psoc_priv_obj *disa_priv = NULL;
QDF_STATUS status = QDF_STATUS_SUCCESS;
DISA_ENTER();
disa_priv = disa_psoc_get_priv(psoc);
status = wlan_objmgr_psoc_component_obj_detach(psoc,
WLAN_UMAC_COMP_DISA,
(void *)disa_priv);
if (status != QDF_STATUS_SUCCESS)
disa_err("Failed to detach disa_priv with psoc");
qdf_spinlock_destroy(&disa_priv->lock);
qdf_mem_free(disa_priv);
DISA_EXIT();
return status;
}
/**
* disa_psoc_enable() - Trigger psoc enable for DISA
* @psoc: objmgr psoc object
*
* Return: QDF status success or failure
*/
QDF_STATUS disa_psoc_enable(struct wlan_objmgr_psoc *psoc)
{
return tgt_disa_register_ev_handlers(psoc);
}
/**
* disa_psoc_disable() - Trigger psoc disable for DISA
* @psoc: objmgr psoc object
*
* Return: QDF status success or failure
*/
QDF_STATUS disa_psoc_disable(struct wlan_objmgr_psoc *psoc)
{
return tgt_disa_unregister_ev_handlers(psoc);
}

View File

@@ -0,0 +1,74 @@
/*
* 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: Implements public API for disa to interact with target/WMI
*/
#include "wlan_disa_tgt_api.h"
#include "wlan_disa_main.h"
#include "wlan_disa_public_struct.h"
/**
* tgt_disa_encrypt_decrypt_req() - send encrypt/decrypt request to target if
* @psoc: objmgr psoc object
* @req: encrypt/decrypt parameters
*
* Return: QDF_STATUS
*/
QDF_STATUS tgt_disa_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req)
{
return QDF_STATUS_SUCCESS;
}
/**
* tgt_disa_encrypt_decrypt_resp() - receive encrypt/decrypt response
* from target if
* @psoc: objmgr psoc object
* @resp: encrypt/decrypt response containing results
*
* Return: QDF_STATUS
*/
QDF_STATUS tgt_disa_encrypt_decrypt_resp(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_resp_params *resp)
{
return QDF_STATUS_SUCCESS;
}
/**
* tgt_disa_register_ev_handlers() - API to register disa event handlers
* @psoc: objmgr psoc object
*
* Return: QDF_STATUS_SUCCESS in case of success else return error
*/
QDF_STATUS tgt_disa_register_ev_handlers(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
/**
* tgt_disa_unregister_ev_handlers() - API to unregister disa event handlers
* @psoc: objmgr psoc object
*
* Return: QDF_STATUS_SUCCESS in case of success else return error
*/
QDF_STATUS tgt_disa_unregister_ev_handlers(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}

View File

@@ -0,0 +1,41 @@
/*
* 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: public API related to the disa called by north bound HDD/OSIF
*/
#include "wlan_disa_ucfg_api.h"
#include "wlan_disa_main.h"
/**
* ucfg_disa_encrypt_decrypt_req() - Send encrypt/decrypt request to the DISA
* core
* @psoc: objmgr psoc object
* @req: DISA encrypt/decrypt request parameters
*
* Return: QDF status success or failure
*/
QDF_STATUS ucfg_disa_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req,
encrypt_decrypt_resp_callback cb,
void *cookie)
{
return disa_core_encrypt_decrypt_req(psoc, req, cb, cookie);
}

View File

@@ -0,0 +1,83 @@
/*
* 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: Declare various api/struct which shall be used
* by disa component for wmi cmd (tx path) and
* event (rx) handling.
*/
#ifndef _TARGET_IF_DISA_H_
#define _TARGET_IF_DISA_H_
#include "target_if.h"
#include <wmi_unified_api.h>
#include <wmi_unified_priv.h>
#include <wmi_unified_param.h>
#include "wlan_disa_tgt_api.h"
#include "wlan_disa_obj_mgmt_public_struct.h"
/**
* target_if_disa_encrypt_decrypt_req() - Send encrypt/decrypt request to
* target.
* @psoc: objmgr psoc handle
* @req: Encrypt/decrypt request params
*
* Return: QDF status
*/
QDF_STATUS target_if_disa_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req);
/**
* target_if_encrypt_decrypt_event_handler() - Collect encrypt/decrypt request
* event from the target and pass on the data to tgt api of DISA.
* @scn_handle: target handle
* @data: event data
* @data_len: data length
*
* Return: QDF status
*/
int target_if_encrypt_decrypt_event_handler(ol_scn_t scn_handle, uint8_t *data,
uint32_t data_len);
/**
* target_if_disa_register_tx_ops() - Register DISA component TX OPS
* @tx_ops: DISA if transmit ops
*
* Return: None
*/
void target_if_disa_register_tx_ops(struct wlan_disa_tx_ops *tx_ops);
/**
* target_if_disa_register_ev_handler() - Register disa event handlers.
* @psoc:objmgr psoc handle
*
* Return: QDF status
*/
QDF_STATUS
target_if_disa_register_ev_handlers(struct wlan_objmgr_psoc *psoc);
/**
* target_if_disa_register_ev_handler() - Unregister disa event handlers.
* @psoc:objmgr psoc handle
*
* Return: QDF status
*/
QDF_STATUS
target_if_disa_unregister_ev_handlers(struct wlan_objmgr_psoc *psoc);
#endif

View File

@@ -0,0 +1,57 @@
/*
* 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: Target interface file for disa component to
* Implement api's which shall be used by disa component
* in target if internally.
*/
#include "target_if_disa.h"
#include "wlan_disa_tgt_api.h"
#include "wlan_disa_public_struct.h"
int
target_if_encrypt_decrypt_event_handler(ol_scn_t scn_handle, uint8_t *data,
uint32_t data_len)
{
return 0;
}
QDF_STATUS
target_if_disa_register_ev_handlers(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
target_if_disa_unregister_ev_handlers(struct wlan_objmgr_psoc *psoc)
{
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
target_if_disa_encrypt_decrypt_req(struct wlan_objmgr_psoc *psoc,
struct disa_encrypt_decrypt_req_params *req)
{
return QDF_STATUS_SUCCESS;
}
void target_if_disa_register_tx_ops(struct wlan_disa_tx_ops *disa_tx_ops)
{
}