tail = (read_reg(E1000_RDT) + 1) % RDARRAY_SIZE; if (!(RXDarray[tail].status & 1)) { //cprintf("RXDarray empty tail %d\n", tail); return -E_NO_MEM; } //cprintf("receive tail %d length %d\n", tail, RXDarray[tail].length); RXDarray[tail].status &= (~1); memcpy(dst...
if (!(rd->status & E1000_RXD_STAT_DD)) return 0;/* DEBUGOUT("recv: packet len=%d\n", rd->length); */ /* Packet received, make sure the data are re-loaded from RAM. */len = le32_to_cpu(rd->length);len = le16_to_cpu(rd->length);...
We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Cancel Create saved search Sign in Sign up Reseting focus {...
上面讲过环形缓冲队列由多个描述符组成,每个描述符都有一个用于存放接收数据包的缓冲区buffer,这里所说的“可以被清除”并不是将其删除,而是标记这个缓冲区的数据已经处理(可能正在处理),但是否处理完了要看rx_desc->status&E1000_RXD_STAT_DD,当有新数据需要使用缓冲区时,只是将已处理的缓冲区覆盖而已, 这里的i...
while(rx_desc->status & E1000_RXD_STAT_DD){ //测试其状态是否为已删除 struct sk_buff *skb; u8 status; #ifdef CONFIG_E1000_NAPI if (*wrok_done>=work_to_do) //如果所完成的工作>配额则直接退出 break; (*work_done) ++ #endif
Provide feedback We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your results more quickly Cancel Create saved search Sign in Sign...
while(rx_desc->status & E1000_RXD_STAT_DD){ //测试其状态是否为已删除 struct sk_buff *skb; u8 status; #ifdef CONFIG_E1000_NAPI if (*wrok_done>=work_to_do) //如果所完成的工作>配额则直接退出 break; (*work_done) ++ #endif