On Tuesday 01 Mar 2011 04:15:33 Andrew Dwyer wrote: > Dwyer, Andrew <Andrew.Dwyer@...> writes: > > I'm hitting ctrl+b at the first prompt because that's the only one I > > get. After that the screen goes blank and then the devices in the boot > > order attempt to boot. > > > > I'm doing this on a HP Z400 which has a HP branded BIOS. The network > > card definitely appears in the boot order selection with the stock Intel > > pxe rom, but when I replace it with iPXE it disappears. > > > > The BIOS detection line: > > > > iPXE (http://ipxe.org) 37:09.0 1000 PCI3.00 PnP PMM+004D1200+004E1EF0 > > D740 > > Does anyone have any suggestions for me on this issue? I'm still having > the same problem of iPXE on my network card not showing up as a bootable > device.
HP BIOSes are known to do some strange things, such as using random unmarked areas of system memory to hold critical BIOS data structures. You could try the attached patch, which will convert iPXE to a dumb pre-PCI3 ROM that doesn't do *anything* on initialisation except inform the BIOS that it is a bootable device. It should then show up as "iPXE" (rather than the usual "iPXE (PCI 37:09.0)"). Note that this may prevent other option ROMs in the system from functioning, since the iPXE ROM will no longer shrink itself in order to take up less option ROM space. You should check that you can boot the system without relying on option ROMs that are loaded after iPXE before you apply this patch. (As an illustration, on one of my machines I had to boot from a SATA disk in order to recover, because the unshrunk iPXE ROM prevented the IDE controller's option ROM from loading.) Michael
diff --git a/src/arch/i386/prefix/romprefix.S b/src/arch/i386/prefix/romprefix.S index ede0fb4..9d865ac 100644 --- a/src/arch/i386/prefix/romprefix.S +++ b/src/arch/i386/prefix/romprefix.S @@ -79,7 +79,7 @@ pciheader: .word pci_device_id /* Device identification */ .word 0x0000 /* Device list pointer */ .word pciheader_len /* PCI data structure length */ - .byte 0x03 /* PCI data structure revision */ + .byte 0x00 /* PCI data structure revision */ .byte 0x02, 0x00, 0x00 /* Class code */ pciheader_image_length: .word 0 /* Image length */ @@ -88,8 +88,6 @@ pciheader_image_length: .byte 0x80 /* Last image indicator */ pciheader_runtime_length: .word 0 /* Maximum run-time image length */ - .word 0x0000 /* Configuration utility code header */ - .word 0x0000 /* DMTF CLP entry point */ .equ pciheader_len, . - pciheader .size pciheader, . - pciheader @@ -170,6 +168,11 @@ undiheader: * if it wants to boot us. If it is not PnP, hook INT 19. */ init: + + // Do nothing except indicating that we are a boot-capable device + movw $0x20, %ax + lret + /* Preserve registers, clear direction flag, set %ds=%cs */ pushaw pushw %ds
_______________________________________________ ipxe-devel mailing list [email protected] https://lists.ipxe.org/mailman/listinfo/ipxe-devel

