[ 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:
- The top kernel extension did not perform a
DD_CONC_REGISTER operation.
- The conc_cmd pointer is null.
- The devno
field in the conc_cmd
structure is invalid.
- The cmd_op
field in the conc_cmd
structure is not one of the four valid values previously listed.
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:
- The concurrent command interrupt handler routine
must have a short path length since it will be running on the Serial DASD subsystem
interrupt level. If substantial command processing is needed, then this routine should
schedule an off-level interrupt to its own off-level interrupt handler.
- The concurrent command interrupt handler routine must
not call the Serial DASD device driver's concurrent entry point directly. If it is
necessary to call the Serial DASD device driver's concurrent entry point, than this
routine (the concurrent command interrupt handler routine) should schedule an off-level
interrupt to it's own off-level interrupt handler to make the call.
- The top kernel extension must have an interrupt priority
no higher than the DASD device driver's interrupt priority.
- The concurrent command interrupt handler routine may
need to disable interrupts at INTCLASS0 if it is expected to use concurrent mode on
Serial DASD and some DASD of different types. The other type of DASD needs its own device
driver to support the concurrent mode.
- A kernel extension that uses the DD_CONC_REGISTER
ioctl must issue a DD_CONC_UNREGISTER ioctl before closing the device.
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 ]