Linux5.10版本mv88e6390芯片驱动程序代码初始化全流程详解
时间: 2024-03-08 19:48:50 浏览: 259
linux系统的初始化流程
在Linux 5.10版本中,MV88E6390芯片的驱动程序代码初始化流程大致如下:
1. 注册设备节点:在设备树中注册MV88E6XXX设备节点,包括设备地址、中断号等信息。例如:
```
mdio {
#address-cells = <1>;
#size-cells = <0>;
switch0: switch@0 {
compatible = "marvell,mv88e6390";
reg = <0>;
interrupt-parent = <&gpio3>;
interrupts = <3 IRQ_TYPE_EDGE_FALLING>;
phy-mode = "rgmii";
ports = <8>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_switch0>;
status = "okay";
};
};
```
2. 初始化控制器:执行MV88E6390控制器的初始化,包括设置寄存器、初始化参数等。初始化代码位于mv88e6xxx.c文件中,主要包括以下几个函数:
- mv88e6xxx_setup_global_regs:设置全局寄存器,包括芯片ID、芯片类型等信息。
- mv88e6xxx_setup_port_regs:设置端口寄存器,包括速率、双工模式、帧过滤等参数。
- mv88e6xxx_setup_vlan_regs:设置VLAN寄存器,包括VLAN ID、VLAN成员等参数。
- mv88e6xxx_setup_qos_regs:设置QoS寄存器,包括流表规则、优先级等参数。
- mv88e6xxx_setup_stp_regs:设置STP寄存器,包括端口状态、协议版本等参数。
3. 注册网络设备:在网络子系统中注册MV88E6390网络设备,包括MAC地址、MTU等信息。注册代码位于mv88e6xxx.c文件中,主要包括以下几个函数:
- mv88e6xxx_probe_port:探测端口状态,包括速率、双工模式等信息。
- mv88e6xxx_port_setup_tc:设置端口的Traffic Class(TC)和队列映射关系。
- mv88e6xxx_set_rx_mode:设置接收模式,包括广播、多播、单播等。
- mv88e6xxx_set_mac_addr:设置MAC地址,包括全局MAC地址和端口MAC地址。
4. 处理网络数据包:启动MV88E6390控制器,开始处理网络数据包。数据包处理代码位于mv88e6xxx.c文件中,主要包括以下几个函数:
- mv88e6xxx_get_tag_protocol:获取数据包的Tag协议类型,包括802.1Q和802.1AD。
- mv88e6xxx_xmit:发送数据包,包括添加Tag信息、计算校验和等。
- mv88e6xxx_poll_rx:接收数据包,包括解析Tag信息、计算校验和等。
上述流程仅为MV88E6390驱动程序初始化的基本流程,具体实现可能因不同的硬件平台、网络配置等而有所不同。在实际应用中,还需要根据具体的需求进行配置和调优,以达到最佳的网络性能和稳定性。
阅读全文