diff options
| author | Michael Brown | 2007-01-08 04:04:54 +0100 |
|---|---|---|
| committer | Michael Brown | 2007-01-08 04:04:54 +0100 |
| commit | a6ba48e51eb917e1c124b3657090f257dc2efca2 (patch) | |
| tree | 791e44a0eb8a0d1e8a69967c4749eb103a1b34b1 | |
| parent | Added missing includes (diff) | |
| download | ipxe-a6ba48e51eb917e1c124b3657090f257dc2efca2.tar.gz ipxe-a6ba48e51eb917e1c124b3657090f257dc2efca2.tar.xz ipxe-a6ba48e51eb917e1c124b3657090f257dc2efca2.zip | |
Added debugging statements
| -rw-r--r-- | src/arch/i386/interface/pcbios/biosint.c | 20 |
1 files changed, 19 insertions, 1 deletions
diff --git a/src/arch/i386/interface/pcbios/biosint.c b/src/arch/i386/interface/pcbios/biosint.c index 6028998a1..5a48f0479 100644 --- a/src/arch/i386/interface/pcbios/biosint.c +++ b/src/arch/i386/interface/pcbios/biosint.c @@ -37,13 +37,21 @@ void hook_bios_interrupt ( unsigned int interrupt, unsigned int handler, .offset = handler, }; + DBG ( "Hooking INT %#02x to %04x:%04x\n", + interrupt, rm_cs, handler ); + if ( ( chain_vector->segment != 0 ) || ( chain_vector->offset != 0 ) ) { /* Already hooked; do nothing */ + DBG ( "...already hooked\n" ); return; } + copy_from_real ( chain_vector, 0, ( interrupt * 4 ), sizeof ( *chain_vector ) ); + DBG ( "...chaining to %04x:%04x\n", + chain_vector->segment, chain_vector->offset ); + copy_to_real ( 0, ( interrupt * 4 ), &vector, sizeof ( vector ) ); hooked_bios_interrupts++; } @@ -65,11 +73,21 @@ int unhook_bios_interrupt ( unsigned int interrupt, unsigned int handler, struct segoff *chain_vector ) { struct segoff vector; + DBG ( "Unhooking INT %#02x from %04x:%04x\n", + interrupt, rm_cs, handler ); + copy_from_real ( &vector, 0, ( interrupt * 4 ), sizeof ( vector ) ); - if ( ( vector.segment != rm_cs ) || ( vector.offset != handler ) ) + if ( ( vector.segment != rm_cs ) || ( vector.offset != handler ) ) { + DBG ( "...cannot unhook; vector points to %04x:%04x\n", + vector.segment, vector.offset ); return -EBUSY; + } + + DBG ( "...restoring to %04x:%04x\n", + chain_vector->segment, chain_vector->offset ); copy_to_real ( 0, ( interrupt * 4 ), chain_vector, sizeof ( *chain_vector ) ); + chain_vector->segment = 0; chain_vector->offset = 0; hooked_bios_interrupts--; |
