The calldown list identifies the drivers responsible for processing I/O requests issued for a DCB. The IOS uses the calldown list to determine which I/O request handling routines to call and what order to call them. The IOS creates the calldown list for a DCB during driver registration.
A driver inserts the address of its I/O request handler into the calldown list by using the ISP_INSERT_CALLDOWN function while processing the AEP_CONFIG_DCB function. The ISP_INSERT_CALLDOWN function creates a new entry for the list, consisting of an DCB_cd_entry structure, and copies relevant information from the ISP_calldown_insert structure passed with the function into the free entry. For example, the function sets the DCB_cd_io_address member to the value specified in the ISP_i_cd_req member. If a new list entry can not be created, the IOS returns a non-zero value in ISP_result field indicating the error. Few if any devices use more than five entries in the calldown list.
The IOS sorts the calldown list entries by load group number as specified by the DCB_cd_lgn field. When the IOS inserts a new entry, it places it in sorted order. For example, if a list contains three entries with load group numbers of 4, 7 and 31, the IOS will inserts a new entry having load group number 6 into the second slot in the list, moving the 7 and 31 entries down one slot each. Although a driver can direct the IOS to insert an entry relative to any given layer, most drivers insert their entries relative to their initialization layer.
While inserting a calldown list entry, each driver specifies the kind of functionality it needs from a higher layer by setting bits in the ISP_i_cd_flags member. If a driver supports the requested functionality, it clears the bit. Each driver should check these bits during registration to make sure drivers at lower levels on which they depend have cleared the necessary bits. After the IOS loads all drivers, the IOS checks the bits in the ISP_i_cd_flags member to make sure that the only bits left are those that the IOS can support.
See also DCB, ISP