DM_USB模型简介

概览
根据Uboot的DM模型,需要有udevice_id或UBOOT_DEVICE描述设备信息,U_BOOT_DRIVER驱动对应设备的实际硬件操作;UCLASS_USB描述抽象的类信息,和与其对应的UCLASS_DRIVER来描述对应的通用操作。如果一脸懵逼,请先阅读下前言中的博客链接,才能更好的理解Uboot中的驱动模型。

Host驱动简要分析

UCLASS驱动
源自文件drivers/usb/host/usb-uclass.c。

  792 UCLASS_DRIVER(usb) = {
  793     .id     = UCLASS_USB,
  794     .name       = "usb",
  795     .flags      = DM_UC_FLAG_SEQ_ALIAS,
  796     .post_bind  = dm_scan_fdt_dev,
  797     .priv_auto_alloc_size = sizeof(struct usb_uclass_priv),
  798     .per_child_auto_alloc_size = sizeof(struct usb_device),
  799     .per_device_auto_alloc_size = sizeof(struct usb_bus_priv),
  800     .child_post_bind = usb_child_post_bind,
  801     .child_pre_probe = usb_child_pre_probe,
  802     .per_child_platdata_auto_alloc_size = sizeof(struct usb_dev_platdata),
  803 };

设备驱动
源自文件drivers/usb/host/ehci-exynos.c。

  247 static const struct udevice_id ehci_usb_ids[] = {
  248     { .compatible = "samsung,exynos-ehci" },
  249     { }
  250 };  
  251 
  252 U_BOOT_DRIVER(usb_ehci) = {
  253     .name   = "ehci_exynos",
  254     .id = UCLASS_USB,
  255     .of_match = ehci_usb_ids,
  256     .ofdata_to_platdata = ehci_usb_ofdata_to_platdata,
  257     .probe = ehci_usb_probe,
  258     .remove = ehci_usb_remove,
  259     .ops    = &ehci_usb_ops,
  260     .priv_auto_alloc_size = sizeof(struct exynos_ehci),
  261     .platdata_auto_alloc_size = sizeof(struct exynos_ehci_platdata),
  262     .flags  = DM_FLAG_ALLOC_PRIV_DMA,
  263 };  

设备驱动操作集
源自文件drivers/usb/host/ehci-exynos.c。

  1665 struct dm_usb_ops ehci_usb_ops = {
  1666     .control = ehci_submit_control_msg,
  1667     .bulk = ehci_submit_bulk_msg,
  1668     .interrupt = ehci_submit_int_msg,
  1669     .create_int_queue = ehci_create_int_queue,
  1670     .poll_int_queue = ehci_poll_int_queue,
  1671     .destroy_int_queue = ehci_destroy_int_queue,
  1672     .get_max_xfer_size  = ehci_get_max_xfer_size,
  1673 }; 

工作流程
udevice和对应uclass的创建(初始化DM时自动创建)
udevice和对应uclass的绑定(初始化DM时自动绑定)
对应udevice的probe调用 (需要自己实现)
uclass的接口调用(最终对应udevice driver中ops结构体保存的各种回调)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值