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 Here is the driver, corrected for the error above. Even before it was nearly ready, now it should work Dietmar https://www.upload.ee/files/19110246/i219LMbest.zip.html
  2. @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
  3. @reboot12 I am out until 18:00 today, because of Jugend Forscht in city Hildesheim goog luck Dietmar
  4. @reboot12 To this driver here I come, when I take a look at the Bios from your board Dietmar https://www.upload.ee/files/19107283/i219CollFix.zip.html
  5. @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).
  6. @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
  7. @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
  8. @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
  9. @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
  10. @reboot12 I make a new i219 driver, based on your logs Dietmar https://www.upload.ee/files/19106535/i219DHCP.zip.html
  11. @reboot12 Yes, no other way. Only via new boot you know what happens Dietmar
  12. @reboot12 Yes, because the driver may be unloaded and then you have no symbols for it, because the i219.pdb was then also unloaded. This was all the time a problem for me, so I solved it via this way Dietmar
  13. @reboot12 Here it is much more comfortable for me, because I can use ChatGPT for to check all Windbg orders for syntax order. In Webchat I cant handle it like this here. And in the same time I always try to build a new i219.sys which is impossible with a lot of open windows. Later, when everything works, we can delete those entries here all Dietmar
  14. @reboot12 And here is already next Dietmar .logopen /t c:\i219_bind_or_rx.log .reload /f i219.sys bc * 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); .if (poi(@esp+8)==0x0001010e) { .printf \"PF=%08x\n\", poi(poi(@esp+0x0c)); } ; gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u\n\", poi(@esp+0x0c); gc" bu ndis!NdisMEthIndicateReceive ".echo RX; gc" g
  15. @reboot12 Here ist next Dietmar .logopen /t c:\i219_dhcp_trace3.log .reload /f i219.sys bc * bp nt!DebugService2 "gc" bu i219!I219MiniportInitialize ".echo INIT; gc" bu i219!I219IndicateMediaState ".echo MEDIA; gc" bu i219!I219DoCtrlKickLate ".echo CTRLKICK; 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); r $t0=poi(@esp+4); .printf \"PFcur=%08x LAcur=%08x\n\", poi($t0+4), poi($t0+8); .if (poi(@esp+8)==0x0001010e) { .printf \"PFnew=%08x\n\", poi(poi(@esp+0x0c)); } .if (poi(@esp+8)==0x0001010f) { .printf \"LAnew=%u\n\", poi(poi(@esp+0x0c)); } gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u ARR=%p\n\", poi(@esp+0x0c), poi(@esp+8); gc" bu i219!I219TxSendOne ".echo TXONE; gc" bu i219!I219TxReclaim ".echo TXRECLAIM; gc" bu i219!I219RxPoll ".echo RXPOLL; gc" bu i219!I219MiniportISR ".echo ISR; gc" bu i219!I219MiniportHandleInterrupt ".echo HINT; gc" g
  16. @reboot12 The lan chip i219-LM .logopen /t c:\i219_dhcp_next.log .reload /f i219.sys bc * bu i219!I219MiniportInitialize ".echo I219MiniportInitialize; gc" bu i219!I219IndicateMediaState ".echo I219IndicateMediaState; 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!I219MiniportQueryInformation ".printf \"QRY OID=%08x LEN=%u\n\", poi(@esp+8), poi(@esp+0x10); gc" bu i219!I219MiniportSendPackets ".printf \"SEND CNT=%u ARR=%p\n\", poi(@esp+0x0c), poi(@esp+8); gc" bu ndis!NdisMSendComplete ".echo NdisMSendComplete; 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" bu i219!I219RxPoll ".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" g is alive, so for sure it is not a power saving problem. Here is next Dietmar
  17. @reboot12 We continue with this NoPowersaving version. I agree, that this is a problem with link speed, so lets look Dietmar .logopen /t c:\i219_nextsteps.log .reload /f lm m i219 lm m ndis bc * bp NDIS!NdisMSetAttributesEx "r $t0=poi(@esp+8); .printf \"CTX=%p\n\", $t0; gc" bu i219!I219OidSetInfo ".printf \"OIDS 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!I219OidQueryInfo ".printf \"OIDQ OID=%08x Len=%u\n\", poi(@esp+8), poi(@esp+0x10); gc" bm i219!*Send*Packets* bm i219!*Return*Packet* bm i219!*Isr* bm i219!*HandleInterrupt* bu i219!I219PollTimerFunc ".echo I219PollTimerFunc; gc" bm NDIS!NdisMIndicateReceive* bm NDIS!NdisMIndicateReceivePacket* bm NDIS!ndisMIndicateStatus* bm NDIS!ndisMIndicateStatusComplete* bu i219!I219IndicateMediaState "r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .printf \"MEDIA=%u CTRL=%08x STATUS=%08x IMS=%08x RCTL=%08x TCTL=%08x\n\", poi(@esp+8), poi($t1+0), poi($t1+8), poi($t1+0xd0), poi($t1+0x100), poi($t1+0x400); gc" bu i219!I219LinkFromStatus "r $t1=poi($t0+@@c++(&((i219!_I219_ADAPTER*)0)->Regs)); .printf \"LINK CTRL=%08x STATUS=%08x\n\", poi($t1+0), poi($t1+8); gc" g
  18. @reboot12 I make a new i219 driver, where I disabled really everything about power saving Dietmar https://www.upload.ee/files/19106169/i219NOPowersaving.zip.html
  19. @reboot12 Here are next steps for Windbg Dietmar bc * bu i219!I219LinkFromStatus ".echo I219LinkFromStatus; gc" bu i219!I219IndicateMediaState ".echo I219IndicateMediaState; gc" bu NDIS!ndisMIndicateStatus ".printf \"ndisMIndicateStatus GS=%08x Size=%u\n\", poi(@esp+8), poi(@esp+0x10); gc" bu NDIS!ndisMIndicateStatusComplete ".echo ndisMIndicateStatusComplete; gc" g
  20. @reboot12 I mean the "notworking older driver" for this Wise with realtek 8168. Uncheck there the mark for "Power Saving" and take a look what happens Dietmar
  21. @reboot12 On the settings of this Realtek 8168 driver you told in the chat, that you uncheck the mark for Power Saving on Dietmar
  22. @reboot12 Try this and send me result Dietmar .logopen /t c:\i219_kollege_kd.log !sym noisy .reload /f lm m i219 lm m ndis x i219!*LowPower* x i219!*Ulp* x i219!*Link* x i219!*Media* x i219!*Oid* x i219!*PacketFilter* x i219!*Send* x i219!*Rx* x i219!*Interrupt* bc * bu i219!I219MiniportInitialize ".echo I219MiniportInitialize; r; gc" bu i219!I219LowPowerExitFixup ".echo I219LowPowerExitFixup; r; gc" bu i219!I219DisableUlpPhy ".echo I219DisableUlpPhy; r; gc" bu i219!I219LinkFromStatus ".echo I219LinkFromStatus; r; gc" bu i219!I219IndicateMediaState ".echo I219IndicateMediaState; r; gc" bu i219!I219SetPacketFilter ".echo I219SetPacketFilter; r; gc" bu i219!I219OidQueryInfo ".printf \"OIDQ OID=%08x Len=%u\\n\", poi(@esp+8), poi(@esp+0x10); gc" bu i219!I219OidSetInfo ".printf \"OIDS OID=%08x Len=%u\\n\", poi(@esp+8), poi(@esp+0x10); gc" x NDIS!*IndicateStatus* bu NDIS!ndisMIndicateStatus ".printf \"ndisMIndicateStatus GS=%08x Size=%u\\n\", poi(@esp+8), poi(@esp+0x10); gc" bu NDIS!ndisMIndicateStatusComplete ".echo ndisMIndicateStatusComplete; gc" x NDIS!NdisMMapIoSpace bp NDIS!NdisMMapIoSpace "r $t0=poi(@esp+4); gu; .printf \"MMIO=%p\\n\", poi($t0); gc" g
  23. @reboot12 Yes. But your board is a very expensive Industrial motherboard and so, they can set this Power Saving everywhere enabled as standard. You can make an easy test: Take your Wise board with the not working lan driver and DISABLE there the Power Saving function, voila Dietmar
  24. @reboot12 I found this in your comments about the not working DHCP router: "I'm not sure but I also changed the various settings on the Advanced tab and I unchecked Allow the computer to turn off this device to save power on Power Management tab:" I am quite sure, that this enabled "Power Saving" is the reason for no send no get Dietmar
  25. @reboot12 What is the name of your board with the i219-LM lan and which Bios Version you have on it? May be I have or some very similar Dietmar
×
×
  • Create New...