RK3588 kernel-6.1:drivers/usb/atm 功能与实现要点
源码基准:rk3588/kernel-6.1/drivers/usb/atm/。
1. 目录定位
该目录实现 通过 USB 连接的 xDSL(ADSL 等)调制解调器 与 Linux ATM 子系统(CONFIG_ATM)之间的桥梁:硬件把 ATM 信元流(常以 AAL5 封装)放在 USB bulk(少数 isoc)管道上,内核侧完成 URB 收发、SAR(分段与重组)、atm_dev 注册,供 pppoatm/br2684 等栈拨号或桥接。
典型用户:上世纪末至本世纪初 SpeedTouch / Conexant AccessRunner / ADI Eagle 等 USB“宽带猫”(固件多由用户空间工具解压加载)。
与 RK3588:嵌入式 RK 平台几乎不用此类 USB DSL;目录属于 遗留宽带接入,默认内核常 CONFIG_USB_ATM=n。
2. Kconfig / Makefile 结构
| 选项 | 对象 | 说明 |
|---|---|---|
USB_ATM |
usbatm.o |
核心框架,依赖 ATM,select CRC32 |
USB_SPEEDTOUCH |
speedtch.o |
Alcatel SpeedTouch(需 FW_LOADER) |
USB_CXACRU |
cxacru.o |
Conexant AccessRunner |
USB_UEAGLEATM |
ueagle-atm.o |
ADI 930 / Eagle |
USB_XUSBATM |
xusbatm.o |
通用占位:模块参数指定 VID/PID/端点 |
各 mini-driver 调用 usbatm_usb_probe() / usbatm_usb_disconnect()(导出符号),填入 struct usbatm_driver。
3. 核心:usbatm.c / usbatm.h
3.1 struct usbatm_driver(mini-driver 契约)
生命周期(注释约定顺序):bind → heavy_init → atm_start → … → atm_stop → unbind。
bind:探测阶段初始化(可sleep),通常 找 bulk IN/OUT(或 isoc)端点、申请资源。heavy_init:较慢 的步骤(如等待固件就绪),可在probe延后工作队列 里跑。atm_start/atm_stop:对接struct atm_dev(速率、类型等)。bulk_in/bulk_out/isoc_in:端点地址编号;rx_padding/tx_padding:部分 Modem 在信元外加填充。
标志:UDSL_SKIP_HEAVY_INIT、UDSL_USE_ISOC、UDSL_IGNORE_EILSEQ。
3.2 数据通路
struct usbatm_channel:RX/TX 侧URB池(模块参数num_rcv_urbs/num_snd_urbs、缓冲大小)、tasklet处理完成队列。- 接收:从 USB 缓冲中解析 ATM 信元,AAL5 SAR(
atm_skb_data、CRC32、分片重组usbatm_vcc_data)。 - 发送:将
atm_vcc下发的sk_buff编码进 bulk 缓冲提交 URB。 atm_dev_register:注册atm_dev,与atm_ioctl/proc 等 ATM 核心交互。
3.3 usbatm_usb_probe
统一 usb_driver 入口:引用计数、heavy_init 工作项、绑定通道、最终 atm_start;断开路径对称释放 URB 与 atm_dev。
4. 各 mini-driver 要点
speedtch.c:厂商控制消息轮询、request_firmware加载 两段固件(与 linux-usb.org/SpeedTouch 文档一致),再落到标准 usbatm RX/TX。cxacru.c/ueagle-atm.c:类似模式——Vendor 控制传输 + 固件/CMV,细节各异。xusbatm.c:无专用协议;通过module_param_array绑定最多 8 组 VID/PID/端点/altsetting,适合 用户态已初始化 的冷门机型。
5. 小结
| 层次 | 职责 |
|---|---|
| ATM 核心 | atm_dev、VCC、AAL5 统计与 ioctl |
| usbatm 核心 | URB 环、信元 SAR、tasklet/线程协作 |
| mini-driver | USB 描述符/固件/控制面 |
整体上这是 「USB 大块传输 + ATM SAR」 的经典分层;现代宽带多为 以太网 WAN / PCI-E / SoC 内置 PHY,该类驱动维护热度已很低。
正在加载留言…