Dietmar Posted February 25 Posted February 25 (edited) @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 Edited February 25 by Dietmar
reboot12 Posted February 25 Posted February 25 @Dietmar https://www.upload.ee/files/19110354/i219LMbest_kd_0840_2026-02-25_19-31-45-750.txt.html
Dietmar Posted February 25 Posted February 25 @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
reboot12 Posted February 25 Posted February 25 @Dietmar https://www.upload.ee/files/19110460/i219LMbest_kd_diag_09e0_2026-02-25_19-51-51-500.txt.html I can't ping because have black screen.
Dietmar Posted February 25 Posted February 25 @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
Dietmar Posted February 25 Posted February 25 @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
reboot12 Posted February 26 Posted February 26 (edited) 11 hours ago, Dietmar said: type this as ONE block in KD So I can copy and paste all the code at once and you wrote earlier that I have to enter it line by line Now I can use WinDbg conveniently and pleasantly Typing line by line was very tiring https://www.upload.ee/files/19111494/i219LMbest_kd_diag_fixed_05d4_2026-02-26_07-14-11-281.txt.html i219LMv7 - 100 Mbps but 0/0 Edited February 26 by reboot12
Dietmar Posted February 26 Posted February 26 @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
reboot12 Posted February 26 Posted February 26 (edited) @Dietmar I did g several times: https://pastebin.com/5ugPNP1U Can I skip these commands because they seem unnecessary? !sym noisy .reload /f Command sxe ud:i219 always display error: Couldn't resolve error at 'i219' so this command also seem unnecessary Edited February 26 by reboot12
Dietmar Posted February 26 Posted February 26 (edited) @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. Edited February 26 by Dietmar
reboot12 Posted February 26 Posted February 26 (edited) @Dietmar I noticed that WinDbg remembers the path to the symbols after starting, so there is no need to set it in the KD each time. I tested the commands without !sym noisy & .reload /f and the results are the same but the log is clearer without the DBGHELP messages so I think this commands are unnecessary. From now on I will start debugging with the commands: sxe ld:i219 sxe ud:i219 g .reload /f i219.sys lm m i219 and put your new commands there This is full WinDbg log if try from start WinDbg and from command sxe ld:i219 (after auto break from boot.ini switch) > https://pastebin.com/3HSAFxjG Edited February 26 by reboot12
Dietmar Posted February 26 Posted February 26 @reboot12 I take a look at the Linux Source Code e1000e. Then I send you a new driver v9 Dietmar
Dietmar Posted February 26 Posted February 26 (edited) @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 Edited February 26 by Dietmar
reboot12 Posted February 26 Posted February 26 (edited) @Dietmar i219v9 - still 0/0 https://pastebin.com/k7JQ90JH Edited February 26 by reboot12
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now