/******************************************************************************
 *
 * Copyright(c) 2016 - 2017 Realtek Corporation.
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of version 2 of the GNU General Public License as
 * published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
 * more details.
 *
 *****************************************************************************/
#ifndef __HAL_COM_TXBF_H__
#define __HAL_COM_TXBF_H__

/*
typedef	bool
(*TXBF_GET)(
	void*			p_adapter,
	u8			get_type,
	void*			p_out_buf
	);

typedef	bool
(*TXBF_SET)(
	void*			p_adapter,
	u8			set_type,
	void*			p_in_buf
	);
*/

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
};


enum txbf_get_type {
	TXBF_GET_EXPLICIT_BEAMFORMEE,
	TXBF_GET_EXPLICIT_BEAMFORMER,
	TXBF_GET_MU_MIMO_STA,
	TXBF_GET_MU_MIMO_AP
};



/* 2 HAL TXBF related */
struct _HAL_TXBF_INFO {
	u8				txbf_idx;
	u8				ndpa_idx;
	u8				BW;
	u8				rate;

	struct timer_list			txbf_fw_ndpa_timer;
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	RT_WORK_ITEM		txbf_enter_work_item;
	RT_WORK_ITEM		txbf_leave_work_item;
	RT_WORK_ITEM		txbf_fw_ndpa_work_item;
	RT_WORK_ITEM		txbf_clk_work_item;
	RT_WORK_ITEM		txbf_status_work_item;
	RT_WORK_ITEM		txbf_rate_work_item;
	RT_WORK_ITEM		txbf_reset_tx_path_work_item;
	RT_WORK_ITEM		txbf_get_tx_rate_work_item;
#endif

};

#if (BEAMFORMING_SUPPORT == 1)

void
hal_com_txbf_beamform_init(
	void			*p_dm_void
);

void
hal_com_txbf_config_gtab(
	void			*p_dm_void
);

void
hal_com_txbf_enter_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_leave_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_fw_ndpa_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_clk_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_reset_tx_path_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_get_tx_rate_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_rate_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

void
hal_com_txbf_fw_ndpa_timer_callback(
	struct timer_list		*p_timer
);

void
hal_com_txbf_status_work_item_callback(
#if (DM_ODM_SUPPORT_TYPE == ODM_WIN)
	struct _ADAPTER		*adapter
#else
	void			*p_dm_void
#endif
);

boolean
hal_com_txbf_set(
	void			*p_dm_void,
	u8			set_type,
	void			*p_in_buf
);

boolean
hal_com_txbf_get(
	struct _ADAPTER		*adapter,
	u8			get_type,
	void			*p_out_buf
);

#else
#define hal_com_txbf_beamform_init(p_dm_void)					NULL
#define hal_com_txbf_config_gtab(p_dm_void)				NULL
#define hal_com_txbf_enter_work_item_callback(_adapter)		NULL
#define hal_com_txbf_leave_work_item_callback(_adapter)		NULL
#define hal_com_txbf_fw_ndpa_work_item_callback(_adapter)		NULL
#define hal_com_txbf_clk_work_item_callback(_adapter)			NULL
#define hal_com_txbf_rate_work_item_callback(_adapter)		NULL
#define hal_com_txbf_fw_ndpa_timer_callback(_adapter)		NULL
#define hal_com_txbf_status_work_item_callback(_adapter)		NULL
#define hal_com_txbf_get(_adapter, _get_type, _pout_buf)

#endif

#endif	/*  #ifndef __HAL_COM_TXBF_H__ */
