Author: tkreuzer Date: Tue Apr 28 21:26:37 2015 New Revision: 67470
URL: http://svn.reactos.org/svn/reactos?rev=67470&view=rev Log: [NDK] Use portable definitions for service table constants. (Moved from ARM specific definition in ntoskrnl internal header, with a fixed value for TABLE_NUMBER_BITS, which is 1, not 3)
Modified: trunk/reactos/include/ndk/amd64/ketypes.h trunk/reactos/include/ndk/i386/asm.h trunk/reactos/include/ndk/ketypes.h trunk/reactos/ntoskrnl/include/internal/ke.h
Modified: trunk/reactos/include/ndk/amd64/ketypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/amd64/ketypes.h... ============================================================================== --- trunk/reactos/include/ndk/amd64/ketypes.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/amd64/ketypes.h [iso-8859-1] Tue Apr 28 21:26:37 2015 @@ -157,15 +157,6 @@ #define PRCB_MAJOR_VERSION 1 #define PRCB_BUILD_DEBUG 1 #define PRCB_BUILD_UNIPROCESSOR 2 - -// -// Service Table -// -#define NUMBER_SERVICE_TABLES 2 -#define SERVICE_NUMBER_MASK 0xFFF -#define SERVICE_TABLE_SHIFT 7 -#define SERVICE_TABLE_MASK 0x20 -#define SERVICE_TABLE_TEST 0x20
// // HAL Variables
Modified: trunk/reactos/include/ndk/i386/asm.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/i386/asm.h?rev=... ============================================================================== --- trunk/reactos/include/ndk/i386/asm.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/i386/asm.h [iso-8859-1] Tue Apr 28 21:26:37 2015 @@ -611,11 +611,6 @@ // // System Call Table definitions // -#define NUMBER_SERVICE_TABLES 0x0002 -#define SERVICE_NUMBER_MASK 0x0FFF -#define SERVICE_TABLE_SHIFT 0x0008 -#define SERVICE_TABLE_MASK 0x0010 -#define SERVICE_TABLE_TEST 0x0010 #define SERVICE_DESCRIPTOR_BASE 0x0000 #define SERVICE_DESCRIPTOR_COUNT 0x0004 #define SERVICE_DESCRIPTOR_LIMIT 0x0008
Modified: trunk/reactos/include/ndk/ketypes.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/include/ndk/ketypes.h?rev=6... ============================================================================== --- trunk/reactos/include/ndk/ketypes.h [iso-8859-1] (original) +++ trunk/reactos/include/ndk/ketypes.h [iso-8859-1] Tue Apr 28 21:26:37 2015 @@ -28,6 +28,66 @@ #include <potypes.h> #include <ifssupp.h> #endif + +// +// A system call ID is formatted as such: +// .________________________________________________________________. +// | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | +// |--------------|-------------------------------------------------| +// | TABLE NUMBER | TABLE OFFSET | +// ----------------------------------------------------------------/ +// +// The table number is then used as an index into the service descriptor table. +#define TABLE_NUMBER_BITS 1 +#define TABLE_OFFSET_BITS 12 + +// +// There are 2 tables (kernel and shadow, used by Win32K) +// +#define NUMBER_SERVICE_TABLES 2 +#define NTOS_SERVICE_INDEX 0 +#define WIN32K_SERVICE_INDEX 1 + +// +// NB. From assembly code, the table number must be computed as an offset into +// the service descriptor table. +// +// Each entry into the table is 16 bytes long on 32-bit architectures, and +// 32 bytes long on 64-bit architectures. +// +// Thus, Table Number 1 is offset 16 (0x10) on x86, and offset 32 (0x20) on +// x64. +// +#ifdef _WIN64 +#define BITS_PER_ENTRY 5 // (1 << 5) = 32 bytes +#else +#define BITS_PER_ENTRY 4 // (1 << 4) = 16 bytes +#endif + +// +// We want the table number, but leave some extra bits to we can have the offset +// into the descriptor table. +// +#define SERVICE_TABLE_SHIFT (12 - BITS_PER_ENTRY) + +// +// Now the table number (as an offset) is corrupted with part of the table offset +// This mask will remove the extra unwanted bits, and give us the offset into the +// descriptor table proper. +// +#define SERVICE_TABLE_MASK (((1 << TABLE_NUMBER_BITS) - 1) << BITS_PER_ENTRY) + +// +// To get the table offset (ie: the service call number), just keep the 12 bits +// +#define SERVICE_NUMBER_MASK ((1 << TABLE_OFFSET_BITS) - 1) + +// +// We'll often need to check if this is a graphics call. This is done by comparing +// the table number offset with the known Win32K table number offset. +// This is usually index 1, so table number offset 0x10 (x86) or 0x20 (x64) +// +#define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << BITS_PER_ENTRY)
// // Context Record Flags
Modified: trunk/reactos/ntoskrnl/include/internal/ke.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/ntoskrnl/include/internal/k... ============================================================================== --- trunk/reactos/ntoskrnl/include/internal/ke.h [iso-8859-1] (original) +++ trunk/reactos/ntoskrnl/include/internal/ke.h [iso-8859-1] Tue Apr 28 21:26:37 2015 @@ -159,70 +159,6 @@ /* One of the Reserved Wait Blocks, this one is for the Thread's Timer */ #define TIMER_WAIT_BLOCK 0x3L
-#ifdef _M_ARM // FIXME: remove this once our headers are cleaned up -// -// A system call ID is formatted as such: -// .________________________________________________________________. -// | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | -// |--------------|-------------------------------------------------| -// | TABLE NUMBER | TABLE OFFSET | -// ----------------------------------------------------------------/ -// -// -// The table number is then used as an index into the service descriptor table. -#define TABLE_NUMBER_BITS 3 -#define TABLE_OFFSET_BITS 12 - -// -// There are 2 tables (kernel and shadow, used by Win32K) -// -#define NUMBER_SERVICE_TABLES 2 -#define NTOS_SERVICE_INDEX 0 -#define WIN32K_SERVICE_INDEX 1 - -// -// NB. From assembly code, the table number must be computed as an offset into -// the service descriptor table. -// -// Each entry into the table is 16 bytes long on 32-bit architectures, and -// 32 bytes long on 64-bit architectures. -// -// Thus, Table Number 1 is offset 16 (0x10) on x86, and offset 32 (0x20) on -// x64. -// -#ifdef _WIN64 -#define BITS_PER_ENTRY 5 // (1 << 5) = 32 bytes -#else -#define BITS_PER_ENTRY 4 // (1 << 4) = 16 bytes -#endif - -// -// We want the table number, but leave some extra bits to we can have the offset -// into the descriptor table. -// -#define SERVICE_TABLE_SHIFT (12 - BITS_PER_ENTRY) - -// -// Now the table number (as an offset) is corrupted with part of the table offset -// This mask will remove the extra unwanted bits, and give us the offset into the -// descriptor table proper. -// -#define SERVICE_TABLE_MASK (((1 << TABLE_NUMBER_BITS) - 1) << BITS_PER_ENTRY) - -// -// To get the table offset (ie: the service call number), just keep the 12 bits -// -#define SERVICE_NUMBER_MASK ((1 << TABLE_OFFSET_BITS) - 1) - -// -// We'll often need to check if this is a graphics call. This is done by comparing -// the table number offset with the known Win32K table number offset. -// This is usually index 1, so table number offset 0x10 (x86) or 0x20 (x64) -// -#define SERVICE_TABLE_TEST (WIN32K_SERVICE_INDEX << BITS_PER_ENTRY) - -#endif - #define KTS_SYSCALL_BIT (((KTRAP_STATE_BITS) { { .SystemCall = TRUE } }).Bits) #define KTS_PM_BIT (((KTRAP_STATE_BITS) { { .PreviousMode = TRUE } }).Bits) #define KTS_SEG_BIT (((KTRAP_STATE_BITS) { { .Segments = TRUE } }).Bits)