#ifndef __HAL_COM_TXBF_H__
#define __HAL_COM_TXBF_H__

/*
typedef	BOOLEAN
(*TXBF_GET)(
	IN	PVOID			pAdapter,
	IN	u1Byte			getType,
	OUT	PVOID			pOutBuf
	);

typedef	BOOLEAN
(*TXBF_SET)(
	IN	PVOID			pAdapter,
	IN	u1Byte			setType,
	OUT	PVOID			pInBuf
	);
*/
#define TxBF_Nr(a, b) ((a > b) ? (b) : (a))

typedef enum _TXBF_SET_TYPE{
	TXBF_SET_SOUNDING_ENTER,
	TXBF_SET_SOUNDING_LEAVE,
	TXBF_SET_SOUNDING_RATE,
	TXBF_SET_SOUNDING_STATUS,
	TXBF_SET_SOUNDING_FW_NDPA,
	TXBF_SET_SOUNDING_CLK,
	TXBF_SET_TX_PATH_RESET,
	TXBF_SET_GET_TX_RATE
}TXBF_SET_TYPE,*PTXBF_SET_TYPE;


typedef enum _TXBF_GET_TYPE{
	TXBF_GET_EXPLICIT_BEAMFORMEE,
	TXBF_GET_EXPLICIT_BEAMFORMER,
	TXBF_GET_MU_MIMO_STA,
	TXBF_GET_MU_MIMO_AP
}TXBF_GET_TYPE,*PTXBF_GET_TYPE;



//2 HAL TXBF related
typedef struct _HAL_TXBF_INFO {
	u1Byte				TXBFIdx;
	u1Byte				NdpaIdx;
	u1Byte				BW;
	u1Byte				Rate;

	RT_TIMER			Txbf_FwNdpaTimer;
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)	
	RT_WORK_ITEM		Txbf_EnterWorkItem;  
	RT_WORK_ITEM		Txbf_LeaveWorkItem;
	RT_WORK_ITEM		Txbf_FwNdpaWorkItem;
	RT_WORK_ITEM		Txbf_ClkWorkItem;
	RT_WORK_ITEM		Txbf_StatusWorkItem;
	RT_WORK_ITEM		Txbf_RateWorkItem;
	RT_WORK_ITEM		Txbf_ResetTxPathWorkItem;
	RT_WORK_ITEM		Txbf_GetTxRateWorkItem;
#endif

} HAL_TXBF_INFO, *PHAL_TXBF_INFO;

#if (BEAMFORMING_SUPPORT == 1)

VOID
halComTxbf_beamformInit(
	IN PVOID			pDM_VOID
	);

VOID
halComTxbf_ConfigGtab(
	IN PVOID			pDM_VOID
	);

VOID 
halComTxbf_EnterWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID 
halComTxbf_LeaveWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID 
halComTxbf_FwNdpaWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID
halComTxbf_ClkWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID
halComTxbf_ResetTxPathWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID
halComTxbf_GetTxRateWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID
halComTxbf_RateWorkItemCallback(	
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

VOID 
halComTxbf_FwNdpaTimerCallback(
	IN	PRT_TIMER		pTimer
	);

VOID
halComTxbf_StatusWorkItemCallback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	IN	PADAPTER		Adapter
#else
	IN PVOID			pDM_VOID
#endif
	);

BOOLEAN
HalComTxbf_Set(
	IN PVOID			pDM_VOID,
	IN	u1Byte			setType,
	IN	PVOID			pInBuf
	);

BOOLEAN
HalComTxbf_Get(
	IN	PADAPTER		Adapter,
	IN	u1Byte			getType,
	OUT	PVOID			pOutBuf
	);

#else
#define halComTxbf_beamformInit(pDM_VOID)					NULL
#define halComTxbf_ConfigGtab(pDM_VOID)				NULL
#define halComTxbf_EnterWorkItemCallback(_Adapter)		NULL
#define halComTxbf_LeaveWorkItemCallback(_Adapter)		NULL
#define halComTxbf_FwNdpaWorkItemCallback(_Adapter)		NULL
#define halComTxbf_ClkWorkItemCallback(_Adapter)			NULL
#define halComTxbf_RateWorkItemCallback(_Adapter)		NULL
#define halComTxbf_FwNdpaTimerCallback(_Adapter)		NULL
#define halComTxbf_StatusWorkItemCallback(_Adapter)		NULL
#define HalComTxbf_Get(_Adapter, _getType, _pOutBuf)

#endif
							
#endif	// #ifndef __HAL_COM_TXBF_H__								

