Jump to content

Updated drivers for Windows XP SP3 and Windows 2003 SP2 (x32/x64) for modern hardware


Recommended Posts


Posted

@Dietmar

After installing the i219 driver, I always set a static IP. The DHCP client service is disabled because if WinXP does not receive an IP from DHCP, it takes a long time to start, and if it has a static one, it starts almost immediately. So I don't know if your DHCP commands will be useful for anything.

i219DHCP driver not work

Posted

@reboot12

Please give me the output from Windbg for this new DHCP i219 driver, after this lines in KD of Windbg

Dietmar

.reload /f i219.sys
bc *
bp nt!DebugService2 "gc"

bu i219!I219PollTimerFunc ".echo TIMER; gc"
bu i219!I219TxRxPollEx ".echo POLL; gc"
bu i219!I219RxPoll ".echo RXPOLL; gc"

bu i219!I219MiniportISR ".echo ISR; gc"
bu i219!I219MiniportHandleInterrupt ".echo HINT; gc"
bu i219!I219IndicateMediaState ".echo MEDIA; gc"
bu i219!I219TxRxStart ".echo TXRXSTART; gc"

bu i219!I219MiniportQueryInformation ".printf \"QRY OID=%08x LEN=%u\n\", poi(@esp+8), poi(@esp+0x10); gc"
bu i219!I219MiniportSetInformation ".printf \"SET OID=%08x LEN=%u BUF=%p\n\", poi(@esp+8), poi(@esp+0x10), poi(@esp+0x0c); .if (poi(@esp+8)==0x0001010e) { .printf \"PFnew=%08x\n\", poi(poi(@esp+0x0c)); } gc"

bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u ARR=%p\n\", poi(@esp+0x0c), poi(@esp+8); gc"

g

 

Posted

@reboot12

No need for DHCP:

Set static IP in the same subnet (e.g. 192.168.2.IPfromcompi / 255.255.255.0, gateway 192.168.IPfrom Router)

Open CMD and run:

arp -d *

ping -n 1 IPfromRouter

then ping -t IPfromRouter for 10–20 seconds

then arp -a

If arp -a never shows a MAC for IpfromRouter, that’s almost always broadcast RX (or RX in general)

Dietmar

Posted

@reboot12

I make a new i219 for you.

https://www.upload.ee/files/19106714/i219bind.zip.html

And here comes the code, that you please put into KD with this new i219 (named

.reload /f i219.sys
bc *
bu i219!I219MiniportInitialize ".echo INIT; gc"
bu i219!I219MiniportQueryInformation ".printf \"QRY OID=%08x LEN=%u\\n\", poi(@esp+8), poi(@esp+0x10); gc"
bu i219!I219MiniportSetInformation ".printf \"SET OID=%08x LEN=%u\\n\", poi(@esp+8), poi(@esp+0x10); gc"
bu i219!I219DoCtrlKickLate ".echo CTRLKICK; gc"
bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"TXRXSTART a=%p regs=%p\\n\", $t0, $t1; dd $t1+0x0008 L1; dd $t1+0x00d0 L1; dd $t1+0x0100 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc"
bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\\n\", poi(@esp+0x0c); gc"
bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\\n\", $t1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc"
bu i219!I219MiniportISR ".echo ISR; gc"
bu i219!I219MiniportHandleInterrupt ".echo HINT; gc"
g

bind) driver.

When you come to a breakpoint in KD with name D2 (debugservice2),

just enter few times (until the end, when nothing more happens, is shown or breaks at a defined place)

g

so that Windbg comes forward with more output

Dietmar

Posted (edited)

@reboot12

And here is the nextnext one with name i219 coll

Dietmar

https://www.upload.ee/files/19106771/i219coll.zip.html

And here are the Windbg KD for THIS version coll

.logopen /t c:\i219_rescue_windbg.log
.reload /f i219.sys
bc *

x i219!*Miniport*Set*
x i219!*Miniport*Query*
x i219!*Send*
x i219!*Rx*
x i219!*Poll*
x i219!*Isr*
x i219!*HandleInterrupt*
x i219!*Indicate*
x ndis!NdisMEthIndicateReceive
x ndis!NdisMEthIndicateReceiveComplete
x ndis!NdisMIndicateStatus
x ndis!NdisMIndicateStatusComplete

bu i219!I219MiniportInitialize ".echo INIT; gc"
bu i219!I219IndicateMediaState ".printf \"MEDIA %u\n\", poi(@esp+8); gc"

bu i219!I219MiniportQueryInformation ".printf \"QRY OID=%08x LEN=%u\n\", poi(@esp+8), poi(@esp+0x10); gc"
bu i219!I219MiniportSetInformation ".printf \"SET OID=%08x LEN=%u BUF=%p\n\", poi(@esp+8), poi(@esp+0x10), poi(@esp+0x0c); .if (poi(@esp+8)==0x0001010e) { .printf \"PF=%08x\n\", poi(poi(@esp+0x0c)); } gc"

bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u ARR=%p\n\", poi(@esp+0x0c), poi(@esp+8); gc"
bm i219!*TxSend* ".echo TXSEND; gc"
bm i219!*TxReclaim* ".echo TXRECLAIM; gc"

