blob: c15be5cfe7bc28311b6485f378ae672bc798e9fa [file] [log] [blame]
/*
* Copyright (c) 2012-2013, The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* 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.
*/
/*
* Copyright (c) 2012, The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
*
* 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.
*/
#if !defined( WLAN_QCT_SYS_H__ )
#define WLAN_QCT_SYS_H__
/**===========================================================================
\file wlan_qct_sys.h
\brief System module API
Copyright 2008 (c) Qualcomm, Incorporated.
All Rights Reserved.
Qualcomm Confidential and Proprietary.
==========================================================================*/
/* $HEADER$ */
/*---------------------------------------------------------------------------
Include files
-------------------------------------------------------------------------*/
#include <vos_types.h>
#include <vos_status.h>
#include <vos_mq.h>
/*---------------------------------------------------------------------------
Preprocessor definitions and constants
-------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
Type declarations
-------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
\brief sysResponseCback() - SYS async resonse callback
This is a protype for the callback function that SYS makes to various
modules in the system.
\param pUserData - user data that is passed to the Callback function
when it is invoked.
\return Nothing
\sa sysMcStart(), sysMcThreadProbe(), sysTxThreadProbe()
--------------------------------------------------------------------------*/
typedef v_VOID_t ( * sysResponseCback ) ( v_VOID_t *pUserData );
typedef enum
{
SYS_MSG_ID_MC_START,
SYS_MSG_ID_MC_THR_PROBE,
SYS_MSG_ID_MC_TIMER,
SYS_MSG_ID_TX_THR_PROBE,
SYS_MSG_ID_TX_TIMER,
SYS_MSG_ID_RX_TIMER,
SYS_MSG_ID_MC_STOP,
} SYS_MSG_ID;
/*---------------------------------------------------------------------------
Preprocessor definitions and constants
-------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------
Function declarations and documenation
-------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------
\brief sysBuildMessageHeader() - Build / initialize a SYS message header
This function will initialize the SYS message header with the message type
and any internal fields needed for a new SYS message. This function sets
all but the message body, which is up to the caller to setup based on the
specific message being built.
\note There are internal / reserved items in a SYS message that must be
set correctly for the message to be recognized as a SYS message by
the SYS message handlers. It is important for every SYS message to
be setup / built / initialized through this function.
\param sysMsgId - a valid message ID for a SYS message. See the
SYS_MSG_ID enum for all the valid SYS message IDs.
\param pMsg - pointer to the message structure to be setup.
\return
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysBuildMessageHeader( SYS_MSG_ID sysMsgId, vos_msg_t *pMsg );
/*----------------------------------------------------------------------------
\brief sysOpen() - Open (initialize) the SYS module.
This function opens the SYS modules. All SYS resources are allocated
as a result of this open call.
\param pVosContext - pointer to the VOS Context (from which all other
context entities can be derived).
\return VOS_STATUS_SUCCESS - the SYS module is open. All resources needed
for operation of the SYS modules are allocated and initialized.
VOS_STATUS_E_RESOURCES - the SYS module open failed because needed
system resources are not available.
VOS_STATUS_E_FAILURE - the SYS module open failed due to some
unknown reason.
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysOpen( v_CONTEXT_t pVosContext );
/*----------------------------------------------------------------------------
\brief sysMcStart() - start the system Main Controller thread.
This function starts the SYS (Main Controller) module. Starting this
module triggers the CFG download to the 'legacy' MAC software.
\param pVosContext - pointer to the VOS Context
\param userCallback - this is a callback that is called when the SYS
has completed the 'start' funciton.
\param pUserData - pointer to some user data entity that is passed to
the callback function as a parameter when invoked.
\return VOS_STATUS_SUCCESS -
\todo: We have not 'status' on the callback. How do we notify the
callback that there is a failure ?
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysMcStart( v_CONTEXT_t pVosContext, sysResponseCback userCallback,
v_VOID_t *pUserData );
/*----------------------------------------------------------------------------
\brief sysStop() - Stop the SYS module.
This function stops the SYS module.
\todo: What else do we need to do on sysStop()?
\param pVosContext - pointer to the VOS Context
\return VOS_STATUS_SUCCESS - the SYS module is stopped.
VOS_STATUS_E_FAILURE - the SYS module open failed to stop.
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysStop( v_CONTEXT_t pVosContext );
/*----------------------------------------------------------------------------
\brief sysClose() - Close the SYS module.
This function closes the SYS module. All resources allocated during
sysOpen() are free'd and returned to the system. The Sys module is unable
to operate until opened again through a call to sysOpen().
\param pVosContext - pointer to the VOS Context
\return VOS_STATUS_SUCCESS - the SYS module is closed.
VOS_STATUS_E_FAILURE - the SYS module open failed to close
\sa sysOpen(), sysMcStart()
--------------------------------------------------------------------------*/
VOS_STATUS sysClose( v_CONTEXT_t pVosContext );
/*----------------------------------------------------------------------------
\brief sysMcThreadProbe() - Probe the SYS Main Controller thread
This function is called during initialization to 'probe' the Main Controller
thread. Probing means a specific message is posted to the SYS module to
assure the Main Controller thread is operating and processing messages
correctly.
Following the successful 'probe' of the Main Controller thread, the
callback specified on this function is called to notify another entity
that the Main Controller is operational.
\param pVosContext - pointer to the VOS Context
\param userCallback - this is a callback that is called when the SYS
has completed probing the Main Controller thread.
\param pUserData - pointer to some user data entity that is passed to
the callback function as a parameter when invoked.
\return VOS_STATUS_SUCCESS -
\todo: how do we tell the callback there is a failure?
\sa sysOpen(), sysMcStart()
--------------------------------------------------------------------------*/
v_VOID_t sysMcThreadProbe( v_CONTEXT_t pVosContex, sysResponseCback userCallback,
v_VOID_t *pUserData );
/*----------------------------------------------------------------------------
\brief sysTxThreadProbe() - Probe the Tx thread
This function is called during initialization to 'probe' the Tx
thread. Probing means a specific message is posted to the SYS module to
assure the Tx is operating and processing messages correctly.
Following the successful 'probe' of the Tx, the callback specified
on this function is called to notify another entity that the Tx thread
is operational.
\param pVosContext - pointer to the VOS Context
\param userCallback - this is a callback that is called when the SYS
has completed probing the Tx thread.
\param pUserData - pointer to some user data entity that is passed to
the callback function as a parameter when invoked.
\return VOS_STATUS_SUCCESS -
\todo: how do we tell the callback there is a failure?
\sa sysOpen(), sysMcStart()
--------------------------------------------------------------------------*/
v_VOID_t sysTxThreadProbe( v_CONTEXT_t pVosContex, sysResponseCback userCallback,
v_VOID_t *pUserData );
/*----------------------------------------------------------------------------
\brief sysMcProcessMsg() - process SYS messages on the Main Controller thread
This function processes SYS Messages on the Main Controller thread.
SYS messages consist of all 'legacy' messages (messages bound for legacy
modules like LIM, HAL, PE, etc.) as well as newly defined SYS message
types.
SYS messages are identified by their type (in the SYS_MESSAGES enum) as
well as a 'cookie' that is in the reserved field of the message structure.
This 'cookie' is introduced to prevent any message type/ID conflicts with
the 'legacy' message types.
Any module attempting to post a message to the SYS module must set the
message type to one of the types in the SYS_MESSAGE enum *and* must also
set the Reserved field in the message body to SYS_MSG_COOKIE.
\param pVosContext - pointer to the VOS Context
\param pMsg - pointer to the message to be processed.
\return - VOS_STATUS_SUCCESS - the message was processed successfully.
VOS_STATUS_E_BADMSG - a bad (unknown type) message was received
and subsequently not processed.
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysMcProcessMsg( v_CONTEXT_t pVosContext, vos_msg_t* pMsg );
/*----------------------------------------------------------------------------
\brief sysTxProcessMsg() - process SYS messages on the Tx thread
This function processes SYS Messages on the Tx thread.
SYS messages consist of all 'legacy' messages (messages bound for legacy
modules like LIM, HAL, PE, etc.) as well as newly defined SYS message
types.
SYS messages are identified by their type (in the SYS_MESSAGES enum) as
well as a 'cookie' that is in the reserved field of the message structure.
This 'cookie' is introduced to prevent any message type/ID conflicts with
the 'legacy' message types.
Any module attempting to post a message to the SYS module must set the
message type to one of the types in the SYS_MESSAGE enum *and* must also
set the Reserved field in the message body to SYS_MSG_COOKIE.
\param pVosContext - pointer to the VOS Context
\param pMsg - pointer to the message to be processed.
\return - VOS_STATUS_SUCCESS - the message was processed successfully.
VOS_STATUS_E_BADMSG - a bad (unknown type) message was received
and subsequently not processed.
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysTxProcessMsg( v_CONTEXT_t pVContext, vos_msg_t* pMsg );
#ifdef FEATURE_WLAN_INTEGRATED_SOC
/*----------------------------------------------------------------------------
\brief sysTxProcessMsg() - process SYS messages on the Rx thread
This function processes SYS Messages on the Rx thread.
SYS messages consist of all 'legacy' messages (messages bound for legacy
modules like LIM, HAL, PE, etc.) as well as newly defined SYS message
types.
SYS messages are identified by their type (in the SYS_MESSAGES enum) as
well as a 'cookie' that is in the reserved field of the message structure.
This 'cookie' is introduced to prevent any message type/ID conflicts with
the 'legacy' message types.
Any module attempting to post a message to the SYS module must set the
message type to one of the types in the SYS_MESSAGE enum *and* must also
set the Reserved field in the message body to SYS_MSG_COOKIE.
\param pVosContext - pointer to the VOS Context
\param pMsg - pointer to the message to be processed.
\return - VOS_STATUS_SUCCESS - the message was processed successfully.
VOS_STATUS_E_BADMSG - a bad (unknown type) message was received
and subsequently not processed.
\sa
--------------------------------------------------------------------------*/
VOS_STATUS sysRxProcessMsg( v_CONTEXT_t pVContext, vos_msg_t* pMsg );
#endif
/*----------------------------------------------------------------------------
\brief sysMcFreeMsg() - free a message queue'd to the Main Controller thread
This fnction will free a SYS Message that is pending in the main controller
thread queue. These messages are free'd when the message queue needs to be
purged, for example during a Reset of Shutdown of the system.
\param pVosContext - pointer to the VOS Context
\param pMsg - the message to be free'd
\return Nothing.
--------------------------------------------------------------------------*/
v_VOID_t sysMcFreeMsg( v_CONTEXT_t pVosContext, vos_msg_t* pMsg );
/*----------------------------------------------------------------------------
\brief sysTxFreeMsg() - free a message queue'd to the Tx thread
This fnction will free a SYS Message that is pending in the Tx
thread queue. These messages are free'd when the message queue needs to be
purged, for example during a Reset of Shutdown of the system.
\param pVosContext - pointer to the VOS Context
\param pMsg - the message to be free'd
\return Nothing.
--------------------------------------------------------------------------*/
v_VOID_t sysTxFreeMsg( v_CONTEXT_t pVContext, vos_msg_t* pMsg );
/*----------------------------------------------------------------------------
\brief wlan_sys_ftm() - FTM Cmd Response from halPhy
This fnction is called by halPhy and carried the FTM command response.
This message is handled by SYS thread and finally the message will be convyed to used space
\param pttMsgBuffer - pointer to the pttMsgBuffer
\return Nothing.
--------------------------------------------------------------------------*/
void wlan_sys_ftm(void *pMsgPtr);
#endif // WLAN_QCT_SYS_H__