High Availability Software for the Intel® NetStructureTM ZT 4901 Technical Product Specification 61
Redundant Host API
This function can be used to enumerate devices nested below physical slots if a PCI-PCI bridge
occupies the physical slot. To get information about all devices at the next nesting level, this
function should be called with the physical slot number and slot path to the immediate parent
bridge. This slot path is taken from the slot information structure for the immediate parent. To
enumerate devices immediately nested below the bridge in the physical slot, the caller should pass
the slot path from the slot information structure obtained via RhGetPhysicalSlotInformation.
The returned information is represented by the array of structures of variable length. Each structure
describes one device located immediately below the parent PCI-PCI bridge. The total l ength of the
array is returned in the location pointed by pActualSize. If some of the information structures
identify corresponding devices as PCI-PCI bridges, the caller can go deeper and enumerate the PCI
devices below that bridge using this function.
6.2.5 Switchover API

6.2.5.1 Switchover Scenarios and Theory of Operation

6.2.5.1.1 Fully Cooperative Switchover

In the cooperative switchover scenario, before giving up control over a domain, the owning host
first prepares the PCI devices on this domain for switchover by gracefully shutting down operation
on them and stopping the device drivers working with these devices. This operation is called
software disconnection. This step is taken to ensure that the PCI devices appear to the new owner
in a known state and that no transactions in progress are lost.
The exact meaning of software disconnection depends on the devices in the domain and their
drivers. For device drivers that are not switchover-aware, software disconnection means shutdown
of the corresponding devices and removal of all their software representations (device objects and
so forth). Switchover-aware drivers may use “warmer” methods of preparation for switchover,
keeping the device active to some degree during the switchover but preventing it from doing any
damage to the new owning host immediately after the switchover (for example, preventing
outstanding DMA transactions from this device to the host during the switchover).
Cooperative switchover can be initiated either by the owning host (in which case it voluntarily
gives up control of this domain), o r by the new owner of the domain, or by some third-party host.
In the last two cases, an inter-host communication channel is used to request the owning host to
initiate software disconnection. In all cases, software disconnection is initiated by calling the
RhPrepareForSwitchover function.
Once started, software disconnection can be rejected by software (if, for example, a PCI device in
the domain performs an important operation that cannot be interrupted). Software disconnection
can also be left pending for a long time (for example, awaiting completion of an important
transaction). The function RhPrepareForSwitchover is asynchronous and does not wait for
completion of software disconnection. The current software connection state, associated with the
domain, can be used to track the progress of the software disconnection operation.
The initial software connection state of the domain is INACTIVE. For a domain in the normal
state, the software connection state is CONNECTED. When software disconnection is initiated for
a domain, the corresponding state becomes DISCONNECTING and stays DISCONNECTING
while software disconnection is pending for the domain. When software disconnection completes
successfully, the state goes to DISCONNECTED. If software disconnection is terminated
unsuccessfully, the state goes back to CONNECTED.