Общий способ построения виртуального pci-устройства и виртуального mmio-устройства

Иллюстрации

Показать все

Изобретение относится к устройствам обработки. Технический результат заключается в возможности построения виртуального устройства как виртуального PCI-устройства для функционального блока, который не является совместимым с PCI, и как виртуального I/O-устройство для устройства, совместимого с PCI, которое связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI. Результат достигается за счет того, что способ включает в себя прием запроса для устройства, совместимого с PCI. Этот способ дополнительно включает в себя построение виртуального устройства на основе запроса для устройства, совместимого с PCI, где виртуальное устройство строится по меньшей мере как одно из виртуального PCI-устройства или виртуального I/O-устройства. 3 н. и 19 з.п. ф-лы, 9 ил.

Реферат

Область техники, к которой относится изобретение

Варианты осуществления, описанные здесь, относятся, в общем, к устройствам обработки и, более конкретно, к общему способу построения виртуального PCI-устройства и виртуального MMIO-устройства.

Уровень техники

Вычислительная система может включать в себя множество компонентов, таких как устройство обработки (например, микроконтроллер, микропроцессор и т.д.), блоки памяти, источники синхронизации, периферийные устройства, внешние интерфейсы, аналоговые интерфейсы, регуляторы напряжения, схемы управления электропитанием и т.д. Эти блоки памяти, внешние интерфейсы или другие компоненты могут включать в себя функциональные блоки, также известные как IP-блоки или контроллеры, которые обеспечивают интерфейс между устройством обработки и периферийным устройством.

Эти компоненты в вычислительной системе могут связываться с программным обеспечением, доступным для вычислительной системы, и с периферийными устройствами различными способами, такими как, например, через шину межсоединения периферийных компонентов (PCI). Программное обеспечение может загружаться из некоторых периферийных устройств, таких как флэш-память, а затем исполняться устройством обработки в вычислительной системе.

Однако некоторые компоненты в вычислительной системе, такие как функциональные блоки, могут быть не совместимы с PCI, и, таким образом, могут быть не способны связываться с программным обеспечением, которое использует шину PCI для связи. Кроме того, некоторое программное обеспечение не может загружаться из определенных периферийных устройств, таких как периферийные устройства, совместимые с PCI.

Множество решений могут использоваться для решения этих вопросов. Современные подходы для решения проблемы неспособности функционального блока связываться с программным обеспечением, которое использует шину PCI для связи, включают в себя аппаратный подход и программный подход. Современный аппаратный подход требует изменения конструкции аппаратного обеспечения функционального блока, чтобы сделать функциональный блок совместимым с PCI. Современный программный подход требует создания программного обеспечения для функционального блока, такого как драйвер конкретного устройства для функционального блока, который может обойти несовместимость функционального блока. Современный подход для решения проблемы неспособности программного обеспечения загружаться из периферийного устройства, совместимого с PCI, требует изменения конструкции аппаратного обеспечения периферийного устройства, совместимого с PCI, (например, замены микросхемы). Однако эти подходы могут отнимать много времени и иметь значительные издержки.

Краткое описание чертежей

Данное раскрытие будет более понятным из подробного описания, данного ниже, и из сопутствующих чертежей различных вариантов осуществления данного раскрытия. Эти чертежи, однако, не следует принимать как ограничивающие данное раскрытие этими конкретными вариантами осуществления, они предназначены только для объяснения и понимания.

Фиг. 1 является блок-схемой одного варианта осуществления устройства обработки, который реализует общий способ построения виртуального устройства, как виртуального PCI-устройства или виртуального устройства ввода/вывода (I/O);

Фиг. 2 является блок-схемой, иллюстрирующей модуль виртуального устройства для реализации общего способа построения виртуального устройства, как виртуального PCI-устройства или виртуального I/O-устройства, согласно одному варианту осуществления данного раскрытия;

Фиг. 3 является блок-схемой, иллюстрирующей способ построения виртуального устройства, как виртуального PCI-устройства или виртуального I/O-устройства, согласно одному варианту осуществления данного раскрытия;

