[if gte mso 9]>

[edk2]答复: 答复: 答复: 答复: Question about BIOS Video Driver

Subject: [edk2]答复: 答复: 答复: 答复: Question about BIOS Video Driver

From: <gu.yawen503@gmail.com>

To: <edk2-devel@lists.sourceforge.net>

Date: 2012-11-28 00:18:06

Elevin,

 

Its DetailedTiming describes the native mode (1440 * 900) on my side. The monitor is with wild screen and 1440 * 900 is its highest resolution.

 

 

Thanks,

Hawk.

 

: Li, Elvin [mailto:elvin.li@intel.com]
: 20121127 15:51
: edk2-devel@lists.sourceforge.net
: Re: [edk2] : : : Question about BIOS Video Driver

 

Hi Sergey:

         You are right. If DetailedTiming fields are missed to be processed, some EDID data would not be found which caused some video resolution missing. ParseEdid  function need be enhanced.

 

Hawk:

         Can you help to check which fields (StandardTiming or DetailedTiming) in EDID data contains the highest resolution 19201080?

 

Thanks

Elvin

From: Sergey Isakov [mailto:isakov-sl@bk.ru]
Sent: Tuesday, November 27, 2012 2:16 PM
To: edk2-devel@lists.sourceforge.net
Subject: Re: [edk2]
: : : Question about BIOS Video Driver

 

Sirs,

There is a lack of ParseEdid procedure. According to EDID 1.3 specification there are StandardTiming, Established AND DetailedTiming

And in practice it is detailed timimg that contained native monitor resolution. 1440x900 in my case.

EdidDiscovered size=128

00 | 00 FF FF FF FF FF FF 00 32 0C 

10 | 00 DF 00 00 00 00 00 12 01 03 

20 | 80 21 15 78 0A E9 D5 99 59 53 

30 | 8E 28 26 50 54 00 00 00 01 01 

40 | 01 01 01 01 01 01 01 01 01 01 

50 | 01 01 01 01 DE 21 A0 70 50 84 

60 | 1F 30 20 20 56 00 4B CF 10 00 

70 | 00 18 DE 21 A0 70 50 84 1F 30 

80 | 20 20 56 00 4B CF 10 00 00 00 

90 | 00 00 00 FE 00 57 36 35 37 47 

100 | 00 31 35 34 57 50 31 0A 00 00 

110 | 00 FE 00 23 33 3D 48 65 84 AA 

120 | FF 02 01 0A 20 20 00 9A 70 74 

 

The procedure may be like the follow

----------

       BufferIndex = &EdidDataBlock->DetailedTimingDescriptions[0];

       for (Index = 0; Index < 4; Index ++, BufferIndex += DETAILED_TIMING_DESCRIPTION_SIZE) {

              if (edid_is_timing_block(BufferIndex)) {

                     TempTiming.HorizontalResolution = ((UINT16)(BufferIndex[4] & 0xF0) << 4) | (BufferIndex[2]);

                     TempTiming.VerticalResolution = ((UINT16)(BufferIndex[7] & 0xF0) << 4) | (BufferIndex[5]);

                     TempTiming.RefreshRate = 60; //doesn't matter, it's temporary

                     ValidEdidTiming->Key[ValidNumber] = CalculateEdidKey (&TempTiming);

                     ValidNumber ++;                    

              }

       }

 

----------

So Horisontal in my EDID = (0x50 << 4) | 0xA0 = 0x5A0 = 1440

Vertical = (0x30 << 4) | 0x84 = 0x384 = 900

1440x900 

Hope it helps

 

Sergey

 

On 27.11.2012, at 8:24, Hawk wrote:

 

The reason is that video driver uses INT 10h 4F15 service to read monitors EDID information. The resolution information as blow is reflected by each bit ofVESA_BIOS_EXTENSIONS_EDID_DATA_BLOCK

.EstablishedTimings[3]. You can refer to mEstablishedEdidTiming defined in BiosVideo.c. There is no information about the resolution other than these. I guess this could be the limitation of VESA/VBE 3.0.

 

Wondering if there is any other interface to get these information.

 

Thanks,

Hawk.

 

: Li, Elvin [mailto:elvin.li@intel.com] 
: 20121127 12:02
: edk2-devel@lists.sourceforge.net
: Re: [edk2] : : Question about BIOS Video Driver

 

Hi,

         Sorry, I misunderstand. You said the monitor and video controller support both of 1280*1024 and 19201080, but ParseEdidData returing EDID does not report 19201080? Do you know the reason? I never see this case before. In my mind, EDID is the only source for code to know the monitor resolution.

 

Thanks

Elvin

From: Li, Elvin [mailto:elvin.li@intel.com] 
Sent: Tuesday, November 27, 2012 11:53 AM
To: edk2-devel@lists.sourceforge.net
Subject: Re: [edk2] 
: : Question about BIOS Video Driver

 

I think 1920x1080 may not be set successfully and no video may not display, because monitor does not support it. I do not really try such scenario.

 

From: Hawk [mailto:chendaolin@byosoft.com.cn] 
Sent: Tuesday, November 27, 2012 11:48 AM
To: edk2-devel@lists.sourceforge.net
Subject: [edk2] 
: : Question about BIOS Video Driver

 

Elvin,

 

Im not sure if there is any confusion. Take one example, if the monitor and video controller support both of 1280*1024 and 19201080, EDID information can only tell us 1280*1024 is supported, but nothing about 1920*1080. So if we want to force to set this mode, what will happen?

 

