Jump to content

Let's try to get the Intel LAN I219-V running with XP!


Mark-XP

Recommended Posts

Hello!

Many of the newer motherboards come (ore came) with an  Intel I219-V GbE LAN  on it (alt least until they were replaced with the newest 2,5+ GbE chips).
Having had achieved a nice XP installation on my "new" GA-Z170-D3H and a Win7 install beside - with the properly working "(2) i219-V" LAN device there - i started searching the web for infos related to the I219 and XP.

First stumbled across this site - point 7 - where Embedded-drivers for the i217-V were listed. [The link (on upload.ee) has expired however, i've got this pack and could upload it here... but not necessary, see below]
Togeher with a promising hint: "If exactly your network card is not in the driver (e1d5132.inf) explicitly, it must be added  by replacing  the DEV_ID of the neighboring, close in name. "

Quite optimistic with that, i isolated the Pro1000 driver files and modded it for my '(2) i219-V' / 8086_15B8 (same identifier as in Win7), started the driver-installation, it kind-of-worked, but it ended up with an error:
> PCI bus 0, Device 31, Function 6: Code 10 - The device can't be started.

Astonishingly enough: Some users have seen exactly this error with the i219-V in Windows 10 too!
(https://www.google.de/search?q=i219-V+Windows+code+10)

Now, let's take a look at the situation in Windows7 where the i219-V works nicely on the same board:
The i217, i218 and i219 Win7-drivers can be easily found on the web (eg. here ).
I found out, that in the relevant e1d6232.inf  all the devices  I217-V, I218-V and the I219-V are treated absolutely identically. And they all share the same 'Registry Settings' section well.

So i searched further and found another page (https://www.vogons.org/viewtopic.php?t=46865&start=20), where user b_w (hello b_w, are you here too??) offers a *modded* driver -  for the "Intel Ethernet Connection (2) I218-V".

Examinating the e1d5132.inf  there, i found it modded (for his 15A1 / (2) i218-V ) the same way as i did it for my 15B8 / (2) i219-V described above.
But halt! In the driver folder of that driver.7z there is a modded e1d5132.sys too! The difference - compared to the original e1d5132$.sys - are 2 bytes, at position 0x138 and 0x139.
But also with this new, modded  e1d5132.sys  the driver installation ends with the same error 10.

So the  .sys driver seems to correspond with the devices in the .inf driverfile?!

At this point i had to make a break, for the first... and decided to start this topic.

Please note:
1) This Intel i219-V LAN can be found on quasi every second mainboard (or even more) - getting it working in XP would imo mean e big leap for their XP-usability.
2) 1) implies, that newer Mini-ITX HW (with an i219) could be considerbale for an XP-build as in this case no extra PCI-LAN is necessary,

Additional links:
- The i219-V Product specificaten page
   i219 product brief: https://cdrdv2.intel.com/v1/dl/getcontent/333229
   i219 datasheet:      https://cdrdv2.intel.com/v1/dl/getcontent/612523

- The i218-V Product specificaten page
  Datasheet and Product-brief for the i218
 

Edited by Mark-XP
typo
Link to comment
Share on other sites


21 hours ago, Mark-XP said:

Examinating the e1d5132.inf  there, i found it modded (for his 15A1 / (2) i218-V ) the same way as i did it for my 15B8 / (2) i219-V described above.

But halt! In the driver folder of that driver.7z there is a modded e1d5132.sys too! The difference - compared to the original e1d5132$.sys - are 2 bytes, at position 0x138 and 0x139.
But also with this new, modded  e1d5132.sys  the driver installation ends with the same error 10.

So the  .sys driver seems to correspond with the devices in the .inf driverfile?!

e1d5132.sys has more difference, DEV_ID=1559/155A(I218-V/I218-LM) replaced few times to 15A1(I218-V2)

position 0x138 and 0x139 - updated e1d5132.sys checksum

this hack is simple - force driver to use I218-V software code for I218-V2 hardware, sucess depends on how little hardware is different, first linux driver does same thing https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=191192 e.g. no real software changes, only new DEV_ID added

