Contents
- I/O ports
- IoReadIoPort8(), IoReadIoPort16(), IoReadIoPort32()
- IoReadIoPortBuffer8(), IoReadIoPortBuffer16(), IoReadIoPortBuffer32()
- IoWriteIoPort8(), IoWriteIoPort16(), IoWriteIoPort32()
- IoWriteIoPortBuffer8(), IoWriteIoPortBuffer16(), IoWriteIoPortBuffer32()
- KnIoPermitPort()
- KnRegisterPort8(), KnRegisterPort16(), KnRegisterPort32()
- KnRegisterPorts()
IoReadIoPort8(), IoReadIoPort16(), IoReadIoPort32()
These functions are declared in the coresrv/io/ports.h
file.
rtl_uint8_t IoReadIoPort8(rtl_size_t port);
rtl_uint16_t IoReadIoPort16(rtl_size_t port);
rtl_uint32_t IoReadIoPort32(rtl_size_t port);
These functions read one, two, or four bytes, respectively, from the specified port
and return the read value.
IoReadIoPortBuffer8(), IoReadIoPortBuffer16(), IoReadIoPortBuffer32()
These functions are declared in the coresrv/io/ports.h
file.
void IoReadIoPortBuffer8(rtl_size_t port, rtl_uint8_t *dst, rtl_size_t cnt);
void IoReadIoPortBuffer16(rtl_size_t port, rtl_uint16_t *dst, rtl_size_t cnt);
void IoReadIoPortBuffer32(rtl_size_t port, rtl_uint32_t *dst, rtl_size_t cnt);
These functions read the sequence of one-, two-, or four-byte values, respectively, from the specified port
and write the values to the dst
array.
cnt
is the length of sequence.
IoWriteIoPort8(), IoWriteIoPort16(), IoWriteIoPort32()
These functions are declared in the coresrv/io/ports.h
file.
void IoWriteIoPort8(rtl_size_t port, rtl_uint8_t data);
void IoWriteIoPort16(rtl_size_t port, rtl_uint16_t data);
void IoWriteIoPort32(rtl_size_t port, rtl_uint32_t data);
The functions write a one-, two-, or four-byte data
value to the specified port
.
IoWriteIoPortBuffer8(), IoWriteIoPortBuffer16(), IoWriteIoPortBuffer32()
These functions are declared in the coresrv/io/ports.h
file.
void IoWriteIoPortBuffer8(rtl_size_t port, const rtl_uint8_t *src,
rtl_size_t cnt);
void IoWriteIoPortBuffer16(rtl_size_t port, const rtl_uint16_t *src,
rtl_size_t cnt);
void IoWriteIoPortBuffer32(rtl_size_t port, const rtl_uint32_t *src,
rtl_size_t cnt);
These functions write the sequence of one-, two-, or four-byte values, respectively, from the src
array to the specified port
.
cnt
is the length of sequence.
KnIoPermitPort()
This function is declared in the coresrv/io/ports.h
file.
Retcode KnIoPermitPort(Handle rid, Handle *handle);
This function allows a process to access the port (range of ports) with the handle rid
.
Output parameter handle
contains the handle of this permission.
Returns rcOk if successful.
Example
static Retcode PortInit(IOPort *resource)
{
Retcode rc = rcFail;
rc = KnRegisterPorts(resource->base,
resource->size,
&resource->handle);
if (rc == rcOk)
rc = KnIoPermitPort(resource->handle, &resource->permitHandle);
resource->addr = (void *) (rtl_uintptr_t) resource->base;
return rc;
}
KnRegisterPort8(), KnRegisterPort16(), KnRegisterPort32()
These functions are declared in the coresrv/io/ports.h
file.
Retcode KnRegisterPort8(rtl_uint16_t port, Handle *outRid);
Retcode KnRegisterPort16(rtl_uint16_t port, Handle *outRid);
Retcode KnRegisterPort32(rtl_uint16_t port, Handle *outRid);
These functions register an eight-, sixteen-, or thirty-two-bit port, respectively, with the port
address and assign the outRid
handle to it.
Return rcOk if the port allocation is successful.
If a port is no longer being used, it must be freed by using the KnIoClose()
function.
KnRegisterPorts()
This function is declared in the coresrv/io/ports.h
file.
Retcode KnRegisterPorts(rtl_uint16_t port, rtl_size_t size, Handle *outRid);
This function registers a range of ports (memory area) with the base address port
and the specified size
(in bytes) and assigns the outRid
handle to it.
Returns rcOk if allocation of the port range is successful.
For a usage example, see KnIoPermitPort()
.
If a range of ports is no longer being used, it must be freed by using the KnIoClose()
function.