Browse Source

[e1000] Request notification of TX completions

The RS bit is used to instruct the NIC to update the TX descriptor
status byte.  The RPS bit is used to instruct the NIC to defer this
update until after the packet has been transmitted on the wire (rather
than merely read into the transmit FIFO).

The driver currently sets RPS but not RS.  Some e1000 models seem to
interpret this as implying that the status byte should be updated;
some don't.  On the ones that don't, we never see any TX completions
and so rapidly run out of TX buffers.

Fix by setting the RS bit in the TX descriptor.  (We don't care about
when the packet reaches the wire, so don't bother setting the RPS
bit.)

Reported-by: Miroslav Halas <miroslav.halas@bankofamerica.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
tags/v1.20.1
Michael Brown 13 years ago
parent
commit
d5e273e5c2
1 changed files with 1 additions and 1 deletions
  1. 1
    1
      src/drivers/net/e1000/e1000_main.c

+ 1
- 1
src/drivers/net/e1000/e1000_main.c View File

611
 	tx_curr_desc->buffer_addr =
611
 	tx_curr_desc->buffer_addr =
612
 		virt_to_bus ( iobuf->data );
612
 		virt_to_bus ( iobuf->data );
613
 	tx_curr_desc->lower.data =
613
 	tx_curr_desc->lower.data =
614
-		E1000_TXD_CMD_RPS  | E1000_TXD_CMD_EOP |
614
+		E1000_TXD_CMD_RS | E1000_TXD_CMD_EOP |
615
 		E1000_TXD_CMD_IFCS | iob_len ( iobuf );
615
 		E1000_TXD_CMD_IFCS | iob_len ( iobuf );
616
 	tx_curr_desc->upper.data = 0;
616
 	tx_curr_desc->upper.data = 0;
617
 
617
 

Loading…
Cancel
Save