Graphics output protocol что это

Обновлено: 05.07.2024

This is the new standard for UEFI that superseded VESA (BIOS) and UGA (EFI 1.0).

Contents

Производительность и совместимость UEFI

Стандарт Graphics Output Protocol (GOP) сегодня является основной тех­но­ло­ги­ей для разработки графических UEFI-приложений. Его раз­ра­бот­чи­кам удалось предложить изящное решение пригодное для редизайна ус­та­рев­ших программ, использующих VESA BIOS Extension. В то же время, по­тен­циал GOP позволяет процедурам UEFI-firmware использо­вать воз­мож­нос­ти графического акселератора. При этом UEFI-при­ло­же­ния, вза­имо­дей­ству­ю­щие с графическим процессором посредством firm­ware, могут быть ос­во­бо­жде­ны от поддержки ог­ром­но­го количества моделей графических про­цес­со­ров.

Graphics Output Protocol

It has basically the same functions as VESA, you can query the modes, set the modes. It also provides an efficient BitBlitter function, which you can't use from your OS unfortunately. GOP is an EFI Boot Time Service, meaning you can't access it after you call ExitBootServices(). However, the framebuffer provided by GOP persists, so you can continue to use it for graphics output in your OS.

NOTE: UEFI uses it's own ABI. You can either configure your build environment to use that globally, or you must use a wrapper function. These examples use the latter for compatibility reasons. Omit uefi_call_wrapper if you have configured your build system for the former. See GNU-EFI for more information.

Detecting GOP

As with other UEFI protocols, you have to locate a structure with the function pointers first using the protocol's GUID.

GOP is the default protocol, so you should be able to locate it on all UEFI firmware. It can probably only fail if you're on an old EFI (pre-UEFI) machine, like and old iMac or intel Macbook perhaps.

Get the Current Mode

In order to get the mode code for the current video mode, you must set the mode as well to circumvent some buggy UEFI firmware. Otherwise this is done using the QueryMode function, and then gop->Mode->Mode will contain the code (this is a perfect example how badly designed UEFI is. Look: gop->Mode is a struct, while gop->Mode->Mode is a UINTN, yet exactly the same name).

Query Available Video Modes

Similarly to VESA, there's no standard mode codes, rather you have a function to query the available modes. Now you know how many modes there are (numModes above), and which one is currently set (nativeMode). You can iterate on the modes and query the information structure for each:

Set Video Mode and Get the Framebuffer

This is pretty easy. The mode argument is between 0 and numModes.

To get the same value as scanline in VESA (also called commonly pitch in many graphics libraries), you have to multiply PixelsPerScanLine by the number of bytes per pixel. That can be detected by examining the gop->Mode->Info->PixelFormat field. For example with 32 bit packed pixel formats,

Plotting Pixels

Now you can use the returned framebuffer exactly the same way as you would with VESA, there's absolutely no difference. To calculate the offset for an (X,Y) coordinate on screen, do pitch*Y+pixelbytes*X. For example for 32 bit true-color (where pixelbytes is 4):

For drawing characters, you can use the same method described in VGA Fonts.

Не говори GOP, если не знаешь, чем это закончится

Легко и просто с ноутбуками: заходя в Setup, они бодро рапортуют о том, какая именно версия GOP под­дер­жи­ва­ет­ся на дан­ной плат­фор­ме. Напомним тем, кто только недавно к нам подключился: Graphics Output Pro­to­col – это новинка, при­шед­шая на смену VGA BIOS в угоду UEFI.

CSM, как технология совместимости, открывает дополнительные опции меню UEFI BIOS

Сложнее дело обстоит с настольными системами. В слот расширения можно установить практически любую под­хо­дя­щую ви­де­окар­ту. Если у нас видеокарта без поддержки GOP, а мы выключаем CSM-ре­жим и вы­хо­дим из Setup с со­хра­не­ни­ем, то после перезагрузки нас ждет фатальная ошибка – звуковой сигнал об от­сут­ст­вии ви­део (1 длин­ный и три ко­рот­ких гуд­ка). Затем пауза и следующая перезагрузка, при которой BIOS вклю­чил CSM са­мо­воль­но, пред­уп­ре­ж­дая нас об этом та­ким со­об­ще­ни­ем:

The VGA Card is not supported UEFI Driver.
CSM (Compatibility Support Module) settings have been changed for better compatibility.