Фиг. 4 является блок-схемой, иллюстрирующей способ построения виртуального устройства, как виртуального PCI-устройства, согласно одному варианту осуществления данного раскрытия;

Фиг. 5 является блок-схемой, иллюстрирующей способ построения виртуального устройства, как виртуального I/O-устройства, согласно одному варианту осуществления данного раскрытия;

Фиг. 6 является блок-схемой, иллюстрирующей способ использования виртуального устройства согласно одному варианту осуществления данного раскрытия;

Фиг. 7 является блок-схемой компьютерной системы согласно одному варианту осуществления данного раскрытия;

Фиг. 8 является блок-схемой компьютерной системы согласно другому варианту осуществления данного раскрытия; и

Фиг. 9 является блок-схемой компьютерной системы согласно другому варианту осуществления данного раскрытия.

Подробное описание изобретения

Программное обеспечение, такое как операционная система или приложение, выполняемое в операционной системе вычислительной системы, может получать доступ к аппаратному устройству (например, периферийному устройству) в вычислительной системе с использованием драйвера. Когда драйвер запрашивает доступ к аппаратному устройству, драйвер может послать запрос доступа через функциональный блок, связанный с этим аппаратным устройством. Функциональный блок может затем получить доступ к аппаратному устройству, принять ответ от аппаратного устройства и передать ответ к драйверу. Следовательно, функциональный блок служит в качестве интерфейса между драйвером (и соответствующим программным обеспечением) и аппаратным устройством. Функциональный блок может быть «прозрачным» для драйвера и/или аппаратного устройства. Драйвер может запросить доступ к аппаратному устройству посредством записи команд для аппаратного устройства (например, команд доступа, таких как «считать» или «записать») в шину межсоединения периферийных компонентов (PCI) в вычислительной системе. Однако, если функциональный блок, соответствующий аппаратному устройству, не является совместимым с PCI, то функциональный блок может не иметь информации о том, что драйвер пытается получить доступ к аппаратному устройству или может быть не способен связываться с драйвером.

Кроме того, операционная система может быть выполнена с возможностью загружаться только из некоторых аппаратных устройств, таких как устройства ввода/вывода (I/O), и может быть не способна загружаться из других аппаратных устройств. Например, операционная система может быть не способна загружаться из периферийного устройства, которое операционная система считает съемным устройством, таким как устройство, совместимое с PCI. Однако вычислительная система может не считать аппаратное устройство съемным и может предпочесть загрузку операционной системы из аппаратного устройства.

Варианты осуществления данного раскрытия обеспечивают общий способ построения виртуального устройства, либо как виртуального PCI-устройства, либо как виртуального I/O-устройства. В одном варианте осуществления, способ данного раскрытия предусматривает прием запроса для устройства, совместимого с PCI. Этот способ дополнительно предусматривает построение виртуального устройства на основе запроса для устройства, совместимого с PCI, при этом виртуальное устройство строится, по меньшей мере, как одно из виртуального PCI-устройства или виртуального I/O-устройства.

Виртуальное устройство может быть построено как виртуальное PCI-устройство для функционального блока, который не является совместимым с PCI, и виртуальное устройство может быть построено как виртуальное I/O-устройство для устройства, совместимого с PCI, которое связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI. Посредством построения виртуального устройства, как виртуального PCI-устройства для функционального блока, который не является совместимым с PCI, любые доступы и/или запросы, посланные программным обеспечением в шину PCI для устройства, совместимого с PCI, связанного с функциональным блоком, могут быть распознаны виртуальным устройством и могут быть переданы в функциональный блок. Следовательно, виртуальное устройство обеспечивает интерфейс для функционального блока, который не является совместимым с PCI, для приема обращений и/или запросов, совместимых с PCI. Посредством построения виртуального устройства, как виртуального I/O-устройства, для устройства, совместимого с PCI, которое связано с операционной системой, подлежащей загрузке из этого устройства, совместимого с PCI, операционная система может загружаться с этого виртуального устройства, так как операционная система определяет, что устройство, из которого она загружается, является I/O-устройством, а не устройством, совместимым с PCI.

