Changeset View
Changeset View
Standalone View
Standalone View
source/lib/sysdep/arch/x86_x64/apic.h
/* Copyright (C) 2011 Wildfire Games. | /* Copyright (C) 2020 Wildfire Games. | ||||
* | * | ||||
* Permission is hereby granted, free of charge, to any person obtaining | * Permission is hereby granted, free of charge, to any person obtaining | ||||
* a copy of this software and associated documentation files (the | * a copy of this software and associated documentation files (the | ||||
* "Software"), to deal in the Software without restriction, including | * "Software"), to deal in the Software without restriction, including | ||||
* without limitation the rights to use, copy, modify, merge, publish, | * without limitation the rights to use, copy, modify, merge, publish, | ||||
* distribute, sublicense, and/or sell copies of the Software, and to | * distribute, sublicense, and/or sell copies of the Software, and to | ||||
* permit persons to whom the Software is furnished to do so, subject to | * permit persons to whom the Software is furnished to do so, subject to | ||||
* the following conditions: | * the following conditions: | ||||
Show All 15 Lines | |||||
typedef u8 ApicId; // not necessarily contiguous values | typedef u8 ApicId; // not necessarily contiguous values | ||||
/** | /** | ||||
* @return APIC ID of the currently executing processor or zero if the | * @return APIC ID of the currently executing processor or zero if the | ||||
* platform does not have an xAPIC (i.e. 7th generation x86 or below). | * platform does not have an xAPIC (i.e. 7th generation x86 or below). | ||||
* | * | ||||
* rationale: the alternative of accessing the APIC mmio registers is not | * rationale: the alternative of accessing the APIC mmio registers is not | ||||
* feasible - mahaf_MapPhysicalMemory only works reliably on WinXP. we also | * feasible. We also don't want to interfere with the OS's constant use of | ||||
* don't want to interfere with the OS's constant use of the APIC registers. | * the APIC registers. | ||||
**/ | **/ | ||||
LIB_API ApicId GetApicId(); | LIB_API ApicId GetApicId(); | ||||
// if this returns false, apicId = contiguousId = processor. | // if this returns false, apicId = contiguousId = processor. | ||||
// otherwise, there are unspecified but bijective mappings between | // otherwise, there are unspecified but bijective mappings between | ||||
// apicId<->contiguousId and apicId<->processor. | // apicId<->contiguousId and apicId<->processor. | ||||
LIB_API bool AreApicIdsReliable(); | LIB_API bool AreApicIdsReliable(); | ||||
LIB_API size_t ProcessorFromApicId(ApicId apicId); | LIB_API size_t ProcessorFromApicId(ApicId apicId); | ||||
LIB_API size_t ContiguousIdFromApicId(ApicId apicId); | LIB_API size_t ContiguousIdFromApicId(ApicId apicId); | ||||
LIB_API ApicId ApicIdFromProcessor(size_t contiguousId); | LIB_API ApicId ApicIdFromProcessor(size_t contiguousId); | ||||
LIB_API ApicId ApicIdFromContiguousId(size_t contiguousId); | LIB_API ApicId ApicIdFromContiguousId(size_t contiguousId); | ||||
#endif // #ifndef INCLUDED_X86_X64_APIC | #endif // #ifndef INCLUDED_X86_X64_APIC |
Wildfire Games · Phabricator