Jump to content

Dietmar

Member
  • Posts

    1,847
  • Joined

  • Last visited

  • Days Won

    10
  • Donations

    0.00 USD 
  • Country

    Germany

Everything posted by Dietmar

  1. @reboot12 The 100MB connection is not the problem. Yes, I force this chip to enable not 10MB. But it is for sure the low power setting, which works through a lot of bits, see Linux problems. And for this is the KD block above, which register is set and which not. If you want to make your driver work or just for to understand what is going on, lets continue Dietmar
  2. @reboot12 I just check your 2 logs. Everything is setup correct, only to send and to get does not work. When I look at the Linux Source code e1000e for the i219-LM they fight with the same problem. Intel itself tells, that it does not know, why this chip sometimes remain in some kind of a sleeping state. I run the same driver and the same KD block on my i219, so I can see the differences clear. Here is a new KD block for the v1k version, please test Dietmar bc * bu i219!I219MiniportInitialize ".echo INIT; gc" bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .echo CTRLKICK_IN; .printf \"regs=%p ret=%p\n\", $t1, $t2; dd $t1+0x0000 L1; dd $t1+0x0008 L1; dd $t1+0x0018 L1; dd $t1+0x0020 L1; bp /1 @$t2 \".echo CTRLKICK_OUT; dd @$t1+0x0000 L1; dd @$t1+0x0008 L1; dd @$t1+0x0018 L1; dd @$t1+0x0020 L1; gc\"; ba w4 (@$t1+0x20) \".echo MDIC_W; dd @$t1+0x0020 L1; kb 3; gc\"; gc" bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); r $t2=poi(@esp); .echo TXRX_IN; .printf \"regs=%p ret=%p\n\", $t1, $t2; dd $t1+0x0100 L1; dd $t1+0x0400 L1; 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; bp /1 @$t2 \".echo TXRX_OUT; dd @$t1+0x0100 L1; dd @$t1+0x0400 L1; 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; gc\"; gc" bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND CNT=%u regs=%p\n\", poi(@esp+0x0c), $t1; 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); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2800 L3; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g
  3. @reboot12 And here is the next one, very close to the Linux PowerSave problem. Type that in one block in KD Dietmar https://www.upload.ee/files/19113237/i219v1k.zip.html !sym quiet bc * bu i219!I219MiniportInitialize ".echo INIT; gc" bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo CTRLKICK; .printf \"regs=%p\n\", $t1; dd $t1+0x0000 L1; dd $t1+0x0008 L1; dd $t1+0x0018 L1; gc" bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRXSTART; .printf \"regs=%p\n\", $t1; dd $t1+0x0000 L1; dd $t1+0x0008 L1; dd $t1+0x0100 L1; dd $t1+0x2808 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x3808 L1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND CNT=%u regs=%p\n\", poi(@esp+0x0c), $t1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g
  4. @reboot12 Here is the next best i219-LM version for you. Your log shows, that something wakes up ;)).. And use new KD block also https://www.upload.ee/files/19112515/i219v1h.zip.html bc * bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219TxRxStart ".echo TXRXSTART; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\n\", poi(@esp+0x0c); gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" g
  5. @reboot12 Please check this last driver with KD commands that I give to you. Because I found a Linux forum entry with exact your symptoms and cure for it Dietmar
  6. @reboot12 here it is, good luck Dietmar https://www.upload.ee/files/19112373/i219v1g.zip.html
  7. @reboot12 Ok, I make a very last driver i219 for you for today. Use this KD commands Dietmar !sym quiet bc * bu i219!I219MiniportInitialize ".echo INIT; gc" bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo CTRLKICK; .printf \"regs=%p\\n\", $t1; dd $t1+0x0000 L1; dd $t1+0x0008 L1; dd $t1+0x0018 L1; gc" bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo TXRXSTART; .printf \"regs=%p\\n\", $t1; dd $t1+0x0000 L1; dd $t1+0x0008 L1; dd $t1+0x0100 L1; dd $t1+0x2808 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; dd $t1+0x3808 L1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND CNT=%u regs=%p\\n\", poi(@esp+0x0c), $t1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x2828 L1; gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g
  8. @reboot12 This is the last version for today, because I have no more ideas just now. Use this new KD commands in one block. Dietmar https://www.upload.ee/files/19112279/i219PowerOn.zip.html bc * bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"TXRXSTART regs=%p\n\", $t1; dd $t1+0x5b50 L1; dd $t1+0x5b54 L1; dd $t1+0x5b58 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2828 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\n\", poi(@esp+0x0c); gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g
  9. @reboot12 Here it is. https://www.upload.ee/files/19112222/i219RDH.zip.html Use the KD commands from above in one block. Good luck Dietmar
  10. @reboot12 This is from my thinking a PHY/MAC power-state issue. After TxRxStart OK, you have: RXDCTL = 03040420 RDT = 0000000f but RDH = 00000000 forever I tested my original i219 driver for XP SP3 on such a lot of different motherboards, include the i219-LM with the same Dev_15BB that you have. All work. I make you one more i219 driver in 5min, because I hope that I can overcome this RDH = 00000000 forever Dietmar bc * bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND CNT=%u regs=%p\n\", poi(@esp+0x0c), $t1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2828 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g
  11. @reboot12 Here is next one and use this new KD commands in one block. Type g when it stops https://www.upload.ee/files/19112130/I219dontstopPoll.zip.html bc * bu i219!I219MiniportHandleInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .echo HINT; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\n\", $t1; dd $t1+0x2828 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc" bu i219!I219MiniportSendPackets "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"SEND CNT=%u regs=%p\n\", poi(@esp+0x0c), $t1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g
  12. @reboot12 I go back to the very first version, just shrink the size of the rings to half and run this KD commands in one block. bc * bu i219!I219MiniportInitialize ".echo INIT; 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+0x2808 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; dd $t1+0x3808 L1; dd $t1+0x3810 L1; dd $t1+0x3818 L1; gc" bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\\n\", $t1; dd $t1+0x2828 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\\n\", poi(@esp+0x0c); gc" bu ndis!EthFilterDprIndicateReceive ".echo NDIS_RX; gc" bu ndis!EthFilterDprIndicateReceiveComplete ".echo NDIS_RXC; gc" g If it stops, type g again and again Dietmar https://www.upload.ee/files/19112000/i219V1ring16.zip.html
  13. @reboot12 Here is v12. And use this code for KD in one block Dietmar https://www.upload.ee/files/19111897/i219v12.zip.html bc * bu i219!I219RxKick ".echo RXKICK; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\\n\", $t1; dd $t1+0x0100 L1; dd $t1+0x2828 L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\\n\", poi(@esp+0x0c); gc" g
  14. @reboot12 Here is next version 11. Take the same KD commands as before Dietmar https://www.upload.ee/files/19111837/i219v11.zip.html
  15. @reboot12 This board has 2 lan slots i219 and i210. Are you sure, that your cable is in the correct i219 slot Dietmar
  16. @reboot12 ok, here is version v10 and use those windbg KD code Dietmar https://www.upload.ee/files/19111776/i219v10.zip.html bc * bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" bu i219!I219RxKick ".echo RXKICK; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"RXPOLL regs=%p\\n\", $t1; dd $t1+0x280c L1; dd $t1+0x2810 L1; dd $t1+0x2818 L1; gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\\n\", poi(@esp+0x0c); gc" g
  17. @reboot12 Here it is, good luck, When it does not work, use those KD commands as before Dietmar https://www.upload.ee/files/19111729/i219v9.zip.html 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
  18. @reboot12 I take a look at the Linux Source Code e1000e. Then I send you a new driver v9 Dietmar
  19. @reboot12 Yes, mostly. I noticed, that Windbg sometimes out of nowhere changed the path to C:\symbols to something other. This you see at once, when you kept all those comands Dietmar PS: Now I look at your output. Everything is ok, only RX does not act for to get packages. Now I look for next commands for KD, WHY this happens.
  20. @reboot12 Type the following in one block to KD. If the output stops, type g . !sym noisy .reload /f sxe ld:i219 sxe ud:i219 g .reload /f i219.sys lm m i219 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
  21. @reboot12 Hi, there is only a small step, that prevents RX to write packages. Everything other works. I make for you a new driver Dietmar https://www.upload.ee/files/19110603/i219LMv7.zip.html
  22. @reboot12 ok, please again NEW Windbg session, type this as ONE block in KD .logopen /t c:\i219LMbest_kd_diag_fixed.txt .symfix .reload /f lm m i219 bc * r $t0=0 r $t1=0 r $t2=0 r $t3=0 r $t4=0 r $t5=0 r $t6=0 r $t7=0 bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"KICK a=%08x regs=%08x\\n\",$t0,$t1; .if ($t1==0) { .echo KICK REGS_NULL; gc; } .printf \"RDH=%08x RDT=%08x RCTL=%08x RFCTL=%08x RXDCTL0=%08x IMS=%08x ICR=%08x\\n\", poi($t1+0x2810),poi($t1+0x2818),poi($t1+0x0100),poi($t1+0x5008),poi($t1+0x2828),poi($t1+0x00D0),poi($t1+0x00C0); dd $t1+0x2800 L12; dd $t1+0x2828 L1; dd $t1+0x0100 L1; dd $t1+0x5008 L1; dd $t1+0x00D0 L1; dd $t1+0x00C0 L1; gc" bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .printf \"START a=%08x regs=%08x\\n\",$t0,$t1; .if ($t1==0) { .echo START REGS_NULL; gc; } .printf \"RDH=%08x RDT=%08x RCTL=%08x RFCTL=%08x RXDCTL0=%08x IMS=%08x ICR=%08x\\n\", poi($t1+0x2810),poi($t1+0x2818),poi($t1+0x0100),poi($t1+0x5008),poi($t1+0x2828),poi($t1+0x00D0),poi($t1+0x00C0); dd $t1+0x2800 L12; dd $t1+0x2828 L1; dd $t1+0x0100 L1; dd $t1+0x5008 L1; dd $t1+0x00D0 L1; dd $t1+0x00C0 L1; gc" bu i219!I219PollTimerFunc "r $t0=poi(@esp+8); r $t1=poi($t0+0xDC); .if ($t1==0) { .echo PT REGS_NULL; gc; } .printf \"PT a=%08x regs=%08x RDH=%08x RDT=%08x\\n\",$t0,$t1,poi($t1+0x2810),poi($t1+0x2818); .printf \"RCTL=%08x RFCTL=%08x RXDCTL0=%08x IMS=%08x ICR=%08x\\n\", poi($t1+0x0100),poi($t1+0x5008),poi($t1+0x2828),poi($t1+0x00D0),poi($t1+0x00C0); r $t7=0; r $t7=i219!g_TxRx; .if ($t7!=0) { r $t3=poi($t7+0x1C); r $t4=poi($t7+0x0D4); r $t5=$t3+($t4*0x10); .printf \"RXDESC=%08x RXNEXT=%08x CUR=%08x\\n\",$t3,$t4,$t5; dd $t5 L4; db $t5+0x0C L4; } gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .if ($t1==0) { .echo RXP REGS_NULL; gc; } .printf \"RXP RDH=%08x RDT=%08x RCTL=%08x\\n\", poi($t1+0x2810),poi($t1+0x2818),poi($t1+0x0100); r $t7=0; r $t7=i219!g_TxRx; .if ($t7!=0) { r $t3=poi($t7+0x1C); r $t4=poi($t7+0x0D4); r $t5=$t3+($t4*0x10); dd $t5 L4; db $t5+0x0C L4; } gc" bu i219!I219MiniportISR "r $t0=poi(@esp+0x0C); r $t1=poi($t0+0xDC); .if ($t1==0) { .echo ISR REGS_NULL; gc; } .printf \"ISR ICR=%08x IMS=%08x RDH=%08x RDT=%08x\\n\", poi($t1+0x00C0),poi($t1+0x00D0),poi($t1+0x2810),poi($t1+0x2818); gc" bu i219!I219MiniportHandleInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+0xDC); .if ($t1==0) { .echo HINT REGS_NULL; gc; } .printf \"HINT ICR=%08x RDH=%08x RDT=%08x\\n\", poi($t1+0x00C0),poi($t1+0x2810),poi($t1+0x2818); gc" g
  23. @reboot12 Ok, next try. Start NEW Windbg session and type this as one block in KD. Then in cmd on the compi that runs Windbg: ping yourrouterIP -t .logopen /t c:\i219LMbest_kd_diag.txt .symfix .reload /f lm m i219 bc * bu i219!I219DoCtrlKickLate " r $t2=poi(@esp+4); r $t0=@ecx; .printf \"CtrlKickLate ecx=%08x stk=%08x\n\", @ecx, $t2; .if ($t0<0x80000000) { r $t0=$t2; } .if ($t0<0x80000000) { .echo CtrlKickLate NO_ADAPTER_PTR; gc; } r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .printf \"a=%08x regs=%08x\n\", $t0, $t1; .if ($t1==0) { .echo CtrlKickLate REGS_NULL; gc; } dd $t1+0x0000 L2 dd $t1+0x0008 L1 dd $t1+0x00C0 L1 dd $t1+0x00D0 L1 dd $t1+0x00D8 L1 dd $t1+0x0100 L1 dd $t1+0x05008 L1 dd $t1+0x02800 L12 dd $t1+0x02810 L2 dd $t1+0x02828 L1 dd $t1+0x03800 L12 gc " bu i219!I219TxRxStart " r $t2=poi(@esp+4); r $t0=@ecx; .printf \"TxRxStart ecx=%08x stk=%08x\n\", @ecx, $t2; .if ($t0<0x80000000) { r $t0=$t2; } .if ($t0<0x80000000) { .echo TxRxStart NO_ADAPTER_PTR; gc; } r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .printf \"a=%08x regs=%08x\n\", $t0, $t1; dt i219!_I219_ADAPTER $t0 dt i219!_I219_TXRX_CTX i219!g_TxRx .if ($t1==0) { .echo TxRxStart REGS_NULL; gc; } dd $t1+0x0000 L2 dd $t1+0x0008 L1 dd $t1+0x00C0 L1 dd $t1+0x00D0 L1 dd $t1+0x00D8 L1 dd $t1+0x0100 L1 dd $t1+0x05008 L1 dd $t1+0x02800 L12 dd $t1+0x02810 L2 dd $t1+0x02828 L1 dd $t1+0x03800 L12 gc " bu i219!I219PollTimerFunc " r $t2=poi(@esp+8); r $t0=@ecx; .printf \"PollTimer ecx=%08x ctx=%08x\n\", @ecx, $t2; .if ($t0<0x80000000) { r $t0=$t2; } .if ($t0<0x80000000) { .echo PollTimer NO_ADAPTER_PTR; gc; } r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .if ($t1==0) { .echo PollTimer REGS_NULL; gc; } .printf \"RDH=%08x RDT=%08x RCTL=%08x RFCTL=%08x RXDCTL0=%08x IMS=%08x ICR=%08x\n\", poi($t1+0x2810), poi($t1+0x2818), poi($t1+0x0100), poi($t1+0x5008), poi($t1+0x2828), poi($t1+0x00D0), poi($t1+0x00C0); gc " bu i219!I219RxPoll " r $t2=poi(@esp+4); r $t0=@ecx; .printf \"RxPoll ecx=%08x stk=%08x\n\", @ecx, $t2; .if ($t0<0x80000000) { r $t0=$t2; } .if ($t0<0x80000000) { .echo RxPoll NO_ADAPTER_PTR; gc; } r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .if ($t1==0) { .echo RxPoll REGS_NULL; gc; } r $t3=poi(i219!g_TxRx+@@c++(&((i219!_I219_TXRX_CTX*)0)->RxDesc)); r $t4=poi(i219!g_TxRx+@@c++(&((i219!_I219_TXRX_CTX*)0)->RxNext)); r $t5=$t3+($t4*0x10); .printf \"RDH=%08x RDT=%08x RCTL=%08x RFCTL=%08x RXDCTL0=%08x\n\", poi($t1+0x2810), poi($t1+0x2818), poi($t1+0x0100), poi($t1+0x5008), poi($t1+0x2828); dd $t5 L4 db $t5+0x0C L4 gc " bu i219!I219MiniportISR " r $t0=poi(@esp+0x0C); .if ($t0<0x80000000) { .echo ISR BAD_CTX; gc; } r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .if ($t1==0) { .echo ISR REGS_NULL; gc; } .printf \"ISR ICR=%08x IMS=%08x RDH=%08x RDT=%08x\n\", poi($t1+0x00C0), poi($t1+0x00D0), poi($t1+0x2810), poi($t1+0x2818); gc " bu i219!I219MiniportHandleInterrupt " r $t0=poi(@esp+4); .if ($t0<0x80000000) { .echo HINT BAD_CTX; gc; } r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .if ($t1==0) { .echo HINT REGS_NULL; gc; } .printf \"HINT ICR=%08x RDH=%08x RDT=%08x\n\", poi($t1+0x00C0), poi($t1+0x2810), poi($t1+0x2818); gc " g
  24. @reboot12 There may be differences on i219-LM chips. Mine works with CTRL kick setup rings write RCTL set EN bit But Intel tells for Industrial boards this CTRL.SLU is set AFTER link-up RFCTL is written AFTER RCTL RXDCTL queue enable is set Just set up a Windbg session with this. During running this in KD, ping yourrouterIP -t from command line on the compi, where Windbg runs. .logopen /t c:\i219LMbest_kd.txt .symfix .reload /f lm m i219 r $t0=0 r $t1=0 r $t2=0 r $t3=0 r $t4=0 r $t5=0 bc * bu i219!I219TxRxStart "r $t0=poi(@esp+4); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .echo --- I219TxRxStart ---; dt i219!_I219_ADAPTER $t0; dt i219!_I219_TXRX_CTX i219!g_TxRx; dd $t1+0x00000 L8; dd $t1+0x00018 L2; dd $t1+0x000C0 L1; dd $t1+0x000D0 L1; dd $t1+0x000D8 L1; dd $t1+0x00100 L1; dd $t1+0x05008 L1; dd $t1+0x02800 L12; dd $t1+0x02828 L2; dd $t1+0x03800 L12; gc" bu i219!I219DoCtrlKickLate "r $t0=poi(@esp+4); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .echo --- CtrlKickLate ---; dd $t1+0x00000 L2; dd $t1+0x00008 L1; dd $t1+0x00100 L1; gc" bu i219!I219PollTimerFunc "r $t0=poi(@esp+8); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .echo --- PollTimer ---; dd $t1+0x00008 L1; dd $t1+0x02810 L2; dd $t1+0x02828 L1; gc" bu i219!I219RxPoll "r $t0=poi(@esp+4); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); r $t3=poi(i219!g_TxRx+@@c++(&((i219!_I219_TXRX_CTX*)0)->RxDesc)); r $t4=poi(i219!g_TxRx+@@c++(&((i219!_I219_TXRX_CTX*)0)->RxNext)); r $t5=$t3+($t4*0x10); .echo --- RxPoll ---; dd $t1+0x02810 L2; dd $t1+0x00100 L1; dd $t1+0x05008 L1; dd $t1+0x02828 L1; dd $t5 L4; db $t5+0x0C L4; gc" bu i219!I219MiniportISR "r $t0=poi(@esp+0xC); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .echo --- ISR ---; dd $t1+0x000C0 L1; dd $t1+0x000D0 L1; dd $t1+0x02810 L2; gc" bu i219!I219MiniportHandleInterrupt "r $t0=poi(@esp+4); r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .echo --- HINT ---; dd $t1+0x000C0 L1; dd $t1+0x02810 L2; gc" g
×
×
  • Create New...