mirror of https://github.com/ipxe/ipxe.git
[pxe] Make pxe_init_structures() an initialisation function
pxe_init_structures() fills in the fields of the !PXE and PXENV+ structures that aren't known until gPXE starts up. Once gPXE is started, these values will never change. Make pxe_init_structures() an initialisation function so that PXE users don't have to worry about calling it.pull/1/head
parent
c26a38b313
commit
c2965b0fe7
|
@ -47,7 +47,6 @@ static int pxe_exec ( struct image *image ) {
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
/* Ensure that PXE stack is ready to use */
|
/* Ensure that PXE stack is ready to use */
|
||||||
pxe_init_structures();
|
|
||||||
pxe_hook_int1a();
|
pxe_hook_int1a();
|
||||||
|
|
||||||
/* Arbitrarily pick the most recently opened network device */
|
/* Arbitrarily pick the most recently opened network device */
|
||||||
|
|
|
@ -30,7 +30,6 @@ extern struct s_PXENV __text16 ( pxenv );
|
||||||
|
|
||||||
extern void pxe_hook_int1a ( void );
|
extern void pxe_hook_int1a ( void );
|
||||||
extern int pxe_unhook_int1a ( void );
|
extern int pxe_unhook_int1a ( void );
|
||||||
extern void pxe_init_structures ( void );
|
|
||||||
extern int pxe_start_nbp ( void );
|
extern int pxe_start_nbp ( void );
|
||||||
extern __asmcall void pxe_api_call ( struct i386_all_regs *ix86 );
|
extern __asmcall void pxe_api_call ( struct i386_all_regs *ix86 );
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,7 @@
|
||||||
FILE_LICENCE ( GPL2_OR_LATER );
|
FILE_LICENCE ( GPL2_OR_LATER );
|
||||||
|
|
||||||
#include <gpxe/uaccess.h>
|
#include <gpxe/uaccess.h>
|
||||||
|
#include <gpxe/init.h>
|
||||||
#include <registers.h>
|
#include <registers.h>
|
||||||
#include <biosint.h>
|
#include <biosint.h>
|
||||||
#include <pxe.h>
|
#include <pxe.h>
|
||||||
|
@ -403,7 +404,7 @@ static uint8_t pxe_checksum ( void *data, size_t size ) {
|
||||||
* Initialise !PXE and PXENV+ structures
|
* Initialise !PXE and PXENV+ structures
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
void pxe_init_structures ( void ) {
|
static void pxe_init_structures ( void ) {
|
||||||
uint32_t rm_cs_phys = ( rm_cs << 4 );
|
uint32_t rm_cs_phys = ( rm_cs << 4 );
|
||||||
uint32_t rm_ds_phys = ( rm_ds << 4 );
|
uint32_t rm_ds_phys = ( rm_ds << 4 );
|
||||||
|
|
||||||
|
@ -429,6 +430,11 @@ void pxe_init_structures ( void ) {
|
||||||
pxenv.Checksum -= pxe_checksum ( &pxenv, sizeof ( pxenv ) );
|
pxenv.Checksum -= pxe_checksum ( &pxenv, sizeof ( pxenv ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** PXE structure initialiser */
|
||||||
|
struct init_fn pxe_init_fn __init_fn ( INIT_NORMAL ) = {
|
||||||
|
.initialise = pxe_init_structures,
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start PXE NBP at 0000:7c00
|
* Start PXE NBP at 0000:7c00
|
||||||
*
|
*
|
||||||
|
|
|
@ -39,9 +39,6 @@ PXENV_EXIT_t undi_loader ( struct s_UNDI_LOADER *undi_loader ) {
|
||||||
DBG ( "[PXENV_UNDI_LOADER to CS %04x DS %04x]",
|
DBG ( "[PXENV_UNDI_LOADER to CS %04x DS %04x]",
|
||||||
undi_loader->UNDI_CS, undi_loader->UNDI_DS );
|
undi_loader->UNDI_CS, undi_loader->UNDI_DS );
|
||||||
|
|
||||||
/* Set up PXE data structures */
|
|
||||||
pxe_init_structures();
|
|
||||||
|
|
||||||
/* Fill in UNDI loader structure */
|
/* Fill in UNDI loader structure */
|
||||||
undi_loader->PXEptr.segment = rm_cs;
|
undi_loader->PXEptr.segment = rm_cs;
|
||||||
undi_loader->PXEptr.offset = __from_text16 ( &ppxe );
|
undi_loader->PXEptr.offset = __from_text16 ( &ppxe );
|
||||||
|
|
Loading…
Reference in New Issue