[  Previous  |
Next  |
Contents  |
Home  |
Search  ]
AIX Version 4.3 Understanding the Diagnostic Subsystem for AIX
pdiag_dd_write
Purpose
The pdiag_dd_write() function performs 
a write operation on a resource. 
Syntax
#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;
Description
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.
Parameters
| 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) OR  |  
| count *2 for 
	type IOSHORT16 | 
    (2 if not incrementing data) OR  |  
| 
	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  ]