[ Previous |
AIX Version 4.3 Understanding the Diagnostic Subsystem for AIX
The pdiag_dd_read() function performs
a read operation on a resource.
int32 pdiag_dd_read ( handle, type, offset, data, flags )
The pdiag_dd_read() function reads the
data from the specified address. If the user enables the times variable,
timing information for this function is also returned. Each read performed is
dependent on the memio operation and count parameters.
|| If count is 1, data is read from the specified bus I/O offset address.|
|| If count is 1, data is read from the specified memory offset address.|
|| If count is 1, data is read from the specified POS offset address.|
A specified number of read accesses from the
offset address may be performed if count is greater than 1. The user
may choose to read the data from one location (the offset address) count
times, or read the data from count consecutive locations, starting at
the offset address. In either case, the read data is stored in the
data buffer starting at the specified buffer address.
When reading data, it is imperative that the read data buffer is
at least the size of count * type (unless the read data buffer
address is not being incremented). If this is not done, meaningless data is
written to an area outside the read buffer. This may cause problems with your
The pdiag_dd_read() function can be
called from the process or the interrupt environment.
|| Points to pdiag_info_handle_t structure which is
returned from pdiag_open().|
|| Defines the data length (byte, word or long) read from the address
specified when type is IOCHAR8, IOSHORT16, and IOLONG32 respectively.|
|| Offset value that is dependent on the type of operation being performed.
It can be one of the following values:
|| offset from base I/O address.|
|| offset from base memory address.|
|| offset from base POS address.|
|| Address of the information read from the specified address.
For PDIAG_IO_OP and PDIAG_MEM_OP: The value read from the specified
offset will be placed at the specified data address in the form
specified by type. If the data buffer is smaller than the
specified type, the value will overwrite the bounds of your buffer. If
the data buffer is larger than the specified type, the value will
reside in the upper type bytes of the buffer.
For PDIAG_POS_OP: The value read from the
specified offset will be placed at the specified data address and
will occupy 1 byte. If the data buffer is larger than 1 byte, the value
will reside in the upper byte of the buffer.
|| The flags structure contains the following members:|
|| Indication of the type of read operation to perform.
|| For I/O read operations.|
|| For memory read operations..|
|| For I/O Configuration Space read operations.|
|| Number of accesses to perform.
|| Number of read operations to be performed.|
|| Number of times data is read.|
|| Count should be set to 1.|
|| Determines whether the data buffer address and the offset
address get incremented on each of count accesses:
|| Single-location accesses: neither address is incremented. |
|| Single-location access for buffer: the data address is never incremented. The address referred to by offset is incremented by type. |
|| Single-location access for hardware: the data address is incremented by type. The address referred to by offset is not incremented. |
|| Multiple-location accesses: both addresses are incremented by type.|
|| Indicates which environment the calling routine is in:
|| If calling from the process level|
|| If calling from the interrupt level and the data buffer is in kernel memory.|
|| Points to the timestruc_t structure which returns timing
information. If times is a null pointer, no timing information will be
returned back to the user.|
The pdiag_dd_read function returns one
of the following values:
|| The operation was successful. The errno is not set.|
|| Specified handle has been closed or was not generated by the
pdiag_open() call. The
errno is not set.|
|| offset given was larger than the width of the I/O address range.
The errno is not set.|
|| Type field was not valid (that is, not IOCHAR, IOSHORT, or IOLONG). The
errno is not set.|
|| Error occurred during the I/O read access. The errno is set to
BUS_GET(L/S/C)X macro return code.|
|| User data buffer could not be copied to or from kernel memory.
The errno is set to the xmemin/out or copyin/out return code.|
[ Previous |