[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] x86: retrieve keyboard shift status flags from BIOS


  • To: Jan Beulich <JBeulich@xxxxxxxx>, xen-devel <xen-devel@xxxxxxxxxxxxx>
  • From: Keir Fraser <keir@xxxxxxx>
  • Date: Tue, 11 Sep 2012 14:33:38 +0100
  • Delivery-date: Tue, 11 Sep 2012 13:34:13 +0000
  • List-id: Xen developer discussion <xen-devel.lists.xen.org>
  • Thread-index: Ac2QIgyzbEDjQ4qkQkKJ9cxawZxeWw==
  • Thread-topic: [Xen-devel] [PATCH] x86: retrieve keyboard shift status flags from BIOS

On 11/09/2012 12:41, "Jan Beulich" <JBeulich@xxxxxxxx> wrote:

> Recent Linux tries to make use of this, and has no way of getting at
> these bits without Xen assisting it.
> 
> There doesn't appear to be a way to obtain the same information from
> UEFI.
> 
> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>

Acked-by: Keir Fraser <keir@xxxxxxx>

> --- a/xen/arch/x86/boot/trampoline.S
> +++ b/xen/arch/x86/boot/trampoline.S
> @@ -184,11 +184,16 @@ trampoline_boot_cpu_entry:
>           *  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
>  
> @@ -221,6 +226,10 @@ trampoline_boot_cpu_entry:
>  skip_realmode:
>          .byte   0
>  
> +        .globl kbd_shift_flags
> +kbd_shift_flags:
> +        .byte   0
> +
>  rm_idt: .word   256*4-1, 0, 0
>  
>  #include "mem.S"
> --- a/xen/arch/x86/platform_hypercall.c
> +++ b/xen/arch/x86/platform_hypercall.c
> @@ -29,6 +29,7 @@
>  #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>
>  
> @@ -319,6 +320,18 @@ ret_t do_platform_op(XEN_GUEST_HANDLE(xe
>                                       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;
> --- a/xen/include/asm-x86/setup.h
> +++ b/xen/include/asm-x86/setup.h
> @@ -41,4 +41,6 @@ int xen_in_range(unsigned long mfn);
>  void microcode_grab_module(
>      unsigned long *, const multiboot_info_t *, void *(*)(const module_t *));
>  
> +extern uint8_t kbd_shift_flags;
> +
>  #endif
> --- a/xen/include/public/platform.h
> +++ b/xen/include/public/platform.h
> @@ -218,6 +218,7 @@ DEFINE_XEN_GUEST_HANDLE(xenpf_efi_runtim
>  #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;
> @@ -266,6 +267,9 @@ struct xenpf_firmware_info {
>                  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;
> 
> 
> 
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.