Jump to content

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


Recommended Posts

Posted

@reboot12

Hihi, so I see, that the try to force all those bit, gives this fail, RXTX is blocked in the beginning, so Code 31.

Funny, my board with i219-LM Dev_15BB, accepts this dirty hack from above.

Now I take again a deep look in the Binary from Win10 for this i219-LM.

And I try to copy everything from the win10 logic, part by part, in the very first working version of my driver i219.sys.

There are a lot of steps, that the driver has to get from the hardware of your AIMB-786 board.

It has to ask ME, the firmware, ULP, D3, D0 state and even more.

But in the end, because win10 works, we will succeed

Dietmar


Posted (edited)

@reboot12

Here is a new driver for you, please test. And also run this KD block

Dietmar

https://www.upload.ee/files/19125197/i219spyWin10.zip.html

 

bc *
bu i219!I219MiniportInitialize ".echo ====INIT====; gc"
bu i219!I219LowPowerExitFixup "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====LOWPOWER====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc"
bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====CTRLKICK====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc"
bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====TXRXSTART====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00D0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc"
bu i219!I219MiniportEnableInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====ENABLEINT====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x00C0 L1; dd @$t1+0x00D0 L1; gc"
bu i219!I219MiniportHandleInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====DPC====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00C0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; gc"
bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND CNT=%u\n\", poi(@esp+0x0C); dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x0008 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; dd @$t1+0x0008 L1; gc"
g

 

Edited by Dietmar
Posted

@reboot12

and here next one, please test and run the KD block until desktop via "g"

Dietmar

https://www.upload.ee/files/19125365/i219collsavewin10.zip.html
 

!sym quiet
.reload /f i219.sys
sxn ud
bc *
bu /1 i219!I219MiniportInitialize ".echo ====INIT====; gc"
bu i219!I219LowPowerExitFixup "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====LOWPOWER====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc"
bu /1 i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====CTRLKICK====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc"
bu /1 i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====TXRXSTART====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00D0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc"
bu /1 i219!I219MiniportEnableInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====ENABLEINT1====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x00C0 L1; dd @$t1+0x00D0 L1; gc"
bu /1 i219!I219MiniportHandleInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====DPC1====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00C0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; gc"
bu /1 i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====SEND1====; .printf \"CNT=%u\n\", poi(@esp+0x0C); dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x0008 L1; gc"
bu /1 i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====RXPOLL1====; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; dd @$t1+0x0008 L1; gc"
g

 

Posted

@reboot12

Here is version W4, which may work on your board AIMB-786. Please test also the KD until full desktop with "g"

Dietmar

https://www.upload.ee/files/19125771/i219W4.zip.html
 

!sym quiet
.reload /f i219.sys
sxn ud
bc *

bu /1 i219!I219LowPowerExitFixup "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====LOWPOWER====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B58 L1; dd @$t1+0x0F00 L1; dd @$t1+0x003C L1; dd @$t1+0x00E4 L1; dd @$t1+0x5BB4 L1; dd @$t1+0x5BBC L1; gc"
bu /1 i219!I219ApplySwLcdConfigLikeWin10 "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====SWLCD====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0018 L1; dd @$t1+0x003C L1; dd @$t1+0x00E4 L1; dd @$t1+0x5BB4 L1; dd @$t1+0x5BBC L1; gc"
bu /1 i219!I219DisableEeeLpiLikeWin10 "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====EEE====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B54 L1; dd @$t1+0x0020 L1; gc"
bu /1 i219!I219CheckPhyReadyAfterReset "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====PHYREADY====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B58 L1; dd @$t1+0x0020 L1; gc"
bu /1 i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====CTRLKICK====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B58 L1; dd @$t1+0x0F00 L1; gc"
bu /1 i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====TXRXSTART====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00D0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B58 L1; gc"
bu /1 i219!I219MiniportEnableInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====ENABLEINT1====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x00C0 L1; dd @$t1+0x00D0 L1; gc"
bu /1 i219!I219MiniportHandleInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====DPC1====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00C0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; gc"
bu /1 i219!I219MiniportCheckForHang "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo ====HANGCHK1====; .printf \"a=%p regs=%p\n\", @$t0, @$t1; dd @$t1+0x0008 L1; dd @$t1+0x00C0 L1; dd @$t1+0x00D0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; gc"

g

 

Posted

@reboot12

W4 is until now the best version. It comes very near to complete working.

I look at the binary from win10 for it from the AIMB-786 driver for i219-LM.

Please run this KD command until desktop

Dietmar

bc *
bu /1 i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .printf \"TXRXSTART IN a=%p regs=%p ret=%p\n\", @$t0, @$t1, @$t2; bp /1 @$t2 \".echo ====TXRXSTART_OUT====; dd @$t1+0x0008 L1; dd @$t1+0x0100 L1; dd @$t1+0x0400 L1; dd @$t1+0x00D0 L1; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; dd @$t1+0x5B54 L1; dd @$t1+0x5B50 L1; dd @$t1+0x5B58 L1; gc\"; gc"
bu /1 i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .echo ====SEND_IN====; .printf \"CNT=%u a=%p regs=%p ret=%p\n\", poi(@esp+0x0c), @$t0, @$t1, @$t2; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; bp /1 @$t2 \".echo ====SEND_OUT====; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; dd @$t1+0x0008 L1; gc\"; gc"
bu i219!I219TxSendOne ".echo ====TXONE====; 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; dd @$t1+0x0008 L1; gc"
g

 

Posted

@reboot12

Oh nice, now the i219-LM reaches exact the state, that Linux wants to have for the i219-LM.

