[ Previous | Next | Contents | Home | Search ]
AIX Version 4.3 Understanding the Diagnostic Subsystem for AIX



The pdiag_dd_write() function performs a write operation on a resource.


#include <sys/pdiagex_dds.h>
int32 pdiag_dd_write( 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_write() function writes the specified data to the specified offset address. If the user enables the times variable, timing information for this function is also returned. Each write performed is dependent on the memio operation and count parameters.

PDIAG_IO_OP If count is1, data is written to the specified bus I/O offset address.
PDIAG_MEM_OP If count is1, data is written to the specified memory offset address.
PDIAG_POS_OP If count is1, data is written to the specified POS offset address.

A specified number of write accesses to the offset address may be performed if count is greater than 1. The user may choose to write the data to one location (the offset address) count times, or write the data to count consecutive locations, starting at the offset address. In either case, the data to be written is supplied by consecutive locations of the data buffer starting at the specified buffer address.

Note: When writing data, it is imperative that the write data buffer is at least the size of count * type (unless the write data buffer address is not being incremented) and filled with valid data for each write operation to be performed. If this is not done, meaningless data is written to the designated area. This may cause problems with your testing.

Execution Environment

The pdiag_dd_write() 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:
PDIAG_IO_OP Offset from base I/O address.
PDIAG_MEM_OP Offset from base memory address.
PDIAG_POS_OP offset from base POS address.
data Pointer to a block of information to be written to the specified address. This block will be of size:
count for type IOCHAR8 (1 if not incrementing data)


count *2 for type IOSHORT16 (2 if not incrementing data)


count *4 for type IOLONG32 (4 if not incrementing data).
flags The flags structure contains the following members:
memio Indication of the type of read operation to perform.
PDIAG_IO_OP For I/O write operations.
PDIAG_MEM_OP For memory write operations.
PDIAG_POS_OP For I/O Configuration Space write operations.
count Number of accesses to perform.
PDIAG_IO_OP Number of write operations to be performed.
PDIAG_MEM_OP Number of times data is written.
PDIAG_POS_OP Count should be set to 1.
addr_incr_flag Determines whether the data buffer address and the offset address get incremented on each of count accesses:
PDIAG_SING_LOC_ACC Single-location accesses: neither address is incremented.
PDIAG_SING_LOC_BUF Single-location access for buffer: the data address is never incremented. The address referred to by offset is incremented by type.
PDIAG_SING_LOC_HW Single-location access for hardware: the data address is incremented by type. The address referred to by offset is not incremented.
PDIAG_MULT_LOC_ACC Multiple-location accesses: both addresses are incremented by type.
intrlev Indicates which environment the calling routine is in:
PROCLEV If calling from the process level
INTRKMEM If calling from the interrupt level and the data buffer is in kernel memory.
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.

Return Value

The pdiag_dd_write 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 IOCHAR8, IOSHORT16, or IOLONG32). The errno is not set.
DGX_FAIL Error occurred during the I/O write access. The errno is set to BUS_PUT(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.

Related Information

pdiag_dd_read() function.

[ Previous | Next | Contents | Home | Search ]