Что же происходит в процессе выполнения POST-процедур? Очевидно, что если VGA BIOS не поддерживает UEFI, то firm­ware системной платы не может взаимодействовать с ресурсами видеокарты по GOP-протоколу. Про­иг­но­ри­ро­вать «неудобный» Legacy VGA BIOS и работать с видео контроллером напрямую, firmware сис­тем­ной платы также не может, так как операции с графическим контроллером требуют спе­ци­фи­че­ской под­держ­ки и UEFI BIOS сис­тем­ной пла­ты не го­тов заранее поддерживать все типы гра­фи­че­ских кон­т­рол­ле­ров.

CSM – это мост между прошлым и будущим

Единственное решение, приемлемое для совместимости старого и нового, – технология Compatibility Support Mo­du­le. Толь­ко она способна создать «мостик» между UEFI GOP и Legacy VGA BIOS.

Запрет CSM-технологии не допускает редактирования других опций CSM-меню

Алгоритмы утилиты Aptio Setup в этом нас убеждают. Если CSM-режим разрешен, все прочие опции на этой стра­ни­це доступны. При выключении режима совместимости другие опции становятся недоступными. И если вы­йти из Setup, сохранив изменения, платформа не сможет проинициализировать видео и сгенерирует оши­бку, описанную выше.

Очевидно, вопрос касается не только графики. Если мы устанавливаем, например Storage-контроллер, firm­ware ко­то­ро­го не поддерживает UEFI, то при запрете режима CSM, диски, подключены к нему, останутся не­до­ступ­ны­ми.

Эксперименты с настройками UEFI BIOS

В предыдущей публикации «Компостер» кос­нул­ся тон­ких ма­те­рий, со­еди­ня­ю­щих про­ш­лое с на­сто­я­щим. В ком­пью­тер­ном ми­ре это на­зы­ва­ет­ся со­вмес­ти­мо­стью. Пыт­ли­вый ум экс­пе­ри­мен­та­то­ра хо­чет знать: что бу­дет, ес­ли ослу­шать­ся маму ма­ну­ал и от­ка­зать­ся от со­в­мес­ти­мос­ти? Дру­ги­ми сло­ва­ми: хо­ро­шо ли ус­во­ен ма­те­ри­ал по вы­пол­не­нию на ма­те­рин­ской пла­те опе­ра­ции Clear CMOS? Ес­ли с этим все в по­ряд­ке, сле­дуй­те за на­ми, до­ро­гие чи­та­те­ли. Мы на­чи­на­ем экс­пе­ри­мен­ты с ути­ли­той Aptio, на­деж­но встро­ен­ной в со­с­тав UEFI BIOS про­из­вод­ст­ва Ame­­ri­can Me­ga­trends.

FAQ BIOS and Firmware

BIOS and Firmware

UEFI stands for Unified Extensible Firmware Interface. UEFI is a replacement for legacy system BIOS and is flexible, fast, and efficient and has no driver size constraints. The UEFI pre-boot firmware architecture can be 32-bit, 64-bit, or IA64. There is no binary compatibility. Compatibility support module (CSM) is used to boot legacy operating systems and operate with legacy option ROMs.

Intel® Embedded Media and Graphics Driver (Intel® EMGD) for the Intel® Atom™ processor E6xx series and the Intel® System Controller Hub US15W chipset supports the Extensible Firmware Interface (EFI) graphics output protocol (GOP) driver, which gets merged into the UEFI system pre-boot firmware. The EFI GOP driver supports fast boot capability.


2. Is video BIOS (VBIOS) the same as the graphics output protocol (GOP) driver?

No. The GOP driver (also known as EFI video driver in some Intel EMGD documentation) is a replacement for legacy video BIOS and enables the use of UEFI pre-boot firmware without compatibility support module (CSM). The Intel EMGD GOP driver can either be fast boot (speed optimized and platform specific) or generic (platform agnostic for selective platforms).

Here is a quick comparison between GOP and video BIOS:

  • GOP: No 64-Kbyte limit. 32-bit protected mode. No need for CSM. Speed optimized (fast boot).
  • Video BIOS: 64-Kbyte limit (Intel® System Controller Hub US15W chipset) and 127-Kbyte limit (Intel Atom processor E6xx series). 16-bit execution. CSM is needed with UEFI system firmware. Performance inferior to GOP CSM. The VBIOS works with both 32- and 64-bit architectures.


3. Can VBIOS and the GOP driver coexist on a platform?

4. How is the VBIOS Option ROM linked to the display adapter in EFI pre-boot firmware?

The VBIOS Option ROM is linked with the PCI vendor-device ID of the VGA device (typically Bus 0, Device 2, Function 0). This information is embedded in the EFI pre-boot firmware at compile time or merged into the image on the host via the firmware vendor merging utility.