Here ist next KD block

Dietmar

bc *
bu /1 i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .printf \"TXRXSTART IN a=%p regs=%p ret=%p\n\", @$t0, @$t1, @$t2; bp /1 @$t2 \".echo ====TXRXSTART_OUT2====; dd @$t1+0x2800 L3; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; dd @$t1+0x3800 L3; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; dd @$t1+0x3828 L1; dd @$t1+0x0100 L1; dd @$t1+0x0400 L1; gc\"; gc"
bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .echo ====SEND_IN2====; .printf \"CNT=%u a=%p regs=%p ret=%p\n\", poi(@esp+0x0c), @$t0, @$t1, @$t2; dd @$t1+0x3810 L1; dd @$t1+0x3818 L1; bp /1 @$t2 \".echo ====SEND_OUT2====; dd @$t1+0x3800 L3; 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 ====TXRECLAIM2====; dd @$t1+0x3800 L3; 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 ====RXPOLL2====; dd @$t1+0x2800 L3; dd @$t1+0x2810 L1; dd @$t1+0x2818 L1; dd @$t1+0x2828 L1; gc"
g

 

Posted

@reboot12

W4 already has working RX on your board.
That is a real breakthrough.

W4 is much better than any other i219-LM driver before — RX is working.

The remaining failure is almost certainly a TX-descriptor / TX-buffer / TX-latch problem

Dietmar

Here is new driver W5

https://www.upload.ee/files/19126475/i219W5.zip.html

and KD block for it

bc *
sxn ud
bu /1 i219!I219TxRxStart "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); r $t2=poi(esp); .printf \"TXRXSTART IN a=%p regs=%p ret=%p\n\", $t0, $t1, $t2; bp /1 $t2 \".echo ====TXRXSTART_OUT_W5====; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x3800 L3; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0100 L1; dd $t1+0x0400 L1; gc\"; gc"
bu i219!I219MiniportSendPackets "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); r $t2=poi(esp); .echo ====SEND_IN_W5====; .printf \"CNT=%u a=%p regs=%p ret=%p\n\", poi(esp+0x0c), $t0, $t1, $t2; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0008 L1; bp /1 $t2 \".echo ====SEND_OUT_W5====; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0008 L1; gc\"; gc"
bu i219!I219TxSendOne "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====TXONE_W5====; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0008 L1; gc"
bu i219!I219TxReclaim "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====TXRECLAIM_W5====; dd $t1+0x3800 L3; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0008 L1; gc"
bu i219!I219RxPoll "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====RXPOLL_W5====; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x0008 L1; gc"
g

 

Posted

@reboot12

We are coming closer to the problem, why RX gets but TX not sends:

So we take a deeper look at TX-Queue-Aktivierung / TXDCTL-Konfiguration / TX-Start-Sequenz

Dietmar

Posted

@reboot12

Here is W6 driver and new KD block

Dietmar

https://www.upload.ee/files/19126548/i219W6.zip.html
 

bc *
sxn ud
bu /1 i219!I219TxRxStart "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); r $t2=poi(esp); .printf \"TXRXSTART IN a=%p regs=%p ret=%p\n\", $t0, $t1, $t2; bp /1 $t2 \".echo ====TXRXSTART_OUT_W6====; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x3800 L3; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0410 L1; dd $t1+0x0400 L1; dd $t1+0x0100 L1; dd $t1+0x0008 L1; gc\"; gc"
bu i219!I219MiniportSendPackets "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); r $t2=poi(esp); .echo ====SEND_IN_W6====; .printf \"CNT=%u a=%p regs=%p ret=%p\n\", poi(esp+0x0c), $t0, $t1, $t2; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; bp /1 $t2 \".echo ====SEND_OUT_W6====; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; gc\"; gc"
bu i219!I219TxSendOne "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====TXONE_W6====; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; gc"
bu i219!I219TxReclaim "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====TXRECLAIM_W6====; dd $t1+0x3800 L3; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; gc"
bu i219!I219RxPoll "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====RXPOLL_W6====; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x0008 L1; gc"
g

 

Posted

@reboot12

Hier is W7 driver and new KD

Dietmar

https://www.upload.ee/files/19126675/i219W7.zip.html

 

bc *
sxn ud
bu /1 i219!I219TxRxStart "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); r $t2=poi(esp); .printf \"TXRXSTART IN a=%p regs=%p ret=%p\n\", $t0, $t1, $t2; bp /1 $t2 \".echo ====TXRXSTART_OUT_W7====; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x3800 L3; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0410 L1; dd $t1+0x0400 L1; dd $t1+0x0100 L1; dd $t1+0x0008 L1; gc\"; gc"
bu i219!I219MiniportSendPackets "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); r $t2=poi(esp); .echo ====SEND_IN_W7====; .printf \"CNT=%u a=%p regs=%p ret=%p\n\", poi(esp+0x0c), $t0, $t1, $t2; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; bp /1 $t2 \".echo ====SEND_OUT_W7====; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; gc\"; gc"
bu i219!I219TxSendOne "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====TXONE_W7====; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; gc"
bu i219!I219TxReclaim "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====TXRECLAIM_W7====; dd $t1+0x3800 L3; dd $t1+0x3810 L1; dd $t1+0x3818 L1; dd $t1+0x3828 L1; dd $t1+0x0400 L1; dd $t1+0x0008 L1; gc"
bu i219!I219RxPoll "r $t0=poi(esp+4); r $t1=poi($t0+0xDC); .echo ====RXPOLL_W7====; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x0008 L1; gc"
g

 

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