Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

738 lines
18 KiB

  1. /*++
  2. Copyright (c) 1989 Microsoft Corporation
  3. Module Name:
  4. kernldat.c
  5. Abstract:
  6. This module contains the declaration and allocation of kernel data
  7. structures.
  8. Author:
  9. David N. Cutler (davec) 12-Mar-1989
  10. --*/
  11. #include "ki.h"
  12. //
  13. // KiTimerTableListHead - This is a array of list heads that anchor the
  14. // individual timer lists.
  15. //
  16. DECLSPEC_CACHEALIGN LIST_ENTRY KiTimerTableListHead[TIMER_TABLE_SIZE];
  17. #if defined(_IA64_)
  18. //
  19. // On IA64 the HAL indicates how many ticks have elapsed. Unfortunately timers
  20. // could expire out of order if we advance time more than the number of
  21. // TimerTable entries in one operation.
  22. //
  23. ULONG KiMaxIntervalPerTimerInterrupt;
  24. #endif
  25. //
  26. //
  27. // Public kernel data declaration and allocation.
  28. //
  29. // KeActiveProcessors - This is the set of processors that active in the
  30. // system.
  31. //
  32. KAFFINITY KeActiveProcessors = 0;
  33. //
  34. // KeBootTime - This is the absolute time when the system was booted.
  35. //
  36. LARGE_INTEGER KeBootTime;
  37. //
  38. // KeBootTimeBias - The time for which KeBootTime has ever been biased
  39. //
  40. ULONGLONG KeBootTimeBias;
  41. //
  42. // KeInterruptTimeBias - The time for which InterrupTime has ever been biased
  43. //
  44. ULONGLONG KeInterruptTimeBias;
  45. //
  46. // KeBugCheckCallbackListHead - This is the list head for registered
  47. // bug check callback routines.
  48. //
  49. LIST_ENTRY KeBugCheckCallbackListHead;
  50. LIST_ENTRY KeBugCheckReasonCallbackListHead;
  51. //
  52. // KeBugCheckCallbackLock - This is the spin lock that guards the bug
  53. // check callback list.
  54. //
  55. KSPIN_LOCK KeBugCheckCallbackLock;
  56. //
  57. // KeGdiFlushUserBatch - This is the address of the GDI user batch flush
  58. // routine which is initialized when the win32k subsystem is loaded.
  59. //
  60. PGDI_BATCHFLUSH_ROUTINE KeGdiFlushUserBatch;
  61. //
  62. // KeLoaderBlock - This is a pointer to the loader parameter block which is
  63. // constructed by the OS Loader.
  64. //
  65. PLOADER_PARAMETER_BLOCK KeLoaderBlock = NULL;
  66. //
  67. // KeMinimumIncrement - This is the minimum time between clock interrupts
  68. // in 100ns units that is supported by the host HAL.
  69. //
  70. ULONG KeMinimumIncrement;
  71. //
  72. // KeThreadDpcEnable - This is the system wide enable for threaded DPCs that
  73. // is read from the registry.
  74. //
  75. ULONG KeThreadDpcEnable = FALSE; // TRUE;
  76. //
  77. // KeNumberProcessors - This is the number of processors in the configuration.
  78. // If is used by the ready thread and spin lock code to determine if a
  79. // faster algorithm can be used for the case of a single processor system.
  80. // The value of this variable is set when processors are initialized.
  81. //
  82. CCHAR KeNumberProcessors = 0;
  83. //
  84. // KeRegisteredProcessors - This is the maximum number of processors which
  85. // can utilized by the system.
  86. //
  87. #if !defined(NT_UP)
  88. #if DBG
  89. ULONG KeRegisteredProcessors = 4;
  90. ULONG KeLicensedProcessors;
  91. #else
  92. ULONG KeRegisteredProcessors = 2;
  93. ULONG KeLicensedProcessors;
  94. #endif
  95. #endif
  96. //
  97. // KeProcessorArchitecture - Architecture of all processors present in system.
  98. // See PROCESSOR_ARCHITECTURE_ defines in ntexapi.h
  99. //
  100. USHORT KeProcessorArchitecture = PROCESSOR_ARCHITECTURE_UNKNOWN;
  101. //
  102. // KeProcessorLevel - Architectural specific processor level of all processors
  103. // present in system.
  104. //
  105. USHORT KeProcessorLevel = 0;
  106. //
  107. // KeProcessorRevision - Architectural specific processor revision number that is
  108. // the least common denominator of all processors present in system.
  109. //
  110. USHORT KeProcessorRevision = 0;
  111. //
  112. // KeFeatureBits - Architectural specific processor features present
  113. // on all processors.
  114. //
  115. ULONG KeFeatureBits = 0;
  116. //
  117. // KeServiceDescriptorTable - This is a table of descriptors for system
  118. // service providers. Each entry in the table describes the base
  119. // address of the dispatch table and the number of services provided.
  120. //
  121. KSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTable[NUMBER_SERVICE_TABLES];
  122. KSERVICE_TABLE_DESCRIPTOR KeServiceDescriptorTableShadow[NUMBER_SERVICE_TABLES];
  123. //
  124. // KeThreadSwitchCounters - These counters record the number of times a
  125. // thread can be scheduled on the current processor, any processor,
  126. // or the last processor it ran on.
  127. //
  128. KTHREAD_SWITCH_COUNTERS KeThreadSwitchCounters;
  129. //
  130. // KeTimeIncrement - This is the nominal number of 100ns units that are to
  131. // be added to the system time at each interval timer interupt. This
  132. // value is set by the HAL and is used to compute the due time for
  133. // timer table entries.
  134. //
  135. ULONG KeTimeIncrement;
  136. //
  137. // KeTimeSynchronization - This variable controls whether time synchronization
  138. // is performed using the realtime clock (TRUE) or whether it is under the
  139. // control of a service (FALSE).
  140. //
  141. BOOLEAN KeTimeSynchronization = TRUE;
  142. //
  143. // KeUserApcDispatcher - This is the address of the user mode APC dispatch
  144. // code. This address is looked up in NTDLL.DLL during initialization
  145. // of the system.
  146. //
  147. PVOID KeUserApcDispatcher;
  148. //
  149. // KeUserCallbackDispatcher - This is the address of the user mode callback
  150. // dispatch code. This address is looked up in NTDLL.DLL during
  151. // initialization of the system.
  152. //
  153. PVOID KeUserCallbackDispatcher;
  154. //
  155. // KeUserExceptionDispatcher - This is the address of the user mode exception
  156. // dispatch code. This address is looked up in NTDLL.DLL during system
  157. // initialization.
  158. //
  159. PVOID KeUserExceptionDispatcher;
  160. //
  161. // KeRaiseUserExceptionDispatcher - This is the address of the raise user
  162. // mode exception dispatch code. This address is looked up in NTDLL.DLL
  163. // during system initialization.
  164. //
  165. PVOID KeRaiseUserExceptionDispatcher;
  166. //
  167. // KeLargestCacheLine - This variable contains the size in bytes of
  168. // the largest cache line discovered during system initialization.
  169. // It is used to provide the recommend alignment (and padding)
  170. // for data that may be used heavily by more than one processor.
  171. // The initial value was chosen as a reasonable value to use on
  172. // systems where the discovery process doesn't find a value.
  173. //
  174. ULONG KeLargestCacheLine = 64;
  175. //
  176. // Private kernel data declaration and allocation.
  177. //
  178. // KiBugCodeMessages - Address of where the BugCode messages can be found.
  179. //
  180. PMESSAGE_RESOURCE_DATA KiBugCodeMessages = NULL;
  181. //
  182. // KiDmaIoCoherency - This determines whether the host platform supports
  183. // coherent DMA I/O.
  184. //
  185. ULONG KiDmaIoCoherency;
  186. //
  187. // KiDPCTimeout - This is the DPC time out time in ticks on checked builds.
  188. //
  189. ULONG KiDPCTimeout = 110;
  190. //
  191. // KiMaximumSearchCount - this is the maximum number of timers entries that
  192. // have had to be examined to insert in the timer tree.
  193. //
  194. ULONG KiMaximumSearchCount = 0;
  195. //
  196. // KiDebugSwitchRoutine - This is the address of the kernel debuggers
  197. // processor switch routine. This is used on an MP system to
  198. // switch host processors while debugging.
  199. //
  200. PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
  201. //
  202. // KiGenericCallDpcMutex - This is the fast mutex that guards generic DPC calls.
  203. //
  204. FAST_MUTEX KiGenericCallDpcMutex;
  205. //
  206. // KiFreezeExecutionLock - This is the spin lock that guards the freezing
  207. // of execution.
  208. //
  209. extern KSPIN_LOCK KiFreezeExecutionLock;
  210. //
  211. // KiFreezeLockBackup - For debug builds only. Allows kernel debugger to
  212. // be entered even FreezeExecutionLock is jammed.
  213. //
  214. extern KSPIN_LOCK KiFreezeLockBackup;
  215. //
  216. // KiFreezeFlag - For debug builds only. Flags to track and signal non-
  217. // normal freezelock conditions.
  218. //
  219. ULONG KiFreezeFlag;
  220. //
  221. // KiSpinlockTimeout - This is the spin lock time out time in ticks on checked
  222. // builds.
  223. //
  224. ULONG KiSpinlockTimeout = 55;
  225. //
  226. // KiSuspenState - Flag to track suspend/resume state of processors.
  227. //
  228. volatile ULONG KiSuspendState;
  229. //
  230. // KiProcessorBlock - This is an array of pointers to processor control blocks.
  231. // The elements of the array are indexed by processor number. Each element
  232. // is a pointer to the processor control block for one of the processors
  233. // in the configuration. This array is used by various sections of code
  234. // that need to effect the execution of another processor.
  235. //
  236. PKPRCB KiProcessorBlock[MAXIMUM_PROCESSORS];
  237. //
  238. // KeNumberNodes - This is the number of ccNUMA nodes in the system. Logically
  239. // an SMP system is the same as a single node ccNUMA system.
  240. //
  241. UCHAR KeNumberNodes = 1;
  242. //
  243. // KeNodeBlock - This is an array of pointers to KNODE structures. A KNODE
  244. // structure describes the resources of a NODE in a ccNUMA system.
  245. //
  246. KNODE KiNode0;
  247. UCHAR KeProcessNodeSeed;
  248. #if defined(KE_MULTINODE)
  249. PKNODE KeNodeBlock[MAXIMUM_CCNUMA_NODES];
  250. #else
  251. PKNODE KeNodeBlock[1] = {&KiNode0};
  252. #endif
  253. //
  254. // KiSwapEvent - This is the event that is used to wake up the balance set
  255. // thread to inswap processes, outswap processes, and to inswap kernel
  256. // stacks.
  257. //
  258. KEVENT KiSwapEvent;
  259. //
  260. // KiSwappingThread - This is a pointer to the swap thread object.
  261. //
  262. PKTHREAD KiSwappingThread;
  263. //
  264. // KiProcessInSwapListHead - This is the list of processes that are waiting
  265. // to be inswapped.
  266. //
  267. SINGLE_LIST_ENTRY KiProcessInSwapListHead;
  268. //
  269. // KiProcessOutSwapListHead - This is the list of processes that are waiting
  270. // to be outswapped.
  271. //
  272. SINGLE_LIST_ENTRY KiProcessOutSwapListHead;
  273. //
  274. // KiStackInSwapListHead - This is the list of threads that are waiting
  275. // to get their stack inswapped before they can run. Threads are
  276. // inserted in this list in ready thread and removed by the balance
  277. // set thread.
  278. //
  279. SINGLE_LIST_ENTRY KiStackInSwapListHead;
  280. //
  281. // KiProfileSourceListHead - The list of profile sources that are currently
  282. // active.
  283. //
  284. LIST_ENTRY KiProfileSourceListHead;
  285. //
  286. // KiProfileAlignmentFixup - Indicates whether alignment fixup profiling
  287. // is active.
  288. //
  289. BOOLEAN KiProfileAlignmentFixup;
  290. //
  291. // KiProfileAlignmentFixupInterval - Indicates the current alignment fixup
  292. // profiling interval.
  293. //
  294. ULONG KiProfileAlignmentFixupInterval;
  295. //
  296. // KiProfileAlignmentFixupCount - Indicates the current alignment fixup
  297. // count.
  298. //
  299. ULONG KiProfileAlignmentFixupCount;
  300. //
  301. // KiProfileInterval - The profile interval in 100ns units.
  302. //
  303. #if !defined(_IA64_)
  304. ULONG KiProfileInterval = DEFAULT_PROFILE_INTERVAL;
  305. #endif // !_IA64_
  306. //
  307. // KiProfileListHead - This is the list head for the profile list.
  308. //
  309. LIST_ENTRY KiProfileListHead;
  310. //
  311. // KiProfileLock - This is the spin lock that guards the profile list.
  312. //
  313. extern KSPIN_LOCK KiProfileLock;
  314. //
  315. // KiTimerExpireDpc - This is the Deferred Procedure Call (DPC) object that
  316. // is used to process the timer queue when a timer has expired.
  317. //
  318. KDPC KiTimerExpireDpc;
  319. //
  320. // KiIpiCounts - This is the instrumentation counters for IPI requests. Each
  321. // processor has its own set. Intstrumentation build only.
  322. //
  323. #if NT_INST
  324. KIPI_COUNTS KiIpiCounts[MAXIMUM_PROCESSORS];
  325. #endif // NT_INST
  326. //
  327. // KxUnexpectedInterrupt - This is the interrupt object that is used to
  328. // populate the interrupt vector table for interrupt that are not
  329. // connected to any interrupt.
  330. //
  331. #if defined(_IA64_)
  332. KINTERRUPT KxUnexpectedInterrupt;
  333. #endif
  334. //
  335. // Performance data declaration and allocation.
  336. //
  337. // KiFlushSingleCallData - This is the call performance data for the kernel
  338. // flush single TB function.
  339. //
  340. #if defined(_COLLECT_FLUSH_SINGLE_CALLDATA_)
  341. CALL_PERFORMANCE_DATA KiFlushSingleCallData;
  342. #endif
  343. //
  344. // KiSetEventCallData - This is the call performance data for the kernel
  345. // set event function.
  346. //
  347. #if defined(_COLLECT_SET_EVENT_CALLDATA_)
  348. CALL_PERFORMANCE_DATA KiSetEventCallData;
  349. #endif
  350. //
  351. // KiWaitSingleCallData - This is the call performance data for the kernel
  352. // wait for single object function.
  353. //
  354. #if defined(_COLLECT_WAIT_SINGLE_CALLDATA_)
  355. CALL_PERFORMANCE_DATA KiWaitSingleCallData;
  356. #endif
  357. //
  358. // KiEnableTimerWatchdog - Flag to enable/disable timer latency watchdog.
  359. //
  360. #if (DBG)
  361. ULONG KiEnableTimerWatchdog = 1;
  362. #else
  363. ULONG KiEnableTimerWatchdog = 0;
  364. #endif
  365. #if defined(_APIC_TPR_)
  366. PUCHAR HalpIRQLToTPR;
  367. PUCHAR HalpVectorToIRQL;
  368. #endif
  369. //
  370. // Lock to prevent deadlocks if multiple processors use the IPI mechanism
  371. // with reverse stalls.
  372. //
  373. KSPIN_LOCK KiReverseStallIpiLock;
  374. //
  375. // The following data is read only data that is grouped together for
  376. // performance. The layout of this data is important and must not be
  377. // changed.
  378. //
  379. // KiFindFirstSetRight - This is an array that this used to lookup the right
  380. // most bit in a byte.
  381. //
  382. DECLSPEC_CACHEALIGN const CCHAR KiFindFirstSetRight[256] = {
  383. 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  384. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  385. 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  386. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  387. 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  388. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  389. 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  390. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  391. 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  392. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  393. 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  394. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  395. 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  396. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  397. 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0,
  398. 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
  399. //
  400. // KiFindFirstSetLeft - This is an array tha this used to lookup the left
  401. // most bit in a byte.
  402. //
  403. DECLSPEC_CACHEALIGN const CCHAR KiFindFirstSetLeft[256] = {
  404. 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3,
  405. 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
  406. 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  407. 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
  408. 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  409. 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  410. 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  411. 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
  412. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  413. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  414. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  415. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  416. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  417. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  418. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
  419. 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7};
  420. //
  421. // KiMask32Array - This is an array of 32-bit masks that have one bit set
  422. // in each mask.
  423. //
  424. DECLSPEC_CACHEALIGN const ULONG KiMask32Array[32] = {
  425. 0x00000001,
  426. 0x00000002,
  427. 0x00000004,
  428. 0x00000008,
  429. 0x00000010,
  430. 0x00000020,
  431. 0x00000040,
  432. 0x00000080,
  433. 0x00000100,
  434. 0x00000200,
  435. 0x00000400,
  436. 0x00000800,
  437. 0x00001000,
  438. 0x00002000,
  439. 0x00004000,
  440. 0x00008000,
  441. 0x00010000,
  442. 0x00020000,
  443. 0x00040000,
  444. 0x00080000,
  445. 0x00100000,
  446. 0x00200000,
  447. 0x00400000,
  448. 0x00800000,
  449. 0x01000000,
  450. 0x02000000,
  451. 0x04000000,
  452. 0x08000000,
  453. 0x10000000,
  454. 0x20000000,
  455. 0x40000000,
  456. 0x80000000};
  457. //
  458. // KiAffinityArray - This is an array of AFFINITY masks that have one bit
  459. // set in each mask.
  460. //
  461. #if defined(_WIN64)
  462. DECLSPEC_CACHEALIGN const ULONG64 KiAffinityArray[64] = {
  463. 0x0000000000000001UI64,
  464. 0x0000000000000002UI64,
  465. 0x0000000000000004UI64,
  466. 0x0000000000000008UI64,
  467. 0x0000000000000010UI64,
  468. 0x0000000000000020UI64,
  469. 0x0000000000000040UI64,
  470. 0x0000000000000080UI64,
  471. 0x0000000000000100UI64,
  472. 0x0000000000000200UI64,
  473. 0x0000000000000400UI64,
  474. 0x0000000000000800UI64,
  475. 0x0000000000001000UI64,
  476. 0x0000000000002000UI64,
  477. 0x0000000000004000UI64,
  478. 0x0000000000008000UI64,
  479. 0x0000000000010000UI64,
  480. 0x0000000000020000UI64,
  481. 0x0000000000040000UI64,
  482. 0x0000000000080000UI64,
  483. 0x0000000000100000UI64,
  484. 0x0000000000200000UI64,
  485. 0x0000000000400000UI64,
  486. 0x0000000000800000UI64,
  487. 0x0000000001000000UI64,
  488. 0x0000000002000000UI64,
  489. 0x0000000004000000UI64,
  490. 0x0000000008000000UI64,
  491. 0x0000000010000000UI64,
  492. 0x0000000020000000UI64,
  493. 0x0000000040000000UI64,
  494. 0x0000000080000000UI64,
  495. 0x0000000100000000UI64,
  496. 0x0000000200000000UI64,
  497. 0x0000000400000000UI64,
  498. 0x0000000800000000UI64,
  499. 0x0000001000000000UI64,
  500. 0x0000002000000000UI64,
  501. 0x0000004000000000UI64,
  502. 0x0000008000000000UI64,
  503. 0x0000010000000000UI64,
  504. 0x0000020000000000UI64,
  505. 0x0000040000000000UI64,
  506. 0x0000080000000000UI64,
  507. 0x0000100000000000UI64,
  508. 0x0000200000000000UI64,
  509. 0x0000400000000000UI64,
  510. 0x0000800000000000UI64,
  511. 0x0001000000000000UI64,
  512. 0x0002000000000000UI64,
  513. 0x0004000000000000UI64,
  514. 0x0008000000000000UI64,
  515. 0x0010000000000000UI64,
  516. 0x0020000000000000UI64,
  517. 0x0040000000000000UI64,
  518. 0x0080000000000000UI64,
  519. 0x0100000000000000UI64,
  520. 0x0200000000000000UI64,
  521. 0x0400000000000000UI64,
  522. 0x0800000000000000UI64,
  523. 0x1000000000000000UI64,
  524. 0x2000000000000000UI64,
  525. 0x4000000000000000UI64,
  526. 0x8000000000000000UI64};
  527. #endif
  528. //
  529. // KiPriorityMask - This is an array of masks that have the bit number of the
  530. // index and all higher bits set.
  531. //
  532. DECLSPEC_CACHEALIGN const ULONG KiPriorityMask[] = {
  533. 0xffffffff,
  534. 0xfffffffe,
  535. 0xfffffffc,
  536. 0xfffffff8,
  537. 0xfffffff0,
  538. 0xffffffe0,
  539. 0xffffffc0,
  540. 0xffffff80,
  541. 0xffffff00,
  542. 0xfffffe00,
  543. 0xfffffc00,
  544. 0xfffff800,
  545. 0xfffff000,
  546. 0xffffe000,
  547. 0xffffc000,
  548. 0xffff8000,
  549. 0xffff0000,
  550. 0xfffe0000,
  551. 0xfffc0000,
  552. 0xfff80000,
  553. 0xfff00000,
  554. 0xffe00000,
  555. 0xffc00000,
  556. 0xff800000,
  557. 0xff000000,
  558. 0xfe000000,
  559. 0xfc000000,
  560. 0xf8000000,
  561. 0xf0000000,
  562. 0xe0000000,
  563. 0xc0000000,
  564. 0x80000000};