QCA9531 MAC分析

1 硬件

QCA9531的硬件上有GMAC0和GMAC1,GMAC1通过GMII/MII接口连接到内部的switch上,GMAC0可以通过配置实现几种不同的连接

1,GMAC0可以连接到P4或者P4 FE(Fast Ethernet) PHY端口,GMAC1连接到以太网交换机用于并且用于控制剩余的4个FE端口

2,如果SW_ONLY_MODE置位,GMAC0不连接到任何地方,GMAC1连接到以太网交换机并且控制剩余的5个FE端口

内部的5口以太网交换机

1,通过GMAC1管理接口寄存器和MDC,MDIO进行配置

2,第5口(PORT4)可配置为WAN口

3,第1口(PORT0)可以被配置为连接一个外部管理CPU或者内部CPU

2 软件

GMAC0和GMAC1使用了Linux下的平台设备驱动框架,如下:

复制代码
ath79
dev-eth.c
struct ag71xx_platform_data ath79_eth0_data = { .reset_bit = AR71XX_RESET_GE0_MAC, }; struct platform_device ath79_eth0_device = { .name = "ag71xx", .id = 0, .resource = ath79_eth0_resources, .num_resources = ARRAY_SIZE(ath79_eth0_resources), .dev = { .platform_data = &ath79_eth0_data, }, }; static struct resource ath79_eth1_resources[] = { { .name = "mac_base", .flags = IORESOURCE_MEM, .start = AR71XX_GE1_BASE, .end = AR71XX_GE1_BASE + 0x200 - 1, }, { .name = "mac_irq", .flags = IORESOURCE_IRQ, .start = ATH79_CPU_IRQ(5), .end = ATH79_CPU_IRQ(5), }, }; struct ag71xx_platform_data ath79_eth1_data = { .reset_bit = AR71XX_RESET_GE1_MAC, }; struct platform_device ath79_eth1_device = { .name = "ag71xx", .id = 1, .resource = ath79_eth1_resources, .num_resources = ARRAY_SIZE(ath79_eth1_resources), .dev = { .platform_data = &ath79_eth1_data, }, }; struct ag71xx_switch_platform_data ath79_switch_data;
复制代码

如上定义了GMAC0和GMAC1的platform device

定义了platform_device ath79_eth0_device和platform_device ath79_eth1_device
在板级描述文件根据硬件的实际连接方法填充ath79_eth1_data, ath79_eth0_data以及ath79_switch_data
void __init ath79_register_eth(unsigned int id)函数中,根据id获取不同的platform_device,
大多数情况下,当id为1时,将ath79_switch_data的地址存放在 pdata->switch_data中
最后调用platform_device_register将此设备注册到系统中,这个平台设备将来会作为网络设备
根据设备名称为"ag71xx",我们支持platform_devices是根据名字进行match,因此驱动的名字也应该为ag71xx, 如下

复制代码
我们在Linux源码中进行搜索,在ag71xx_main.c中看到一个如下的定义
static struct platform_driver ag71xx_driver = {
    .probe        = ag71xx_probe,
    .remove        = ag71xx_remove,
    .driver = {
        .name    = AG71XX_DRV_NAME,
    }
};
因此我们知道,驱动会进入到ag71xx_probe函数中
复制代码

 

posted on   sudochen  阅读(435)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示