В одной из недавних публикаций мы коснулись проблематики использования графических протоколов в качестве средств визуализации универсального расширяемого интерфейса BIOS. Попытка использовать функцию Locate Handle для получения списка устройств, поддерживающих заданный протокол, не увенчалась успехом. Вместо таблицы с указателями на точки входа в сервисные процедуры мы получаем набор нулевых элементов.
Оказалось, что мир UEFI сложен и многообразен, и firmware не всегда работает так, как написано в документации.
В чем секрет
После изучения ряда спецификаций, подключения интуиции и серии консультаций, было принято решение изменить метод сканирования. Вместо UEFI-функции Locate Handle, предоставляющей список устройств, поддерживающих заданный протокол, воспользуемся функцией Locate Protocol, возвращающей адрес первого существующего интерфейсного блока, реализующего заданный протокол.
Рис 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.
Рис 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, изменяющие содержимое только тех регистров, через которые возвращаются выходные параметры, навсегда останутся в детских воспоминаниях…
- Войдите или зарегистрируйтесь, чтобы оставлять комментарии