数据结构设计
struct aic_sdmc_host
属于 HAL 层接口,定义了 SDMC 控制器
管理信息:
struct aic_sdmc_host {
volatile void *base;
u32 is_sdio;
u32 fifoth_val;
#ifdef AIC_SDMC_IRQ_MODE
aicos_sem_t complete;
#endif
};
struct aic_sdmc_idma_desc
属于 HAL 层接口,记录了 SDMC 控制器内部 DMA
访问的描述符:
struct aic_sdmc_idma_desc {
u32 flags;
u32 cnt;
u32 addr;
u32 next_addr;
} __aligned(8);
struct aic_sdmc
RT-Thread
属于 Driver 层的内部接口,用于记录 SDMC
控制器的管理信息:
struct aic_sdmc {
struct rt_mmcsd_host *rthost;
struct rt_mmcsd_req *req;
struct rt_mmcsd_cmd *cmd;
struct aic_sdmc_host host;
rt_uint32_t *buf;
u32 clk;
u32 irq;
u32 index;
u32 cid[4];
unsigned int quirks;
unsigned int caps;
unsigned int version;
unsigned int clock;
unsigned int sclk_rate;
unsigned int div;
int buswidth;
int ddr_mode;
/* use fifo mode to read and write data */
int fifo_mode;
struct aic_sdmc_pdata *pdata;
u8 is_enable;
};
Baremetal
属于 Baremetal Driver 层的内部接口,用于记录 SDMC
控制器的管理信息:
struct aic_sdmc {
struct aic_sdmc_dev *dev;
struct aic_sdmc_cmd *cmd;
struct aic_sdmc_data *data;
struct aic_sdmc_host host;
u32 *buf;
u32 clk;
u32 irq;
u32 index;
unsigned int quirks;
unsigned int caps;
unsigned int version;
unsigned int clock;
unsigned int sclk_rate;
unsigned int div;
int buswidth;
int ddr_mode;
/* use fifo mode to read and write data */
int fifo_mode;
struct aic_sdmc_pdata *pdata;
};