[SeaBIOS] [PATCH 1/3] vgasrc: Add skeleton for VBE function 15h (VBE/DDC Standard)
Christian Gmeiner
christian.gmeiner at gmail.com
Tue Sep 18 14:07:42 CEST 2012
Looks fine... hope to see this patch soon in git :)
---
Christian Gmeiner, MSc
2012/9/16 Hiroshi Miura <miurahr at linux.com>:
> posted in Wed Mar 7 03:41:06 CET 2012
>
> Signed-off-by: Julian Pidancet <julian.pidancet at gmail.com>
> Signed-off-by: Hiroshi Miura <miurahr at linux.com>
> ---
> src/vbe.h | 5 +++++
> vgasrc/stdvga.c | 11 +++++++++++
> vgasrc/stdvga.h | 2 ++
> vgasrc/vbe.c | 34 ++++++++++++++++++++++++++++++++++
> vgasrc/vgahw.h | 8 ++++++++
> 5 files changed, 60 insertions(+)
>
> diff --git a/src/vbe.h b/src/vbe.h
> index 386613c..b5aedc6 100644
> --- a/src/vbe.h
> +++ b/src/vbe.h
> @@ -154,4 +154,9 @@ struct vbe_crtc_info {
> #define VBE_DIRECTCOLOR_COLOR_RAMP_PROGRAMMABLE 0x01
> #define VBE_DIRECTCOLOR_RESERVED_BITS_AVAILABLE 0x02
>
> +/* Display Data Channel (DDC) */
> +#define VBE_DDC1_PROTOCOL_SUPPORTED 0x01
> +#define VBE_DDC2_PROTOCOL_SUPPORTED 0x02
> +#define VBE_DDC_BLANK_DURING_TRANSFER 0x04
> +
> #endif
> diff --git a/vgasrc/stdvga.c b/vgasrc/stdvga.c
> index ae6c0be..270cd65 100644
> --- a/vgasrc/stdvga.c
> +++ b/vgasrc/stdvga.c
> @@ -499,3 +499,14 @@ stdvga_init(void)
>
> return 0;
> }
> +
> +int stdvga_get_ddc_capabilities(u16 unit)
> +{
> + return -1;
> +}
> +
> +int stdvga_read_edid(u16 unit, u16 block, u16 seg, void *data)
> +{
> + return -1;
> +}
> +
> diff --git a/vgasrc/stdvga.h b/vgasrc/stdvga.h
> index c9a9ba1..e3bd447 100644
> --- a/vgasrc/stdvga.h
> +++ b/vgasrc/stdvga.h
> @@ -108,5 +108,7 @@ int stdvga_save_state(u16 seg, void *data, int states);
> int stdvga_restore_state(u16 seg, void *data, int states);
> void stdvga_enable_video_addressing(u8 disable);
> int stdvga_init(void);
> +int stdvga_get_ddc_capabilities(u16 unit);
> +int stdvga_read_edid(u16 unit, u16 block, u16 seg, void *data);
>
> #endif // stdvga.h
> diff --git a/vgasrc/vbe.c b/vgasrc/vbe.c
> index 227a244..ed7c6ee 100644
> --- a/vgasrc/vbe.c
> +++ b/vgasrc/vbe.c
> @@ -384,6 +384,39 @@ vbe_104f10(struct bregs *regs)
> }
>
> static void
> +vbe_104f15(struct bregs *regs)
> +{
> + int ret;
> + u16 seg = regs->es;
> + void *data = (void *)(regs->di+0);
> + u16 unit = regs->cx;
> + u16 block = regs->dx;
> +
> + switch (regs->bl) {
> + case 0x00: /* Report VBE/DDC Capabilities */
> + ret = vgahw_get_ddc_capabilities(unit);
> + if (ret < 0)
> + goto fail;
> + regs->bh = ret >> 8; /* Approx. time in seconds, rounded up, to transfer
> + one EDID block (128 bytes) */
> + regs->bl = ret & 0xff; /* DDC level supported */
> + break;
> + case 0x01: /* Read EDID */
> + ret = vgahw_read_edid(unit, block, seg, data);
> + if (ret < 0)
> + goto fail;
> + break;
> + default:
> + goto fail;
> + }
> + regs->ax = 0x004f;
> + return;
> +
> +fail:
> + regs->ax = 0x014f;
> +}
> +
> +static void
> vbe_104fXX(struct bregs *regs)
> {
> debug_stub(regs);
> @@ -410,6 +443,7 @@ handle_104f(struct bregs *regs)
> case 0x08: vbe_104f08(regs); break;
> case 0x0a: vbe_104f0a(regs); break;
> case 0x10: vbe_104f10(regs); break;
> + case 0x15: vbe_104f15(regs); break;
> default: vbe_104fXX(regs); break;
> }
> }
> diff --git a/vgasrc/vgahw.h b/vgasrc/vgahw.h
> index 044cd32..01d2609 100644
> --- a/vgasrc/vgahw.h
> +++ b/vgasrc/vgahw.h
> @@ -129,4 +129,12 @@ static inline int vgahw_restore_state(u16 seg, void *data, int states) {
> return stdvga_restore_state(seg, data, states);
> }
>
> +static inline int vgahw_get_ddc_capabilities(u16 unit) {
> + return stdvga_get_ddc_capabilities(unit);
> +}
> +
> +static inline int vgahw_read_edid(u16 unit, u16 block, u16 seg, void *data) {
> + return stdvga_read_edid(unit, block, seg, data);
> +}
> +
> #endif // vgahw.h
> --
> 1.7.9.5
>
>
>
> _______________________________________________
> SeaBIOS mailing list
> SeaBIOS at seabios.org
> http://www.seabios.org/mailman/listinfo/seabios
More information about the SeaBIOS
mailing list