5. Which VBIOS is activated when I have an external graphics card such as Matrox* and internal graphics such as internal low-voltage differential signalling (LVDS)?

6. What are the VBIOS usage scenarios under Windows* XP?

Windows XP uses the VBIOS via INT 10h for displaying the splash screen and any messages until the graphics driver is loaded. Note that during the OS boot process the OS writes to the framebuffer directly, bypassing VBIOS for display purposes. After the graphics driver is loaded, the OS transfers control to VBIOS during full screen DOS mode and during “blue screen” to display the stack information.

7. Does Intel EMGD v1.18 for Windows Embedded* Compact 7 support the UEFI-based Intel® Boot Loader Development Kit (Intel® BLDK)?

Yes, it is supported on the Intel® Atom™ processor E6xx series-based platform.

8. Why did the CED generate 127K VBIOS instead of 64K VBIOS for the Intel Atom processor E6xx series?

Intel EMGD v1.16 (and onward) VBIOS supports 127K VBIOS for the Intel Atom E6xx processor-based platform and 64K VBIOS for the Intel System Controller Hub US15W chipset series. From Intel EMGD v1.16 onward, the 64K VBIOS for Intel Atom E6xx processor series is no longer available due to file size constraints as new features were added in the VBIOS that increased the file size to over 64K. If you require a 64K VBIOS, please consider using Intel EMGD v1.10 vBIOS package for Windows* XP and Linux* OS or Intel EMGD v1.14 VBIOS package for Windows 7, Windows Embedded Standard 7, and Windows Embedded Compact 7 OS.

Video BIOS (или VBIOS) — выделенный BIOS видеокарты компьютера, получающий управление на ранней стадии начальной загрузки IBM PC-совместимых компьютеров. Производит инициализацию видеокарты и установку обработчиков прерываний видеосервиса (INT 10H), с помощью которых основной BIOS, загрузчик ОС, ОС и прикладные программы могут выводить на экран текст и изображения до момента инициализации полноценного драйвера видеокарты.

Поскольку видеокарта обладает собственным процессором, оперативной памятью и системой питания, ей необходим выделенный BIOS для управления.

Так же, как и системный BIOS, VBIOS предоставляет набор функций и инструкций, необходимых приложению для доступа к видеокарте, выступает в роли посредника между приложением (в основном драйвером) и аппаратной частью видеокарты (в частности, реализуя Int 10h [2] ). VBIOS также содержит данные о рабочих частотах и напряжениях графического процессора и видеопамяти (и её таймингов), режимы работы системы охлаждения и прочее.

На современных видеоадаптерах VBIOS прошит в чип перезаписываемой памяти, что позволяет редактировать ряд параметров работы видеоускорителя (например, частоты работы видеопроцессора и его памяти) с помощью специальных утилит и производить внутрисхемную перепрошивку VBIOS, что может применяться среди любителей разгона для получения большей производительности [3] . Однако эта операция может привести к прошивке неработоспособного BIOS (восстановление прошивки может потребовать применения внешнего программатора) или даже вывести видеокарту из строя.

В отличие от некоторых компонентов компьютера, видеокарта должна быть задействована ещё во время загрузки компьютера для вывода информации на монитор. Для этого видеокарте требуется быть задействованной задолго до загрузки операционной системы; значит, она должна быть активирована BIOS’ом — единственной микропрограммой, представленной на начальном этапе загрузки. После запуска компьютера системный BIOS загружает образ VBIOS из ROM-секции устройства на шине (ISA, PCI, AGP, PCIexpress), и передает (недоступная ссылка) ему управление для запуска VBIOS’а. V >[4] .

После загрузки операционной системы в роль посредника вступает видеодрайвер, оснащенный бо́льшим функционалом и работающий по принципу «приложение-драйвер-VideoBIOS-аппаратная часть» (или напрямую «приложение-драйвер-аппаратная часть»).

Существуют специальные утилиты от производителей видеокарт для обновления их BIOS (возможность обновления реализована не во всех картах) [5] [6] [7] [8] .

Для эмуляторов ПК (bochs, plex86, qemu) часто используется открытая реализация упрощенного V >[9] . Имелись попытки реализаций открытых VBIOS для карт AMD и Intel [10] [11] .

Резюме

Исследование ряда персональных платформ, например, новейшей платы ASUS Z87-K с системной логикой Intel Z87 для процессоров Socket 1150, подтверждает наши аргументы. Запуская несколько ассемблерных примеров соб­ствен­ной разработки, мы убедились в том, что Graphics Output Protocol поддерживается и успешно функционирует, в то время как устаревший протокол UGADRAW на исследуемой платформе детектировать не удалось.

