Realtek网络适配器8168E使用环回发送/接收

时间:2013-07-17 13:00:01

标签: driver linux-device-driver device-driver nic wdf

我正在尝试使用环回(用于Windows 7平台)从Realtek 8168E发送和接收(写入tx缓冲区并从rx缓冲区读取) 读rx缓冲区给出0。 在检查中断状态寄存器时,TDU和RDU位设置为1(Tx / Rx描述符不可用)

网络适配器:Realtek 8168E

参考数据表:Realtek 8168B

发射器侧配置 - 根据数据表(第55页)中给出的规范为TX描述符分配存储器。     对齐描述符为256字节对齐。

  • 还分配了一个单独的缓冲区(TXBuffer)来存储要传输的数据。

  • 将TXBuffer的地址放入TX描述符的指定字段中。

  • 启用TX配置寄存器(40h)中的MAC环回位。

  • 然后我们启用了TxPoll寄存器中的NPQ位(38h)。

  • 之后,我们通过偏移37h完成NIC重置。

  • 然后我们启用了BMCR寄存器中的环回位。

  • 在中断屏蔽寄存器(3Ch)中启用Tx OK和Tx描述符不可用中断。

  • 将Tx描述符地址放入MAC寄存器TNPDS(20h)。

  • 然后最后启用命令寄存器中的TE位(37h)。

同样,我确实需要在Rx端进行配置。

以下是我给出的缓冲区

    //TX Buffer desriptor
typedef struct _TMP_TBD_STRUC {
    ULONG       ulFrameLength;
    ULONG            VLAN_TAG;
       ULONG         TX_Buffer_Add_Low;
       ULONG         TX_Buffer_Add_High;
} TBD_TMP_STRUC, *PTBD_TMP_STRUC;

//RX Buffer desriptor
typedef struct _RMP_RBD_STRUC {
    ULONG       ulBufferSize;
    ULONG            VLAN_TAG;
       ULONG         RX_Buffer_Add_Low;
       ULONG         RX_Buffer_Add_High;
} RBD_RMP_STRUC, *PRBD_RMP_STRUC;

* PL。建议如何调试这种情况。 还有正确的Tx& amp; Rx描述符配置,pl共享。 *

0 个答案:

没有答案