Yes, I think it's worth having them in upstream SeaBIOS!

I've been thinking about creating a way of passing this information between
coreboot and SeaBIOS in the future, so we don't have to keep the handlers
around twice. One way of doing that would be to have the handler live in
SMM and have SeaBIOS do an SMI command to get the right answers. Would you
be open to something like that?

Stefan


On Fri, Jan 17, 2014 at 4:43 PM, Kevin O'Connor <[email protected]> wrote:

> Add in the detection for a handful of additional boards found in the
> Chromium repo.  This ports over and simplifies the code in that repo.
>
> Signed-off-by: Kevin O'Connor <[email protected]>
> ---
>
> Are these boards in active distribution and is it worth having them in
> the seabios main repo?
>
> ---
>  src/vgahooks.c | 90
> ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
>  1 file changed, 88 insertions(+), 2 deletions(-)
>
> diff --git a/src/vgahooks.c b/src/vgahooks.c
> index 6a4acfe..f7bf660 100644
> --- a/src/vgahooks.c
> +++ b/src/vgahooks.c
> @@ -32,6 +32,7 @@ handle_157fXX(struct bregs *regs)
>      set_code_unimplemented(regs, RET_EUNSUPPORTED);
>  }
>
> +
>  /****************************************************************
>   * Via hooks
>   ****************************************************************/
> @@ -175,7 +176,16 @@ via_setup(struct pci_device *pci)
>   * Intel VGA hooks
>   ****************************************************************/
>
> -u8 IntelDisplayType VARFSEG, IntelDisplayId VARFSEG;
> +u8 IntelDisplayType VARFSEG, IntelDisplayId VARFSEG, IntelPanelFitting
> VARFSEG;
> +u16 IntelActiveLFP VARFSEG;
> +
> +static void
> +intel_155f34(struct bregs *regs)
> +{
> +    regs->ax = 0x005f;
> +    regs->cl = GET_GLOBAL(IntelPanelFitting);
> +    set_success(regs);
> +}
>
>  static void
>  intel_155f35(struct bregs *regs)
> @@ -194,6 +204,43 @@ intel_155f40(struct bregs *regs)
>  }
>
>  static void
> +intel_155f51(struct bregs *regs)
> +{
> +    regs->ax = 0x005f;
> +    regs->cx = GET_GLOBAL(IntelActiveLFP);
> +    set_success(regs);
> +}
> +
> +static void
> +intel_155f70(struct bregs *regs)
> +{
> +    switch (regs->ch) {
> +    case 0:
> +        /* Get Mux */
> +        regs->ax = 0x005f;
> +        regs->cx = 0x0000;
> +        set_success(regs);
> +        break;
> +    case 1:
> +        /* Set Mux */
> +        regs->ax = 0x005f;
> +        regs->cx = 0x0000;
> +        set_success(regs);
> +        break;
> +    case 2:
> +        /* Get SG/Non-SG mode */
> +        regs->ax = 0x005f;
> +        regs->cx = 0x0000;
> +        set_success(regs);
> +        break;
> +    default:
> +        /* Interrupt was not handled */
> +        handle_155fXX(regs);
> +        break;
> +    }
> +}
> +
> +static void
>  intel_155f50(struct bregs *regs)
>  {
>      /* Mandatory hook on some Dell laptops */
> @@ -205,9 +252,12 @@ static void
>  intel_155f(struct bregs *regs)
>  {
>      switch (regs->al) {
> +    case 0x34: intel_155f34(regs); break;
>      case 0x35: intel_155f35(regs); break;
>      case 0x40: intel_155f40(regs); break;
>      case 0x50: intel_155f50(regs); break;
> +    case 0x51: intel_155f51(regs); break;
> +    case 0x70: intel_155f70(regs); break;
>      default:   handle_155fXX(regs); break;
>      }
>  }
> @@ -254,6 +304,34 @@ getac_setup(struct pci_device *pci)
>  {
>  }
>
> +static void
> +stumpy_setup(struct pci_device *pci)
> +{
> +    VGAHookHandlerType = VH_INTEL;
> +    IntelPanelFitting = 0;
> +    IntelDisplayType = BOOT_DISPLAY_DEFAULT;
> +    IntelActiveLFP = 0x0003;
> +}
> +
> +static void
> +lumpy_setup(struct pci_device *pci)
> +{
> +    VGAHookHandlerType = VH_INTEL;
> +    IntelPanelFitting = 0;
> +    IntelDisplayType = BOOT_DISPLAY_DEFAULT;
> +    IntelActiveLFP = 0x0001;
> +}
> +
> +static void
> +link_setup(struct pci_device *pci)
> +{
> +    VGAHookHandlerType = VH_INTEL;
> +    IntelPanelFitting = 0;
> +    IntelDisplayType = BOOT_DISPLAY_DEFAULT;
> +    IntelActiveLFP = 0x0003;
> +}
> +
> +
>  /****************************************************************
>   * Silicon Motion hooks
>   ****************************************************************/
> @@ -295,6 +373,7 @@ winent_mb6047_setup(struct pci_device *pci)
>      SmiBootDisplay = 0x02;
>  }
>
> +
>  /****************************************************************
>   * Entry and setup
>   ****************************************************************/
> @@ -345,7 +424,14 @@ vgahook_setup(struct pci_device *pci)
>          getac_setup(pci);
>      else if (strcmp(CBvendor, "RODA") == 0 && strcmp(CBpart, "RK886EX")
> == 0)
>          roda_setup(pci);
> -    else if (strcmp(CBvendor, "Win Enterprise") == 0 && strcmp(CBpart,
> "MB6047") == 0)
> +    else if (strcmp(CBvendor, "SAMSUNG") == 0 && strcmp(CBpart, "Stumpy")
> == 0)
> +        stumpy_setup(pci);
> +    else if (strcmp(CBvendor, "SAMSUNG") == 0 && strcmp(CBpart, "Lumpy")
> == 0)
> +        lumpy_setup(pci);
> +    else if (strcmp(CBvendor, "GOOGLE") == 0 && strcmp(CBpart, "Link") ==
> 0)
> +        link_setup(pci);
> +    else if (strcmp(CBvendor, "Win Enterprise") == 0
> +             && strcmp(CBpart, "MB6047") == 0)
>          winent_mb6047_setup(pci);
>      else if (pci->vendor == PCI_VENDOR_ID_VIA)
>          via_setup(pci);
> --
> 1.8.3.1
>
>


-- 
Stefan Reinauer
Google Inc.
_______________________________________________
SeaBIOS mailing list
[email protected]
http://www.seabios.org/mailman/listinfo/seabios

Reply via email to