[ipxe-devel] Using iPXE with UNDI driver

Michael Brown mbrown at fensystems.co.uk
Mon Jul 4 11:13:36 UTC 2011


On Friday 01 Jul 2011 19:23:29 Lantz, Philip wrote:
> > Under EFI, iPXE can either use a built-in iPXE driver (i.e. something
> > under drivers/net), or use an existing EFI network device via an EFI SNP
> > interface. Your driver needs to provide an EFI SNP interface, or rely
> > upon components that consume an EFI UNDI interface and provide an EFI SNP
> > interface.
> 
> I suspected this -- thanks for confirming it -- and I have tried loading an
>  SNP interface on top of my UNDI driver before running iPXE, but iPXE still
>  doesn't find it. Do you have any more suggestions for why this might
>  happen? Can you point me toward the code in iPXE that is supposed to
>  locate the SNP interface and connect to it?

It's in drivers/net/efi/snponly.c.  From a quick look at the code, it seems as 
though it will only attach to the SNP from which the iPXE binary was loaded 
(i.e. it's the functional equivalent of arch/i386/drivers/net/undionly.c).

It should be possible to create an iPXE EFI driver that will attach to any SNP 
device within the system and call snpnet_probe().  You could model this on the 
code in interface/efi/efi_pci.c, which attaches to any PCI device within the 
system and calls pci_probe().
 
> After I got some debugging output enabled, iPXE prints
>      EFIPCI DRIVER_SUPPORTED 0x3de92f90 (0x0)
>      EFIPCI device 0x3de92f90 is not a PCI device
> In fact, 0x3de92f90 isn't even a valid handle; as far as I know, EFI
>  handles are small integers, not memory addresses.

UefiBaseType.h:  typedef VOID * EFI_HANDLE;

(Type checking?  Who needs type checking?  Let's make one of the most 
frequently used EFI data types transparently cast to or from any pointer 
type!)

Michael



More information about the ipxe-devel mailing list