46#define EINFO_EUNDILOAD \
47 __einfo_uniqify ( EINFO_EPLATFORM, 0x01, \
49#define EUNDILOAD( status ) EPLATFORM ( EINFO_EUNDILOAD, status )
53#define undi_loader __use_data16 ( undi_loader )
57#define undi_loader_entry __use_data16 ( undi_loader_entry )
68 unsigned int fbms_seg;
74 DBG (
"UNDI %p cannot load multiple instances\n", undi );
90 fbms_seg -= ( ( undirom->
code_size + 0x0f ) >> 4 );
92 fbms_seg -= ( ( undirom->
data_size + 0x0f ) >> 4 );
94 undi->
fbms = ( fbms_seg >> 6 );
96 DBGC ( undi,
"UNDI %p allocated [%d,%d) kB of base memory\n",
100 DBGC ( undi,
"UNDI %p loading ROM %p to CS %04x:%04zx DS %04x:%04zx "
106 DBGC ( undi,
"PCI %02x:%02x.%x\n",
110 DBGC ( undi,
"ISAPnP(%04x) CSN %04x\n",
119 "lcall *undi_loader_entry\n\t"
124 :
"ebx",
"ecx",
"edx",
"esi",
"edi" );
127 DBGC ( undi,
"UNDI %p loader failed: %s\n",
138 DBGC ( undi,
"UNDI %p loaded PXENV+ %04x:%04x !PXE %04x:%04x "
139 "entry %04x:%04x\n", undi, undi->
pxenv.segment,
164 DBGC ( undi,
"UNDI %p unloading\n", undi );
170 if ( undi->
pxenv.segment )
172 if ( undi->
ppxe.segment )
177 DBGC ( undi,
"UNDI %p freeing [%d,%d) kB of base memory\n",
182 DBGC ( undi,
"UNDI %p leaking [%d,%d) kB of base memory\n",
struct arbelprm_rc_send_wqe rc
__asm__ __volatile__("call *%9" :"=a"(result), "=c"(discard_ecx), "=d"(discard_edx) :"d"(0), "a"(code), "b"(0), "c"(in_phys), "D"(0), "S"(out_phys), "m"(hypercall))
void set_fbms(unsigned int new_fbms)
Set the BIOS free base memory counter.
static unsigned int get_fbms(void)
Read the BIOS free base memory counter.
#define DBG(...)
Print a debugging message.
#define FILE_LICENCE(_licence)
Declare a particular licence as applying to a file.
#define EBUSY
Device or resource busy.
#define PXENV_EXIT_SUCCESS
No error occurred.
void * memset(void *dest, int character, size_t len) __nonnull
#define REAL_CODE(asm_code_str)
#define __bss16(variable)
#define __from_data16(pointer)
#define PCI_FUNC(busdevfn)
#define PCI_SLOT(busdevfn)
int find_pnp_bios(void)
Locate Plug-and-Play BIOS.
__asm__(".section \".rodata\", \"a\", " PROGBITS "\n\t" "\nprivate_key_data:\n\t" ".size private_key_data, ( . - private_key_data )\n\t" ".equ private_key_len, ( . - private_key_data )\n\t" ".previous\n\t")
char * strerror(int errno)
Retrieve string representation of error number.
Parameter block for undi_loader()
UINT16_t pci_busdevfn
PCI bus:dev.fn, or UNDI_NO_PCI_BUSDEVFN.
UINT16_t isapnp_csn
ISAPnP card select number, or UNDI_NO_ISAPNP_CSN.
UINT16_t isapnp_read_port
ISAPnP read port, or UNDI_NO_ISAPNP_READ_PORT.
SEGOFF16_t ppxe
!PXE structure address
SEGOFF16_t pxenv
PXENV+ structure address.
UINT16_t restore_fbms
Free base memory prior to load.
UINT16_t fbms
Free base memory after load.
SEGOFF16_t entry
Entry point.
size_t data_size
Data segment size.
size_t code_size
Code segment size.
SEGOFF16_t loader_entry
UNDI loader entry point.
#define UNDI_NO_PCI_BUSDEVFN
PCI bus:dev.fn field is invalid.
#define UNDI_NO_ISAPNP_CSN
ISAPnP card select number field is invalid.
int undi_unload(struct undi_device *undi)
Unload a pixie.
#define EUNDILOAD(status)
#define undi_loader_entry
int undi_load(struct undi_device *undi, struct undi_rom *undirom)
Call UNDI loader to create a pixie.