Here is one for you. I haven't been able to figure out why, so I thought I would ask here to see if anyone has come across this as well.
One of the laptops I have has a RTL8102E wired network card, which in my understanding, is RTL8139 compatible. However, my RTL8139 driver doesn't work with it. After a little debugging, come to find out when writing a 32-bit physical address to the RBSTART register, only the bottom 16 bits is written.
For example, if I do:
Code: Select all
outpd(base + RBSTART, 0x12345678);
inpb(0x64); // pause and "clear" the IO Bus
temp = inpd(base + RBSTART);
I thought maybe it was my outpd() or inpd() routines. Nope. I coded it in assembly just to be sure and I got the same result. This card has both PortIO and MemIO and can use either. The thing is, the exact thing happens when I use MemIO access. This tells me that it is the register. I also tried writing two 16-bit values, first to SBSTART and then to SBSTART + 2. Undefined results. The write must be a 32-bit write.
Come to find out, some of the other registers don't allow writes as one would expect of the RTL8139.
I can't find any documentation that says you have to do something different to the 8136 (RTL810xE) to be compatible with or allow to use as an RTL8139. About the only thing I found is that to use this specific card on a Linux machine, you have to update the cards firmware. This tells me that the error might be with the card itself. However, before the hard drive crashed on this particular laptop, this card was working just fine with WinXP.
Has anyone else (tried) to use the RTL8136 or know of any documentation for it?
Thank you,
Ben
- http://www.fysnet.net/osdesign_book_series.htm