Фиг. 1 представляет блок-схему устройства 100, которое реализует общий способ построения виртуального PCI-устройства и виртуального MMIO-устройства, согласно одному варианту осуществления данного раскрытия. Некоторые примеры устройства 100 могут включать в себя, но не ограничены этим, устройство мобильной связи, такое как сотовый телефон или смартфон, мобильное вычислительное устройство, такое как планшетный компьютер, нетбук, блокнотный компьютер (ноутбук), компактный портативный компьютер, настольный компьютер, сервер-компьютер и т.д.

Устройство 100 может включать в себя, например, хост 105 для управления базовыми операциями для устройства 100. Хост 105 может включать в себя, например, модуль 110 обработки, функциональные блоки 115, модуль 120 памяти и другие модули 135. Модуль 110 обработки может содержать один или несколько процессоров (также известных как устройства обработки), расположенных в отдельном компоненте, или, альтернативно, одно или несколько ядер обработки, воплощенных в единой интегральной схеме (IC), расположенной, например, в конфигурации системы на кристалле (SOC).

Функциональные блоки 115 могут включать в себя схемы, выполненные с возможностью поддержки модуля 110 обработки. Функциональные блоки 115 могут включать в себя схемы «интерфейс/мостовое соединение". В одном варианте осуществления, каждый функциональный блок 115 является интегральной схемой (IC), выполненной с возможностью управления передачей данных по конкретной шине (например, PCI, последовательному AT подключению (SATA), универсальной последовательной шине (USB) и т.д.) или интерфейсом (например, устройствами мультимедийных карт (MMC), встроенными устройствами мультимедийных карт (eMMC), защищенными цифровыми (SD) устройствами и т.д.) в устройстве 100. Например, если устройство 100 включает в себя шину и/или интерфейс для PCI, SATA, USB, MMC, eMMC и SD-устройств, то устройство 100 будет включать в себя функциональный блок 115 (например, контроллер), который является PCI-контроллером, функциональный блок 115, который является SATA-контроллером, функциональный блок 115, который является USB-контроллером, функциональный блок 115, который является MMC-контроллером, функциональный блок 115, который является eMMC-контроллером, и функциональный блок 115, который является SD-контроллером. Функциональный блок 115 может управлять передачей сигналов между различными модулями посредством преобразования из одного типа/скорости связи в другой. Каждый функциональный блок 115 может быть также совместимым с разнообразными различными устройствами для обеспечения возможности различных системных реализаций, модернизаций и т.д. Некоторая часть функциональности функциональных блоков 115 может быть также включена в модуль 110 обработки, модуль 120 памяти или другие модули 135.

Модуль 110 обработки может исполнять команды. Команды могут включать в себя программный код для вызова выполнения модулем 110 обработки действий, таких как, но не ограниченных этим, считывание данных, запись данных, обработка данных, формулирование данных, преобразование данных, трансформация данных и т.д. Информация, включающая в себя команды, данные и т.д. (не показано), может храниться в модуле 120 памяти.

Модуль 120 памяти может включать в себя оперативное запоминающее устройство (RAM) или постоянное запоминающее устройство (ROM) в фиксированном или съемном формате. RAM может включать в себя память для сохранения информации во время работы устройства 100, такую как, например, статическое RAM (SRAM) или динамическое RAM (DRAM). ROM может включать в себя такие запоминающие устройства, как BIOS-память вычислительного устройства, для обеспечения команд, когда устройство 100 активируется, программируемые запоминающие устройства, такие как электронные программируемые ROM (EPROM), флэш-память и т.д. Другая фиксированная и/или съемная память может включать в себя магнитные запоминающие устройства, такие как гибкие-диски, жесткие диски и т.д., электронные запоминающие устройства, такие как твердотельная флэш-память (например, eMMC и т.д.), съемные карты или модули памяти (например, USB, micro-SD и т.д.), оптические запоминающие устройства, такие как ROM на компакт-диске (CD-ROM), голографические запоминающие устройства и т.д.

