Graphics Output Protocol в среде UEFI: решение существует

25 Авг 2013

Graphics Output Protocol в среде UEFI

В одной из недавних публикаций мы коснулись проблематики исполь­зо­ва­ния графических протоколов в качестве средств визуализации уни­вер­сального расширяемого интерфейса BIOS. Попытка использовать функцию Locate Handle для получения списка устройств, под­­дер­жи­вающих заданный протокол, не увенчалась успехом. Вместо таблицы с указателями на точки входа в сервисные проце­дуры мы получаем набор нулевых элементов.

Оказалось, что мир UEFI сложен и многообразен, и firmware не всегда работает так, как написа­но в документации.

В чем секрет

После изучения ряда спецификаций, подключения интуиции и серии консультаций, было принято решение из­ме­нить метод сканирования. Вместо UEFI-функции Locate Handle, предоставляющей список устройств, под­дер­жи­ва­ю­щих заданный протокол, воспользуемся функцией Locate Protocol, возвращающей адрес первого существующего интерфейсного блока, реализующего заданный протокол.

Описание параметров функции Locate Protocol в спецификации UEFI
Рис 1. Описание параметров функции Locate Protocol в спецификации UEFI

Новый метод, реализованный в UEFI-сканерах, использующих Locate Protocol, успешно справился с поставленной задачей. Утилита ScanGOP выдает такой результат, подтверждающий, что GOP или Graphics Output Protocol успешно найден:

Analysing GUID = 9042A9DE-23DC-4A38-96-FB-7A-DE-D0-80-51-6A
Protocol detected, interface address = 00000000DB776EB8h

По указанному адресу (на исследуемой платформе он равен 00000000DB776EB8h), в полном соответствии со спецификацией UEFI, расположена структура, содержащая 64-битные указатели на процедуры и таблицы, обеспечивающие поддержку GOP.

Описание интерфейсного блока GOP в спецификации UEFI
Рис 2. Описание интерфейсного блока GOP в спецификации UEFI

Кратко охарактеризуем функции, составляющие структуру этого графического сервиса:

Функция

Описание

EFI_GRAPHICS_OUTPUT_PROTOCOL_QUERY_MODE

Обеспечивает получение списка поддерживаемых видео режимов

EFI_GRAPHICS_OUTPUT_PROTOCOL_SET_MODE

Позволяет установить заданный видео режим

EFI_GRAPHICS_OUTPUT_PROTOCOL_BLT

Выполняет копирование блока графических данных из системной памяти в видео память и обратно

EFI_GRAPHICS_OUTPUT_PROTOCOL_MODE

Содержит параметры текущего установленного видео режима

В поисках UGADraw

А вот предшественник GOP – протокол UGADraw, поддерживающий концепцию «универсального графического адаптера» на исследуемой платформе не обнаружен. Сканер ScanUGA выдал следующий результат:

Analysing GUID = 982C298B-F4FA-41CB-B8-38-77-AA-68-8F-B8-39
Protocol not detected.
Operation = Locate protocol
Status    = EFI_NOT_FOUND                

Скорее всего, протокол UGADraw стал тупиковой ветвью развития средств поддержки графики в UEFI. Косвенно на это указывает позиция ведущих производителей низкоуровневого программного обеспечения. American Megatrends, Insyde Software и Phoemix Technologies вот уже несколько лет подряд игнорируют UGADraw, превращая его тем самым в технологический рудимент.

Примечание.

Исследования проводились на новейшей плате ASUS Z87-K с системной логикой Intel Z87 для процессоров Socket 1150. Процессор — Intel(R) Xeon(R) CPU E3-1270 v3 @ 3.50GHz. Платформа оснащена UEFI BIOS про­из­вод­ства American Megatrends, в частности — Aptio IV.

Резюме

Чем же так хорош GOP-протокол? Обратим внимание на одно его неочевидное преимущество. Всем известно, что программное обеспечение, использующее графику в среде современных операционных систем, работает, минуя функции BIOS, и задействует видео акселератор. В то же время, программист, использующий функции firmware для работы с графикой, лишен такой возможности. Он должен выполнять запись в видео память средствами центрального процессора, следуя методологии VESA BIOS Extension, либо вызывать прерывание INT 10h для вывода каждого пикселя.

Продвинутая функция BLT или Block Transfer, реализованная в рамках GOP, потенциально дает возможность использовать видео акселератор. Блок данных, находящийся в системной памяти и предназначенный для переноса в видео память может быть обработан графическим процессором, взаимодействующим с оперативной памятью в режиме Bus Master. Чтобы это стало возможным, поддержка протокола GOP должна быть адаптирована к архитектуре заданного графического процессора и интегрирована в firmware видео адаптера.

А функции Legacy BIOS, изменяющие содержимое только тех регистров, через которые возвращаются выходные параметры, навсегда останутся в детских воспоминаниях…