Search code examples
x86embeddedbiospci-euefi

How does a PCIe device appear bootable to the BIOS/UEFI?


I have an Intel based host system with a PCIe daughter card that my company has designed. We are able to have it be enumerated to allow memory to be shared with the intel processor. I am looking to make the daughter card memory space, accessible over PCIe, to be recognized as bootable by the BIOS/UEFI.

I could go the path of implementing one of the many HCI standards but that seems like it would be slow as this daughter card is driven by a processor and the HCI would have to be implemented in software. A more specific question would be, is there a known bootable memory format that the BIOS/UEFI can recognize after the daughter card is enumerated? Googling has not yielded much success for me and these standards, and how the bios or UEFI conform to said standards during boot appear to be tribal knowledge and hard to discover.

Other details:

  • I want to boot either Linux or Vxworks on the host CPU.
  • Both images reside in nonvolatile memory on the daughter card.
  • The daughter card processor is responsible for presenting the image in shared memory over PCIe to the host CPU.
  • You could almost consider the daughter card as a NVMe or SATA SSD expansion card as far as the host CPU would be aware but the daughter card is responsible for more functionality than just booting the host CPU which is why those types of devices do not work for my application.

Solution

  • A clean way of doing this would be to have your device expose a PCI Option ROM (Section 14.4.2 in UEFI 2.8). You could fairly easily implement a basic SIMPLE_FILESYSTEM_PROTOCOL exposing the images as files in a filesystem. There is no need to emulate an HCI.