18 protocols - device i/o protocol, 1 device i/o overview – Intel Extensible Firmware Interface User Manual

Page 761

Advertising
background image

Version 1.10

12/01/02

18-1

18

Protocols - Device I/O Protocol

This chapter defines the Device I/O protocol. This protocol is used by code, typically drivers,
running in the EFI boot services environment to access memory and I/O. In particular, functions
for managing PCI buses are defined here although other bus types may be supported in a similar
fashion as extensions to this specification.

The services defined in this chapter have been superceded by the services described in Chapter 12.
Both the PCI Root Bridge I/O Protocol and the PCI I/O Protocol provide a more complete set of
services for managing PCI devices. The PCI Root Bridge I/O Protocol and PCI I/O Protocol are
not defined in the EFI 1.02 Specification. If an EFI image is required to be compliant with the EFI
1.02 Specification
, then the Device I/O Protocol is the only option for these types of I/O services.
If an EFI image is required to be compliant with the EFI 1.10 Specification, then the PCI Root
Bridge I/O Protocol or the PCI I/O Protocol must be used for these types of I/O services.

18.1 Device I/O Overview

The interfaces provided in the

DEVICE_IO

protocol are for performing basic operations to

memory, I/O, and PCI configuration space. The

DEVICE_IO

protocol can be thought of as the bus

driver for the system. The system provides abstracted access to basic system resources to allow a
driver to have a programmatic method to access these basic system resources.

The

DEVICE_IO

protocol allows for future innovation of the platform. It abstracts device-

specific code from the system memory map. This allows system designers to greatly change
the system memory map without impacting platform independent code that is consuming basic
system resources.

It is important to note that this specification ties these interfaces into a single protocol solely for the

purpose of simplicity. Other similar bus- or device-specific protocols that “programmatic child
drivers” may require can easily be added by using a new protocol GUID. For example, a
comprehensive USB-specific host controller protocol interface could be defined for child drivers.
These drivers would perform a

LocateDevicePath()

to obtain the proper USB interface set,

from somewhere up the device path, just as a PCI-based device driver would do with the

DEVICE_IO

protocol to gain access to the PCI configuration space interfaces.

Advertising