Другие модули 135 могут включать в себя модули, направленные на поддержку другой функциональности в пределах устройства 100. Другие модули 135 могут включать в себя, например, модули для подачи энергии к устройству 100, модули для поддержки проводной и/или беспроводной связи в устройстве 100, модули для обеспечения особенностей пользовательского интерфейса (UI) в устройстве 100, модули для поддержки специализированной функциональности и т.д. Компоновка других модулей 100 может быть переменной в зависимости, например, от формфактора, для использования которого было сконфигурировано устройство 100, и т.д.

Периферийные устройства 140 могут включать в себя съемные или несъемные периферийные устройства, такие как периферийные устройства, совместимые с PCI, периферийные устройства ввода/вывода с отображением (портов) в оперативной памяти (MMIO), магнитные запоминающие устройства, такие как флоппи-диски, жесткие диски и т.д., электронные запоминающие устройства, такие как твердотельная флэш-память (например, eMMC и т.д.), съемные карты или модули памяти (например, USB, микроSD и т.д.), оптические запоминающие устройства, такие как Запоминающие устройства на компакт-диске (CD-ROM), голографические запоминающие устройства и т.д. Периферийное устройство может быть идентифицировано посредством номера шины, к которой оно подключено, или посредством номера устройства для типа периферийного устройства. Периферийное устройство 140 может включать в себя один или несколько компонентов 145 программного обеспечения (например, приложение, операционную систему и т.д.), хранимые в периферийном устройстве 140.

Вариант осуществления модуля 120 памяти может включать в себя модуль 125 виртуального устройства и один или несколько компонентов 130 программного обеспечения. Компоненты 130 программного обеспечения могут включать в себя приложения, операционную систему, BIOS, обработчик прерываний управления системой (SMI) и т.д. В одном варианте осуществления, компонент 130 программного обеспечения посылает запрос (например, запрос нумерации, запрос доступа и т.д.) для периферийного устройства 140 в модуль 125 виртуального устройства. Этот запрос может быть запросом для получения информации для периферийного устройства 140, такой как идентификатор поставщика, идентификатор устройства и информация об адресах для периферийного устройства 140. Если эта информация возвращается модулем 125 виртуального устройства, то компонент 130 программного обеспечения может использовать эту информацию для связи с периферийным устройством 140 через PCI.

Модуль 125 виртуального устройства может принять запрос для периферийного устройства 140. Модуль 125 виртуального устройства может построить виртуальное устройство на основе запроса для периферийного устройства 140. Этим виртуальным устройством может быть виртуальное PCI-устройство или виртуальное MMIO-устройство.

Модуль 125 виртуального устройства может построить виртуальное устройство, которое является виртуальным PCI-устройством, если модуль 125 виртуального устройства определяет, что периферийное устройство 140 в запросе связано с функциональным блоком 115, который не является совместимым с PCI. Функциональный блок 115 не является совместимым с PCI, если функциональный блок 115 не может считывать или записывать запросы доступа в шину PCI. В одном варианте осуществления, модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, посредством считывания или записи запроса доступа в функциональный блок 115. Если функциональный блок 115 возвращает ошибку или другое указание, что функциональный блок 115 не может считать или записать запрос доступа, то модуль 125 виртуального устройства может определить, что функциональный блок 115 не является совместимым с PCI. В другом варианте осуществления модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, посредством получения информации о совместимости от функционального блока 115 и определения того, включает ли информация о совместимости от функционального блока 115 в себя PCI. В другом варианте осуществления, модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, из аппаратной спецификации для устройства 100. В еще одном варианте осуществления, модуль 125 виртуального устройства определяет, является ли функциональный блок 115 несовместимым с PCI, посредством получения информации о совместимости от SMI-обработчика (не показан), от BIOS (не показана) и т.д. Если информация о совместимости для функционального блока 115 не включает в себя PCI, то функциональный блок 115 не является совместимым с PCI. В одном варианте осуществления, модуль 125 виртуального устройства строит виртуальное устройство, как виртуальное PCI-устройство, посредством определения информации (например, идентификатора поставщика, идентификатора устройства и информации об адресах) для виртуального PCI-устройства. В некоторых вариантах осуществления, модуль 125 виртуального устройства посылает эту информацию в компонент 130 программного обеспечения в качестве реакции на запрос от компонента 130 программного обеспечения.

