Edit online

数据结构设计

Read time: 2 minute(s)
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;
};