[SDK:ASM][NDK] Improve and synchronize the definition of the SYNCH_LEVEL symbol (#3943)

In particular, for a given platform (x86, AMD64...) its definition
depends for uniprocessor vs. multiprocessor NT kernel/HAL (controlled
by the CONFIG_SMP define).

Regarding the ASM-generated headers (from asm/ksx.template.h), since
they are generated once for a given platform, and since UP/MP NT builds
are generated at the same time, these headers need to contain both
SYNCH_LEVEL definitions controlled by CONFIG_SMP, instead of a fixed
value. Therefore we need to employ the geninc RAW(...) construct.

[NDK:X86] Add missing x86 CLOCK1_LEVEL and POWER_LEVEL definitions.
This commit is contained in:
Hermès Bélusca-Maïto 2021-09-05 03:58:26 +02:00
parent f350843948
commit 5f477e0e3b
No known key found for this signature in database
GPG key ID: 3B2539C65E7B93D0
5 changed files with 43 additions and 21 deletions

View file

@ -126,10 +126,15 @@ CONSTANT(IPI_LEVEL),
CONSTANT(POWER_LEVEL),
CONSTANT(PROFILE_LEVEL),
CONSTANT(HIGH_LEVEL),
RAW("#ifdef NT_UP"),
{TYPE_CONSTANT, "SYNCH_LEVEL", DISPATCH_LEVEL},
RAW("#ifndef CONFIG_SMP"),
CONSTANTX(SYNCH_LEVEL, DISPATCH_LEVEL),
RAW("#else"),
{TYPE_CONSTANT, "SYNCH_LEVEL", (IPI_LEVEL - 2)},
#if defined(_M_IX86) && (NTDDI_VERSION < NTDDI_WS03)
CONSTANTX(SYNCH_LEVEL, (IPI_LEVEL - 1)),
#else
CONSTANTX(SYNCH_LEVEL, (IPI_LEVEL - 2)),
#endif
RAW("#endif"),
#if (NTDDI_VERSION >= NTDDI_WIN8)

View file

@ -380,15 +380,24 @@ Author:
//
// IRQL Levels
//
#define PASSIVE_LEVEL 0
#define LOW_LEVEL 0
#define APC_LEVEL 1
#define DISPATCH_LEVEL 2
#define CLOCK_LEVEL 13
#define IPI_LEVEL 14
#define POWER_LEVEL 14
#define PROFILE_LEVEL 15
#define HIGH_LEVEL 15
#define PASSIVE_LEVEL 0
#define LOW_LEVEL 0
#define APC_LEVEL 1
#define DISPATCH_LEVEL 2
#define CLOCK_LEVEL 13
#define IPI_LEVEL 14
#define POWER_LEVEL 14
#define PROFILE_LEVEL 15
#define HIGH_LEVEL 15
//
// Synchronization-level IRQL
//
#ifndef CONFIG_SMP
#define SYNCH_LEVEL DISPATCH_LEVEL
#else
#define SYNCH_LEVEL (IPI_LEVEL - 2)
#endif
//
// Quantum Decrements

View file

@ -277,13 +277,17 @@ typedef enum
//
#define KSEG0_BASE 0xfffff80000000000ULL
#define NMI_STACK_SIZE 0x2000
#define ISR_STACK_SIZE 0x6000
//
// Synchronization-level IRQL
//
#define SYNCH_LEVEL 12
#define NMI_STACK_SIZE 0x2000
#define ISR_STACK_SIZE 0x6000
#ifndef CONFIG_SMP
#define SYNCH_LEVEL DISPATCH_LEVEL
#else
#define SYNCH_LEVEL (IPI_LEVEL - 2)
#endif
//
// Number of pool lookaside lists per pool in the PRCB

View file

@ -29,9 +29,6 @@ extern "C" {
//
#define SYNCH_LEVEL DISPATCH_LEVEL
//
// CPU Vendors
//
@ -303,6 +300,11 @@ typedef enum
//
#define KSEG0_BASE 0x80000000
//
// Synchronization-level IRQL
//
#define SYNCH_LEVEL DISPATCH_LEVEL
//
// Number of pool lookaside lists per pool in the PRCB
//

View file

@ -577,8 +577,10 @@ Author:
#define APC_LEVEL 0x1
#define DISPATCH_LEVEL 0x2
#define PROFILE_LEVEL 0x1B
#define CLOCK1_LEVEL 0x1C
#define CLOCK2_LEVEL 0x1C
#define IPI_LEVEL 0x1D
#define POWER_LEVEL 0x1E
#define HIGH_LEVEL 0x1F
//
@ -588,9 +590,9 @@ Author:
#define SYNCH_LEVEL DISPATCH_LEVEL
#else
#if (NTDDI_VERSION < NTDDI_WS03)
#define SYNCH_LEVEL (IPI_LEVEL - 0x1)
#define SYNCH_LEVEL (IPI_LEVEL - 1)
#else
#define SYNCH_LEVEL (IPI_LEVEL - 0x2)
#define SYNCH_LEVEL (IPI_LEVEL - 2)
#endif
#endif