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",
UINT16_t restore_fbms
Free base memory prior to load.
#define PCI_FUNC(busdevfn)
struct arbelprm_rc_send_wqe rc
size_t code_size
Code segment size.
#define EBUSY
Device or resource busy.
#define undi_loader_entry
static unsigned int get_fbms(void)
Read the BIOS free base memory counter.
size_t data_size
Data segment size.
static struct s_UNDI_LOADER __bss16(undi_loader)
Parameter block for calling UNDI loader.
SEGOFF16_t ppxe
!PXE structure address
#define UNDI_NO_ISAPNP_CSN
ISAPnP card select number field is invalid.
SEGOFF16_t pxenv
PXENV+ structure address.
UINT16_t isapnp_csn
ISAPnP card select number, or UNDI_NO_ISAPNP_CSN.
#define EUNDILOAD(status)
FILE_LICENCE(GPL2_OR_LATER_OR_UBDL)
SEGOFF16_t loader_entry
UNDI loader entry point.
SEGOFF16_t entry
Entry point.
char * strerror(int errno)
Retrieve string representation of error number.
#define PCI_SLOT(busdevfn)
__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))
UINT16_t isapnp_read_port
ISAPnP read port, or UNDI_NO_ISAPNP_READ_PORT.
UINT16_t fbms
Free base memory after load.
#define UNDI_NO_PCI_BUSDEVFN
PCI bus:dev.fn field is invalid.
int undi_unload(struct undi_device *undi)
Unload a pixie.
UINT16_t pci_busdevfn
PCI bus:dev.fn, or UNDI_NO_PCI_BUSDEVFN.
#define PXENV_EXIT_SUCCESS
No error occurred.
void set_fbms(unsigned int new_fbms)
Set the BIOS free base memory counter.
__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")
#define __from_data16(pointer)
Parameter block for undi_loader()
int find_pnp_bios(void)
Locate Plug-and-Play BIOS.
int undi_load(struct undi_device *undi, struct undi_rom *undirom)
Call UNDI loader to create a pixie.
#define DBG(...)
Print a debugging message.
#define REAL_CODE(asm_code_str)
void * memset(void *dest, int character, size_t len) __nonnull