Jump to content

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


Recommended Posts

Posted

@reboot12

Waaoh:cheerleader:, we will bring it to full live soon.

But Now I have to go. I am back late in the evening may be 21:00

Dietmar

 

This is the best sign so far.

Those three RXPOLL lines mean the RX ring is no longer stuck:

RDH (0x2810) moves: 0E -> 12 -> 17

RDT (0x2818) also moves: 09 -> 0E -> 12

That means:

the hardware is consuming RX descriptors

the driver is reposting them

so the RX DMA path is now really alive

So the old core failure is gone:

DMA is working on RX

the NIC is receiving real frames

poll/ISR is working

TXRECLAIM still at 0/0 in this snippet just means:

there is still no proven TX traffic in this exact capture

But the very important new fact is:

this is not “dead hardware” anymore

the board is now seeing inbound traffic on the wire

What this means

You should not make a new driver yet.

A new driver now would be premature, because this latest snippet proves the current driver finally broke through on the receive side.

Best next step now

Use the current driver and do one focused test:

generate real traffic:

ipconfig /renew

ping router

ping another PC directly

trace whether TX is actually used:

SEND

TXONE_IN / TXONE_OUT

TXRECLAIM

Because now the big missing split is:

RX works, but TX never starts
vs

TX starts too, but upper networking/binding is still the issue

New conclusion from this snippet

Before:

RX was dead (RDH=0 forever)

Now:

RX is alive

descriptors are moving

frames are arriving

That is a major milestone.

So the answer

Do not build a new driver yet.

Use the current hardwake + keep-poll build.

Get the last TX-focused KD log with real traffic.

If that next log shows:

SEND + TXONE_OUT with moving TDT → then the driver is basically alive and the remaining issue is higher-level networking/binding/config

RX moves but no SEND at all → then the next driver (or INF/media-state logic) should focus on binding/media indication

SEND happens but no TXONE/TDT movement → then next driver should target the TX submission path

 


Posted

@reboot12

With the same driver, do this KD block and ping as much as possible to router to compi each other and ipconfig /all ipconfig /renew ..

I have to go

Dietmar

!sym quiet
.reload /f i219.sys
sxd ud
bc *
bu i219!I219MiniportSendPackets ".echo SEND; kb; gc"
bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .echo TXONE_IN; .printf \"ctx=%p regs=%p ret=%p\n\", $t0, $t1, $t2; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; bp /1 @$t2 \".echo TXONE_OUT; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; gc\"; gc"
bu i219!I219TxReclaim "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRECLAIM; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; gc"
bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo RXPOLL; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; gc"
bu i219!I219MiniportISR ".echo ISR; gc"
g

 

Posted (edited)

@Dietmar

I tried map network drive to i219 WinXP PC - https://pastebin.com/5Wv46Hb0

If change i219 from static IP to DHCP then PC no set IP and I don't know what IP to ping. In router no any request and no any offer IP. PC has no IP configuration.

WinDbg data only show while ping from router to i219 if card has set static IP and mask but in WinXP connection properties is always 0/0 packet

Edited by reboot12
Posted

@reboot12

Here is new driver and KD Block

good luck

Dietmar

https://www.upload.ee/files/19119931/i219con.zip.html

 