bu ndis!NdisMEthIndicateReceive ".printf \"RX H=%u LA=%u PKT=%u\n\", poi(@esp+0x10), poi(@esp+0x18), poi(@esp+0x1c); gc"
bu ndis!NdisMEthIndicateReceiveComplete ".echo RXC; gc"

bu i219!I219MiniportISR ".echo ISR; gc"
bu i219!I219MiniportHandleInterrupt ".echo HINT; gc"
bm i219!*PollTimer* ".echo TIMER; gc"
bm i219!*RxPoll* ".echo RXPOLL; gc"

bu ndis!NdisMIndicateStatus ".printf \"STAT GS=%08x SZ=%u\n\", poi(@esp+8), poi(@esp+0x10); gc"
bu ndis!NdisMIndicateStatusComplete ".echo STATC; gc"

bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .printf \"TXRXSTART a=%p regs=%p\n\", $t0, $t1; dd $t1+0x0008 L1; dd $t1+0x0100 L1; dd $t1+0x00d0 L1; dd $t1+0x00c8 L1; dd $t1+0x00d8 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc"

bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x00c8 L1; dd $t1+0x00d8 L1; dd $t1+0x0100 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc"

g
.logclose


 

Edited by Dietmar
Posted

@reboot12

I also make a check in the Bios of your industrial board with i219-LM Dev_15BB.

Take a look, if all this settings are fulfilled, because if not, no driver can take control over this Bios settings

Dietmar

AIMB-786 (AMI UEFI v5.xx) – BIOS settings to DISABLE for XP + Intel I219-LM troubleshooting

1) Advanced → Network Stack Configuration
   - Network Stack = Disabled

2) Advanced → Chipset → PCH-IO Configuration
   - LAN1 Option-ROM = Disabled
   - LAN2 Option-ROM = Disabled
   - Deep Sleep = Disabled
   - PCIE Wake = Disabled
   - PowerOn by Modem = Disabled

3) Advanced → (PCH-FW / Intel ME / Manageability area)
   - AMT Configuration = Disabled (if there is an on/off switch)
   - CIRA Configuration → Activate Remote Assistance Process = Disabled
   - ASF Configuration → PET Progress = Disabled
   - ASF Configuration → WatchDog = Disabled
   - ASF Configuration → ASF Sensors Table = Disabled

4) Advanced → OEM Flags Settings
   - MEBx Selection Screen = Disabled

IMPORTANT
- After changing these settings: do a REAL power-cycle (shutdown → PSU off/unplug → wait 10–20 sec → power on).

 

Posted (edited)
11 hours ago, Dietmar said:

Take a look, if all this settings are fulfilled, because if not, no driver can take control over this Bios settings

I have everything Disabled except:

  • PCIE Wake for power PC over WOL
  • LAN1 Controller - this is my i219 card so must be Enabled

BTW - I have already written several times that the i219 card works OK in Win10 with these BIOS settings

Wow - with i219bind driver speed is 100 Mbps but still 0 Sent / 0 Received

Edited by reboot12
Posted (edited)

@Dietmar

i219bind log - I do g few times: https://pastebin.com/EgHhp4h8

i219coll 100 Mbps but 0/0 and log: https://www.upload.ee/files/19108296/i219_rescue_windbg_0af0_2026-02-25_08-18-08-125.log.html

i219CollFix - 100 Mbps 0/0. If tried connect i219 to GBE device e.g. my laptop then cable unplugged and mouse cursor gets stuck about every 3 seconds

Does your i219 driver allDEV work with old 100 Mbps devices or only with GBE devices ?

Edited by reboot12
Posted

@reboot12

Oh waaaoh, now your logs show, what is going wrong:

 

Driver initializes OK, MMIO is mapped, MAC is read: 00-0c-f1-a7-ee-da

Link is reported UP: LinkState -> UP 100Mb FD

Bring-up runs: bring-up (CTRL kick + TX/RX) and then TxRxStart OK

 

But afterward your polling shows no receive progress:

RXPOLL: dd regs+0x2810 = 00000000 (RDH stays 0)

RXPOLL: dd regs+0x2818 = 0000001f (RDT stays 0x1f)

 

That exactly matches the symptom “no DHCP, no ping”:

Windows sends, but your driver never indicates any received frames.

The  bug is in code from driver , not the router.

In BINDi219.c your RX descriptor layout is wrong for the classic Intel “legacy” RX descriptor.

You currently define RX like this:

buffer_addr (ok)

then status_error (ULONG)

then length (USHORT)

But Intel’s legacy RX descriptor is actually:

buffer_addr (8 bytes)

length (2)

csum (2)

status (1) ← DD/EOP live here

errors (1)

special (2)

So your code reads:

ULONG se = RxDesc[idx].status_error;
UCHAR st = (UCHAR)(se & 0xFF);
if ((st & DD)==0) break;

…but the real status byte is not located where you read it. Result: your RX loop always thinks “no packet”, so you never pass packets up to NDIS → DHCP + ping fail.

I soon send you updated driver

Dietmar

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...