网络缓冲区模型
网络设备的核心处理模块是 DMA(Direct Memory Access),DMA 模块能够协助 CPU 处理数据。
SylixOS 在网络初始化时预先给描述符和缓冲区分配一定大小的 DMA 内存空间,在处理数据时,直接使用分配好的缓冲区将数据搬运到网络设备,或者将数据从网络设备中读取至缓冲区。
DMA 模块收发数据的单元被称为 BD(Buffer Description),数据包会被分成若干个帧,而每帧数据则保存在一个 BD 中,BD 结构通常包含以下字段:
#include <SylixOS.h>
typedef struct bufferDesc {
UINT16 BUFD_usDataLen; /* 缓冲描述符中数据长度 */
UINT16 BUFD_usStatus; /* 缓冲描述符状态 */
ULONG BUFD_uiBufAddr; /* 缓冲区地址 */
} BUFD;
- BUFD_usDataLen:缓冲描述符中数据长度。
- BUFD_usStatus:描述符状态。
- BUFD_uiBufAddr:缓冲区虚拟地址地址。
- 所有的 BD 组成一张 BD 表如下图所示,通常发送和接收的 BD 表是各自独立的。