DXR165の備忘録

自分用の備忘録です。

UEFI BIOSではGOP driverが必須に!  

UEFI BIOSではGOP driverが必須に!

Intel Processor Graphics 調査メモ  はこちら
VGA互換関連についてはこちら



OSが起動するまでの間に、画面表示を担うのはBIOSです。レガシーBIOSではVGA互換が必須でした。しかし、UEFI BIOSでは、ビデオ機能としてGOP driverが必須になりました。
さて、2017年現在ではレガシBIOSを搭載したPCが徐々に減少し始め、OSの起動もUEFIブートが当たり前になり、もはやPCでDOSを動かすことは今後ないと思われます。そろそろ、レガシなグラフィック環境とはおさらばしたいものです。もうVGAやら、VBEやら0xA0000-0xBFFFFがどうの、I/Oポートアドレスがどうの等を深く理解する必要もないし、そうしたくないです。よって、PCのグラフィイクッス機能を理解する上で、ここからは調査の筋をグラフィイクッス機能の最小要素であるUEFI GOP (Graphic Output Protocol)に当てたいと思います。

UEFI BIOSの詳細はこちらの記事をご覧ください。

このUEFI GOPは当然BIOS上でのDriverであり、OSが立ち上がれば、基本使われません。UEFI BIOS時代になっても、PC/AT互換機では引き続きBIOSで使用するビデオ機能はビデオデバイス(ビデオカードやCPU内臓GPU)内のOption ROMに各デバイス供給元が作製し格納します。
Intel CPU内臓グラフィックの場合BIOSはシステムBIOS(マザーボード側のROMに入っている)に統合されています。



UEFI GOP (Graphic Output Protocol)
EFI初期にはグラフィイクッス機能としてUGAが定められていたようですが、2017年現在ではUEFI BIOS仕様PCにはGOP仕様のVideo BIOS(Option ROM , PCI Expansion ROM)を搭載したグラフィイクッス・ビデオカードが必要とされています。こちらの記事(グラフィックボード・ビデオカードのビデオBIOSとGOPドライバについて)もご覧ください。

引用始まり
Windows 8 が市場に出るタイミングは、すべての新しいクライアント システムが従来の BIOS から Unified Extensible Firmware Interface (UEFI) へと移行する時期でもあります。従来の BIOS インターフェイスも引き続きサポートされますが、UEFI インターフェイスを利用するマシンでは非常に豊富な機能を実現することができます。たとえば UEFI システムでは、Graphics Output Protocol (GOP) ドライバーを使って、ネイティブの解像度でリッチなグラフィックを使ったエクスペリエンスをレンダリングすることが可能です。UEFI の採用により、OS はようやくブート ファームウェアと標準化された方法でやり取りすることができるようになります。これは UEFI および TCG (Trusted Computing Group) の標準化への取り組みによって強力にサポートされています。これによって実現する機能として、たとえば OS とファームウェアが協力して安全なハンドオフ メカニズムを構築するセキュア ブートがあります。また、電源ボタンを押した時点からシームレスなビジュアル エクスペリエンスの提供が可能になります。2 つの別個のコンポーネントが 1 つのエクスペリエンスを共有するのです。
これまでにブート エクスペリエンスが完全に刷新されたことは、実のところ一度もありません。OS やハードウェアが対数的な進歩を続けてきた中で、BIOS メニューは 30 年近く時間が止まったような状態です。過去のいくつかの Windows リリースでは、OS 起動前の環境で使用する機能を数多く導入してきましたが、それぞれ実現できる機能や制約の違いに合わせた設計が必要でした。
引用終わり
出典
Microsoft Building Windows 8
Windows エンジニアリング チームによるブログ
Billie Sue 2011
https://blogs.msdn.microsoft.com/b8_ja/2011/09/22/windows-2/



UEFI仕様によると、グラフィイクッス機能ではConsole Supportとして、Simple Text Output ProtocolとGraphics Output Protocolを定めています。二つのプロトコルともグラフィイクッス機能のファンクションコールのみを定めていて、VGA互換のそれのようにハードウェアの仕様までは定めていないようです。

引用始まり
11.9 Graphics Output Protocol
The goal of this section is to replace the functionality that currently exists with VGA hardware and its corresponding video BIOSThe Graphics Output Protocol is a software abstraction and its goal is to support any foreseeable graphics hardware and not require VGA hardware, while at the same time also lending itself to implementation on the current generation of VGA hardware.

Simple Text Output Protocol
The minimum supported text mode of such devices is at least 80 x 25 characters.

