int(*read_status)(struct phy_device *phydev); int(*ack_interrupt)(struct phy_device *phydev); int(*config_intr)(struct phy_device *phydev); int(*did_interrupt)(struct phy_device *phydev); void(*remove)(struct phy_device *phydev); int(*match_phy_device)(struct phy_device *phydev...
上图来自 瑞昱半导体 (RealTek) 的 RTL8201F 系列网卡 PHY 芯片手册。按OSI 7层网络模型划分,网卡PHY 芯片(图中的RTL8201F)位于物理层,对应的软件层就是本文讨论的 PHY 驱动层;而 MAC 位于 数据链路层,也是通常软件上所说的网卡驱动层,它不是本文的重点,不做展开。另
->of_mdiobus_register_phy--从设备树获取PHY进行注册。->get_phy_device-- ->get_phy_id--通过MDIO总线读取MII_PHYSID1和MII_PHYSID2,即PHY设备ID。->phy_device_create--创建PHY设备,设备总线为mdio_bus_type,设备类型为mdio_bus_phy_type。 ->phy_state_machine->phy_device_register->mdiobus_registe...
dr_mode为USB_DR_MODE_HOST // RK3399的USB3.0的PHY为Type-C PHY,除了在dwc3_core_init()中上电,还需要在 // 这里上电,以防止USB设备连接到DWC3主机控制器后状态切换为suspend时关闭PHY的电源 phy_power_on(dwc->usb2_generic_phy) phy_power_on(dwc->usb3_generic_phy) rockchip->is_phy_on = ...
(skb, gfp_mask); else //clone新的skb skb = skb_clone(skb, gfp_mask); if (unlikely(!skb)) return -ENOBUFS; } skb_mstamp_get(&skb->skb_mstamp); //获取INET层和TCP层的传输控制块、skb中的TCP私有数据块 inet = inet_sk(sk); tcb = TCP_SKB_CB(skb); memset(&opts, 0, sizeof(...
of_get_parent函数 (内核源码/include/linux/of.h) 1 struct device_node *of_get_parent(const struct device_node *node) 参数: node: 指定谁(节点)要查找父节点。 返回值: device_node: device_node类型的结构体指针,保存获取得到的节点。同样,如果失败返回NULL。8.3...
创建并注册 Phy 设备 fec_probe(struct platform_device*pdev)->struct device_node*np=pdev->dev.of_node,*phy_node;// 获取设备树节点句柄,并创建一个phy的设备树节点句柄->fec_enet_get_queue_num(pdev,&num_tx_qs,&num_rx_qs);// 从设备树获取fsl,num-tx-queues和fsl,num-rx-queues的属性值->n...
根据配置的模式,进入对应的模式。若是Host,则需要将USB2.0 PHY和USB3.0 PHY设置为PHY_MODE_USB_HOST,然后注册xhci的platform_device。 4.xHCI驱动初始化 dwc3驱动将设备树中的USB Host设备节点转换成platform_device,并将其name设置为"xhci-hcd",然后调用platform_device_add注册到系统中。USB Host驱动通过platform_...
phy-mode = "rmii"; phy-handle = <ðphy1>; phy-reset-gpios = <&gpio5 8 GPIO_ACTIVE_LOW>; phy-reset-duration = <200>; status = "okay"; mdio { #address-cells = <1>; #size-cells = <0>; ethphy0: ethernet-phy@0 { ...
对寄存器 0 和寄存器 1 的读写可以实现对网卡的管理,清单 1 列出了部分 PHY 管理寄存器以及控制寄存器和状态寄存器的各个 bit 的定义。 Linux内核中的/kernel/drivers/net/Mii.h, 定义 PHY 管理寄存器。 #define MII_BMCR 0x00 /* Basic mode control register */ #define MII_BMSR 0x01 /* Basic mode ...