DCA驱动框架在Linux驱动目录dca下。
完整DCA驱动有三部分组成:
1)DCA驱动框架;
这部分是Linux驱动服务层内容。提供者和请求者通过DCA驱动框架关联到一起,进行工作。
2)提供DCA服务的设备驱动框架;
申请和注册过程
struct dca_provider *alloc_dca_provider(const struct dca_ops *ops, int priv_size)
int register_dca_provider(struct dca_provider *dca, struct device *dev)
注销和释放过程
void unregister_dca_provider(struct dca_provider *dca, struct device *dev)
void free_dca_provider(struct dca_provider *dca)
核心数据结构是struct dca_provider, 该数据结构的 struct dca_ops描述了提供DCA服务。
struct dca_ops { int (*add_requester) (struct dca_provider *, struct device *); int (*remove_requester) (struct dca_provider *, struct device *); u8 (*get_tag) (struct dca_provider *, struct device *, int cpu); int (*dev_managed) (struct dca_provider *, struct device *); };
3)请求DCA服务的设备驱动框架;
将设备添加为请求者过程
int dca_add_requester(struct device *dev)
将设备撤销请求者过程
int dca_remove_requester(struct device *dev)
在设备驱动正常使用过程中,需要获得tag标签值时,调用
u8 dca3_get_tag(struct device *dev, int cpu)