[ Previous | Contents | Home | Search ]
AIX Version 4.3 Kernel and Subsystems Technical Reference, Volume 2

Serial DASD Concurrent Mode of Operation Interface

The Serial Direct Acess Storage Device (DASD) subsystem supports the ability to broadcast one-byte message codes from one host to all other hosts connected to the same DASD. This message-passing capability can be used to synchronize access to the DASD. The operating system has a concurrent mode interface to use this hardware functionality.

The concurrent mode of operation requires that a top kernel extension runs on all hosts sharing a DASD. The top kernel extensions communicate with each other via the Serial DASD subsystem using the concurrent mode interface of the Serial DASD subsystem device driver. This interface allows a top kernel extension to send and receive messages between hosts.

The concurrent mode interface consists of an entry point in both the Serial DASD device driver and the top kernel extension. Two ioctls register and unregister the top kernel extension with the Serial DASD device driver. The Serial DASD device driver's entry point provides the means to send messages as well as lock, unlock, and test DASD. The top kernel extension entry point processes interrupts, including receiving messages from other hosts.

Device Driver Entry Point

The Serial DASD device driver concurrent mode entry point sends commands from the top kernel extension for a specified Serial DASD. The top kernel extension calls this entry point directly. The DD_CONC_REGISTER ioctl operation registers entry points.

This entry point function takes one argument, which is a pointer to a conc_cmd structure, which is defined in the /usr/include/sys/ddconc.h file. The conc_cmd structures must be allocated by the top kernel extension. The concurrent mode command operation is specified by the cmd_op field in the conc_cmd structure and can have the following values. For each operation, the devno field of the conc_cmd structure specifies the appropriate Serial DASD.

DD_CONC_SEND_REFRESH Broadcasts the one-byte message code specified by the message field of the conc_cmd structure. The code is sent to all hosts connected to the Serial DASD.
DD_CONC_LOCK Locks the specified Serial DASD for this host only. No other hosts will be able to modify data on the DASD.
DD_CONC_UNLOCK Unlocks the Serial DASD. Other hosts can lock and modify data on the DASD.
DD_CONC_TEST Issues a test DASD command to verify that the Serial DASD is still accessible to this host.

The concurrent mode entry point returns a value of EINVAL if any of the following are true:

If the concurrent mode entry point accepts the conc_cmd structure, the entry point returns a value of 0. If the Serial DASD device driver does not have resources to issue the command, the driver queues the command until resources are available. The concurrent commands queued in the Serial DASD device driver are issued before any read or write operations queued by the driver's strategy entry point.

The completion status of the concurrent mode commands are returned to the top kernel extension's concurrent mode interrupt handler entry point.

Top Kernel Extension Entry Point

The top kernel extension must have a concurrent mode command interrupt handler entry point, which is called directly from the Serial DASD subsystem device driver's interrupt handler. This function can take four arguments: the conc_cmd pointer, and the cmd_op , message_code , and devno fields. The conc_cmd pointer points to a conc_cmd structure. These arguments must be of the same type specified by the conc_intr_addr function pointer field in the dd_conc_register structure.

The following valid concurrent mode commands are defined in the /usr/include/sys/ddcon.h file. For each, the devno field specifies the appropriate Serial DASD.

DD_CONC_SEND_REFRESH Indicates the DD_CONC_SEND_REFRESH device driver entry point completed. The error field in the conc_cmd structure contains the return code necessary for the completion of this command. The possible values are defined in the /usr/include/sys/errno.h file. The conc_cmd pointer argument to the top kernel extension's special interrupt handler entry point is non-null. The cmd_op , message_code , and devno fields are 0.
DD_CONC_LOCK Indicates the DD_CONC_SEND_LOCK device driver entry point completed. The error field in the conc_cmd structure contains the return code necessary for the completion of this command. The possible values are defined in the /usr/include/sys/errno.h file. The conc_cmd pointer argument to the top kernel extension's special interrupt handler entry point is non-null. The cmd_op , message_code , and devno fields are zero.
DD_CONC_UNLOCK Indicates the DD_CONC_UNLOCK device driver entry point completed. The error field in the conc_cmd structure contains the return code necessary for the completion of this command. The possible values are defined in the /usr/include/sys/errno.h file. The conc_cmd pointer argument to the top kernel extension's special interrupt handler entry point is non-null. The cmd_op , message_code , and devno fields are zero.
DD_CONC_TEST Indicates the DD_CONC_TEST device driver entry point completed. The error field in the conc_cmd structure contains the return code necessary for the completion of this command. The possible values are defined in the /usr/include/sys/errno.h file. The conc_cmd pointer argument to the top kernel extension's special interrupt handler entry point is non-null. The cmd_op , message_code , and devno fields are zero.
DD_CONC_RECV_REFRESH Indicates a message with message_code was received for the DASD specified by the devno argument. The conc_cmd argument is null for this operation.
DD_CONC_RESET Indicates the DASD specified by the devno argument was reset, and all pending messages or commands have been flushed. The argument conc_cmd is null for this operation.

A kernel extension (referred to as the top kernel extension), using the concurrent mode of operation with the Serial DASD subsystem device driver, must meet the following requirements:

Related Information

Serial DASD Subsystem Device Driver.

Device-Dependent Subroutines for Serial DASD Operations.

Device-Dependent Subroutines for Serial DASD Adapter Operations.

Device-Dependent Subroutines for Serial DASD Controller Operations.

Serial DASD Fence Command.

Direct Access Storage Device (DASD) Overview in AIX Version 4.3 Kernel Extensions and Device Support Programming Concepts.


[ Previous | Contents | Home | Search ]