Аббревиатура IHISI (Insyde H2O internal Soft-SMI interface), нередко упоминаемая в документации и сообщениях утилиты Insyde H2OFFT (Flash Firmware Tool), предположительно означает механизм взаимодействия двух программных модулей: утилиты, запущенной в сеансе ОС и firmware платформы.

Функции, связанные с процессом обновления UEFI, такие как управление разрешением записи, включение Flash ROM в адресное пространство платформы и т. п. реализованы подпрограммами, входящими в состав firmware. Пользователем этих функций является flash-утилита, запущенная в сеансе ОС. Таким образом, имеет место клиент-серверное взаимодействие с использованием API.

В более простых, типовых случаях, вызов API-функций осуществляется с использованием инструкции CALL. Такой вариант взаимодействия имеет место при использовании UEFI-приложением, UEFI-протоколов, реализованных в составе firmware.

Для утилиты Insyde H2OFFT, разработчики сочли такой метод неприемлемым, поскольку требуется определенная изоляция между приложением, выполняемым в ОС и низкоуровневыми процедурами firmware, иначе возможен крах системы в результате ошибки или действий злонамеренного ПО.

Для разрешения подобных ситуаций, разработчики системной логики реализовали коммуникационную подсистему, содержащую два регистра: APM_CNT, APM_STS.

Описание регистров APM_CNT и APM_STS в документации к чипсету Intel

Взаимодействие происходит по схеме:

  • Приложение записывает код команды в регистр APM_CNT, при этом системная логика генерирует прерывание SMI.
  • Процедура обработки SMI, входящая в состав firmware, считывает код команды из регистра APM_CNT, выполняет запрошенную команду и записывает статус, отражающий результат выполнения в регистр APM_STS. Обработка SMI завершается, управление возвращается из SMM-кода firmware в приложение.
  • Приложение анализирует статус выполнения команды, прочитав регистр APM_STS.

Скриншот утилиты Insyde H2OFFT (Flash Firmware Tool)

Логично предположить, что SMI Return Code 0xEF, является этим статусом. Ошибка связана с тем, что в данном примере мы в качестве эксперимента, запустили утилиту на платформе, использующей firmware разработки не Insyde.


20.01.2018