!sym quiet
.reload /f i219.sys
sxd ud
bc *
bu i219!I219WaitGoodMacState "r $t0=poi(@esp+4); r $t1=poi(@esp+8); r $t2=poi(@esp+0c); r $t3=poi($t0+0xDC); .printf \"GOODMAC loops=%x needpcim=%x regs=%p\n\", $t1, $t2, $t3; dd @$t3+0x0008 L1; dd @$t3+0x5B50 L3; gc"
bu i219!I219TxProgramUnit "r $t0=poi(@esp+4); r $t1=poi(@esp+8); r $t2=poi(@esp+0c); r $t3=poi($t0+0xDC); .printf \"TXPROG_IN deep=%x restore=%x regs=%p\n\", $t1, $t2, $t3; dd @$t3+0x0008 L1; dd @$t3+0x5B50 L3; dd @$t3+0x0400 L1; dd @$t3+0x0410 L1; dd @$t3+0x3800 L3; dd @$t3+0x3810 L1; dd @$t3+0x3818 L1; dd @$t3+0x3828 L1; dd @$t3+0x3820 L1; dd @$t3+0x382C L1; dd @$t3+0x04A80 L1; dd @$t3+0x00C4 L1; r $t4=poi(@esp); bp /1 @$t4 \".echo TXPROG_OUT; dd @$t3+0x0008 L1; dd @$t3+0x5B50 L3; dd @$t3+0x0400 L1; dd @$t3+0x0410 L1; dd @$t3+0x3800 L3; dd @$t3+0x3810 L1; dd @$t3+0x3818 L1; dd @$t3+0x3828 L1; dd @$t3+0x3820 L1; dd @$t3+0x382C L1; dd @$t3+0x04A80 L1; dd @$t3+0x00C4 L1; gc\"; gc"
bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRXSTART_IN; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2820 L1; dd @$t1+0x282C L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3820 L1; dd @$t1+0x382C L1; dd @$t1+0x00C4 L1; r $t2=poi(@esp); bp /1 @$t2 \".echo TXRXSTART_OUT; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2820 L1; dd @$t1+0x282C L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3820 L1; dd @$t1+0x382C L1; dd @$t1+0x00C4 L1; gc\"; gc"
bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi(@esp+8); r $t2=poi($t0+0xDC); .printf \"TXSEND_IN pkt=%p regs=%p\n\", $t1, $t2; dd @$t2+0x0008 L1; dd @$t2+0x5B50 L3; dd @$t2+0x0400 L1; dd @$t2+0x3810 L1; dd @$t2+0x3818 L1; dd @$t2+0x3828 L1; dd @$t2+0x04A80 L1; r $t3=poi(@esp); bp /1 @$t3 \".echo TXSEND_OUT; dd @$t2+0x0008 L1; dd @$t2+0x5B50 L3; dd @$t2+0x0400 L1; dd @$t2+0x3810 L1; dd @$t2+0x3818 L1; dd @$t2+0x3828 L1; dd @$t2+0x04A80 L1; gc\"; gc"
bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo CTRLKICK_IN; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x0400 L1; dd @$t1+0x3828 L1; dd @$t1+0x04A80 L1; r $t2=poi(@esp); bp /1 @$t2 \".echo CTRLKICK_OUT; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L3; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x0400 L1; dd @$t1+0x3828 L1; dd @$t1+0x04A80 L1; gc\"; gc"
g

 

Posted (edited)

@Dietmar

i219con - https://pastebin.com/E1TaPuFW

ping to i219 (static IP) from other PC:
 

vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200
TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
TXPROG_OUT
b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200
TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
TXPROG_OUT
b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200
TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
TXPROG_OUT
b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0aa2e000 TDLEN=00000200
TXPROG_IN deep=0 restore=1 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000
GOODMAC loops=c8 needpcim=0 regs=b9785000 b9785008  00080603
b978ab50  00000008 e001c25c 00000000
TXPROG_OUT
b9785008  00080603
b978ab50  00000008 e001c25c 00000000
b9785400  0104010a
b9785410  0060200a
b9788800  0aa2e000 00000000 00000200
b9788810  00000000
b9788818  00000000
b9788828  02000000
b9788820  00000000
b978882c  00000000
b9789a80  00000000
b97850c4  00000000

ping from i219 to router - there is nothing in WinDbg

In normal boot mode I run game Spider Solitaire and at some point, the message "Cable disconnected" appeared for a moment.

@Dietmar

What HAL driver you use? I use acpiapic_mp:
acpiapic-mp.png

Edited by reboot12
Posted

@reboot12

This lan cable disconnect and then connect again I have also. It is an artefakt of this driver,

because some settings are too hard, this will be gone in next version.

How to use this KD block with the same driver as before:

Let it run in Windbg. Then disconnect, connect the lan cable by hand.

Then ping the router and compi each other

Dietmar

PS: I use the hal.dll from Ramsey with the 4GB switch.

 

!sym quiet
.reload /f i219.sys
sxd ud
bc *
bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u ADP=%p\n\", poi(@esp+0x0c), poi(@esp+4); r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND regs=%p\n\", $t1; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc"
bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXONE; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc"
bu i219!I219TxReclaim "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRECLAIM; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc"
bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRXSTART; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3800 L0c; gc"
g

 

 

Posted
29 minutes ago, Dietmar said:

PS: I use the hal.dll from Ramsey with the 4GB switch.

But what type - Uni or Multiprocessor ???

i219con next - https://pastebin.com/C9YX1BvL

ping fro i219 to router - nothing

ping from other PC to i219:
 

TXRECLAIM
b9712008  00080603
b9712400  0104010a 00000000
b9715800  0ac85000 00000000 00000200 00000000
b9715810  00000000 00000000 00000000 00000000
b9715820  00000000 00000000 02000000 00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200
TXRECLAIM
b9712008  00080603
b9712400  0104010a 00000000
b9715800  0ac85000 00000000 00000200 00000000
b9715810  00000000 00000000 00000000 00000000
b9715820  00000000 00000000 02000000 00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200
TXRECLAIM
b9712008  00080603
b9712400  0104010a 00000000
b9715800  0ac85000 00000000 00000200 00000000
b9715810  00000000 00000000 00000000 00000000
b9715820  00000000 00000000 02000000 00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200
TXRECLAIM
b9712008  00080603
b9712400  0104010a 00000000
b9715800  0ac85000 00000000 00000200 00000000
b9715810  00000000 00000000 00000000 00000000
b9715820  00000000 00000000 02000000 00000000
vs7_4_1g_megate_v49: TX watchdog repair regs TDH=00000000 TDT=00000000 TCTL=0104010a TXDCTL=02000000 DMATXCTL=00000000 TDBAL=0ac85000 TDLEN=00000200

 