Модуль 125 виртуального устройства может построить виртуальное устройство, которое является виртуальным MMIO-устройством, если модуль 125 виртуального устройства определяет, что периферийное устройство 140 в запросе связано с компонентом 145 программного обеспечения, подлежащим загрузке с периферийного устройства 140. В одном варианте осуществления, модуль 125 виртуального устройства определяет, связано ли периферийное устройство 140 с компонентом 145 программного обеспечения, подлежащим загрузке с периферийного устройства, посредством доступа к одному или нескольким компонентам 145 программного обеспечения, хранимым на периферийном устройстве 140, и определения того, являются ли какие-либо из этих компонентов программного обеспечения заданными компонентами программного обеспечения (например, операционной системой и т.д.). В одном варианте осуществления, модуль 125 виртуального устройства строит виртуальное устройство как виртуальное I/O-устройство посредством игнорирования запроса, принятого от компонента 130 программного обеспечения, и определения диапазона I/O-адресов для виртуального I/O устройства.

Когда виртуальное устройство построено для периферийного устройства 140, модуль 125 виртуального устройства может сохранить виртуальное устройство в памяти, такой как модуль 120 памяти. В некоторых вариантах осуществления, если виртуальное устройство является виртуальным PCI-устройством для периферийного устройства 140, модуль 125 виртуального устройства предоставляет в один или несколько компонентов 130 программного обеспечения (например, компонент 130 программного обеспечения, который послал запрос для периферийного устройства 140) идентификатор поставщика, идентификатор устройства и информацию об адресах для созданного виртуального устройства. В некоторых вариантах осуществления, если виртуальное устройство является виртуальным I/O-устройством для периферийного устройства 140, компоненты 130 программного обеспечения больше не получают непосредственный доступ к периферийному устройству 140, для которого был послан запрос, а вместо этого получают доступ к виртуальному PCI-устройству или виртуальному I/O-устройству для периферийного устройства 140. Модуль 125 виртуального устройства может дополнительно обеспечить интерфейс между компонентами 130 программного обеспечения и виртуальным устройством. В некоторых вариантах осуществления, после приема доступа к I/O-адресу от компонента 130 программного обеспечения, модуль 125 виртуального устройства определяет, находится ли I/O адрес в пределах диапазона виртуального устройства, которое является виртуальным I/O-устройством. В этих вариантах осуществления, если модуль 125 виртуального устройства определяет, что I/O-адрес находится в пределах диапазона виртуального устройства, которое является виртуальным I/O-устройством, модуль 125 виртуального устройства преобразует I/O-адрес в PCI-адрес перед обеспечением запроса доступа к периферийному устройству 140, связанному с виртуальным I/O-устройством.

Фиг. 2 иллюстрирует модуль 200 виртуального устройства для реализации общего способа построения виртуального PCI-устройства и виртуального MMIO-устройства, в соответствии с одним вариантом осуществления данного раскрытия. В одном варианте осуществления, модуль 200 виртуального устройства является тем же самым, что и модуль 125 виртуального устройства, описанный выше относительно фиг. 1. Модуль 200 виртуального устройства может включать в себя модуль 205 определения виртуального устройства, модуль 210 создания виртуального PCI-устройства, модуль 215 создания виртуального I/O-устройства и модуль 220 преобразования адреса виртуального I/O-устройства. Больше или меньше компонентов можно включить в модуль 200 виртуального устройства без потери общности.

