luckfox-pico-sdk/sysdrv/drv_ko/wifi/ssv6115/include/ipc_msg.h
luckfox-eng29 8f34c2760d project:build.sh: Added fastboot support; custom modifications to U-Boot and kernel implemented using patches.
project:cfg:BoardConfig_IPC: Added fastboot BoardConfig file and firmware post-scripts, distinguishing between
the BoardConfigs for Luckfox Pico Pro and Luckfox Pico Max. project:app: Added fastboot_client and rk_smart_door
for quick boot applications; updated rkipc app to adapt to the latest media library. media:samples: Added more
usage examples. media:rockit: Fixed bugs; removed support for retrieving data frames from VPSS. media:isp:
Updated rkaiq library and related tools to support connection to RKISP_Tuner. sysdrv:Makefile: Added support for
compiling drv_ko on Luckfox Pico Ultra W using Ubuntu; added support for custom root filesystem.
sysdrv:tools:board: Updated Buildroot optional mirror sources, updated some software versions, and stored device
tree files and configuration files that undergo multiple modifications for U-Boot and kernel separately.
sysdrv:source:mcu: Used RISC-V MCU SDK with RT-Thread system, mainly for initializing camera AE during quick
boot. sysdrv:source:uboot: Added support for fastboot; added high baud rate DDR bin for serial firmware upgrades.
sysdrv:source:kernel: Upgraded to version 5.10.160; increased NPU frequency for RV1106G3; added support for
fastboot.

Signed-off-by: luckfox-eng29 <eng29@luckfox.com>
2024-10-14 09:47:04 +08:00

437 lines
14 KiB
C