Не говори GOP, если не знаешь, чем это закончится

Легко и просто с ноутбуками: заходя в Setup, они бодро рапортуют о том, какая именно версия GOP поддерживается на данной платформе. Напомним тем, кто только недавно к нам подключился: Graphics Output Protocol – это новинка, пришедшая на смену VGA BIOS в угоду UEFI.

gop driver что это


Рис 1.CSM, как технология совместимости,
открывает дополнительные опции меню UEFI BIOS

The VGA Card is not supported UEFI Driver.
CSM (Compatibility Support Module) settings have been changed for better compatibility.

Что же происходит в процессе выполнения POST-процедур? Очевидно, что если VGA BIOS не поддерживает UEFI, то firmware системной платы не может взаимодействовать с ресурсами видеокарты по GOP-протоколу. Проигнорировать «неудобный» Legacy VGA BIOS и работать с видео контроллером напрямую, firmware системной платы также не может, так как операции с графическим контроллером требуют весьма специфической поддержки и UEFI BIOS системной платы не готов заранее поддерживать все типы графических контроллеров.

Как оптимизировать запись в видеопамять

Для знатоков архитектуры x86, заметим, что перепрограммирование регистров MTRR (Memory Type and Range Registers) и переопределение атрибута для диапазона доступа к видео памяти с UC (Uncacheable) на WC (Write Combining), в сочетании с использованием 128 и 256-битных SSE-инструкций, существенно увеличивает скорость записи в видео память.

gop driver что это

Консерваторам – совместимость

Другая технология использования GOP работает подобно VESA BIOS Extension, знакомому нам еще со времен реализации SVGA графики под DOS. Графическое приложение UEFI-интерфейса, используя сервисную функцию EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE, получает информацию о базовом адресе и форматировании диапазона доступа к видео памяти, а именно: количество байт на строку и расположение битовых полей, отвеча­ющих за первичные цвета Red, Green, Blue внутри 32-битного кода пикселя. После этого, приложение работает с указанным диапазоном, выполняя запись в видео память инструкциями центрального процессора. Очевидно, видео акселератор не имеет возможности ускорить этот процесс, тут все зависит от пропускной способности PCIe-шины. Такой метод незаменим для проектов, в которых приоритетом является совместимость с ранее реализо­ван­ны­ми моделями программирования.

Установка заданного видео режима и восстановление исходного режима при завершении приложения, в обеих моделях использования GOP выполняется функцией EFI _ GRAPHICS _ OUTPUT _ PROTOCOL _ SET _ MODE.

CSM – это мост между прошлым и будущим

Единственное решение, приемлемое для совместимости старого и нового, – технология Compatibility Support Module. Только она способна создать «мостик» между UEFI GOP и Legacy VGA BIOS.

gop driver что это


Рис 2. Запрет CSM-технологии не допускает
редактирования других опций CSM-меню

Алгоритмы утилиты Aptio Setup в этом нас убеждают. Если CSM-режим разрешен, все прочие опции на этой странице доступны. При выключении режима совместимости другие опции становятся недоступными. И если выйти из Setup, сохранив изменения, платформа не сможет проинициализировать видео и сгенерирует ошибку, описанную выше.

Очевидно, вопрос касается не только графики. Если мы устанавливаем, например Storage-контроллер, firmware которого не поддерживает UEFI, то при запрете режима CSM, диски, подключены к нему, останутся недоступными.

Энтузиастам – производительность

Функция EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT (Block Transfer), получает от UEFI-приложения блок данных, находящийся в системной памяти и предназначенный для переноса в видео память. Обратные пересылки также возможны. Очевидно, этот блок может быть обработан графическим процессором, взаимодействующим с оперативной памятью в обход центрального процессора в режиме Bus Master. Чтобы это стало возможным, поддержка протокола GOP должна быть адаптирована под архитектуру заданного графического процессора и интегрирована в firmware видео адаптера. При отсутствии такой функциональности, процедуры firmware, обеспечивающие BLT, должны эмулировать акселератор, а именно, копировать графические данные, используя центральный процессор. Последняя ситуация имеет место, если firmware персональной платформы «вынуждено» обеспечить поддержку GOP для установленного в слот PCI Express видеоадаптера, не поддерживающего этот протокол.

Примечание.

Очевидно, гармония производительности и совместимости будет иметь место только при наличии поддержки GOP в firmware видеоадаптера. В настоящее время распространенность VGA-адаптеров, готовых к об­слу­жи­ва­нию GOP, оставляет желать лучшего. Хотя производители давно уже анонсировали модели с поддержкой этого UEFI-совместимого протокола.

Читайте также: