#ifndef _HALMAC_MODULE_H_
#define _HALMAC_MODULE_H_

#define HALMAC_VERSION(a, b, c)		(((a) << 16) + ((b) << 8) + (c))
#define	HALMAC_CURRENT_VERSION		HALMAC_VERSION(HALMAC_MAJOR_VER, HALMAC_PROTOTYPE_VER, HALMAC_MINOR_VER)

#define MAX_ARG_NUM	10

#define		TLP_TYPE_NONE							0x00000000
#define		TLP_TYPE_PU8							0x00000001
#define		TLP_TYPE_PU16							0x00000002
#define		TLP_TYPE_PU32							0x00000003
#define		TLP_TYPE_PU64							0x00000004
#define		TLP_TYPE_PS8							0x00000005
#define		TLP_TYPE_PS16							0x00000006
#define		TLP_TYPE_PS32							0x00000007
#define		TLP_TYPE_PS64							0x00000008
#define		TLP_TYPE_PVOID							0x00000009
#define		TLP_TYPE_PU8_BUFFER						0x0000000A
#define		TLP_TYPE_POS_API_ENTRY					0x0000000B
#define		TLP_TYPE_PHALMAC_WLAN_ADDR				0x0000000C
#define		TLP_TYPE_PHALMAC_PHY_PARAMETER_INFO		0x0000000D
#define		TLP_TYPE_PHALMAC_CH_INFO				0x0000000E
#define		TLP_TYPE_PHALMAC_CH_SWITCH_OPTION		0x0000000F
#define		TLP_TYPE_PHALMAC_GENERAL_INFO			0x00000010
#define		TLP_TYPE_PHALMAC_CMD_PROCESS_STATUS		0x00000011
#define		TLP_TYPE_PHALMAC_INTERFACE				0x00000012
#define		TLP_TYPE_PHALMAC_MAC_POWER				0x00000013
#define		TLP_TYPE_PHALMAC_RXAGG_CFG				0x00000014
#define		TLP_TYPE_PHALMAC_WIRELESS_MODE			0x00000015
#define		TLP_TYPE_PHALMAC_BW						0x00000016
#define		TLP_TYPE_PHALMAC_TRX_MODE				0x00000017
#define		TLP_TYPE_PHALMAC_EFUSE_READ_CFG			0x00000018
#define		TLP_TYPE_PHALMAC_PACKET_ID				0x00000019
#define		TLP_TYPE_PHALMAC_DRV_INFO				0x0000001A
#define		TLP_TYPE_PHALMAC_FEATURE_ID				0x0000001B
#define		TLP_TYPE_PHALMAC_HW_ID					0x0000001C
#define		TLP_TYPE_PHALMAC_DRV_RSVD_PG_NUM		0x0000001D
#define		TLP_TYPE_PHALMAC_LA_MODE				0x0000001E
#define		TLP_TYPE_PHALMAC_PWR_TRACKING			0x0000001F
#define		TLP_TYPE_PHALMAC_EFUSE_BANK				0x00000020
#define		TLP_TYPE_PHALMAC_IQK					0x00000021
#define		TLP_TYPE_PHALMAC_MU_BFER_INIT_PARA		0x00000022
#define		TLP_TYPE_PHALMAC_MU_BFEE_INIT_PARA		0x00000023
#define		TLP_TYPE_PHALMAC_SU_BFER_INIT_PARA		0x00000024
#define		TLP_TYPE_PHALMAC_SND_ROLE				0x00000025
#define		TLP_TYPE_PHALMAC_DATA_RATE				0x00000026
#define		TLP_TYPE_PHALMAC_CFG_MUMIMO_PARA		0x00000027
#define		TLP_TYPE_PU8_1							0x00000028
#define		TLP_TYPE_PHALMAC_PG_EFUSE_INFO			0x00000029
#define		TLP_TYPE_PU8_2							0x0000002A
#define		TLP_TYPE_PHALMAC_INTF_PHY_PLATFORM		0x0000002B
#define		TLP_TYPE_PHALMAC_API_REGISTRY			0x0000002C
#define		TLP_TYPE_PHALMAC_DLFW_MEM				0x0000002D
#define		TLP_TYPE_PHALMAC_FW_VERSION				0x0000002E
#define		TLP_TYPE_PHALMAC_SIDEBAND_INT_CFG		0x0000002F
#define		TLP_TYPE_PHALMAC_FIFO_SEL				0x00000030
#define		TLP_TYPE_PHALMAC_P2PPS					0x00000031
#define		TLP_TYPE_PHALMAC_RX_EXPAND_MODE			0x00000032
#define		TLP_TYPE_PHALMAC_PCIE_CFG				0x00000033
#define		TLP_TYPE_PHALMAC_SDIO_CMD53_4BYTE_MODE	0x00000034
#define		TLP_TYPE_PHALMAC_NETWORK_TYPE_SELECT	0x00000035
#define		TLP_TYPE_PHALMAC_BCN_CTRL				0x00000036
#define		TLP_TYPE_PHALMAC_SDIO_HW_INFO			0x00000037

typedef struct _HALMAC_TLP_STRUCT {
	u32 type;
	u32 length;
	VOID *ptr;
} HALMAC_TLP_STRUCT, *PHALMAC_TLP_STRUCT;

typedef struct _HALMAC_API_ARG {
	HALMAC_API_ID api_id;
	u32 arg_count;
	u32	arg_type_seq[MAX_ARG_NUM];
} HALMAC_API_ARG, *PHALMAC_API_ARG;

typedef struct _HALMAC_OBJ {
	u8 init;
	u32 version;
	PHALMAC_ADAPTER	halmac_adapter;
	PHALMAC_API	halmac_api_entry;
} HALMAC_OBJ, *PHALMAC_OBJ;

HALMAC_RET_STATUS
halmac_initialize_obj(
	IN struct _HALMAC_OBJ *halmac_obj,
	INOUT PHALMAC_TLP_STRUCT ptlp,
	IN	u32 tlpCount
);

HALMAC_RET_STATUS
halmac_deinitialize_obj(
	IN struct _HALMAC_OBJ *halmac_obj,
	INOUT PHALMAC_TLP_STRUCT ptlp,
	IN u32 tlpCount
);

HALMAC_RET_STATUS
halmac_set_information(
	IN struct _HALMAC_OBJ *halmac_obj,
	IN HALMAC_API_ID	api_id,
	INOUT PHALMAC_TLP_STRUCT ptlp,
	IN u32 tlpCount
);

HALMAC_RET_STATUS
halmac_get_information(
	IN struct _HALMAC_OBJ *halmac_obj,
	IN	HALMAC_API_ID	api_id,
	INOUT PHALMAC_TLP_STRUCT ptlp,
	IN	u32 tlpCount
);

#endif
