Registers an I/O statistics structure used for updating I/O statistics reported by the iostat subroutine.
#include <sys/types.h> #include <sys/errno.h> #include <sys/iostat.h> #include <sys/devinfo.h>
int iostadd (devtype, devstatp) int devtype; union { struct ttystat *ttystp; struct dkstat *dkstp; } devstatp;
The iostadd kernel service is used to register the I/O statistics structure required to maintain statistics on a device. The iostadd service is typically called by a tty, disk, or CD-ROM device driver to provide the statistical information used by the iostat subroutine. The iostat subroutine displays statistic information for tty and disk devices on the system. The iostadd service should be used once for each configured device.
For tty devices, the devtype parameter has a value of DD_tty. In this case, the iostadd service uses the devstatp parameter to return a pointer to a ttystat structure.
For disk or CD-ROM devices with a devtype value of DD_DISK or DD_CD-ROM, the caller must provide a pinned and initialized dkstat structure as an input parameter. This structure is pointed to by the devstatp parameter on entry to the iostadd kernel service.
If the device driver support for a device is terminated, the dkstat or ttystat structure registered with the iostadd kernel service should be deregistered by calling the iostdel kernel service.
The iostadd kernel service uses two structures that are found in the usr/include/sys/iostat.h file: the ttystat structure and the dkstat structure.
The ttystat structure contains the following tty-related fields:
rawinch | Count of raw characters received by the tty device |
caninch | Count of canonical characters generated from canonical processing |
outch | Count of the characters output to a tty device |
The second structure used by the iostadd kernel service is the dkstat structure, which contains information about disk devices. This structure contains the following fields:
diskname | 32-character string name for the disk's logical device |
dknextp | Pointer to the next dkstat structure in the chain |
dk_status | Disk entry-status flags |
dk_time | Time the disk is active |
dk_bsize | Number of bytes in a block |
dk_xfers | Number of transfers to or from the disk |
dk_rblks | Number of blocks read from the disk |
dk_wblks | Number of blocks written to the disk |
dk_seeks | Number of seek operations for disks |
The rawinch field in the ttystat structure should be incremented by the number of characters received by the tty device. The caninch field in the ttystat structure should be incremented by the number of input characters generated from canonical processing. The outch field is increased by the number of characters output to tty devices. These fields should be incremented by the device driver, but never be cleared.
A disk device driver must perform these four tasks:
If the device supports discrete seek commands, the dkstat.dk_xrate field in the structure should be set to the transfer rate capability of the device (KB/sec). The device's dkstat structure should then be registered using the iostadd kernel service.
During drive operation update, the dkstat.dk_status field should show the busy/nonbusy state of the device. This can be done by setting and resetting the IOST_DK_BUSY flag. The dkstat.dk_xfers field should be incremented for each transfer initiated to or from the device. The dkstat.dk_rblks and dkstat.dk_wblks fields should be incremented by the number of blocks read or written.
If the device supports discrete seek commands, the dkstat.dk_seek field should be incremented by the number of seek commands sent to the device. If the device does not support discrete seek commands, both the dkstat.dk_seek and dkstat.dk_xrate fields should be left with a value of 0.
The base kernel updates the dkstat.dk_nextp and dkstat.dk_time fields. They should not be modified by the device driver after initialization.
Note: The same dkstat structure must not be registered more than once.
The iostadd kernel service can be called from the process environment only.
0 | Indicates that no error has been detected. |
EINVAL | Indicates that the devtype parameter specified a device type that is not valid. |
The iostadd kernel service is part of Base Operating System (BOS) Runtime.
The iostat command.
The iostdel kernel service.
Kernel Extension and Device Driver Management Kernel Services in AIX Kernel Extensions and Device Support Programming Concepts.