#ifndef __IPC_MSG_H__
#define __IPC_MSG_H__
/*******************************************************************************
* Include Files
******************************************************************************/
#include "rf_table.h"
/*******************************************************************************
* Defines
******************************************************************************/
#ifndef SSV_PACKED_STRUCT
//SSV PACK Definition
#define SSV_PACKED_STRUCT_BEGIN
#define SSV_PACKED_STRUCT //__attribute__ ((packed))
#define SSV_PACKED_STRUCT_END //__attribute__((packed))
#define SSV_PACKED_STRUCT_STRUCT __attribute__ ((packed))
#define SSV_PACKED_STRUCT_FIELD(x) x
#endif
#define REG_FW_VERSION 0x08D00804
/*******************************************************************************
* Enumerations
******************************************************************************/
typedef enum _en_ipc_type
{
E_IPC_TYPE_MSG = 0,
E_IPC_TYPE_ACK = 1,
E_IPC_TYPE_DBG = 2,
E_IPC_TYPE_DATA = 3,
E_IPC_TYPE_TXCFM = 4,
E_IPC_TYPE_AGG_REORD_MSG = 5,
E_IPC_TYPE_DBG_DUMP_START = 6,
E_IPC_TYPE_DBG_DUMP_END = 7,
E_IPC_TYPE_DBG_LA_TRACE = 8,
E_IPC_TYPE_DBG_RHD_DESC = 9,
E_IPC_TYPE_DBG_RBD_DESC = 10,
E_IPC_TYPE_DBG_TX_DESC = 11,
E_IPC_TYPE_DUMP_INFO = 12,
E_IPC_TYPE_TX_STOP = 13,
E_IPC_TYPE_TX_RESUME = 14,
E_IPC_TYPE_PRIV_MSG = 15,
E_IPC_TYPE_MAX,
} EN_IPC_TYPE;
//if change must sync to lmac_msg.h of HOST size
enum private_msg_tag
{
PRIV_SET_AMPDU,
PRIV_TXTPUT_REQ,
PRIV_TXTPUT_IND,
PRIV_RXTPUT_REQ,
PRIV_RXTPUT_CFM,
PRIV_MAX,
};
typedef enum en_ipc_priv_msg_type
{
E_IPC_PRIV_MSG_TYPE_START = 0,
E_IPC_PRIV_MSG_TYPE_SET_AMPDU, ///< 1, Set AMPDU
E_IPC_PRIV_MSG_TYPE_TXTPUT_REQ, ///< 2, Txtput request
E_IPC_PRIV_MSG_TYPE_TXTPUT_IND, ///< 3, Txtput indication
E_IPC_PRIV_MSG_TYPE_RXTPUT_REQ, ///< 4, Rxtput request
E_IPC_PRIV_MSG_TYPE_RXTPUT_IND, ///< 5, Rxtput indication
E_IPC_PRIV_MSG_TYPE_SW_ACK_IND, ///< 6, sw ack ind
E_IPC_PRIV_MSG_TYPE_FILTER_DUP_RX_REQ, ///< 7, filter duplicate rx
E_IPC_PRIV_MSG_TYPE_NIMBLE_OPS, ///< 8, nimble ops
E_IPC_PRIV_MSG_TYPE_NIMBLE_EVT, ///< 9, nimble event
E_IPC_PRIV_MSG_TYPE_CMD_RFPHY_SET_TABLE = 10, ///< 10, RF set conf table
E_IPC_PRIV_MSG_TYPE_CMD_RFPHY_OPS, ///< 11, RF Tool ops
E_IPC_PRIV_MSG_TYPE_CMD_EFUSE_OPS, ///< 12, RF Tool ops
E_IPC_PRIV_MSG_TYPE_RSP_EFUSE_IND,
E_IPC_PRIV_MSG_TYPE_CMD_RFPHY_INIT_TABLE, /// 14, RF set conf table and init rfphy
E_IPC_PRIV_MSG_TYPE_CMD_AGC_REG_TABLE, /// 15. Send agc setting
E_IPC_PRIV_MSG_TYPE_CMD_RFPHY_REG_TABLE, /// 16. Send rf phy setting
E_IPC_PRIV_MSG_TYPE_RSP_RF_IND, /// 17 Response to host
E_IPC_PRIV_MSG_TYPE_MACADDR_REQ, /// 18. mac address
E_IPC_PRIV_MSG_TYPE_CMD_REG_RW, /// 19. read/write register request from host
E_IPC_PRIV_MSG_TYPE_RSP_REG_RW, /// 20. read/write register reponse to host
E_IPC_PRIV_MSG_TYPE_WMM_FOLLOW_VO_REQ, /// 21. wmm follow by vo param
E_IPC_PRIV_MSG_TYPE_IPC_TX_USE_ONE_HWQ = 22, /// 22. IPC TX uses one HWQ
E_IPC_PRIV_MSG_TYPE_SET_POLICY_TBL_REQ, /// 23. set rts method
E_IPC_PRIV_MSG_TYPE_CMD_RFCALIB_RESULT_BACKUP, /// 24. Notify Fw backup rf calibration result
E_IPC_PRIV_MSG_TYPE_TXQ_CREDIT_BOUNDARY, /// 25. set txq credit boundary
E_IPC_PRIV_MSG_TYPE_IO_AGGR, ///< 26, Set IO aggregation
E_IPC_PRIV_MSG_TYPE_PING_IPC_REQ, /// 27, ping IPC layer request
E_IPC_PRIV_MSG_TYPE_PING_IPC_IND, /// 28, ping IPC layer reply
E_IPC_PRIV_MSG_TYPE_BLE_INIT, /// 29. ble init
E_IPC_PRIV_MSG_TYPE_BLE_OPS, /// 30. ble packet
E_IPC_PRIV_MSG_TYPE_BLE_EVT, /// 31. ble event
E_IPC_PRIV_MSG_TYPE_SET_MIFI_FEATURE, ///32, Set MIFI Lowpower
E_IPC_PRIV_MSG_TYPE_ADAPTIVE_OPS_ENABLE, ///33, adapt enable
E_IPC_PRIV_MSG_TYPE_ADAPTIVE_OPS_DISABLE, ///34, adapt disable
E_IPC_PRIV_MSG_TYPE_ADAPTIVE_OPS_SET, ///35, adapt set parameter
E_IPC_PRIV_MSG_TYPE_MAC_ADDR_RULE, ///< 36, Set mac addr rule
E_IPC_PRIV_MSG_TYPE_END = 0xFFFF,
}EN_IPC_PRIV_MSG_TYPE;
typedef enum {
SSV6XXX_RFPHY_CMD_INIT_PLL_PHY_RF = 0,
SSV6XXX_RFPHY_CMD_CHAN = 1,
SSV6XXX_RFPHY_CMD_RF_ENABLE = 2,
SSV6XXX_RFPHY_CMD_RF_DISABLE = 3,
SSV6XXX_RFPHY_CMD_PHY_ENABLE = 4,
SSV6XXX_RFPHY_CMD_PHY_DISABLE = 5,
SSV6XXX_RFPHY_CMD_DUMP_PHY_REG = 6,
SSV6XXX_RFPHY_CMD_DUMP_RF_REG = 7,
SSV6XXX_RFPHY_CMD_TX_PWR = 8,
SSV6XXX_RFPHY_CMD_INIT_CALI = 9,
SSV6XXX_RFPHY_CMD_RESTORE_CALI = 10,
SSV6XXX_RFPHY_CMD_DPD_ENABLE = 11,
SSV6XXX_RFPHY_CMD_DPD_DISABLE = 12,
SSV6XXX_RFPHY_CMD_RESTORE_DPD = 13,
SSV6XXX_RFPHY_CMD_INIT_DPD = 14,
SSV6XXX_RFPHY_CMD_INIT_PLL = 15,
SSV6XXX_RFPHY_CMD_RF_TOOL_TX = 16, //tx
SSV6XXX_RFPHY_CMD_RF_TOOL_STOP = 17, //stop
SSV6XXX_RFPHY_CMD_RF_TOOL_RATE = 18,
SSV6XXX_RFPHY_CMD_RF_TOOL_FREQ = 19,
SSV6XXX_RFPHY_CMD_RF_TOOL_RX_MIB = 20,
SSV6XXX_RFPHY_CMD_RF_TOOL_RX_RESET = 21, //rxreset
SSV6XXX_RFPHY_CMD_RF_TOOL_CH = 22, //ch
SSV6XXX_RFPHY_CMD_RF_TOOL_THERMAL = 23,
SSV6XXX_RFPHY_CMD_RF_TOOL_DCDC = 24,
SSV6XXX_RFPHY_CMD_RF_TOOL_DACGAIN = 25,
SSV6XXX_RFPHY_CMD_RF_TOOL_PADPD = 26,
SSV6XXX_RFPHY_CMD_RF_TOOL_WFBLE = 27,
SSV6XXX_RFPHY_CMD_RF_TOOL_RATEBGAIN = 28,
SSV6XXX_RFPHY_CMD_RF_TONE_GEN = 29,
SSV6XXX_RFPHY_CMD_RF_TOOL_HETBRUIDX = 30,
SSV6XXX_RFPHY_CMD_RF_TOOL_RATEPOWER = 31,
SSV6XXX_RFPHY_CMD_RF_TOOL_ENGMODE = 32,
SSV6XXX_RFPHY_CMD_RF_TOOL_TEMPERATURE = 33,
SSV6XXX_RFPHY_CMD_SCAN_START = 50,
SSV6XXX_RFPHY_CMD_SCAN_DONE,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_START,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_STOP,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_RATE,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_CH,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_RESET,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_COUNT,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_DACGAIN,
SSV6XXX_RFPHY_CMD_RFBLE_TOOL_PATTERN,
} ssv_rf_phy_ops;
typedef enum {
SSV6XXX_EFUSE_CMD_READ_CHIPID = 0,
SSV6XXX_EFUSE_CMD_READ_MAC = 1,
SSV6XXX_EFUSE_CMD_WRITE_MAC = 2,
SSV6XXX_EFUSE_CMD_READ_TX_POWER1 = 3,
SSV6XXX_EFUSE_CMD_WRITE_TX_POWER1 = 4,
SSV6XXX_EFUSE_CMD_READ_XTAL = 5,
SSV6XXX_EFUSE_CMD_WRITE_XTAL = 6,
SSV6XXX_EFUSE_CMD_READ_RATE_GAIN_B_N40 = 7,
SSV6XXX_EFUSE_CMD_WRITE_RATE_GAIN_B_N40 = 8,
SSV6XXX_EFUSE_CMD_READ_PSK = 9,
SSV6XXX_EFUSE_CMD_WRITE_PSK = 10,
SSV6XXX_EFUSE_CMD_CHECK_ITEM_FREE = 11,
SSV6XXX_EFUSE_CMD_READ_BLE_POWER = 12,
SSV6XXX_EFUSE_CMD_WRITE_BLE_POWER = 13,
SSV6XXX_EFUSE_CMD_READ_RATE_GAIN_G_N20 = 14,
SSV6XXX_EFUSE_CMD_WRITE_RATE_GAIN_G_N20 = 15,
SSV6XXX_EFUSE_CMD_READ_HETB_CAL_RATE_POWER = 16,
SSV6XXX_EFUSE_CMD_WRITE_HETB_CAL_RATE_POWER = 17,
SSV6XXX_EFUSE_CMD_READ_RATE_GAIN_SU20 = 18,
SSV6XXX_EFUSE_CMD_WRITE_RATE_GAIN_SU20 = 19,
SSV6XXX_EFUSE_CMD_READ_RATE_GAIN_SU40 = 20,
SSV6XXX_EFUSE_CMD_WRITE_RATE_GAIN_SU40 = 21,
SSV6XXX_EFUSE_CMD_READ_RATE_GAIN_TB20 = 22,
SSV6XXX_EFUSE_CMD_WRITE_RATE_GAIN_TB20 = 23,
SSV6XXX_EFUSE_CMD_READ_RATE_GAIN_TB40 = 24,
SSV6XXX_EFUSE_CMD_WRITE_RATE_GAIN_TB40 = 25,
SSV6XXX_EFUSE_CMD_READ_USB_PID_VID = 26,
SSV6XXX_EFUSE_CMD_WRITE_USB_PID_VID = 27,
} ssv_efuse_ops;
/*******************************************************************************
* Structures
******************************************************************************/
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_set_ampdu_req
{
u32 priv_type;
u32 length;
u32 hw_cap;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_SET_AMPDU_REQ;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_priv_msg
{
u32 msgid;
u32 msglen;
u8 data[0];
}SSV_PACKED_STRUCT_STRUCT ST_IPC_PRIV_MSG;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_tput_param
{
u32 size;
u32 looptimes;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_TPUT_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_filter_dup_rx_param
{
u32 filter_duplicate_rx;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_FILTER_DUP_RX_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_wmm_follow_vo_param
{
u32 wmm_follow_vo;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_WMM_FOLLOW_VO_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_mac_addr_param
{
u8 mac_addr0[6];
u8 mac_addr1[6];
}SSV_PACKED_STRUCT_STRUCT ST_IPC_MAC_ADDR_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_reg_rw_param
{
u32 rw_method;
u32 addr;
u32 value;
}__packed ST_IPC_REG_RW_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
struct ssv_efuse_tool_param {
u32 efuse_cmd;
u8 wait_resp;
u8 resv1;
u8 xtal;
u8 psk_len;
u8 psk[32];
u32 chip_id;
u8 mac[6];
u8 txpower1_gain5200;
u8 txpower1_gain2000;
u8 rate_gain_b;
u8 rate_gain_n40;
u8 rate_gain_g;
u8 rate_gain_n20;
u8 hetb_cal_rate;
u8 hetb_cal_power;
u8 rate_gain_su20;
u8 rate_gain_su40;
u8 rate_gain_tb20;
u8 rate_gain_tb40;
u8 ble_gain;
u8 check_item_free;
u16 usb_pid;
u16 usb_vid;
u32 resv2;
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
struct ssv_rf_tool_param {
u16 rf_cmd;
u16 wait_resp;
u32 interval;
u32 count;
u16 rate;
u16 freq;
u32 rx_reset:8;
u32 rx_mib:8;
u32 ch:8;
u32 ch_type:8;
u32 rx_count:16;
u32 rx_err_count:16;
u32 disable_thermal:1;
u32 dcdc:1;
u32 dacgain:8;
u32 padpd:4;
u32 wfble:1;
u32 ratebgain:8;
u32 tone_gen:1;
u32 rssi:8;
u32 hetbruid:16;
u32 ratepower:16;
u32 engmode:8;
u32 temperature:8;
u32 reserve1:8;
u32 reserve2:8;
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT
struct ssv_rfble_tool_param {
u16 rfble_cmd;
u16 wait_resp;
u32 count;
u8 packet_len;
u8 rate;
u8 chan;
u8 interval;
u16 rx_count;
u16 rx_err_count;
u32 dacgain:8;
u32 pattern:8;
u32 rsvd0:8;
u32 rsvd1:8;
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT
struct ssv_rf_cali {
u32 xtal;
u32 support_5g:4;
u32 thermal:4;
u32 greentx_en:1;
u32 disable_cci:1;
u32 resv1:6;
u32 bus_clk:16;
u32 thermal_low_thershold:16;
u32 thermal_high_thershold:16;
u32 resv0;
struct st_rf_table rf_table;
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_set_policy_tbl_param
{
/*set_rts_method:
3b000: No protection;
3b001: Self-CTS;
3b010: RTS/CTS with intended receiver of this PPDU;
3b011: RTS/CTS with QAP;
3b100: STBC protection;*/
u8 set_rts_method;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_SET_POLICY_TBL_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_txq_credit_boundary_param
{
u32 boundary;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_TXQ_CREDIT_BOUNDARY_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_ipc_io_aggr_param
{
u32 is_rx;
u32 enable;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_IO_AGGR_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct st_mac_addr_rule_param
{
u32 mac_low_mask;
u32 mac_high_mask;
}SSV_PACKED_STRUCT_STRUCT ST_MAC_ADDR_RULE_PARAM;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT_BEGIN
typedef struct ST_IPC_SET_MIFI
{
u32 status;
u32 no_traffic_duration;
}SSV_PACKED_STRUCT_STRUCT ST_IPC_SET_MIFI;
SSV_PACKED_STRUCT_END
// hci bus defines
#define SSV_BLE_HCI_OVER_UART 0
#define SSV_BLE_HCI_OVER_HWIF 1 // USB or SDIO
SSV_PACKED_STRUCT
struct ssv_ble_cfg {
u8 bus:1;
u8 hci_reset:1;
u8 dtm:1;
u8 rsvd:5;
u8 bdaddr[6];
u16 replace_scan_interval;
u16 replace_scan_win;
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
//ipc memory 使用的policy
//驅動ipc msg tx rx 尚未ready前, 可以使用ipc memory和FW交換訊息
//當ipc msg tx rx ready後, 建議使用ke msg和FW交換訊息
#define SSV_IPC_MEM_SIZE 512
#define SSV_CALI_RESULT_SIZE 43
SSV_PACKED_STRUCT
struct st_ipc_mem_layout {
u32 pattern;
u32 rf_cali_result[SSV_CALI_RESULT_SIZE];
u32 rf_cali_mcs9_result[SSV_CALI_RESULT_SIZE];
u8 reserve[164];
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
SSV_PACKED_STRUCT
struct st_ipc_adaptive_param {
u32 interval;
u32 hit_count;
u32 total_count;
u32 threshold;
}SSV_PACKED_STRUCT_STRUCT;
SSV_PACKED_STRUCT_END
/*******************************************************************************
* Variables
******************************************************************************/
/*******************************************************************************
* Funcations
******************************************************************************/
#endif /* __IPC_MSG_H__ */