* 1. Get memory map.
* 2. Get Enhanced Disk Drive (EDD) information.
* 3. Set video mode.
+ * 4. Get keyboard shift flags.
*/
call get_memory_map
call get_edd
call video
+ mov $0x0200,%ax
+ int $0x16
+ mov %al,bootsym(kbd_shift_flags)
+
/* Disable irqs before returning to protected mode. */
cli
skip_realmode:
.byte 0
+ .globl kbd_shift_flags
+kbd_shift_flags:
+ .byte 0
+
rm_idt: .word 256*4-1, 0, 0
#include "mem.S"
#include <asm/edd.h>
#include <asm/mtrr.h>
#include <asm/io_apic.h>
+#include <asm/setup.h>
#include "cpu/mtrr/mtrr.h"
#include <xsm/xsm.h>
u.firmware_info.u.efi_info) )
ret = -EFAULT;
break;
+ case XEN_FW_KBD_SHIFT_FLAGS:
+ ret = -ESRCH;
+ if ( op->u.firmware_info.index != 0 )
+ break;
+
+ op->u.firmware_info.u.kbd_shift_flags = bootsym(kbd_shift_flags);
+
+ ret = 0;
+ if ( copy_field_to_guest(u_xenpf_op, op,
+ u.firmware_info.u.kbd_shift_flags) )
+ ret = -EFAULT;
+ break;
default:
ret = -EINVAL;
break;
void microcode_grab_module(
unsigned long *, const multiboot_info_t *, void *(*)(const module_t *));
+extern uint8_t kbd_shift_flags;
+
#endif
#define XEN_FW_EFI_VENDOR 2
#define XEN_FW_EFI_MEM_INFO 3
#define XEN_FW_EFI_RT_VERSION 4
+#define XEN_FW_KBD_SHIFT_FLAGS 5
struct xenpf_firmware_info {
/* IN variables. */
uint32_t type;
uint32_t type;
} mem;
} efi_info; /* XEN_FW_EFI_INFO */
+
+ /* Int16, Fn02: Get keyboard shift flags. */
+ uint8_t kbd_shift_flags; /* XEN_FW_KBD_SHIFT_FLAGS */
} u;
};
typedef struct xenpf_firmware_info xenpf_firmware_info_t;