Edited by Mov AX, 0xDEAD
Link to comment
Share on other sites

48 minutes ago, Mov AX, 0xDEAD said:

e1d5132.sys has more difference, DEV_ID=1559/155A(I218-V/I218-LM) replaced few times to 15A1(I218-V2)

position 0x138 and 0x139 - updated e1d5132.sys checksum

this hack is simple - force driver to use I218-V software code for I218-V2 hardware,

Many thaks for your reply, Sir @Mov AX, 0xDEAD! But did you mean: e1d5132.inf has more differences (as the .sys does not contain any "218")?

e1d5132.sys is program-code, what is it's source? the e1d5132.inf ? And the checksum (stored in e1d5132.sys) is of the .inf ? How is it calculated?

Sorry for the many questions, (after decades of SW-developing) I'm absolut newbie to this specific topic and it's hard to find comprehensive descriptions in the www...

Link to comment
Share on other sites

There are differences at 2910, 21370, 3137C, 28362. The source of the program code is held by Intel. You can use PE Tools by NEOx to update PE checksum. The checksum is the sum of all 16-bit words of the sys file excluding the checksum in a 16-bit unsigned integer, and the file size.

Link to comment
Share on other sites

Thanks a LOT @j7n , and welcome to the topic!

So in the modded e1d5132.sys (for the i218-V) we have the four differences:

    2910:   3D 59 15 -> 3D A1 15
  21370:   F9 59 15 -> F9 A1 15
  2137C:   F9 5A 15 -> F9 A1 15
  28362:   F9 59 15 -> F9 A1 15

What's so interesting:  15 59  was the primary identifier of the i218-V,  and 15 5A  primary identifier of the i218-LM in the driver offered once by intel in a ProEmbSW12 Embedded-driver-package (which was later removed as stated earlier here, point 7).

These 4 identifiers were apparently changed to 15 A1 - the identifier of the  i218-V (v2)  according to the e1d5132.inf!

Now, in fact of knowing nothing about the .sys driver, i could

  • change the e1d5132.inf  (from 15A1 / i218-V (v2)  ->  15B8 /  i219-V (v2) )
  • replace the Bytes  A1 15 to  B8 15 in the 4 locations of e1d5132.sys  (i218 id -> i219 id)
  • recalculate it's checksum, update it
  • and try my luck...

But prior i have to get the tools and do some preparations... (this type of hacking is rather new  for me)

 

Edited by Mark-XP
Link to comment
Share on other sites

9 hours ago, j7n said:

The checksum is the sum of all 16-bit words of the sys file excluding the checksum in a 16-bit unsigned integer, and the file size.

Since filesize doesn't change, i tried to calculate the the checksum change manually: 3 * (A1 - 59) + (A1 - 5A) = 11F  is exactly the difference of the both checksums at 0x138 (3E C5 - 3D A6) :cool:. Very nice @j7n, it even seems i do not have to utilize PE tools...

And: Sorry Master @Mov AX, 0xDEAD, i hadn't yet reached the level neccessary to understand your wise reply above...

Link to comment
Share on other sites

6 minutes ago, Mark-XP said:

Since filesize doesn't change, i tried to calculate the the checksum change manually: 3 * (A1 - 59) + (A1 - 5A) = 11F  is exactly the difference of the both checksums at 0x138 (3E C5 - 3D A6) :cool:. Very nice @j7n, it even seems i do not have to utilize PE tools...

there is many cheksum tools, i attached one

checksum.exe

Link to comment
Share on other sites

1 hour ago, Mark-XP said:

What's so interesting:  15 59  was the primary identifier of the i218-V,  and 15 5A  primary identifier of the i218-LM in the driver offered once by intel in a ProEmbSW12 Embedded-driver-package (which was later removed as stated earlier here, point 7).

1) at offset 2137C numbers 1559 and 155A used as equation range

Quote

  if ( id >= 0x1559 && id <= 0x155A )

if you have new 15B8, only patching 155A is enough, but author of patch changed both numbers, it is OK

2) i think one offset is missing:

