PsReadMmioPhysical

Reads MMIO contents using a physical address.

Syntax

PULSE_STATUS PsReadMmioPhysical(
 [in] PPS_ENGINE pEngine,
 [in] uint64_t Address,
 [in] uint8_t AccessSize,
 [in, out] PS_CACHE_TYPE *pCacheType,
 [out] void* pBuffer,
 [in] uint64_t cbToRead,
 [out, optional] uint64_t* pcbRead
);

Parameters

PPS_ENGINE pEngine

An opaque handle to an engine created by the EngCreateEngine function.

uint64_t Address

The physical address from which to read.

uint8_t AccessSize

The size of the access that will be used for MMIO reads. Valid values are 1, 2, 4 and 8.

PS_CACHE_TYPE *pCacheType

The memory caching type that will be used for MMIO reads. Receives the effective memory-caching type used for the operation. See Remarks for more information.

void* pBuffer

The buffer that stores the read data.

uint64_t cbToRead

Specifies how many bytes should be read.

uint64_t* pcbRead

Returns the number of bytes that were actually read.

Return value

If the function succeeds, the return value is PULSE_STATUS_SUCCESS.

If it fails, it returns one of the PULSE_STATUS values. Possible return codes include, but are not limited to, the following:

PULSE_STATUS_PARTIAL_READ
0x00000001
Only a portion of memory was read. Check the *pcbRead parameter value to determine how many bytes were read.
PULSE_STATUS_INSUFFICIENT_RESOURCES
0xC0000002
One of the memory allocations failed during initialization.
PULSE_STATUS_READ_FAILED
0xC0000003
Transport communication failed during a read operation.
PULSE_STATUS_WRITE_FAILED
0xC0000004
Transport communication failed during a write operation.
PULSE_STATUS_TIMEOUT
0xC0000007
Might happen if
  • Transport I/O timed out.
  • No response was received from the debuggee within the request timeout period.
PULSE_STATUS_INVALID_PARAMETER
0xC0000010
Might happen if
  • The pEngine parameter is NULL.
  • The pBuffer parameter is NULL.
  • The pCacheType parameter is NULL.
  • The offset parameter is not aligned to the AccessSize.
  • The cbToRead parameter is not aligned to the AccessSize.
  • The AccessSize is not equal to 1, 2, 4 or 8.
PULSE_STATUS_INVALID_PACKET
0xC0000031
An invalid or unexpected packet was received in response.
PULSE_STATUS_DEVICE_CONNECTION_LOST
0xC0000308
The connection to the transport was lost. Try restarting the engine or the transport.

Remarks

The maximum number of bytes that can be read in a single request can be determined using the PsRequestGetMaxReadMmioPhysicalBufferSize function. If a larger amount is specified, this function performs multiple requests to the debug target.

The function attempts to use the memory caching type specified by pCacheType, but platform settings may override it. The effective memory caching type used for the operation is returned through pCacheType