数据结构设计
Driver 层主要数据接口
struct aic_xspi { char *name; u32 idx; u32 clk_id; u32 clk_in_hz; u32 dma_port_id; u32 irq_num; hal_xspi_handle handle; bool inited; };
注:
name, idx, clk_id, clk_in_hz
属性需要有相应的值, 其中
clk_id
使用 aic_clk_id.h
文件的宏定义,
clk_in_hz
从配置文件中获取
HAL 层主要数据结构
struct hal_xspi_config { u32 idx; u32 clk_in_hz; u32 clk_id; u32 cs0_port; u32 cs1_port; bool bit_mode; bool wire3_en; bool lsb_en; bool cs_auto; u8 cs_polarity; u8 cpol; u8 cpha; };
struct hal_xspi_transfer { u8 *tx_data; u8 *rx_data; u32 data_len; };
struct hal_xspi_proto_cfg { u8 mode; u8 clk_mode; u8 parallel_mode; u8 wr_cmd_clk_mode; u8 wr_cmd_lines; u8 wr_cmd_val; u8 rd_cmd_clk_mode; u8 rd_cmd_lines; u8 rd_cmd_val; u8 addr_clk_mode; u8 addr_lines; u8 addr_width; u8 wr_dummy; u8 rd_dummy; u8 wr_cnt_lines; u32 wr_cnt; u8 rd_cnt_lines; u32 rd_cnt; };
struct hal_xspi_state { u32 idx; hal_xspi_async_cb cb; void *cb_priv; u32 status; u32 clk_id; u32 bus_hz; u32 bus_width; struct hal_xspi_dma_config dma_cfg; void *dma_tx; void *dma_rx; u8 *async_tx; /* Used in Async Non-DMA mode */ u8 *async_rx; /* Used in Async Non-DMA mode */ u32 async_tx_remain; /* Used in Async Non-DMA mode */ u32 async_rx_remain; /* Used in Async Non-DMA mode */ u32 work_mode; u32 done_mask; };