Модуль 205 определения виртуального устройства может принять запрос для периферийного устройства. Запрос может включать в себя информацию идентификации о запросе, такую как, является ли запрос запросом доступа, запросом нумерации и т.д. Запрос может дополнительно включать в себя информацию идентификации для периферийного устройства, такую как адрес для периферийного устройства. Модуль 125 виртуального устройства может определить, следует ли построить виртуальное устройство как виртуальное PCI-устройство или виртуальное I/O-устройство, на основе запроса для периферийного устройства.

Модуль 205 определения виртуального устройства может определить, что виртуальное устройство следует построить как виртуальное PCI-устройство, если периферийное устройство в запросе связано с функциональным блоком, который не является совместимым с PCI. В одном варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации о совместимости от функционального блока и определения, включает ли информация о совместимости от функционального блока в себя PCI. В этом варианте осуществления, если информация о совместимости для функционального блока не включает в себя PCI, модуль 205 определения виртуального устройства определяет, что функциональный блок не является совместимым с PCI. В этом варианте осуществления, если информация о совместимости для функционального блока не включает в себя PCI, модуль 205 определения виртуального устройства определяет, что функциональный блок является совместимым с PCI. В другом варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации от SMI-обработчика (не показан), обработчика ловушек (не показан) или обработчика прерываний (не показан). Если периферийное устройство связано с функциональным блоком, который не является совместимым с PCI, модуль 205 определения виртуального устройства может послать запрос в модуль 210 создания виртуального PCI-устройства для построения виртуального PCI-устройства в качестве виртуального устройства.

Модуль 205 определения виртуального устройства может определить, что виртуальное устройство должно быть построено как виртуальное I/O-устройство, если периферийное устройство в запросе связано с программным обеспечением (например, с операционной системой), подлежащим загрузке из периферийного устройства. В одном варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство с программным обеспечением, подлежащим загрузке из периферийного устройства, посредством доступа к программному обеспечению, хранимому на периферийном устройстве, и определения, является ли какой-либо элемент программного обеспечения заданным типом программного обеспечения (например, операционной системой и т.д.). В другом варианте осуществления, модуль 205 определения виртуального устройства определяет, связано ли периферийное устройство с программным обеспечением, подлежащим загрузке из периферийного устройства, посредством получения информации от SMI-обработчика, обработчика ловушек или обработчика прерываний. Если периферийное устройство в запросе связано с программным обеспечением, подлежащим загрузке из периферийного устройства, модуль 205 определения виртуального устройства может послать запрос в модуль 215 создания виртуального I/O-устройства для создания виртуального I/O-устройства в качестве виртуального устройства.

Модуль 210 создания виртуального PCI-устройства может принять запрос от модуля 205 определения виртуального устройства для создания виртуального PCI-устройства. Модуль 210 создания виртуального PCI-устройства может создать виртуальное PCI-устройство посредством определения информации идентификации и информации об адресах для виртуального PCI-устройства на основе функционального блока, связанного с периферийным устройством. Информация идентификации может включать в себя идентификатор поставщика, идентификатор устройства и т.д. Информация об адресах может включать в себя диапазон адресов, который может использоваться программным обеспечением (не показано) для доступа к виртуальному PCI-устройству. В одном варианте осуществления, модуль 210 создания виртуального PCI-устройства получает информацию идентификации и информацию об адресах от SMI-обработчика, обработчика ловушек или обработчика прерываний. Как только модуль 210 создания виртуального PCI-устройства создает виртуальное PCI-устройство, модуль 210 создания виртуального PCI-устройства может сохранить виртуальное PCI-устройство в памяти. В одном варианте осуществления модуль 210 создания виртуального PCI-устройства сохраняет виртуальное PCI-устройство в качестве виртуального устройства в информации 255 о виртуальных устройствах в модуле 250 памяти.