Thanks,

Hawk.

 

: Li, Elvin [mailto:elvin.li@intel.com] 
: 20121127 11:00
: edk2-devel@lists.sourceforge.net
: Re: [edk2] : Question about BIOS Video Driver

 

Hi:

         When adding a new mode into GOP modes, BiosVideo uses SearchEdidTiming make a check with EDID and each resolution. ParseEdidData only fills EDID data for SearchEdidTimings use.

 

    if (EdidFound && (ValidEdidTiming.ValidNumber > 0)) {

      //

      // EDID exist, check whether this mode match with any mode in EDID

      //

      Timing.HorizontalResolution = BiosVideoPrivate->VbeModeInformationBlock->XResolution;

      Timing.VerticalResolution = BiosVideoPrivate->VbeModeInformationBlock->YResolution;

      if (!SearchEdidTiming (&ValidEdidTiming, &Timing)) {

        continue;

      }

    }

 

Elvin

From: Hawk [mailto:chendaolin@byosoft.com.cn] 
Sent: Tuesday, November 27, 2012 10:50 AM
To: edk2-devel@lists.sourceforge.net
Subject: [edk2] 
: Question about BIOS Video Driver

 

Hi Elvin,

 

We want to set the highest resolution supported by both of video controller and monitor during POST. Also I agree with you about the proposed solution as below to have BiosVideo driver achieve this.

But the key point is the current implementation of BIOS video can only determine if the following resolution can be supported or not in VBE 3.0 interface. Check ParseEdidData() for detailes.

n  640 * 480

n  720 * 400

n  800 * 600

n  832 * 624

n  1024 *768

n  1280 * 1024

 

Is there other interface to convey information of higher resolution, if they are supported by both of video controller and monitor?

 

Thanks,

Hawk.

 

: Li, Elvin [mailto:elvin.li@intel.com] 
: 20121127 10:30
: edk2-devel@lists.sourceforge.net
: Re: [edk2] Question about BIOS Video Driver

 

Hi:

         You would use GraphicsOutputProtocol->QueryMode to get all the resolutions at first, these resolutions returned  has been supported by both monitor and video controller, then you can do like GraphicsConsole.c does to find the highest resolution:

      MaxMode = Private->GraphicsOutput->Mode->MaxMode;

     

      for (ModeIndex = 0; ModeIndex < MaxMode; ModeIndex++) {

        Status = Private->GraphicsOutput->QueryMode (

                           Private->GraphicsOutput,

                           ModeIndex,

                           &SizeOfInfo,

                           &Info

                           );

        if (!EFI_ERROR (Status)) {

          if ((Info->HorizontalResolution >= HorizontalResolution) &&

              (Info->VerticalResolution >= VerticalResolution)) {

            HorizontalResolution = Info->HorizontalResolution;

            VerticalResolution   = Info->VerticalResolution;

            ModeNumber           = ModeIndex;

          }

          FreePool (Info);

        }

      }

         What is your purpose? If you want to let BiosVideo driver to set video mode to highest resolution directly, you could set PcdVideoHorizontalResolution and PcdVideoVerticalResolution to 0x0 to make BiosVideo to set highest resolution.

 

Thanks

Elvin

From: Hawk [mailto:chendaolin@byosoft.com.cn] 
Sent: Tuesday, November 27, 2012 9:54 AM
To: edk2-devel@lists.sourceforge.net
Subject: [edk2] Question about BIOS Video Driver

 

Hi Experts,

 

In ParseEdidData() in IntelFrameworkModulePkg\Csm\BiosThunk\VideoDxe\BiosVideo.c, the EDID information pointed by EdidBuffer is in the format of VBE 3.0 and retrieved by int 10 4F15. According to the definition of following timing fields, 1280*1024 should be the highest resolution to be supported in this way.

 

EstablishedTimings[0]:

Bitfields for DPMS established timings 1:

Bit(s)         Description     

0     720x400 @ 70 Hz (VGA 640x400, IBM)

1     720x400 @ 88 Hz (XGA2)

2     640x480 @ 60 Hz (VGA)

3     640x480 @ 67 Hz (Mac II, Apple)

4     640x480 @ 72 Hz (VESA)

5     640x480 @ 75 Hz (VESA)

6     800x600 @ 56 Hz (VESA)

7     800x600 @ 60 Hz (VESA)

 

EstablishedTimings[1]:

Bitfields for DPMS established timings 2:

Bit(s)         Description     

0     800x600 @ 72 Hz (VESA)

1     800x600 @ 75 Hz (VESA)

2     832x624 @ 75 Hz (Mac II)

3     1024x768 @ 87 Hz interlaced (8514A)

4     1024x768 @ 60 Hz (VESA)

5     1024x768 @ 70 Hz (VESA)

6     1024x768 @ 75 Hz (VESA)

7     1280x1024 @ 75 Hz (VESA)

 

Our question is if there is one way to retrieve the information about higher resolution, if its supported by video output device?

 

 

Thanks,

Hawk.

------------------------------------------------------------------------------
Monitor your physical, virtual and cloud infrastructure from a single
web console. Get in-depth insight into apps, servers, databases, vmware,
SAP, cloud infrastructure, etc. Download 30-day Free Trial.
Pricing starts from $795 for 25 servers or applications!
http://p.sf.net/sfu/zoho_dev2dev_nov_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel