The pdiag_dd_read() function performs a read operation on a resource.
#include <sys/pdiagex_dds.h> int32 pdiag_dd_read ( handle, type, offset, data, flags ) pdiag_info_handle_t handle; uint32 type; uint32 offset; pdiag_addr_t data; pdiag_opflags_t *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.
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.
Note: 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 testing.
The pdiag_dd_read() function can be called from the process or the interrupt environment.
handle | Points to pdiag_info_handle_t structure which is returned from pdiag_open(). | ||||||
type | Defines the data length (byte, word or long) read from the address specified when type is IOCHAR8, IOSHORT16, and IOLONG32 respectively. | ||||||
offset | Offset value that is dependent on the type of operation being performed.
It can be one of the following values:
| ||||||
data | Address of the information read from the specified address.
Note: 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. | ||||||
flags | The flags structure contains the following members: | ||||||
memio | Indication of the type of read operation to perform.
| ||||||
count | Number of accesses to perform.
| ||||||
addr_incr_flag | Determines whether the data buffer address and the offset address get incremented on each of count accesses: | ||||||
intrlev | Indicates which environment the calling routine is in:
| ||||||
times | 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:
DGX_OK | The operation was successful. The errno is not set. |
DGX_INVALID_HANDLE | Specified handle has been closed or was not generated by the pdiag_open() call. The errno is not set. |
DGX_BOUND_FAIL | offset given was larger than the width of the I/O address range. The errno is not set. |
DGX_BADVAL_FAIL | Type field was not valid (that is, not IOCHAR, IOSHORT, or IOLONG). The errno is not set. |
DGX_FAIL | Error occurred during the I/O read access. The errno is set to BUS_GET(L/S/C)X macro return code. |
DGX_COPY_FAIL | 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. |
pdiag_dd_write() function.