Модуль 215 создания виртуального I/O-устройства может принять запрос от модуля 205 определения виртуального устройства для создания виртуального I/O-устройства. Модуль 215 создания виртуального I/O-устройства может создать виртуальное I/O-устройство посредством игнорирования запроса для периферийного устройства и определения диапазона I/O-адресов для виртуального I/O-устройства. В одном варианте осуществления, модуль 215 создания виртуального I/O-устройства игнорирует запрос для периферийного устройства, не реагируя на запрос для периферийного устройства. В другом варианте осуществления, модуль 215 создания виртуального I/O-устройства игнорирует запрос для периферийного устройства передавая ответ на запрос о том, что запрос был передан неудачно (например, неудачное PCI-считывание). Как только модуль 215 создания виртуального I/O-устройства создает виртуальное I/O-устройство, модуль 215 создания виртуального I/O-устройства может сохранить виртуальное I/O-устройство в памяти. В одном варианте осуществления, модуль 215 создания виртуального I/O-устройства сохраняет виртуальное I/O-устройство в информации 255 о виртуальных устройствах в модуле 250 памяти.

Модуль 220 преобразования адреса виртуального I/O-устройства может принять запрос или доступ к I/O-адресу. В одном варианте осуществления, запрос или доступ принимается от программного обеспечения. В качестве реакции на запрос или доступ, модуль 220 преобразования адреса виртуального I/O-устройства может определить, находится ли I/O-адрес в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством. Модуль 220 преобразования адреса виртуального I/O-устройства может определить, находится ли I/O-адрес в пределах диапазона адресов виртуального I/O-устройства, посредством сравнения I/O-адреса с диапазоном адресов для каждого виртуального устройства, которое является виртуальным I/O-устройством. В одном варианте осуществления, модуль 220 преобразования адреса виртуального I/O-устройства сравнивает I/O-адрес с диапазонами адресов в информации 255 о виртуальных устройствах. Если модуль 220 преобразования адреса виртуального I/O-устройства определяет, что I/O-адрес находится в пределах диапазона адресов виртуального устройства, которое является виртуальным I/O-устройством, то модуль 220 преобразования адреса виртуального I/O-устройства может преобразовать I/O-адрес в PCI-адрес и может вызвать доступ к PCI-адресу периферийного устройства, связанного с виртуальным устройством.

Фиг. 3 является блок-схемой способа 300 построения виртуального PCI-устройства и виртуального MMIO-устройства согласно одному варианту осуществления данного раскрытия. Способ 300 может быть выполнен посредством логических схем обработки, которые могут содержать аппаратное обеспечение (например, схемы, специализированные логические схемы, программируемые логические схемы, микрокод и т.д.), программное обеспечение (такое как команды, выполняемые в устройстве обработки), программно-аппаратные средства или их комбинацию. В одном варианте осуществления, способ 300 выполняется устройством 100, описанным относительно фиг. 1.

В блоке 305, логические схемы обработки принимают запрос для устройства, совместимого с PCI. Устройством, совместимым с PCI, может быть периферийное устройство, которое может быть подключено к шине PCI. Запрос для устройства, совместимого с PCI, может включать в себя информацию идентификации о запросе, такую как, является ли запрос запросом доступа, запросом нумерации и т.д. В одном варианте осуществления, запрос является запросом нумерации, принятым от SMI-обработчика, в то время как устройство обработки, выполняющее способ 300, находится в режиме системного управления (SMM).

SMM является режимом работы, в котором все обычное исполнение (включающее в себя OS) устройства обработки приостановлено, и специальное отдельное программное обеспечение (обычно программно-аппаратные средства или отладчик с аппаратной поддержкой) исполняется в режиме с высоким уровнем привилегии. SMM обеспечивает изолированную память и среду исполнения, и SMM-код является невидимым для операционной системы (OS) при сохранении полного доступа к памяти и полного контроля над периферийными устройствами, такими как устройства, совместимые с PCI, и т.д. Когда SMM инициирован, текущее состояние устройства обработки сохраняется, и все другие процессы останавливаются. В SMM-режиме могут выполняться такие операции с высоким уровнем привилегии, как отладка, управление аппаратным, обеспечением, функции безопасности, эмуляция и т.д., за которыми следует операция возобновления устройства обработки, основанная на состоянии сохранения устройства обработки. После возникновения прерывания системного управления (SMI), устройство обработки может войти в SMM и запустить SMI-обработчик. SMI может быть сгенерировано, когда запускается исполнение устройства обработки (загрузка), когда новое периферийное устройство добавляется к устройству и т.д. Например, программно-аппаратные средства или BIOS могут сгенерировать SMI после загрузки.