Graphics Output Protocol
The EFI_GRAPHICS_OUTPUT_PROTOCOL supports three member functions to support the limited graphics needs of the pre-boot environment. These member functions allow the caller to draw to a virtualized frame buffer, retrieve the supported video modes, and to set a video mode. These simple primitives are sufficient to support the general needs of pre-OS firmware code.
The EFI_GRAPHICS_OUTPUT_PROTOCOL also exports enough information about the current mode for operating system startup software to access the linear frame buffer directly.
The interface structure for the Graphics Output protocol is defined in this section. A unique Graphics Output protocol must represent each video frame buffer in the system that is driven out to one or more video output devices.

11.9.1 Blt Buffer
The basic graphics operation in the EFI_GRAPHICS_OUTPUT_PROTOCOL is the Block Transfer or Blt. The Blt operation allows data to be read or written to the video adapter’s video memory. The Blt operation abstracts the video adapters hardware implementation by introducing the concept of a software Blt buffer.
The frame buffer abstracts the video display as an array of pixels. Each pixels location on the video display is defined by its X and Y coordinates. The X coordinate represents a scan line. A scan line is a horizontal line of pixels on the display. The Y coordinate represents a vertical line on the display. The upper left hand corner of the video display is defined as (0, 0) where the notation (X, Y) represents the X and Y coordinate of the pixel. The lower right corner of the video display is represented by (Width –1, Height -1).
The software Blt buffer is structured as an array of pixels. Pixel (0, 0) is the first element of the software Blt buffer. The Blt buffer can be thought of as a set of scan lines. It is possible to convert a pixel location on the video display to the Blt buffer using the following algorithm: Blt buffer array index = Y * Width + X.
Each software Blt buffer entry represents a pixel that is comprised of a 32-bit quantity. Byte zero of the Blt buffer entry represents the Red component of the pixel. Byte one of the Blt buffer entry represents the Green component of the pixel. Byte two of the Blt buffer entry represents the Blue component of the pixel. Byte three of the Blt buffer entry is reserved and must be zero. The byte values for the red, green, and blue components represent the color intensity. This color intensity value range from a minimum intensity of 0 to maximum intensity of 255.
引用終わり

解像度の最小値は定められず、色深度 32bitのようです。


EFI_GRAPHICS_OUTPUT_PROTOCOL
Summary
Provides a basic abstraction to set video modes and copy pixels to and from the graphics controller’s frame buffer. The linear address of the hardware frame buffer is also exposed so software can write directly to the video hardware.
GUID
#define EFI_GRAPHICS_OUTPUT_PROTOCOL_GUID \
 {0x9042a9de,0x23dc,0x4a38,\
 {0x96,0xfb,0x7a,0xde,0xd0,0x80,0x51,0x6a}}
Protocol Interface Structure
typedef struct EFI_GRAPHICS_OUTPUT_PROTCOL {
 EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE QueryMode;
 EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE SetMode;
 EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT Blt;
 EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE *Mode;
} EFI_GRAPHICS_OUTPUT_PROTOCOL;
Parameters
QueryMode Returns information for an available graphics mode that the graphics device and the set of active video output devices supports.
SetMode Set the video device into the specified mode and clears the visible portions of the output display to black.
Blt Software abstraction to draw on the video device’s frame buffer.
Mode Pointer to EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE data.Type EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE is defined in “Related Definitions” below. 
Related Definitions
EFI_PIXEL_BITMASK
EFI_GRAPHICS_PIXEL_FORMAT
EFI_GRAPHICS_OUTPUT_MODE_INFORMATION
EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE
Description
The EFI_GRAPHICS_OUTPUT_PROTOCOL provides a software abstraction to allow pixels to be drawn directly to the frame buffer. The EFI_GRAPHICS_OUTPUT_PROTOCOL is designed to be lightweight and to support the basic needs of graphics output prior to Operating System boot.



EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt()
Summary
Blt a rectangle of pixels on the graphics screen. Blt stands for BLock Transfer.

ということで、Blt とはBLock Transferの略とあります。これが2Dグラフィイクッスの主要機能のようです。

出典
Unified Extensible Firmware Interface Specification Version 2.4 June, 2013
11 Protocols — Console Support
11.4 Simple Text Output Protocol
11.9 Graphics Output Protocol



関連記事

category: PC-HW

tb: 0   cm: 0

コメント

コメントの投稿

Secret

トラックバック

トラックバックURL
→http://dxr165.blog.fc2.com/tb.php/451-23adbc5d
この記事にトラックバックする(FC2ブログユーザー)

プロフィール

最新コメント

カウンター(2012/3/10以降)