I can assure the os is not dead.Because it can receive the interrupt
from PIT, and the Ticks in my os is increasing.
I also check the device's status, it also do not have any problem.
I have tried a lot of method, still can not solve this problem.
Please give me some help.
thanks.
Is it possible that you somehow disable interrupts from this device or
fail to acknowledge its interrupts (or other requests -- I'm not
familiar with network chips and I don't know what kind of protocols
they use) at some point? Or misconfigure it?
Alex
It's very strange.
I only enabled the Rx Interrupt Bit in the Interrupt Mask Register.
But I have found that, the Tx Interrupt Bit, Rx Overflow Bit in the
Interrupt Status Register were set to 1 some times.
Especially, when the Rx Overflow bit in the Interrupt Status Register
was set to 1, the network card can not produce any other Interrupt.It
can not receive datas anymore.
Just a guess but network devices usually have a ring buffer for packet
receipt. As well as receiving the packet are you clearing the packet
from the incoming ring buffer?
James
Umm, on the rx overflow bit see my other post about the rx ring
buffer. It may be as simple a matter as properly acknowledging either
packet receipt or, since you are getting tx interrupts, perhaps even
packet transmission. Either ring buffer could fill up if its
interrupts are not acknowledged to the network card.
James
To the OP, did you get a fix? Or to anyone else who may be looking at
this thread later, it seems that to tell the 8139 which bytes your
driver has taken out of the rx ring buffer you need to advance the
8139's CAPR register - the current address of packet read - past the
packets you have processed. Are you already doing this?
Realtek have made an effort with providing the datasheet which is a
plus to them but it could be more informative. Try Googling for
something like
"current address of packet read"
There are lots of hits.
James
Regards,
Jeroen