После приема SMI, SMI-обработчик может пронумеровать (периферийные) устройства, совместимые с PCI, доступные для устройства обработки, посредством запроса (например, попытки считать) шины PCI для определения устройства (устройств), совместимых с PCI. Если SMI сгенерировано в качестве реакции на загрузку, то все устройства, совместимые с PCI, в устройстве могут быть не пронумерованы. Если SMI сгенерировано в качестве реакции на добавляемое новое устройство, совместимое с PCI, то новое устройство, совместимое с PCI, может быть не пронумеровано. SMI-обработчик может сгенерировать запрос нумерации для каждого устройства, совместимого с PCI, которое еще не было пронумеровано. Запрос нумерации может включать в себя информацию идентификации для устройства, совместимого с PCI, такую как номер шины и номер устройства для устройства, совместимого с PCI.

Возвращаясь к фиг. 3, в блоке 310, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, в запросе с функциональным блоком, который не является совместимым с PCI. Функциональный блок не является совместимым с PCI, если функциональный блок не может считывать или записывать запросы доступа в шину PCI.

В одном варианте осуществления, логические схемы обработки определяют, связано ли устройство, совместимое с PCI, в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации о совместимости от функционального блока, связанного с устройством, совместимым с PCI, и определения, включает ли информация о совместимости для функционального блока в себя PCI-совместимость. Если информация о совместимости для функционального блока включает в себя PCI-совместимость, то логические схемы обработки определяют, что устройство, совместимое с PCI, не связано с функциональным блоком, который не является совместимым с PCI (другими словами, устройство, совместимое с PCI, связано с функциональным блоком, который является совместимым с PCI. Если информация о совместимости для функционального блока не включает в себя PCI-совместимость, то логические схемы обработки определяют, что устройство, совместимое с PCI, связано с функциональным блоком, который не является совместимым с PCI.

В другом варианте осуществления, логические схемы обработки определяют, связано ли периферийное устройство в запросе с функциональным блоком, который не является совместимым с PCI, посредством получения информации о совместимости для функционального блока, связанного с устройством, совместимым с PCI, от SMI-обработчика. Информация о совместимости может включать в себя, является ли функциональный блок, связанный с устройством, совместимым с PCI, совместимым с PCI. SMI-обработчик может собрать информацию о драйверах и/или программном обеспечении (например, о приложениях), выполняемом или подлежащем выполнению в устройстве обработки, и может определить, какие устройства, совместимые с PCI, поддерживаются драйверами и/или программным обеспечением. SMI-обработчик может собрать информацию о драйверах и/или программном обеспечении из документации, из исходного кода драйвера или программного обеспечения и т.д. После определения устройств, совместимых с PCI, поддерживаемых драйверами и/или программным обеспечением, SMI-обработчик может определить соответствующий функциональный блок (например, контроллер) для каждого из устройств, совместимых с PCI, и определить, является ли соответствующий функциональный блок совместимым с PCI. SMI-обработчик может получить доступ к каждому из функциональных блоков для определения PCI-совместимости каждого из функциональных блоков. Например, информация о типе устройства для каждого из функциональных блоков может быть доступна для SMI-обработчика. В одном варианте осуществления, логические схемы обработки могут получить информацию о совместимости для функционального блока, связанного с устройством, совместимым с PCI, посредством посылки запроса информации о совместимости для функционального блока и приема информации о совместимости для функционального блока от SMI-обработчика. В другом варианте осуществления, логические схемы обработки могут получить информацию о совместимости для функционального блока от SMI-обработчика посредством доступа к заданному адресу ячейки памяти, записанной посредством SMI-обработчика. Если информация о совместимости включает в себя информацию о совместимости представляющую, что функциональный блок