Range Lists

A range list is a sorted list of IO port or memory address ranges (in DWORD form) in which no two ranges overlap. Resource arbitrators that manage I/O and memory resources use the range list services to discover whether a given IO or memory range conflicts with any other range. These services detect attempts to create range lists containing overlaps and either fail or create merged ranges where there would have been overlaps. Each range must specify a continguous range of addresses, but the range list itself can contain multiple ranges, none of which necessarily need to be contiguous with any other range in the list.

There are these range list services.

Service Description
CONFIGMG_Add_Range Adds a memory range to a range list.
CONFIGMG_Create_Range_List Creates a list of memory ranges.
CONFIGMG_Delete_Range Deletes a memory range from a range list.
CONFIGMG_Dump_Range_List Dumps a range list to a debugging terminal.
CONFIGMG_Dup_Range_List Copies a range list.
CONFIGMG_First_Range Retrieves the first range element in a range list.
CONFIGMG_Free_Range_List Frees the specified range list and memory allocated to it.
CONFIGMG_Intersect_Range_List Creates a range list from the intersection of two specified range lists.
CONFIGMG_Invert_Range_List Creates a range list that is the inverse of a specified range list; all claimed memory ranges in the new list are specified as free in the old list, and vice versa.
CONFIGMG_Next_Range Retrieves the next range element in a range list.
CONFIGMG_Test_Range_Available Checks a memory range against a range list to ensure no conflicts exist.