xen/x86: retrieve keyboard shift status flags from hypervisor.
The xen c/s 25873 allows the hypervisor to retrieve the NUMLOCK flag. With this patch, the Linux kernel can get the state according to the data in the BIOS. Acked-by: Jan Beulich <jbeulich@suse.com> Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
parent
a5f9515570
commit
ffb8b233c2
@ -1440,11 +1440,19 @@ asmlinkage void __init xen_start_kernel(void)
|
|||||||
const struct dom0_vga_console_info *info =
|
const struct dom0_vga_console_info *info =
|
||||||
(void *)((char *)xen_start_info +
|
(void *)((char *)xen_start_info +
|
||||||
xen_start_info->console.dom0.info_off);
|
xen_start_info->console.dom0.info_off);
|
||||||
|
struct xen_platform_op op = {
|
||||||
|
.cmd = XENPF_firmware_info,
|
||||||
|
.interface_version = XENPF_INTERFACE_VERSION,
|
||||||
|
.u.firmware_info.type = XEN_FW_KBD_SHIFT_FLAGS,
|
||||||
|
};
|
||||||
|
|
||||||
xen_init_vga(info, xen_start_info->console.dom0.info_size);
|
xen_init_vga(info, xen_start_info->console.dom0.info_size);
|
||||||
xen_start_info->console.domU.mfn = 0;
|
xen_start_info->console.domU.mfn = 0;
|
||||||
xen_start_info->console.domU.evtchn = 0;
|
xen_start_info->console.domU.evtchn = 0;
|
||||||
|
|
||||||
|
if (HYPERVISOR_dom0_op(&op) == 0)
|
||||||
|
boot_params.kbd_status = op.u.firmware_info.u.kbd_shift_flags;
|
||||||
|
|
||||||
xen_init_apic();
|
xen_init_apic();
|
||||||
|
|
||||||
/* Make sure ACS will be enabled */
|
/* Make sure ACS will be enabled */
|
||||||
|
@ -112,6 +112,7 @@ DEFINE_GUEST_HANDLE_STRUCT(xenpf_platform_quirk_t);
|
|||||||
#define XEN_FW_DISK_INFO 1 /* from int 13 AH=08/41/48 */
|
#define XEN_FW_DISK_INFO 1 /* from int 13 AH=08/41/48 */
|
||||||
#define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */
|
#define XEN_FW_DISK_MBR_SIGNATURE 2 /* from MBR offset 0x1b8 */
|
||||||
#define XEN_FW_VBEDDC_INFO 3 /* from int 10 AX=4f15 */
|
#define XEN_FW_VBEDDC_INFO 3 /* from int 10 AX=4f15 */
|
||||||
|
#define XEN_FW_KBD_SHIFT_FLAGS 5 /* Int16, Fn02: Get keyboard shift flags. */
|
||||||
struct xenpf_firmware_info {
|
struct xenpf_firmware_info {
|
||||||
/* IN variables. */
|
/* IN variables. */
|
||||||
uint32_t type;
|
uint32_t type;
|
||||||
@ -142,6 +143,8 @@ struct xenpf_firmware_info {
|
|||||||
/* must refer to 128-byte buffer */
|
/* must refer to 128-byte buffer */
|
||||||
GUEST_HANDLE(uchar) edid;
|
GUEST_HANDLE(uchar) edid;
|
||||||
} vbeddc_info; /* XEN_FW_VBEDDC_INFO */
|
} vbeddc_info; /* XEN_FW_VBEDDC_INFO */
|
||||||
|
|
||||||
|
uint8_t kbd_shift_flags; /* XEN_FW_KBD_SHIFT_FLAGS */
|
||||||
} u;
|
} u;
|
||||||
};
|
};
|
||||||
DEFINE_GUEST_HANDLE_STRUCT(xenpf_firmware_info_t);
|
DEFINE_GUEST_HANDLE_STRUCT(xenpf_firmware_info_t);
|
||||||
|
Loading…
Reference in New Issue
Block a user