Quote

 if ( id > 0x151E )
  {
    if ( id <= 0x155A ) <- missed 2909
    {
      if ( id < 0x1559 && id != 0x1525 && (id <= 0x1539 || id > 0x153B) ) <- 2910 offset
        return;
      goto type_21;
    }
    if ( id == 0xF0E1 )

new 15A1 is not <= 0x155A, so we never reach goto type_21; line

Edited by Mov AX, 0xDEAD
Link to comment
Share on other sites

Many Thanks @Mov AX, 0xDEAD: meanwhile i tested the 15B8 [(2) 219-V] patched e1d5132  but it ended with error code 10 again.

Now i'll analyse your (disassembled?) code and read the linux approach you mentioned above.

At a first glance: we do not know if the 15A1 (i218) driver of b_w  really ever worked! (if anybode here has a mb with a 218-V...) But i'll try to implement and test your idea later!

Edit: i inserted 2909 (155A -> 15B8), reverted 2910 to as it was (1559), reverted 21370 (to original 1559) but did 2137C (15A1 -> 15B8).

The result unfortunately remains the same: Code 10.

Now @Mov AX, 0xDEAD, what means  28362 then (may i kindestly ask :rolleyes:)? Since we let the two changes regarding id 15 59  unchanged, maybe the manipulation here is wrong or unnecessary too?

Edited by Mark-XP
test result added
Link to comment
Share on other sites

11 hours ago, Mark-XP said:

Now @Mov AX, 0xDEAD, what means  28362 then (may i kindestly ask :rolleyes:)? Since we let the two changes regarding id 15 59  unchanged, maybe the manipulation here is wrong or unnecessary too?

Quote

   if ( *(_BYTE *)(a1 + 0x2430) > 2u || (id = *(_WORD *)(a1 + 9256), id == 0x155A) || id == 0x1559 )
      v4 |= 1u;

this is 28362 offset, need patch too, you can patch 155a or 1559, no matter

p.s. can you share final e1d5132.sys ?

Link to comment
Share on other sites

Now i thought a little about the situation and remembered, that the i219-V is working well on the Win-7 (64) partition of the system disk. Having learned a little bit about the .sys drivers i took a look at the Win7-Version and that made me somewhat pessimistic: since in Win7 e1d62x64.sys  the are 5 occurancies of  B5 15 (id of 1219-V). in ,our' Version we've got only three. (In the 32-bit e1d6232.sys i counted even 6).

So i conclude that there is done a bit more (in the Win7 driver) to get it working. Hence i'm less otimistic about the feasibility of this ,project' and beg you, Sir @Mov AX, 0xDEAD, not to waste too much time and efforts with it!

Nevertheless, here is the Win7 (32) versions of the driver (for a swift view):

e1d6232_Win7.sys

Edited by Mark-XP
typo
Link to comment
Share on other sites

  • 2 weeks later...

@George King

This attempt will not work.

The i219 is very much different from i218, i217..

The only way is, to use the Win7 driver. But for this you need ndis6.

I made a try with Vista Longhorn 5048. I has ndis6. There was only one missed dependency

Dietmar

Link to comment
Share on other sites

  • 8 months later...
On 3/31/2023 at 9:29 PM, Dietmar said:

But for this you need ndis6.

Or you nead a board with a second "< i219" LAN chip on it, like my ,new' GA-Z170N-WiFi :cheerleader:

God bless that wise (or simply miserly?) taiwanese engineer who decided to put that extra, slightly outdated (or simply cheaper?) i211 on it! No need for an old Realtek-PCI-LAN, and no need to replace its modern 11ac 867 WiFi with an aged M2 6235.

This Skylake i5-6600 (non T) system running idle  consumes about incredible 1.1 W only (XP) and 0.8 W only (Win7) - at least according to HWMonitor 1.28 - utilizing the integrated HD530.  That would mean approximately 1/6 of power input  compared to my current IvyBridge-i5 rig !

So, God bless @Mov AX, 0xDEAD, @Dietmar, @Ramsey, @Kai-Schtrom and everyone else who made this possible  too!

A happy new 2024!

Link to comment
Share on other sites

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