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. |