Posted (edited)

@Dietmar

If disconnect cable from i219 then in WinDbg: vs7_4_1g_megate_v49: LinkState -> DOWN 10Mb FD

After I connect cable then "cable unplugged" message - I can't disbale connection in WinXP

Edited by reboot12
Posted

@reboot12

I use the hal.dll for multiprocessors with 4Gb forced from Ramsey.

Here is diagnosis for your i219-LM until now:

This is the clearest proof so far:

Your driver is queuing packets. In your dump, SEND and TXONE fire, and the dword at 0x3818 rises from 0x0 to 0x14, while the dword at 0x3810 stays 0x0. In the e1000e register map, 0x3810 is TDH and 0x3818 is TDT. That means software advances the Tx tail, but hardware never advances the Tx head—so descriptors are being posted, but none are being consumed/completed.

That also means the old “DMA/master gate is simply off” theory is mostly ruled out by this snapshot. STATUS=00080603 decodes as FD + Link Up + GIO master enable, and the PCIM_STATE bit (0x40000000) is not set here. So this is not the classic “still stuck in PCIm low-power state” picture.

Also, TCTL=0104010a already includes E1000_TCTL_EN and E1000_TCTL_PSP, so the Tx unit is nominally enabled. The most suspicious register in your dump is now TXDCTL=02000000. In current e1000e definitions, the documented TXDCTL fields are threshold bits plus GRAN=0x01000000 and COUNT_DESC=0x00400000, and Linux’s E1000_TXDCTL_DMA_BURST_ENABLE macro builds a very different value from those fields. So 0x02000000 looks nonstandard / likely wrong for this MAC family. That is now my top suspect on the register-programming side.

So the narrowed diagnosis is:

NDIS send path is alive

driver ring bookkeeping is alive

tail writes reach the NIC

failure is now between posted descriptor and hardware consumption

That points to one of these, in order:

bad TXDCTL programming

bad Tx descriptor format / command bits

Tx ring not fully re-armed after link event

less likely: a deeper DMA fetch problem despite status looking okay

The next best KD block is to watch the Tx FIFO registers (TDFH/TDFT/TDFHS/TDFTS/TDFPC) together with the normal ring registers. If the Tx FIFO stays dead while TDT keeps rising, then the MAC is not even pulling descriptors into its internal FIFO. Those FIFO registers are at 0x3410–0x3430, and TARC is at 0x3840.

 

!sym quiet
sxd ud
bc *
bu i219!I219TxSendOne "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXONE; dd @$t1+0x0008 L1; dd @$t1+0x0400 L2; dd @$t1+0x3410 L5; dd @$t1+0x3800 L0c; dd @$t1+0x3840 L1; gc"
bu i219!I219TxReclaim "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRECLAIM; dd @$t1+0x0008 L1; dd @$t1+0x3410 L5; dd @$t1+0x3800 L0c; dd @$t1+0x3840 L1; gc"
g

 

Posted

@reboot12

I just come to another crazy idea:

Because everything works on your industrial board, only TX not:

Please send me your working win10 i219.sys driver and the i219.inf for it.

I make a Hex diagnose of this binary just for to fetch the missing path for some registers of your Industrial board,

that are not make public until now so Linux cant help here

Dietmar

Posted (edited)

@Dietmar

Official Win10 LAN drivers from Advantech for AIMB-786: AIMB-786_LAN_Win10(64bit)_23.2.0.1006.zip but 417MB

This is extracted driver only for PRO1000\Win32 - LAN_AIMB-786_PRO1000.zip 7.21MB

But I don't tested this driver.

I tested driver included in Win10 19041.2604 (x64) after startnet in WinPE. This is wpeinit.log
 

Installing device pci\ven_8086&dev_15bb&subsys_00008086 X:\windows\INF\net1ix64.inf succeeded

I found .sys file is e1i65x64.sys

Service name: e1i65x64

Edited by reboot12
Posted

@reboot12

Oh..this is very nice!

I just found, that this win10 driver for your Industrial board has some extra routines special for your board,

that exact matches our problem with TX.

Soon I send to you next driver

Dietmar

Posted (edited)

@reboot12

Please run this KD block for to check, if I see the difference between your i219-LM for your board and the "normal" version correct

Dietmar

bc *
bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=((poi(@$t1+0x3828)&0xffc1ffdf)|0x0141001f); ed @$t1+0x3828 @$t2; r $t3=(poi(@$t1+0x3840)|0x0f800483); ed @$t1+0x3840 @$t3; .echo WIN10_STYLE_TX; dd @$t1+0x3828 L1; dd @$t1+0x3840 L1; dd @$t1+0x3410 L5; gc"
g

 

Edited by 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...