Index: commands/i386/pc/drivemap.c =================================================================== --- commands/i386/pc/drivemap.c (revisiĆ³n: 2447) +++ commands/i386/pc/drivemap.c (copia de trabajo) @@ -29,7 +29,7 @@ /* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */ -static grub_uint32_t *const int13slot = UINT_TO_PTR (4 * 0x13); +static grub_machine_farptr *const int13slot = UINT_TO_PTR (4 * 0x13); /* Remember to update enum opt_idxs accordingly. */ static const struct grub_arg_option options[] = { @@ -48,7 +48,7 @@ }; /* Realmode far ptr (2 * 16b) to the previous INT13h handler. */ -extern grub_uint32_t grub_drivemap_oldhandler; +extern grub_machine_farptr grub_drivemap_oldhandler; /* The type "void" is used for imported assembly labels, takes no storage and serves just to take the address with &label. */ @@ -295,8 +295,7 @@ /* Save the pointer to the old handler. */ grub_drivemap_oldhandler = *int13slot; grub_dprintf ("drivemap", "Original int13 handler: %04x:%04x\n", - (grub_drivemap_oldhandler >> 16) & 0x0ffff, - grub_drivemap_oldhandler & 0x0ffff); + grub_drivemap_oldhandler.segment, grub_drivemap_oldhandler.offset); /* Find a rmode-segment-aligned zone in conventional memory big enough to hold the handler and its data. */ @@ -335,9 +334,9 @@ grub_dprintf ("drivemap", "\t#%d: 0x00 <- 0x00 (end)\n", i); /* Install our function as the int13h handler in the IVT. */ - *int13slot = ((grub_uint32_t) handler_base) << 12; /* Segment address. */ + *int13slot = grub_machine_linear2real(handler_base); grub_dprintf ("drivemap", "New int13 handler: %04x:%04x\n", - (*int13slot >> 16) & 0x0ffff, *int13slot & 0x0ffff); + int13slot->segment, int13slot->offset); return GRUB_ERR_NONE; } @@ -345,14 +344,14 @@ static grub_err_t uninstall_int13_handler (void) { - if (! grub_drivemap_oldhandler) + if (! grub_drivemap_oldhandler.raw_bits) return GRUB_ERR_NONE; *int13slot = grub_drivemap_oldhandler; grub_mmap_free_and_unregister (drivemap_mmap); - grub_drivemap_oldhandler = 0; + grub_drivemap_oldhandler.raw_bits = 0; grub_dprintf ("drivemap", "Restored int13 handler: %04x:%04x\n", - (*int13slot >> 16) & 0x0ffff, *int13slot & 0x0ffff); + int13slot->segment, int13slot->offset); return GRUB_ERR_NONE; }