NanoPC-T2 以太网分析(3)

本文解析了stmmac_dvr_probe函数的过程,包括MACIP核与PHY的初始化、时钟配置、中断处理函数设置等内容。重点介绍了dwmac1000_setup函数的应用,以及如何通过stmmac_open等函数实现网络设备的打开、关闭、数据传输等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本章节用来介绍stmmac_dvr_probe函数过程。

函数一开始就调用nxp_plat_initialize函数对MAC IP核复位、PHY复位、MAC IP核用到的时钟进行初始化,但是这部分做的事情跟注册MAC设备的时候nxpmac_init做的事情完全一样,所以这个函数做的事情就不再进行详细的介绍。

紧接着申请stmmac_priv类型的变量,并对它进行各种的赋值。

接下来最重要的是调用stmmac_hw_init函数,在stmmac_hw_init函数中比较重要的是调用dwmac1000_setup,并在内存中申请了一个mac_device_info类型的变量,并对其赋值,重要的是以下两个赋值。

mac->mac = &dwmac1000_ops;
mac->dma = &dwmac1000_dma_ops;

在dwmac1000_ops变量中,存在一个core_init成员,这个函数指针是用来初始化S5P4418 SOC中的MAC IP核的,host_irq_status成员函数指针是中断处理函数,比如插入和拔掉网线,会执行host_irq_status函数指针指向的函数dwmac1000_irq_status。经过层层追踪,发现在nxpmac_hw_setup调用dwmac1000_ops以及dwmac1000_dma_ops注册的函数,进行初始化MAC 以及 DMA的操作。而nxpmac_hw_setup是被stmmac_open以及stmmac_resume函数中调用。


在dwmac1000_setup调用完成后,stmmac_hw_init做的其他事情不怎么重要,就不再讲述该函数其他部分。

返回到stmmac_dvr_probe后,接着会为网络设备注册打开、关闭、开始传输、结束传输等操作。

ndev->netdev_ops = &stmmac_netdev_ops;

static const struct net_device_ops stmmac_netdev_ops = {
.ndo_open = stmmac_open,
.ndo_start_xmit = stmmac_xmit,
.ndo_stop = stmmac_release,
.ndo_change_mtu = stmmac_change_mtu,
.ndo_fix_features = stmmac_fix_features,
.ndo_set_rx_mode = stmmac_set_rx_mode,
.ndo_tx_timeout = stmmac_tx_timeout,
.ndo_do_ioctl = stmmac_ioctl,
.ndo_set_config = stmmac_config,
#ifdef CONFIG_NET_POLL_CONTROLLER
.ndo_poll_controller = stmmac_poll_controller,
#endif
.ndo_set_mac_address = eth_mac_addr,
};

最后调用ret = stmmac_mdio_register(ndev)注册MAC与PHY之间的总线。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值