08 TC 流量控制卸载
源码:
stmmac_tc.c
HWIF:stmmac_tc_ops(dwmac510_tc_ops等)
依赖:内核net/sched、tc flower、taprio
1. 模块职责
将 Linux Traffic Control 部分规则卸载到 DWMAC 硬件:
| 卸载类型 | 内核接口 | 硬件能力 |
|---|---|---|
| cls_u32 | TC_SETUP_CLSU32 |
Flexible RX Parser (RXP) |
| flower | TC_SETUP_CLSFLOWER |
L3/L4 filter + action |
| CBS | TC_SETUP_QDISC_CBS |
MTL Credit-Based Shaper |
| TAPRIO | TC_SETUP_QDISC_TAPRIO |
EST (Enhanced Scheduled Traffic) |
| ETF | TC_SETUP_QDISC_ETF |
发射时间调度 |
成功初始化后 ndev->hw_features |= NETIF_F_HW_TC。
2. 入口
1 | static int stmmac_setup_tc(struct net_device *dev, enum tc_setup_type type, void *type_data) |
3. Flexible RX Parser (RXP)
3.1 数据结构
1 | struct stmmac_tc_entry { |
priv->tc_entries[] 数组,上限由 HW 决定。
3.2 cls_u32 流程
tc_find_entry()分配/查找表项tc_fill_actions()解析 action(drop、redirect queue)stmmac_rxp_config()→ mac ops 写硬件 RXP RAM
3.3 flower
匹配 L2/L3/L4 字段,支持:
STMMAC_FLOW_ACTION_DROP- 重定向到指定 RX queue(RSS 协同)
4. CBS(Credit-Based Shaper)
用于 AVB/IEEE 802.1Qav:
stmmac_config_cbs()配置 idle slope、send slope、credit- 绑定到指定 MTL TX queue
5. TAPRIO / EST
IEEE 802.1Qbv 时间感知调度:
stmmac_tc_setup_taprio()解析 gate control liststmmac_est_configure()写 EST 寄存器stmmac_calc_tas_basetime()计算 cycle 基准时间(与 PTP 对齐)
需要 DWMAC 5.x + dma_cap.estsel。
6. ETF
Early Transmit Feature:按 tc_etf_qopt_offload 指定发射时间,配合 TBS(Time-Based Scheduling)。
7. 初始化
1 | stmmac_dvr_probe() |
8. 限制与版本
| 特性 | 最低 Core |
|---|---|
| RXP cls_u32 | GMAC4.10+ |
| flower L3/L4 | GMAC4 + filter 数量限制 |
| CBS | MTL AVB |
| TAPRIO/EST | DWMAC 5.10+ |
| TBS | 5.20+ descriptor |
RK3588 是否启用取决于具体 Core 版本与 CONFIG_STMMAC_FULL。
9. 用户态示例
1 | # CBS(示意) |
正在加载留言…