Intel Extensible Firmware Interface User Manual

Page 256

Advertising
background image

Extensible Firmware Interface Specification

9-14

12/01/02

Version 1.10

Bus Driver that creates all of its child handles on the first call to Start():

1. Ignore the parameter

RemainingDevicePath

.

2. Open all required protocols with

OpenProtocol()

. A standard driver should use an

Attribute

of

EFI_OPEN_PROTOCOL_BY_DRIVER

. If this driver needs exclusive access

to a protocol interface, and it requires any drivers that may be using the protocol interface to
disconnect, then the driver should use an

Attribute

of

EFI_OPEN_PROTOCOL_BY_DRIVER | EFI_OPEN_PROTOCOL_EXCLUSIVE

. It must

use the same

Attribute

value that was used in

Supported()

.

3. If any of the calls to

OpenProtocol()

in (2) returned an error, then close all of the

protocols opened in (2) with

CloseProtocol()

, and return the status code from the call to

OpenProtocol()

that returned an error.

4. Initialize the device specified by

ControllerHandle

. If an error occurs, close all of the

protocols opened in (2) with

CloseProtocol()

, and return

EFI_DEVICE_ERROR

.

5. Discover all the child devices of the bus controller specified by

ControllerHandle

.

6. If the bus requires it, allocate resources to all the child devices of the bus controller specified by

ControllerHandle

.

7. FOR each child C of

ControllerHandle

:

a. Allocate and initialize all of the data structures that this driver requires to manage the child

device C. This would include space for public protocols and space for any additional
private data structures that are related to the child device C. If an error occurs allocating
the resources, then close all of the protocols opened in (2) with

CloseProtocol()

, and

return

EFI_OUT_OF_RESOURCES

.

b. If the bus driver creates device paths for the child devices, then create a device path for the

child C based upon the device path attached to

ControllerHandle

.

c. Initialize the child device C. If an error occurs, close all of the protocols opened in (2) with

CloseProtocol()

, and return

EFI_DEVICE_ERROR

.

d. Create a new handle for C, and install the protocol interfaces for child device C using

InstallMultipleProtocolInterfaces()

. This may include the

EFI_DEVICE_PATH

protocol.

e. Call

OpenProtocol()

on behalf of the child C with an

Attribute

of

EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER

.

8. END

FOR

9. Return

EFI_SUCCESS

.

Advertising