[init] Remove concept of "shutdown exit flags"

Remove the concept of shutdown exit flags, and replace it with a
counter used to keep track of exposed interfaces that require devices
to remain active.

Signed-off-by: Michael Brown <mcb30@ipxe.org>
This commit is contained in:
Michael Brown
2011-01-27 20:35:48 +00:00
parent 35a50399a5
commit 962cada830
17 changed files with 64 additions and 37 deletions

View File

@@ -114,13 +114,13 @@ struct root_device undi_root_device __root_device = {
/**
* Prepare for exit
*
* @v flags Shutdown flags
* @v booting System is shutting down for OS boot
*/
static void undionly_shutdown ( int flags ) {
static void undionly_shutdown ( int booting ) {
/* If we are shutting down to boot an OS, clear the "keep PXE
* stack" flag.
*/
if ( flags & SHUTDOWN_BOOT )
if ( booting )
preloaded_undi.flags &= ~UNDI_FL_KEEP_ALL;
}

View File

@@ -477,7 +477,7 @@ static int bzimage_exec ( struct image *image ) {
bzimage_update_header ( image, &bzimg, bzimg.rm_kernel );
/* Prepare for exiting */
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
DBGC ( image, "bzImage %p jumping to RM kernel at %04x:0000 "
"(stack %04x:%04zx)\n", image, ( bzimg.rm_kernel_seg + 0x20 ),

View File

@@ -48,7 +48,7 @@ static int elfboot_exec ( struct image *image ) {
/* An ELF image has no callback interface, so we need to shut
* down before invoking it.
*/
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
/* Jump to OS with flat physical addressing */
DBGC ( image, "ELF %p starting execution at %lx\n", image, entry );

View File

@@ -278,7 +278,7 @@ static int multiboot_exec ( struct image *image ) {
/* Multiboot images may not return and have no callback
* interface, so shut everything down prior to booting the OS.
*/
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
/* Build memory map after unhiding bootloader memory regions as part of
* shutting everything down.

View File

@@ -406,7 +406,7 @@ static int nbi_exec ( struct image *image ) {
/* Shut down now if NBI image will not return */
may_return = NBI_PROGRAM_RETURNS ( imgheader.flags );
if ( ! may_return )
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
/* Execute NBI image */
if ( NBI_LINEAR_EXEC_ADDR ( imgheader.flags ) ) {

View File

@@ -1209,8 +1209,10 @@ static int int13_hook ( struct uri *uri, unsigned int drive ) {
int13->cylinders, int13->heads, int13->sectors_per_track );
/* Hook INT 13 vector if not already hooked */
if ( list_empty ( &int13s ) )
if ( list_empty ( &int13s ) ) {
int13_hook_vector();
devices_get();
}
/* Add to list of emulated drives */
list_add ( &int13->list, &int13s );
@@ -1277,8 +1279,10 @@ static void int13_unhook ( unsigned int drive ) {
DBGC ( int13, "INT13 drive %02x unregistered\n", int13->drive );
/* Unhook INT 13 vector if no more drives */
if ( list_empty ( &int13s ) )
if ( list_empty ( &int13s ) ) {
devices_put();
int13_unhook_vector();
}
/* Drop list's reference to drive */
ref_put ( &int13->refcnt );

View File

@@ -448,6 +448,7 @@ void pxe_activate ( struct net_device *netdev ) {
if ( ! int_1a_hooked ) {
hook_bios_interrupt ( 0x1a, ( unsigned int ) pxe_int_1a,
&pxe_int_1a_vector );
devices_get();
int_1a_hooked = 1;
}
@@ -475,6 +476,7 @@ int pxe_deactivate ( void ) {
strerror ( rc ) );
return rc;
}
devices_put();
int_1a_hooked = 0;
}

View File

@@ -290,7 +290,7 @@ PXENV_EXIT_t pxenv_stop_undi ( struct s_PXENV_STOP_UNDI *stop_undi ) {
pxe_deactivate();
/* Prepare for unload */
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
/* Check to see if we still have any hooked interrupts */
if ( hooked_bios_interrupts != 0 ) {

View File

@@ -531,7 +531,7 @@ static __asmcall void int22 ( struct i386_all_regs *ix86 ) {
break;
/* Perform final cleanup */
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
/* Perform sequence of copies */
shuffle ( ix86->segs.es, ix86->regs.di, ix86->regs.cx );
@@ -608,7 +608,7 @@ static __asmcall void int22 ( struct i386_all_regs *ix86 ) {
break;
/* Perform final cleanup */
shutdown ( SHUTDOWN_BOOT );
shutdown_boot();
/* Perform sequence of copies */
shuffle ( ix86->segs.es, ix86->regs.di, ix86->regs.cx );