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

Re: [Xen-devel] Re: [PATCH] Replace bios_relocate hook with bios_load hook in hvmloader



On 27/07/2011 03:02, "Bei Guan" <gbtju85@xxxxxxxxx> wrote:

> 
> 
> 2011/7/25 Keir Fraser <keir@xxxxxxx>
>> On 23/07/2011 20:02, "Bei Guan" <gbtju85@xxxxxxxxx> wrote:
>> 
>>> Hi,
>>> 
>>> These set of patches are affected by replacing bios_relocate hook with
>>> bios_load hook in hvmloader. The patches for code files config.h and
>>> hvmloader.c also contains part of the contents of Enabling UEFI BIOS(OVMF)
>>> support in Xen-unstable HVM. Is there any problem with these patches? Thank
>>> you very much.
>> 
>> As of xen-unstable:23745 I've made some improvements to hvmloader which
>> include your new bios_load hook. You can rebase your remaining patches on
>> top of that.
> Thank you very much. 
> I am looking forward to the new xen-unstable version: 23745.

http://xenbits.xen.org/staging/xen-unstable.hg

> Best Regards, 
> Bei Guan
> 
>> 
>>  -- Keir
>> 
>>> 
>>> 
>>> # HG changeset patch
>>> # User gbtju85@xxxxxxxxx
>>> #
>>> 
>>> Replace bios_relocate hook with bios_load hook in hvmloader.
>>> This patch also contains part of the contents of Enabling UEFI BIOS(OVMF)
>>> support in Xen-unstable HVM
>>> 
>>> Sign-off-by: Bei Guan <gbtju85@xxxxxxxxx>
>>> 
>>> diff -r 42edf1481c57 tools/firmware/hvmloader/config.h
>>> --- a/tools/firmware/hvmloader/config.h Fri Jul 22 08:55:19 2011 +0100
>>> +++ b/tools/firmware/hvmloader/config.h Sun Jul 24 02:22:42 2011 +0800
>>> @@ -3,7 +3,7 @@
>>>  
>>>  #include <stdint.h>
>>>  
>>> -enum virtual_vga { VGA_none, VGA_std, VGA_cirrus, VGA_pt };
>>> +enum virtual_vga { VGA_none, VGA_std, VGA_cirrus, VGA_pt, VGA_custom };
>>>  extern enum virtual_vga virtual_vga;
>>>  
>>>  struct bios_config {
>>> @@ -16,6 +16,9 @@
>>>      /* Physical address to load at */
>>>      unsigned int bios_address;
>>>  
>>> +    /* Custom load function. */
>>> +    void (*load)(const struct bios_config *config);
>>> +
>>>      /* ROMS */
>>>      int load_roms;
>>>      unsigned int optionrom_start, optionrom_end;
>>> @@ -23,8 +26,6 @@
>>>      void (*bios_info_setup)(void);
>>>      void (*bios_info_finish)(void);
>>>  
>>> -    void (*bios_relocate)(void);
>>> -
>>>      void (*vm86_setup)(void);
>>>      void (*e820_setup)(void);
>>>  
>>> @@ -36,6 +37,8 @@
>>>  
>>>  extern struct bios_config rombios_config;
>>>  extern struct bios_config seabios_config;
>>> +extern struct bios_config ovmf32_config;
>>> +extern struct bios_config ovmf64_config;
>>>  
>>>  #define PAGE_SHIFT 12
>>>  #define PAGE_SIZE  (1ul << PAGE_SHIFT)
>>> diff -r 42edf1481c57 tools/firmware/hvmloader/hvmloader.c
>>> --- a/tools/firmware/hvmloader/hvmloader.c Fri Jul 22 08:55:19 2011 +0100
>>> +++ b/tools/firmware/hvmloader/hvmloader.c Sun Jul 24 02:22:42 2011 +0800
>>> @@ -360,6 +360,8 @@
>>>  #ifdef ENABLE_SEABIOS
>>>      { "seabios", &seabios_config, },
>>>  #endif
>>> +    { "ovmf-ia32", &ovmf32_config, },
>>> +    { "ovmf-x64", &ovmf64_config, },
>>>      { NULL, NULL }
>>>  };
>>>  
>>> @@ -416,12 +418,13 @@
>>>          bios->create_smbios_tables();
>>>      }
>>>  
>>> -    printf("Loading %s ...\n", bios->name);
>>> -    memcpy((void *)bios->bios_address, bios->image,
>>> -           bios->image_size);
>>> -
>>> -    if (bios->bios_relocate)
>>> -        bios->bios_relocate();
>>> +    if (bios->load) {
>>> +        bios->load(bios);
>>> +    } else {
>>> +        printf("Loading %s ...\n", bios->name);
>>> +        memcpy((void *)bios->bios_address, bios->image,
>>> +               bios->image_size);
>>> +    }
>>>  
>>>      if ( (hvm_info->nr_vcpus > 1) || hvm_info->apic_mode ) {
>>>          if ( bios->create_mp_tables )
>>> @@ -451,6 +454,8 @@
>>>              vgabios_sz = round_option_rom(
>>>                  (*(uint8_t *)(VGABIOS_PHYSICAL_ADDRESS+2)) * 512);
>>>              break;
>>> +        case VGA_custom:
>>> +            break;
>>>          default:
>>>              printf("No emulated VGA adaptor ...\n");
>>>              break;
>>> diff -r 42edf1481c57 tools/firmware/hvmloader/rombios.c
>>> --- a/tools/firmware/hvmloader/rombios.c Fri Jul 22 08:55:19 2011 +0100
>>> +++ b/tools/firmware/hvmloader/rombios.c Sun Jul 24 02:22:42 2011 +0800
>>> @@ -81,11 +81,15 @@
>>>      memset(info, 0, sizeof(*info));
>>>  }
>>>  
>>> -static void rombios_relocate(void)
>>> +static void rombios_load(const struct bios_config *config)
>>>  {
>>>      uint32_t bioshigh;
>>>      struct rombios_info *info;
>>>  
>>> +    printf("Loading %s ...\n", config->name);
>>> +    memcpy((void *)config->bios_address, config->image,
>>> +           config->image_size);
>>> +
>>>      bioshigh = rombios_highbios_setup();
>>>  
>>>      info = (struct rombios_info *)BIOS_INFO_PHYSICAL_ADDRESS;
>>> @@ -163,6 +167,7 @@
>>>      .image_size = sizeof(rombios),
>>>  
>>>      .bios_address = ROMBIOS_PHYSICAL_ADDRESS,
>>> +    .load = rombios_load,
>>>  
>>>      .load_roms = 1,
>>>  
>>> @@ -172,8 +177,6 @@
>>>      .bios_info_setup = rombios_setup_bios_info,
>>>      .bios_info_finish = NULL,
>>>  
>>> -    .bios_relocate = rombios_relocate,
>>> -
>>>      .vm86_setup = rombios_init_vm86_tss,
>>>      .e820_setup = rombios_setup_e820,
>>>  
>>> diff -r 42edf1481c57 tools/firmware/hvmloader/seabios.c
>>> --- a/tools/firmware/hvmloader/seabios.c Fri Jul 22 08:55:19 2011 +0100
>>> +++ b/tools/firmware/hvmloader/seabios.c Sun Jul 24 02:22:42 2011 +0800
>>> @@ -132,6 +132,7 @@
>>>      .image_size = sizeof(seabios),
>>>  
>>>      .bios_address = SEABIOS_PHYSICAL_ADDRESS,
>>> +    .load = NULL,
>>>  
>>>      .load_roms = 0,
>>>  
>>> @@ -141,8 +142,6 @@
>>>      .bios_info_setup = seabios_setup_bios_info,
>>>      .bios_info_finish = seabios_finish_bios_info,
>>>  
>>> -    .bios_relocate = NULL,
>>> -
>>>      .vm86_setup = NULL,
>>>      .e820_setup = seabios_setup_e820,
>>>  
>>> 
>>> 
>>> 
>>> 
>>> Best Regards,
>>> Bei Guan
>>> 
>>> 
>>> 
>>> 
>>> 2011/7/24 Keir Fraser <keir.xen@xxxxxxxxx>
>>>> On 23/07/2011 16:18, "Bei Guan" <gbtju85@xxxxxxxxx> wrote:
>>>> 
>>>>> Do you mean that put the bios_relocate hook in the "else" statement? Just
>>>>> like
>>>>> this:
>>>>> 
>>>>>     if (bios->load) {
>>>>>         bios->load(bios);
>>>>>     } else {
>>>>>         printf("Loading %s ...\n", bios->name);
>>>>>         memcpy((void *)bios->bios_address, bios->image,
>>>>>                bios->image_size);
>>>>> 
>>>>>         if (bios->bios_relocate)
>>>>>             bios->bios_relocate(); 
>>>>>    }
>>>> 
>>>> No I mean remove the bios_relocate hook entirely, and modify the rombios
>>>> handler to use your new hook instead. It should be quite easy.
>>>> 
>>>>  -- Keir
>>>> 
>>>> 
>>> 
>>> 
>> 
>> 
>> 
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-devel
> 
> 



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

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