Writes to the region may be combined or performed out of order.
MDF_WRITETHROUGH
Writes to the region are committed synchronously.
MDF_WRITEBACK
Writes to the region are committed asynchronously.
MDF_WRITEPROTECT
The region cannot be written to.
Memory ranges are described by .Vt struct mem_range_desc :
u_int64_t mr_base; /* physical base address */
u_int64_t mr_len; /* physical length of region */
int mr_flags; /* attributes of region */
char mr_owner[8];
In addition to the region attributes listed above, the following flags may also be set in the mr_flags field:
MDF_FIXBASE
The regions base address cannot be changed.
MDF_FIXLEN
The regions length cannot be changed.
MDF_FIRMWARE
The region is believed to have been established by the system firmware.
MDF_ACTIVE
The region is currently active.
MDF_BOGUS
We believe the region to be invalid or otherwise erroneous.
MDF_FIXACTIVE
The region cannot be disabled.
MDF_BUSY
The region is currently owned by another process and may not be altered.
Operations are performed using struct mem_range_op:
struct mem_range_desc *mo_desc;
int mo_arg[2];
The MEMRANGE_GET ioctl is used to retrieve current memory range attributes. If mo_arg[0] is set to 0, it will be updated with the total number of memory range descriptors. If greater than 0, the array at mo_desc will be filled with a corresponding number of descriptor structures, or the maximum, whichever is less.
The MEMRANGE_SET ioctl is used to add, alter and remove memory range attributes. A range with the MDF_FIXACTIVE flag may not be removed; a range with the MDF_BUSY flag may not be removed or updated.
mo_arg[0] should be set to MEMRANGE_SET_UPDATE to update an existing or establish a new range, or to MEMRANGE_SET_REMOVE to remove a range.