Compare commits

167 Commits

Author SHA1 Message Date
e5cf62cbfb Add work queue structures
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 27s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (amd64, debug) (push) Successful in 46s
2026-07-07 14:59:26 +02:00
10aaac59e4 Allocate contiguous memory for local lookaside lists
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 1m6s
Builds / ExectOS (i686, release) (push) Successful in 1m4s
2026-07-07 14:42:49 +02:00
e3081c0cf5 Define core Object Manager structures
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 29s
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (i686, debug) (push) Successful in 48s
Builds / ExectOS (amd64, debug) (push) Successful in 51s
2026-07-05 21:07:22 +02:00
a0e707d35f Implement buffer return logic for general lookaside lists
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 40s
Builds / ExectOS (i686, release) (push) Successful in 38s
Builds / ExectOS (i686, debug) (push) Successful in 45s
Builds / ExectOS (amd64, debug) (push) Successful in 49s
2026-07-04 14:08:05 +02:00
042bf8520c Add per-processor lookaside list cache management functions
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 28s
Builds / ExectOS (i686, release) (push) Successful in 28s
Builds / ExectOS (amd64, release) (push) Successful in 44s
Builds / ExectOS (i686, debug) (push) Successful in 41s
2026-07-04 00:54:52 +02:00
30a6517109 Define non-paged lookaside list number enumeration
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 44s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 41s
2026-07-04 00:28:53 +02:00
cba4c6fffb Define pool allocation tag for security descriptor objects
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (amd64, release) (push) Successful in 28s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
Builds / ExectOS (i686, debug) (push) Successful in 42s
2026-07-04 00:12:32 +02:00
66f74be947 Add initial security subsystem
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 25s
Builds / ExectOS (amd64, release) (push) Failing after 36s
Builds / ExectOS (i686, release) (push) Failing after 35s
Builds / ExectOS (i686, debug) (push) Failing after 27s
2026-07-04 00:09:07 +02:00
0ccf20f0c9 Add SEH exception pointers structure and accessors
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
Builds / ExectOS (i686, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 30s
2026-07-03 23:40:15 +02:00
a2801bab2a Provide forward type references for newly introduced kernel structures
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 28s
Builds / ExectOS (i686, debug) (push) Successful in 28s
Builds / ExectOS (i686, release) (push) Successful in 40s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
2026-07-03 21:48:48 +02:00
9fcd81a507 Add I/O, power, and configuration manager type definitions
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 22s
Builds / ExectOS (amd64, release) (push) Failing after 35s
Builds / ExectOS (i686, release) (push) Failing after 24s
Builds / ExectOS (i686, debug) (push) Failing after 32s
2026-07-03 21:43:02 +02:00
46fb492032 Define core LPC types and structures
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-07-03 16:52:59 +02:00
b2e3a6afe0 Remove Count field from KAFFINITY_MAP
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-07-03 16:07:31 +02:00
2389bcbed1 Introduce device queue structures
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (i686, debug) (push) Successful in 42s
2026-07-03 15:58:44 +02:00
213713b6d2 Introduce core security and privilege structures
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 46s
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 42s
Builds / ExectOS (i686, debug) (push) Successful in 30s
2026-07-03 14:40:51 +02:00
c1bc4e4940 Add security information and access token types
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 42s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 39s
2026-07-03 10:46:56 +02:00
b76a240fd8 Define core security structures
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 50s
Builds / ExectOS (amd64, release) (push) Successful in 53s
2026-07-03 10:23:10 +02:00
d164495d48 Add basic paged pool setup
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (i686, debug) (push) Successful in 50s
Builds / ExectOS (amd64, debug) (push) Successful in 53s
2026-07-02 09:27:54 +02:00
2b7fc5b41d Fix swapped arguments in queued spinlock release
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (i686, release) (push) Successful in 37s
2026-07-01 18:45:03 +02:00
5cd52a4a12 Implement conversion of shared push lock to exclusive mode
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 30s
Builds / ExectOS (amd64, debug) (push) Successful in 52s
Builds / ExectOS (i686, debug) (push) Successful in 49s
2026-07-01 16:29:30 +02:00
c58305022f add push lock initialization code
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 27s
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
2026-06-30 23:33:25 +02:00
d8f4f6bfd0 Add memory manager probe functions
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (amd64, debug) (push) Successful in 43s
2026-06-30 22:28:39 +02:00
ef4f9ba74d Introduce very basic exception handling support
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 29s
2026-06-30 22:21:30 +02:00
f9cbe78f84 Implement architecture-specific user probe address retrieval
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 1m6s
Builds / ExectOS (i686, release) (push) Successful in 1m5s
2026-06-30 21:41:08 +02:00
91946ae88f Use non-paged pool as temporary fallback for paged pool allocations
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 42s
Builds / ExectOS (i686, debug) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 37s
2026-06-29 22:19:52 +02:00
84d35e3c97 Implement kernel push lock infrastructure
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (amd64, debug) (push) Successful in 46s
2026-06-29 18:25:40 +02:00
9ef8c569d5 Add event priority boost stub
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (i686, debug) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 52s
Builds / ExectOS (i686, release) (push) Successful in 48s
2026-06-29 16:04:28 +02:00
7d9c338e2a Provide atomic bit test and clear functionality
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-06-29 00:31:55 +02:00
2868db63ca Retrieve interrupt time via kernel shared data
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 38s
Builds / ExectOS (i686, debug) (push) Successful in 32s
2026-06-29 00:13:00 +02:00
9d5466594a Expand status code definitions
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 26s
Builds / ExectOS (i686, debug) (push) Failing after 24s
Builds / ExectOS (amd64, release) (push) Failing after 35s
Builds / ExectOS (i686, release) (push) Failing after 33s
2026-06-29 00:03:09 +02:00
119480382b Add dispatcher object routing for wait satisfaction and interval calculation
Some checks failed
Builds / ExectOS (i686, debug) (push) Failing after 30s
Builds / ExectOS (amd64, debug) (push) Failing after 32s
Builds / ExectOS (amd64, release) (push) Failing after 32s
Builds / ExectOS (i686, release) (push) Failing after 29s
2026-06-28 23:25:45 +02:00
3011df6f3c Update thread initialization code to use MutexListHead
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 25s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, debug) (push) Successful in 40s
Builds / ExectOS (i686, release) (push) Successful in 30s
2026-06-28 19:31:01 +02:00
6e4f9dd5b1 Rename MutantObject to MutexObject
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 25s
Builds / ExectOS (i686, debug) (push) Failing after 25s
Builds / ExectOS (amd64, debug) (push) Failing after 36s
Builds / ExectOS (i686, release) (push) Failing after 32s
2026-06-28 19:05:36 +02:00
42d6426318 Introduce KMUTEX structure and remove KGATE usage from push lock
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (amd64, debug) (push) Successful in 53s
Builds / ExectOS (i686, debug) (push) Successful in 51s
2026-06-28 18:53:53 +02:00
757acb732e Add push lock structures
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 36s
Builds / ExectOS (amd64, release) (push) Successful in 38s
Builds / ExectOS (i686, debug) (push) Successful in 40s
2026-06-27 01:36:11 +02:00
a54c4b48fb Add initial NLS support
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 40s
2026-06-26 23:52:58 +02:00
314012cad9 Add National Language Support table definitions
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-06-26 19:24:22 +02:00
b3ce1a8be8 Add KThread critical region management
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
Builds / ExectOS (i686, debug) (push) Successful in 42s
2026-06-26 10:45:38 +02:00
d6f925ebfd Update APC initialization comment
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 27s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 32s
2026-06-26 10:31:20 +02:00
53a8b57a96 Register APC interrupt handler
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (amd64, release) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 31s
2026-06-26 10:22:18 +02:00
77c1138f7d Add CheckApcDelivery to evaluate APC interrupt request or direct delivery
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 33s
Builds / ExectOS (amd64, debug) (push) Successful in 51s
Builds / ExectOS (i686, debug) (push) Successful in 49s
2026-06-26 09:54:38 +02:00
03f97d94ae Add executive resource synchronization functions
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 37s
Builds / ExectOS (i686, debug) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 38s
Builds / ExectOS (amd64, release) (push) Successful in 37s
2026-06-25 23:33:09 +02:00
8c6e06c973 Introduce RAII wrapper for in-stack queued spinlock acquisition
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 46s
Builds / ExectOS (i686, release) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 42s
Builds / ExectOS (i686, debug) (push) Successful in 36s
2026-06-25 21:32:16 +02:00
f2168e8c55 Update queued spinlock guard naming
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 41s
2026-06-25 18:54:44 +02:00
6184e9e73d Implement in-stack queued spinlock
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (i686, debug) (push) Successful in 42s
2026-06-25 16:22:37 +02:00
3d42ecf3d3 Fix incorrect namespace description
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 28s
Builds / ExectOS (i686, release) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 56s
Builds / ExectOS (amd64, debug) (push) Successful in 58s
2026-06-25 14:52:00 +02:00
c309bd769d Export Unicode string support functions
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 26s
Builds / ExectOS (i686, release) (push) Successful in 30s
Builds / ExectOS (i686, debug) (push) Successful in 42s
Builds / ExectOS (amd64, debug) (push) Successful in 43s
2026-06-24 09:48:39 +02:00
79c9b2abef Add STATUS_NAME_TOO_LONG definition
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 30s
Builds / ExectOS (i686, debug) (push) Failing after 28s
Builds / ExectOS (i686, release) (push) Failing after 34s
Builds / ExectOS (amd64, release) (push) Failing after 36s
2026-06-24 09:43:24 +02:00
d9a4217f8b Add missing MAXUSHORT definition
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 23s
Builds / ExectOS (i686, release) (push) Failing after 34s
Builds / ExectOS (i686, debug) (push) Failing after 27s
Builds / ExectOS (amd64, release) (push) Failing after 34s
2026-06-24 09:41:13 +02:00
7b27b09748 Add basic unicode string support
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 33s
Builds / ExectOS (i686, debug) (push) Failing after 30s
Builds / ExectOS (i686, release) (push) Failing after 57s
Builds / ExectOS (amd64, release) (push) Failing after 1m0s
2026-06-24 09:37:42 +02:00
195c4a34ad Refactor singly linked list into arch-specific modules
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (i686, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 34s
2026-06-23 21:39:04 +02:00
e266b30e24 Refactor SINGLE_LIST_HEADER into a union
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 23s
Builds / ExectOS (i686, debug) (push) Successful in 40s
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (amd64, release) (push) Failing after 42s
2026-06-23 19:52:46 +02:00
28daa1718c Move SINGLE_LIST_HEADER definition to architecture-specific headers
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 24s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Failing after 37s
Builds / ExectOS (i686, release) (push) Successful in 35s
2026-06-23 19:29:11 +02:00
b016ffd0d7 Add lookaside list pointers to processor control block
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 42s
Builds / ExectOS (amd64, release) (push) Successful in 44s
2026-06-23 19:13:00 +02:00
8479c95e82 Implement kernel lookaside lists
Some checks failed
Builds / ExectOS (i686, release) (push) Failing after 28s
Builds / ExectOS (i686, debug) (push) Failing after 29s
Builds / ExectOS (amd64, release) (push) Failing after 34s
Builds / ExectOS (amd64, debug) (push) Failing after 36s
2026-06-23 19:05:04 +02:00
f66e27cf83 Fix header dependency issues
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (i686, debug) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 40s
2026-06-23 16:38:38 +02:00
cf846d5abe Move base structural definitions to dedicated headers
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 28s
Builds / ExectOS (amd64, debug) (push) Failing after 35s
Builds / ExectOS (i686, release) (push) Failing after 27s
Builds / ExectOS (i686, debug) (push) Failing after 32s
2026-06-23 16:30:19 +02:00
08f26c6762 Implement arch-specific atomic singly-linked list functions
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 36s
2026-06-23 16:19:35 +02:00
19a1b11236 Delete broken RTL atomic functions
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 35s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (i686, debug) (push) Successful in 42s
2026-06-23 14:21:50 +02:00
d10b2cc2a1 Add atomic 128-bit compare-exchange function
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 29s
Builds / ExectOS (i686, debug) (push) Failing after 26s
Builds / ExectOS (amd64, debug) (push) Failing after 41s
Builds / ExectOS (i686, release) (push) Failing after 36s
2026-06-23 10:40:13 +02:00
5475d970c4 Add DOUBLE_ULONG_PTR structure definition
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (amd64, debug) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 37s
2026-06-22 14:12:49 +02:00
18d36b9f23 Replace inline pool tags with definitions
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (i686, debug) (push) Successful in 34s
2026-06-22 12:50:35 +02:00
fe02bb9214 Define pool allocation tags
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 37s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, release) (push) Successful in 40s
2026-06-22 12:44:41 +02:00
76b1807eee Reduce code duplication in rundown protection
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 38s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
2026-06-22 11:27:31 +02:00
e431bccd44 Extend rundown protection with counted acquire and release functions
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 55s
Builds / ExectOS (i686, release) (push) Successful in 51s
Builds / ExectOS (amd64, release) (push) Successful in 1m3s
Builds / ExectOS (i686, debug) (push) Successful in 1m0s
2026-06-22 11:22:09 +02:00
7526f90759 Implement pool quota accounting and stub raise functionality
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 39s
2026-06-21 01:45:37 +02:00
c45b81d345 Add atomic addition functions
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 29s
Builds / ExectOS (i686, release) (push) Successful in 30s
Builds / ExectOS (amd64, debug) (push) Successful in 51s
Builds / ExectOS (i686, debug) (push) Successful in 49s
2026-06-21 01:36:02 +02:00
95ec18a1de Add helper to get currently executing process
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 43s
2026-06-18 20:34:28 +02:00
9faf19b57e Enforce volatile semantics on inline assembly
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
2026-06-18 11:33:54 +02:00
bae43034a6 Implement thread preemption and context switching in dispatch interrupt handler
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 46s
Builds / ExectOS (amd64, release) (push) Successful in 48s
2026-06-18 11:18:36 +02:00
156ae3efab Refactor thread ready state transitions into Scheduler class
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 25s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 29s
2026-06-17 20:56:05 +02:00
854a8c8eef Document the backlinking
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 40s
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 38s
2026-06-17 20:40:23 +02:00
1fca2400a4 Add functions to transition threads to deferred ready or transition states
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-06-17 16:30:28 +02:00
ea1ad3c6b1 Implement deferred ready thread insertion
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (amd64, release) (push) Successful in 42s
2026-06-17 16:13:02 +02:00
cea860b008 Implement LIFO queue
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 39s
2026-06-17 15:42:08 +02:00
6560ca9b96 Refactor thread initialization to attach to process
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 27s
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 35s
2026-06-17 12:15:32 +02:00
ffcb2dbeda Correct initial StackCount value to reflect underlying type width
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 59s
Builds / ExectOS (i686, debug) (push) Successful in 56s
2026-06-17 11:12:11 +02:00
780bf92b40 Annotate POWER_PERFORMANCE_SCALE definition
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (i686, debug) (push) Successful in 29s
2026-06-16 12:59:18 +02:00
cc288f5417 Remove hardcoded throttle value
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 36s
2026-06-16 12:53:07 +02:00
55eb3047e3 Implement i686 RunThread with inline assembly
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 30s
Builds / ExectOS (i686, release) (push) Successful in 36s
Builds / ExectOS (amd64, release) (push) Successful in 40s
Builds / ExectOS (i686, debug) (push) Successful in 29s
2026-06-16 12:25:26 +02:00
8597e37650 Implement AMD64 RunThread with inline assembly
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 40s
Builds / ExectOS (i686, debug) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 32s
2026-06-16 12:00:56 +02:00
1c90218042 Move RunThread to architecture-specific implementations
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 38s
Builds / ExectOS (amd64, release) (push) Successful in 40s
2026-06-16 11:43:42 +02:00
f6f37494cd Fix stack alignment and shadow space for EntryPoint call
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, release) (push) Successful in 40s
Builds / ExectOS (i686, release) (push) Successful in 36s
2026-06-16 11:39:31 +02:00
d1aa3cf481 Trigger INT3 on unexpected system thread termination
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 1m13s
Builds / ExectOS (amd64, release) (push) Successful in 1m14s
2026-06-16 10:49:16 +02:00
208684c3b4 Update i686 thread context initialization to match AMD64
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (amd64, debug) (push) Successful in 46s
Builds / ExectOS (amd64, release) (push) Successful in 1m0s
Builds / ExectOS (i686, release) (push) Successful in 55s
2026-06-15 09:15:48 +02:00
89681897d7 Wire thread startup frame to return to user-mode switch or system thread exit handler
Some checks failed
Builds / ExectOS (amd64, debug) (push) Successful in 25s
Builds / ExectOS (i686, debug) (push) Failing after 28s
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Failing after 36s
2026-06-14 01:34:24 +02:00
e035666f7a Fix i686 thread context setup
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 40s
Builds / ExectOS (amd64, debug) (push) Successful in 43s
Builds / ExectOS (amd64, release) (push) Successful in 47s
Builds / ExectOS (i686, release) (push) Successful in 45s
2026-06-14 00:53:34 +02:00
df35bf8601 Add thread startup stub
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 27s
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 38s
Builds / ExectOS (i686, debug) (push) Successful in 30s
2026-06-14 00:50:23 +02:00
15523e7d71 Fix AMD64 thread context setup
Some checks failed
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 36s
Builds / ExectOS (amd64, release) (push) Failing after 41s
Builds / ExectOS (amd64, debug) (push) Failing after 44s
2026-06-14 00:44:02 +02:00
f79c9023d8 Initialize thread service table
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 29s
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (i686, release) (push) Successful in 28s
Builds / ExectOS (i686, debug) (push) Successful in 37s
2026-06-12 23:19:05 +02:00
97703c7932 Add stub for System Service Descriptor Table accessor routine
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 29s
Builds / ExectOS (i686, debug) (push) Successful in 28s
Builds / ExectOS (amd64, release) (push) Successful in 38s
Builds / ExectOS (i686, release) (push) Successful in 37s
2026-06-12 23:16:20 +02:00
2f5902119d Update thread initialization code
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 39s
Builds / ExectOS (amd64, debug) (push) Successful in 40s
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 33s
2026-06-12 20:52:23 +02:00
7a10135731 Replace jmp with call to maintain ABI stack alignment
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 25s
Builds / ExectOS (amd64, release) (push) Successful in 30s
Builds / ExectOS (i686, debug) (push) Successful in 29s
Builds / ExectOS (i686, release) (push) Successful in 33s
2026-06-12 15:58:42 +02:00
b0074637f8 Remove hardcoded shift in SIPI vector calculation
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 30s
Builds / ExectOS (amd64, debug) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 29s
Builds / ExectOS (i686, release) (push) Successful in 35s
2026-06-12 14:21:27 +02:00
1a062ca05f Trigger low memory allocation before PFN database initialization
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-06-12 13:21:22 +02:00
c702152cca Refactor real-mode memory allocation and identity mapping for AP trampoline
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 37s
2026-06-12 13:16:48 +02:00
81c799e590 Fix TrampolineCodeSize variable type
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 37s
Builds / ExectOS (amd64, release) (push) Successful in 39s
2026-06-12 12:59:16 +02:00
cf0d7f0a40 Update trampoline size output parameter to PULONG across bootloader and kernel
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 22s
Builds / ExectOS (amd64, debug) (push) Failing after 36s
Builds / ExectOS (i686, release) (push) Successful in 27s
Builds / ExectOS (i686, debug) (push) Successful in 36s
2026-06-12 12:54:53 +02:00
b0d2868f82 Update PTE mapping to allocate from PFN database
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 51s
Builds / ExectOS (i686, release) (push) Successful in 48s
2026-06-12 08:54:51 +02:00
32f0b747a1 Convert dispatcher context switch functions to naked assembly
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 38s
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (i686, debug) (push) Successful in 37s
Builds / ExectOS (i686, release) (push) Successful in 34s
2026-06-10 16:48:54 +02:00
c57aa98923 Free affinity maps on allocation failure and remove redundant idle process affinity loop
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 34s
2026-06-10 14:08:07 +02:00
429e4ef6f1 Add bounds checking to affinity map bit operations and introduce InitializeAffinityMap
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (amd64, debug) (push) Successful in 40s
Builds / ExectOS (i686, debug) (push) Successful in 39s
Builds / ExectOS (i686, release) (push) Successful in 33s
2026-06-10 12:51:05 +02:00
39928f2ef4 Add documentation for InitializeProcessorAffinity
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 39s
Builds / ExectOS (amd64, debug) (push) Successful in 41s
2026-06-10 12:11:03 +02:00
51ec7e3bab Fix build by initializing thread dispatcher header
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (i686, release) (push) Successful in 35s
2026-06-10 11:56:49 +02:00
f3ae70573c Initialize dispatcher header
Some checks failed
Builds / ExectOS (amd64, debug) (push) Successful in 36s
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Failing after 31s
Builds / ExectOS (i686, debug) (push) Failing after 33s
2026-06-10 11:46:26 +02:00
830f84ab26 Pass initial affinity map to InitializeProcess
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 38s
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 36s
2026-06-10 11:27:25 +02:00
5a9df7ca86 Add helper to set full system processor affinity mask
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 37s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 8m22s
Builds / ExectOS (amd64, debug) (push) Successful in 8m24s
2026-06-10 11:13:28 +02:00
4bcdcda3a0 Change ActiveProcessors to a pointer for dynamic allocation
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 25s
Builds / ExectOS (i686, debug) (push) Successful in 40s
Builds / ExectOS (amd64, release) (push) Successful in 41s
2026-06-10 10:31:24 +02:00
7a27912dac Dynamically allocate active processors affinity map
Some checks failed
Builds / ExectOS (i686, release) (push) Failing after 27s
Builds / ExectOS (amd64, release) (push) Failing after 31s
Builds / ExectOS (i686, debug) (push) Failing after 56s
Builds / ExectOS (amd64, debug) (push) Failing after 59s
2026-06-10 10:22:15 +02:00
cf4b91ac83 Simplify active processor bit setting
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 27s
Builds / ExectOS (amd64, debug) (push) Successful in 38s
Builds / ExectOS (i686, release) (push) Successful in 27s
Builds / ExectOS (i686, debug) (push) Successful in 38s
2026-06-09 23:27:24 +02:00
36c3d92399 Refactor idle thread initialization
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 35s
2026-06-09 23:24:40 +02:00
6a2a35c008 Refactor idle process initialization
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (i686, release) (push) Successful in 38s
Builds / ExectOS (amd64, release) (push) Successful in 40s
2026-06-09 23:17:03 +02:00
a9202f5b57 Refactor CalculateAffinityMapSize and add CreateAffinityMap
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 28s
Builds / ExectOS (amd64, release) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 39s
Builds / ExectOS (i686, debug) (push) Successful in 32s
2026-06-09 22:53:37 +02:00
4cbefe3a22 Implement affinity map bit manipulation and memory sizing helpers
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 30s
2026-06-09 20:17:47 +02:00
3841ceaf5b Refactor processor affinity logic
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 40s
Builds / ExectOS (amd64, release) (push) Successful in 43s
2026-06-09 19:33:20 +02:00
e2eb784eef Enter idle loop instead of halting system
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 30s
Builds / ExectOS (i686, debug) (push) Successful in 41s
2026-06-09 09:39:17 +02:00
6078a5ba29 Implement idle thread loop
Some checks failed
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Failing after 13m27s
Builds / ExectOS (amd64, debug) (push) Failing after 38m41s
Builds / ExectOS (i686, debug) (push) Failing after 42m56s
2026-06-09 08:36:39 +02:00
663f5cd048 Drop obsolete IPI exception dispatch path
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 47s
Builds / ExectOS (amd64, release) (push) Successful in 49s
2026-06-08 20:55:17 +02:00
5999906bf0 Switch CPU exception IDT entries to interrupt gates to mask interrupts on entry
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (i686, debug) (push) Successful in 51s
Builds / ExectOS (i686, release) (push) Successful in 49s
2026-06-08 20:46:51 +02:00
1e0c1490fb Remove redundant IDT gate initialization for vector 0xE1
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 49s
Builds / ExectOS (i686, release) (push) Successful in 47s
2026-06-08 20:41:02 +02:00
5b0eebdb43 Initialize system interrupt handlers
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 29s
Builds / ExectOS (i686, release) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 50s
Builds / ExectOS (i686, debug) (push) Successful in 49s
2026-06-08 20:15:18 +02:00
9e64939de4 Add XTCLINK linkage to KeStartXtSystem
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 28s
Builds / ExectOS (amd64, debug) (push) Successful in 49s
Builds / ExectOS (i686, debug) (push) Successful in 47s
Builds / ExectOS (i686, release) (push) Successful in 31s
2026-06-08 20:06:23 +02:00
b911670121 Freeze secondary processors during kernel panic
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 50s
Builds / ExectOS (amd64, debug) (push) Successful in 51s
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 36s
2026-06-08 15:02:55 +02:00
d175a817a5 Add IPI service routines for APC, DPC, and freeze request handling
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 43s
Builds / ExectOS (amd64, release) (push) Successful in 46s
2026-06-08 14:49:02 +02:00
b285bc7312 Implement multi-processor freeze and thaw execution for SMP crash state synchronization
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 22s
Builds / ExectOS (i686, release) (push) Failing after 24s
Builds / ExectOS (amd64, release) (push) Failing after 40s
Builds / ExectOS (i686, debug) (push) Failing after 38s
2026-06-08 14:38:17 +02:00
c8cd198c4e Fix Task Register restoration by clearing busy bit in TSS descriptor
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 47s
Builds / ExectOS (i686, debug) (push) Successful in 45s
2026-06-08 13:40:20 +02:00
95d45f5a0a Do not restore Task Register during AMD64 processor control state restoration
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (amd64, debug) (push) Successful in 52s
Builds / ExectOS (i686, debug) (push) Successful in 50s
2026-06-08 13:05:24 +02:00
766e4d9603 Register BSP in processor block array during initialization
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (i686, release) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 49s
Builds / ExectOS (amd64, debug) (push) Successful in 51s
2026-06-08 11:21:53 +02:00
a601fd0afa Mark BSP processor as started
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 51s
Builds / ExectOS (i686, debug) (push) Successful in 52s
2026-06-08 10:22:41 +02:00
cc23e459e0 Move SwitchProcessor to architecture-specific implementations
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, release) (push) Successful in 47s
Builds / ExectOS (i686, release) (push) Successful in 45s
2026-06-07 22:53:00 +02:00
d36b678ba1 Add kd/debug.cc to xtoskrnl source list
Some checks failed
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, release) (push) Failing after 25s
Builds / ExectOS (amd64, release) (push) Successful in 43s
Builds / ExectOS (i686, debug) (push) Failing after 41s
2026-06-07 22:41:31 +02:00
43265bcddb Bypass debug I/O locks during kernel panic or debugger session
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 29s
Builds / ExectOS (i686, release) (push) Failing after 26s
Builds / ExectOS (amd64, debug) (push) Failing after 41s
Builds / ExectOS (i686, debug) (push) Failing after 39s
2026-06-07 22:37:59 +02:00
47d4069d6f Add functions to save and restore processor context and control state
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 48s
Builds / ExectOS (i686, release) (push) Successful in 46s
2026-06-07 20:33:02 +02:00
904df63198 Remove duplicate context flag definitions
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 27s
Builds / ExectOS (amd64, debug) (push) Successful in 28s
Builds / ExectOS (amd64, release) (push) Successful in 47s
Builds / ExectOS (i686, debug) (push) Successful in 45s
2026-06-07 19:40:29 +02:00
1df971a71e Extend CONTEXT and PRCB structures with context flags and IPI state fields
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 33s
Builds / ExectOS (amd64, release) (push) Successful in 49s
Builds / ExectOS (i686, debug) (push) Successful in 47s
Builds / ExectOS (i686, release) (push) Successful in 31s
2026-06-07 18:47:48 +02:00
2a413d5717 Update processor state save calls
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (amd64, debug) (push) Successful in 50s
Builds / ExectOS (amd64, release) (push) Successful in 47s
Builds / ExectOS (i686, release) (push) Successful in 31s
2026-06-07 13:11:04 +02:00
9c2357dfe6 Expose installed CPU count and rename state save function
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 24s
Builds / ExectOS (i686, debug) (push) Failing after 24s
Builds / ExectOS (amd64, release) (push) Failing after 39s
Builds / ExectOS (i686, release) (push) Failing after 36s
2026-06-07 13:05:31 +02:00
f82562f450 Rename SwitchCpu to SwitchProcessor
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 35s
Builds / ExectOS (amd64, debug) (push) Successful in 50s
Builds / ExectOS (i686, release) (push) Successful in 34s
Builds / ExectOS (i686, debug) (push) Successful in 48s
2026-06-07 12:33:56 +02:00
a33b63842a Add IPI definitions and frozen states, change KAFFINITY_MAP to flexible array
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 30s
Builds / ExectOS (amd64, release) (push) Successful in 47s
Builds / ExectOS (i686, debug) (push) Successful in 46s
2026-06-07 12:13:55 +02:00
4256a312ae Implement kernel debugger entry point
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 29s
Builds / ExectOS (i686, debug) (push) Failing after 27s
Builds / ExectOS (amd64, release) (push) Failing after 44s
Builds / ExectOS (i686, release) (push) Failing after 41s
2026-06-07 02:04:27 +02:00
678a0f4f48 Add static member definitions for kernel debugger active flag and kernel panic state
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 45s
Builds / ExectOS (amd64, release) (push) Successful in 47s
2026-06-06 19:00:49 +02:00
7344c5ed4a Add function to query kernel debugger active state
Some checks failed
Builds / ExectOS (amd64, release) (push) Failing after 23s
Builds / ExectOS (amd64, debug) (push) Failing after 41s
Builds / ExectOS (i686, release) (push) Failing after 25s
Builds / ExectOS (i686, debug) (push) Failing after 39s
2026-06-06 18:57:32 +02:00
537fbc8af4 Track kernel panic state
Some checks failed
Builds / ExectOS (i686, release) (push) Failing after 31s
Builds / ExectOS (amd64, debug) (push) Failing after 41s
Builds / ExectOS (i686, debug) (push) Failing after 33s
Builds / ExectOS (amd64, release) (push) Failing after 39s
2026-06-06 18:52:05 +02:00
cf25af23d1 Add conditional acquisition parameter to RAII guard classes
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 34s
Builds / ExectOS (amd64, release) (push) Successful in 58s
Builds / ExectOS (i686, release) (push) Successful in 55s
2026-06-06 17:26:39 +02:00
f680830b53 Implement resource cleanup for failed allocations during idle thread setup
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 45s
Builds / ExectOS (amd64, release) (push) Successful in 47s
Builds / ExectOS (amd64, debug) (push) Successful in 47s
Builds / ExectOS (i686, release) (push) Successful in 45s
2026-06-04 14:36:43 +02:00
53a239958f Propagate allocation failures from idle process and thread setup
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (i686, release) (push) Successful in 44s
Builds / ExectOS (amd64, debug) (push) Successful in 48s
2026-06-04 14:30:01 +02:00
f13326ffaf Add PS subsystem overview to kernel documentation
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (amd64, release) (push) Successful in 50s
Builds / ExectOS (i686, release) (push) Successful in 48s
2026-06-04 13:18:33 +02:00
75e7760d04 Delegate idle process and thread setup to PS subsystem
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 35s
Builds / ExectOS (i686, debug) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 44s
Builds / ExectOS (amd64, release) (push) Successful in 46s
2026-06-04 13:14:21 +02:00
02d0f3f538 Introduce PS subsystem with IDLE process and thread creation
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 33s
Builds / ExectOS (i686, release) (push) Successful in 29s
Builds / ExectOS (amd64, debug) (push) Successful in 50s
Builds / ExectOS (i686, debug) (push) Successful in 48s
2026-06-04 13:09:09 +02:00
e2a78389f2 Fix incorrect namespace comment
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 46s
Builds / ExectOS (amd64, debug) (push) Successful in 44s
Builds / ExectOS (i686, debug) (push) Successful in 41s
Builds / ExectOS (i686, release) (push) Successful in 42s
2026-06-04 12:58:59 +02:00
81fdf1f77a Allocate executive thread structure for idle thread and assign PRCB pointers
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 31s
Builds / ExectOS (i686, debug) (push) Successful in 47s
Builds / ExectOS (amd64, debug) (push) Successful in 49s
Builds / ExectOS (i686, release) (push) Successful in 49s
2026-06-04 11:57:58 +02:00
631f58bf72 Update InitializeProcess doxygen 2026-06-04 11:57:56 +02:00
1d2d66fc83 Dedicated Idle process and thread initialization with dynamic affinity allocation 2026-06-04 11:57:49 +02:00
34aba8c7c7 Remove software interrupt 0x2F trap handler
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (amd64, release) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 41s
Builds / ExectOS (i686, debug) (push) Successful in 43s
2026-06-03 15:57:12 +02:00
5e764a0d17 Fix IDT entry for vector 0x2F to use interrupt entry point
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 1m13s
Builds / ExectOS (amd64, release) (push) Successful in 1m11s
Builds / ExectOS (i686, debug) (push) Successful in 45s
Builds / ExectOS (i686, release) (push) Successful in 42s
2026-06-03 15:43:11 +02:00
65e86db731 Migrate thread affinity from GROUP_AFFINITY to KAFFINITY_MAP
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 42s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (i686, debug) (push) Successful in 43s
Builds / ExectOS (i686, release) (push) Successful in 41s
2026-06-01 22:28:21 +02:00
615d253bb4 Update initial thread and process affinity assignment to use group-aware structures
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (amd64, release) (push) Successful in 43s
Builds / ExectOS (i686, debug) (push) Successful in 44s
Builds / ExectOS (i686, release) (push) Successful in 40s
2026-06-01 20:40:34 +02:00
2fcbc7bee8 Implement processor affinity search functions
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 33s
Builds / ExectOS (amd64, release) (push) Failing after 32s
Builds / ExectOS (i686, release) (push) Failing after 32s
Builds / ExectOS (i686, debug) (push) Failing after 34s
2026-06-01 01:10:40 +02:00
2c14da997d Convert process affinity assignment to KAFFINITY_MAP
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 34s
Builds / ExectOS (amd64, release) (push) Failing after 32s
Builds / ExectOS (i686, debug) (push) Failing after 34s
Builds / ExectOS (i686, release) (push) Failing after 32s
2026-06-01 01:06:13 +02:00
a7c2182d4a Extend processor affinity structures to support group affinity
Some checks failed
Builds / ExectOS (amd64, debug) (push) Failing after 33s
Builds / ExectOS (amd64, release) (push) Failing after 31s
Builds / ExectOS (i686, debug) (push) Failing after 31s
Builds / ExectOS (i686, release) (push) Failing after 30s
2026-06-01 01:03:18 +02:00
0aabc206a1 Add BSF and BSR instruction wrappers
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 55s
Builds / ExectOS (amd64, release) (push) Successful in 52s
Builds / ExectOS (i686, debug) (push) Successful in 42s
Builds / ExectOS (i686, release) (push) Successful in 40s
2026-06-01 00:36:52 +02:00
7d8b33390a Add runtime accounting and DPC throttling
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 34s
Builds / ExectOS (i686, release) (push) Successful in 32s
Builds / ExectOS (amd64, debug) (push) Successful in 1m2s
Builds / ExectOS (i686, debug) (push) Successful in 1m0s
2026-05-30 23:53:47 +02:00
5a5604c35d Register dispatch interrupt handler
All checks were successful
Builds / ExectOS (i686, debug) (push) Successful in 31s
Builds / ExectOS (amd64, debug) (push) Successful in 32s
Builds / ExectOS (i686, release) (push) Successful in 52s
Builds / ExectOS (amd64, release) (push) Successful in 54s
2026-05-28 23:50:02 +02:00
addf9addab Verify system timer expiration on every clock interrupt
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (i686, debug) (push) Successful in 42s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (i686, release) (push) Successful in 35s
2026-05-28 00:38:49 +02:00
f562aa0874 Implement timer table list and check for expired timers
All checks were successful
Builds / ExectOS (amd64, release) (push) Successful in 38s
Builds / ExectOS (i686, release) (push) Successful in 36s
Builds / ExectOS (amd64, debug) (push) Successful in 47s
Builds / ExectOS (i686, debug) (push) Successful in 46s
2026-05-28 00:36:25 +02:00
19a9dfe7c6 Add PrcbLock and runtime counters to KPROCESSOR_CONTROL_BLOCK
All checks were successful
Builds / ExectOS (i686, release) (push) Successful in 35s
Builds / ExectOS (amd64, release) (push) Successful in 37s
Builds / ExectOS (amd64, debug) (push) Successful in 45s
Builds / ExectOS (i686, debug) (push) Successful in 43s
2026-05-27 23:15:19 +02:00
46594f1fc3 Introduce KWAIT_REASON enumeration for thread wait reasons
All checks were successful
Builds / ExectOS (amd64, debug) (push) Successful in 26s
Builds / ExectOS (i686, debug) (push) Successful in 29s
Builds / ExectOS (amd64, release) (push) Successful in 36s
Builds / ExectOS (i686, release) (push) Successful in 38s
2026-05-27 20:23:18 +02:00
164 changed files with 11817 additions and 652 deletions

View File

@@ -30,7 +30,7 @@ namespace AR
public:
STATIC XTAPI VOID GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType,
OUT PVOID *TrampolineCode,
OUT PULONG_PTR TrampolineSize);
OUT PULONG TrampolineSize);
};
}

View File

@@ -116,7 +116,7 @@ Xtos::EnablePaging(IN PXTBL_PAGE_MAPPING PageMap)
EFI_STATUS Status;
EFI_PHYSICAL_ADDRESS TrampolineAddress;
PXT_TRAMPOLINE_ENTRY TrampolineEntry;
ULONG_PTR TrampolineSize;
ULONG TrampolineSize;
PVOID TrampolineCode;
/* Check the configured page map level to set the LA57 state accordingly */

View File

@@ -39,6 +39,9 @@
#define APIC_VECTOR_PERF 0xFE
#define APIC_VECTOR_NMI 0xFF
/* APIC SIPI vector shift */
#define APIC_VECTOR_SIPI_SHIFT 12
/* APIC destination formats */
#define APIC_DF_FLAT 0xFFFFFFFF
#define APIC_DF_CLUSTER 0x0FFFFFFF

View File

@@ -12,6 +12,7 @@
#include <xtbase.h>
#include <xtstruct.h>
#include <xttypes.h>
#include <extypes.h>
#include <potypes.h>
#include ARCH_HEADER(xtstruct.h)
#include ARCH_HEADER(artypes.h)
@@ -132,6 +133,18 @@
#define CONTEXT_SEGMENTS (CONTEXT_ARCHITECTURE | 0x04)
#define CONTEXT_FLOATING_POINT (CONTEXT_ARCHITECTURE | 0x08)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARCHITECTURE | 0x10)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_FLOATING_POINT)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS)
/* Clock control flags */
#define CLOCK_QUANTUM_DECREMENT 3
/* DPC definitions */
#define DPC_ADJUST_THRESHOLD 20
#define DPC_IDEAL_RATE 20
#define DPC_MAXIMUM_QUEUE_DEPTH 4
#define DPC_MINIMUM_RATE 3
/* Interrupt request levels definitions */
#define PASSIVE_LEVEL 0
@@ -232,7 +245,7 @@ typedef struct _CONTEXT
USHORT SegFs;
USHORT SegGs;
USHORT SegSs;
ULONG EFlags;
ULONG Flags;
ULONG64 Dr0;
ULONG64 Dr1;
ULONG64 Dr2;
@@ -298,6 +311,24 @@ typedef struct _KDESCRIPTOR
PVOID Base;
} KDESCRIPTOR, *PKDESCRIPTOR;
/* Device Queue structure definition */
typedef struct _KDEVICE_QUEUE
{
CSHORT Type;
CSHORT Size;
LIST_ENTRY DeviceListHead;
KSPIN_LOCK Lock;
union
{
BOOLEAN Busy;
struct
{
LONGLONG Reserved:8;
LONGLONG Hint:56;
};
};
} KDEVICE_QUEUE, *PKDEVICE_QUEUE;
/* Global Descriptor Table (GDT) entry union definition */
typedef struct _KGDTENTRY
{
@@ -560,13 +591,30 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
ULONG_PTR SetMember;
CPU_IDENTIFICATION CpuId;
KPROCESSOR_STATE ProcessorState;
KSPIN_LOCK PrcbLock;
KSPIN_LOCK_QUEUE LockQueue[MaximumLock];
LOOKASIDE_LIST LookasideList[16];
LOOKASIDE_LIST NonPagedLookasideList[POOL_LOOKASIDE_LISTS];
LOOKASIDE_LIST PagedLookasideList[POOL_LOOKASIDE_LISTS];
VOLATILE ULONG IpiFrozen;
VOLATILE LONG_PTR RequestSummary;
KDPC_DATA DpcData[2];
PVOID DpcStack;
LONG MaximumDpcQueueDepth;
ULONG DpcRequestRate;
BOOLEAN DpcInterruptRequested;
VOLATILE BOOLEAN DpcRoutineActive;
ULONG DpcLastCount;
VOLATILE ULONG_PTR TimerHand;
VOLATILE ULONG_PTR TimerRequest;
ULONG_PTR MultiThreadProcessorSet;
SINGLE_LIST_ENTRY DeferredReadyListHead;
ULONG InterruptCount;
ULONG KernelTime;
ULONG UserTime;
ULONG DpcTime;
ULONG InterruptTime;
ULONG AdjustDpcThreshold;
PROCESSOR_POWER_STATE PowerState;
ULONG ProfilingCountdown;
} KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK;

View File

@@ -110,6 +110,10 @@
/* Highest system address */
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFFFFFFFFFFULL
/* User probe address */
#define MM_USER_PROBE_ADDRESS 0x00007FFFFFFF0000ULL
#define MM_USER_PROBE_LA57_ADDRESS 0x00FFFFFFFFFF0000ULL
/* Trampoline code address */
#define MM_TRAMPOLINE_ADDRESS 0x80000

57
sdk/xtdk/amd64/rtltypes.h Normal file
View File

@@ -0,0 +1,57 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/amd64/rtltypes.h
* DESCRIPTION: Runtime library structures definitions for AMD64 architecture
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_AMD64_RTLTYPES_H
#define __XTDK_AMD64_RTLTYPES_H
#include <xtbase.h>
#include <rtltypes.h>
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Header for a sequenced single linked list union definition */
typedef union _SINGLE_LIST_HEADER
{
struct
{
ULONGLONG Alignment;
ULONGLONG Region;
};
struct
{
ULONGLONG Depth:16;
ULONGLONG Sequence:9;
ULONGLONG NextEntry:39;
ULONGLONG HeaderType:1;
ULONGLONG Init:1;
ULONGLONG Reserved:59;
ULONGLONG Region:3;
} Header8;
struct
{
ULONGLONG Depth:16;
ULONGLONG Sequence:48;
ULONGLONG HeaderType:1;
ULONGLONG Init:1;
ULONGLONG Reserved:2;
ULONGLONG NextEntry:60;
} Header16;
struct
{
ULONGLONG Depth:16;
ULONGLONG Sequence:48;
ULONGLONG HeaderType:1;
ULONGLONG Reserved:3;
ULONGLONG NextEntry:60;
} Header64;
} SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_AMD64_RTLTYPES_H */

View File

@@ -50,6 +50,7 @@ typedef struct _HARDWARE_PTE HARDWARE_PTE, *PHARDWARE_PTE;
typedef struct _HPET_REGISTERS HPET_REGISTERS, *PHPET_REGISTERS;
typedef struct _IOAPIC_DATA IOAPIC_DATA, *PIOAPIC_DATA;
typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR;
typedef struct _KDEVICE_QUEUE KDEVICE_QUEUE, *PKDEVICE_QUEUE;
typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
typedef struct _KGDTENTRY KGDTENTRY, *PKGDTENTRY;
typedef struct _KIDTENTRY KIDTENTRY, *PKIDTENTRY;
@@ -90,6 +91,7 @@ typedef union _PIC_I8259_ICW1 PIC_I8259_ICW1, *PPIC_I8259_ICW1;
typedef union _PIC_I8259_ICW2 PIC_I8259_ICW2, *PPIC_I8259_ICW2;
typedef union _PIC_I8259_ICW3 PIC_I8259_ICW3, *PPIC_I8259_ICW3;
typedef union _PIC_I8259_ICW4 PIC_I8259_ICW4, *PPIC_I8259_ICW4;
typedef union _SINGLE_LIST_HEADER SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_AMD64_XTSTRUCT_H */

View File

@@ -57,7 +57,7 @@ typedef EFI_STATUS (XTCDECL *PBL_ALLOCATE_PAGES)(IN EFI_ALLOCATE_TYPE Allocation
typedef EFI_STATUS (XTCDECL *PBL_ALLOCATE_POOL)(IN UINT_PTR Size, OUT PVOID *Memory);
typedef EFI_STATUS (XTCDECL *PBL_BOOTMENU_INITIALIZE_OS_LIST)(IN ULONG MaxNameLength, OUT PXTBL_BOOTMENU_ITEM *MenuEntries, OUT PULONG EntriesCount, OUT PULONG DefaultId);
typedef BOOLEAN (XTCDECL *PBL_BOOTUTILS_GET_BOOLEAN_PARAMETER)(IN PCWSTR Parameters, IN PCWSTR Needle);
typedef VOID (XTAPI *PBL_BOOTUTILS_GET_TRAMPOLINE_INFORMATION)(IN TRAMPOLINE_TYPE TrampolineType, OUT PVOID *TrampolineCode, OUT PULONG_PTR TrampolineSize);
typedef VOID (XTAPI *PBL_BOOTUTILS_GET_TRAMPOLINE_INFORMATION)(IN TRAMPOLINE_TYPE TrampolineType, OUT PVOID *TrampolineCode, OUT PULONG TrampolineSize);
typedef EFI_STATUS (XTCDECL *PBL_BUILD_PAGE_MAP)(IN PXTBL_PAGE_MAPPING PageMap, IN ULONG_PTR SelfMapAddress);
typedef EFI_STATUS (XTCDECL *PBL_COMMIT_PAGE_MAP)(IN PXTBL_PAGE_MAPPING PageMap);
typedef EFI_STATUS (XTCDECL *PBL_CLOSE_VOLUME)(IN PEFI_HANDLE VolumeHandle);

135
sdk/xtdk/cmtypes.h Normal file
View File

@@ -0,0 +1,135 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/cmtypes.h
* DESCRIPTION: Configuration Manager structures definitions
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_CMTYPES_H
#define __XTDK_CMTYPES_H
#include <xttypes.h>
#include <xtstruct.h>
#include <mmtypes.h>
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Partial resource descriptor */
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR
{
UCHAR Type;
UCHAR ShareDisposition;
USHORT Flags;
union
{
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length;
} Generic;
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length;
} Port;
struct
{
USHORT Level;
USHORT Group;
ULONG Vector;
PKAFFINITY_MAP Affinity;
} Interrupt;
struct
{
union
{
struct
{
USHORT Group;
USHORT MessageCount;
ULONG Vector;
PKAFFINITY_MAP Affinity;
} Raw;
struct
{
USHORT Level;
USHORT Group;
ULONG Vector;
PKAFFINITY_MAP Affinity;
} Translated;
};
} MessageInterrupt;
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length;
} Memory;
struct
{
ULONG Channel;
ULONG Port;
ULONG Reserved1;
} Dma;
struct
{
ULONG Data[3];
} DevicePrivate;
struct
{
ULONG Start;
ULONG Length;
ULONG Reserved;
} BusNumber;
struct
{
ULONG DataSize;
ULONG Reserved1;
ULONG Reserved2;
} DeviceSpecificData;
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length40;
} Memory40;
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length48;
} Memory48;
struct
{
PHYSICAL_ADDRESS Start;
ULONG Length64;
} Memory64;
} u;
} CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
/* Partial resource list */
typedef struct _CM_PARTIAL_RESOURCE_LIST
{
USHORT Version;
USHORT Revision;
ULONG Count;
CM_PARTIAL_RESOURCE_DESCRIPTOR PartialDescriptors[1];
} CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
/* Full resource descriptor */
typedef struct _CM_FULL_RESOURCE_DESCRIPTOR
{
INTERFACE_TYPE InterfaceType;
ULONG BusNumber;
CM_PARTIAL_RESOURCE_LIST PartialResourceList;
} CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
/* Full resource list */
typedef struct _CM_RESOURCE_LIST
{
ULONG Count;
CM_FULL_RESOURCE_DESCRIPTOR List[1];
} CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_CMTYPES_H */

View File

@@ -17,18 +17,75 @@
/* Rundown protection flags */
#define EX_RUNDOWN_ACTIVE 0x1
/* Number of lookaside lists */
#define POOL_LOOKASIDE_LISTS 32
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Executive rundown protection structure definition */
typedef struct _EX_RUNDOWN_REFERENCE
/* Kernel routine callbacks */
typedef XTSTATUS (XTAPI *PALLOCATE_FUNCTION)(IN MMPOOL_TYPE PoolType, IN SIZE_T Bytes, OUT PVOID *Memory, IN ULONG Tag);
typedef XTSTATUS (XTAPI *PALLOCATE_FUNCTION_EX)(IN MMPOOL_TYPE PoolType, IN SIZE_T Bytes, OUT PVOID *Memory, IN ULONG Tag, IN PLOOKASIDE_LIST_EX Lookaside);
typedef XTSTATUS (XTAPI *PFREE_FUNCTION)(IN PVOID Buffer);
typedef XTSTATUS (XTAPI *PFREE_FUNCTION_EX)(IN PVOID Buffer, IN OUT PLOOKASIDE_LIST_EX Lookaside);
typedef VOID (XTAPI *PWORKER_THREAD_ROUTINE)(IN PVOID Parameter);
/* Work queue types */
typedef enum _WORK_QUEUE_TYPE
{
CriticalWorkQueue,
DelayedWorkQueue,
HyperCriticalWorkQueue,
NormalWorkQueue,
BackgroundWorkQueue,
RealTimeWorkQueue,
SuperCriticalWorkQueue,
MaximumWorkQueue,
} WORK_QUEUE_TYPE, *PWORK_QUEUE_TYPE;
/* Owner entry structure definition */
typedef struct _OWNER_ENTRY
{
ULONG_PTR OwnerThread;
union
{
ULONG_PTR Count;
PVOID Ptr;
struct
{
ULONG IoPriorityBoosted:1;
ULONG OwnerReferenced:1;
ULONG OwnerCount:30;
};
ULONG TableSize;
};
} OWNER_ENTRY, *POWNER_ENTRY;
/* Exclusive resource structure definition */
typedef struct _ERESOURCE
{
LIST_ENTRY SystemResourcesList;
POWNER_ENTRY OwnerTable;
SHORT ActiveCount;
USHORT Flag;
VOLATILE PKSEMAPHORE SharedWaiters;
VOLATILE PKEVENT ExclusiveWaiters;
OWNER_ENTRY OwnerEntry;
ULONG ActiveEntries;
ULONG ContentionCount;
ULONG NumberOfSharedWaiters;
ULONG NumberOfExclusiveWaiters;
union
{
PVOID Address;
ULONG_PTR CreatorBackTraceIndex;
};
KSPIN_LOCK SpinLock;
} ERESOURCE, *PERESOURCE;
/* Executive rundown protection structure definition */
typedef union _EX_RUNDOWN_REFERENCE
{
ULONG_PTR Count;
PVOID Ptr;
} EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
/* Executive rundown wait block definition */
@@ -38,5 +95,82 @@ typedef struct _EX_RUNDOWN_WAIT_BLOCK
KEVENT WakeEvent;
} EX_RUNDOWN_WAIT_BLOCK, *PEX_RUNDOWN_WAIT_BLOCK;
/* Lookaside list structure definition */
typedef struct _GENERAL_LOOKASIDE
{
union
{
SINGLE_LIST_HEADER ListHead;
SINGLE_LIST_ENTRY SingleListHead;
};
USHORT Depth;
USHORT MaximumDepth;
ULONG TotalAllocates;
union
{
ULONG AllocateMisses;
ULONG AllocateHits;
};
ULONG TotalFrees;
union {
ULONG FreeMisses;
ULONG FreeHits;
};
MMPOOL_TYPE Type;
ULONG Tag;
ULONG Size;
union
{
PALLOCATE_FUNCTION_EX AllocateEx;
PALLOCATE_FUNCTION Allocate;
};
union
{
PFREE_FUNCTION_EX FreeEx;
PFREE_FUNCTION Free;
};
LIST_ENTRY ListEntry;
ULONG LastTotalAllocates;
union
{
ULONG LastAllocateMisses;
ULONG LastAllocateHits;
};
ULONG Future[2];
} GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
/* Lookaside list pointers structure definition */
typedef struct _LOOKASIDE_LIST
{
PGENERAL_LOOKASIDE Local;
PGENERAL_LOOKASIDE Global;
} LOOKASIDE_LIST, *PLOOKASIDE_LIST;
/* Lookaside list extended structure definition */
typedef struct _LOOKASIDE_LIST_EX
{
GENERAL_LOOKASIDE Global;
} LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
/* Non-paged lookaside list structure definition */
typedef struct _NONPAGED_LOOKASIDE_LIST
{
GENERAL_LOOKASIDE Global;
} NONPAGED_LOOKASIDE_LIST, *PNONPAGED_LOOKASIDE_LIST;
/* Paged lookaside list structure definition */
typedef struct _PAGED_LOOKASIDE_LIST
{
GENERAL_LOOKASIDE Global;
} PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
/* Work queue item structure definition */
typedef struct _WORK_QUEUE_ITEM
{
LIST_ENTRY List;
PWORKER_THREAD_ROUTINE WorkerRoutine;
VOLATILE PVOID Parameter;
} WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_EXTYPES_H */

View File

@@ -215,6 +215,30 @@ typedef ULONG (XTAPI *PHALP_QUERY_TIME_DELTA)(VOID);
typedef ULONG (XTAPI *PHALP_SET_CLOCK_RATE)(IN ULONG Increment);
typedef VOID (XTAPI *PHALP_STALL_EXECUTION)(IN ULONG MicroSeconds);
/* Interface types */
typedef enum _INTERFACE_TYPE
{
InterfaceTypeUndefined = -1,
Internal,
Isa,
Eisa,
MicroChannel,
TurboChannel,
PCIBus,
VMEBus,
NuBus,
PCMCIABus,
CBus,
MPIBus,
MPSABus,
ProcessorInternal,
InternalPowerBus,
PNPISABus,
PNPBus,
Vmcs,
MaximumInterfaceType
} INTERFACE_TYPE, *PINTERFACE_TYPE;
/* Generic Address structure */
typedef struct _GENERIC_ADDRESS
{

View File

@@ -45,6 +45,9 @@
#define APIC_VECTOR_PERF 0xFE
#define APIC_VECTOR_NMI 0xFF
/* APIC SIPI vector shift */
#define APIC_VECTOR_SIPI_SHIFT 12
/* APIC destination formats */
#define APIC_DF_FLAT 0xFFFFFFFF
#define APIC_DF_CLUSTER 0x0FFFFFFF

View File

@@ -12,6 +12,7 @@
#include <xtbase.h>
#include <xtstruct.h>
#include <xttypes.h>
#include <extypes.h>
#include <potypes.h>
#include ARCH_HEADER(xtstruct.h)
#include ARCH_HEADER(artypes.h)
@@ -154,6 +155,19 @@
#define CONTEXT_FLOATING_POINT (CONTEXT_ARCHITECTURE | 0x08)
#define CONTEXT_DEBUG_REGISTERS (CONTEXT_ARCHITECTURE | 0x10)
#define CONTEXT_EXTENDED_REGISTERS (CONTEXT_ARCHITECTURE | 0x20)
#define CONTEXT_FULL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS)
#define CONTEXT_ALL (CONTEXT_CONTROL | CONTEXT_INTEGER | CONTEXT_SEGMENTS | \
CONTEXT_FLOATING_POINT | CONTEXT_DEBUG_REGISTERS | \
CONTEXT_EXTENDED_REGISTERS)
/* Clock control flags */
#define CLOCK_QUANTUM_DECREMENT 3
/* DPC definitions */
#define DPC_ADJUST_THRESHOLD 20
#define DPC_IDEAL_RATE 20
#define DPC_MAXIMUM_QUEUE_DEPTH 4
#define DPC_MINIMUM_RATE 3
/* Interrupt request levels definitions */
#define PASSIVE_LEVEL 0
@@ -291,7 +305,7 @@ typedef struct _CONTEXT
ULONG Ebp;
ULONG Eip;
ULONG SegCs;
ULONG EFlags;
ULONG Flags;
ULONG Esp;
ULONG SegSs;
UCHAR ExtendedRegisters[MAXIMUM_SUPPORTED_EXTENSION];
@@ -305,6 +319,16 @@ typedef struct _KDESCRIPTOR
PVOID Base;
} KDESCRIPTOR, *PKDESCRIPTOR;
/* Device Queue structure definition */
typedef struct _KDEVICE_QUEUE
{
CSHORT Type;
CSHORT Size;
LIST_ENTRY DeviceListHead;
KSPIN_LOCK Lock;
BOOLEAN Busy;
} KDEVICE_QUEUE, *PKDEVICE_QUEUE;
/* Global Descriptor Table (GDT) entry structure definition */
typedef struct _KGDTENTRY
{
@@ -415,18 +439,19 @@ typedef struct _KEXCEPTION_FRAME
/* Thread start frame definition */
typedef struct _KSTART_FRAME
{
PKSYSTEM_ROUTINE SystemRoutine;
PKSTART_ROUTINE StartRoutine;
PVOID StartContext;
ULONG P1Home;
ULONG P2Home;
ULONG P3Home;
BOOLEAN UserMode;
ULONG Return;
} KSTART_FRAME, *PKSTART_FRAME;
/* Switch frame definition */
typedef struct _KSWITCH_FRAME
{
PVOID ExceptionList;
BOOLEAN ApcBypassDisabled;
PVOID Return;
KRUNLEVEL ApcBypass;
ULONG Return;
} KSWITCH_FRAME, *PKSWITCH_FRAME;
/* Trap frame definition */
@@ -519,13 +544,30 @@ typedef struct _KPROCESSOR_CONTROL_BLOCK
ULONG_PTR SetMember;
CPU_IDENTIFICATION CpuId;
KPROCESSOR_STATE ProcessorState;
KSPIN_LOCK PrcbLock;
KSPIN_LOCK_QUEUE LockQueue[MaximumLock];
LOOKASIDE_LIST LookasideList[16];
LOOKASIDE_LIST NonPagedLookasideList[POOL_LOOKASIDE_LISTS];
LOOKASIDE_LIST PagedLookasideList[POOL_LOOKASIDE_LISTS];
ULONG_PTR MultiThreadProcessorSet;
VOLATILE ULONG IpiFrozen;
VOLATILE LONG_PTR RequestSummary;
KDPC_DATA DpcData[2];
PVOID DpcStack;
LONG MaximumDpcQueueDepth;
ULONG DpcRequestRate;
BOOLEAN DpcInterruptRequested;
VOLATILE BOOLEAN DpcRoutineActive;
ULONG DpcLastCount;
VOLATILE ULONG_PTR TimerHand;
VOLATILE ULONG_PTR TimerRequest;
SINGLE_LIST_ENTRY DeferredReadyListHead;
ULONG InterruptCount;
ULONG KernelTime;
ULONG UserTime;
ULONG DpcTime;
ULONG InterruptTime;
ULONG AdjustDpcThreshold;
PROCESSOR_POWER_STATE PowerState;
ULONG ProfilingCountdown;
} KPROCESSOR_CONTROL_BLOCK, *PKPROCESSOR_CONTROL_BLOCK;

View File

@@ -108,6 +108,9 @@
/* Highest system address */
#define MM_HIGHEST_SYSTEM_ADDRESS 0xFFFFFFFF
/* User probe address */
#define MM_USER_PROBE_ADDRESS 0x7FFF0000
/* Trampoline code address */
#define MM_TRAMPOLINE_ADDRESS 0x80000

32
sdk/xtdk/i686/rtltypes.h Normal file
View File

@@ -0,0 +1,32 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/amd64/rtltypes.h
* DESCRIPTION: Runtime library structures definitions for i686 architecture
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_I686_RTLTYPES_H
#define __XTDK_I686_RTLTYPES_H
#include <xtbase.h>
#include <rtltypes.h>
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Header for a sequenced single linked list union definition */
typedef union _SINGLE_LIST_HEADER
{
ULONGLONG Alignment;
struct
{
SINGLE_LIST_ENTRY Next;
USHORT Depth;
USHORT Sequence;
};
} SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_I686_RTLTYPES_H */

View File

@@ -53,6 +53,7 @@ typedef struct _HARDWARE_MODERN_PTE HARDWARE_MODERN_PTE, *PHARDWARE_MODERN_PTE;
typedef struct _HPET_REGISTERS HPET_REGISTERS, *PHPET_REGISTERS;
typedef struct _IOAPIC_DATA IOAPIC_DATA, *PIOAPIC_DATA;
typedef struct _KDESCRIPTOR KDESCRIPTOR, *PKDESCRIPTOR;
typedef struct _KDEVICE_QUEUE KDEVICE_QUEUE, *PKDEVICE_QUEUE;
typedef struct _KEXCEPTION_FRAME KEXCEPTION_FRAME, *PKEXCEPTION_FRAME;
typedef struct _KGDTENTRY KGDTENTRY, *PKGDTENTRY;
typedef struct _KIDTENTRY KIDTENTRY, *PKIDTENTRY;
@@ -100,6 +101,7 @@ typedef union _PIC_I8259_ICW1 PIC_I8259_ICW1, *PPIC_I8259_ICW1;
typedef union _PIC_I8259_ICW2 PIC_I8259_ICW2, *PPIC_I8259_ICW2;
typedef union _PIC_I8259_ICW3 PIC_I8259_ICW3, *PPIC_I8259_ICW3;
typedef union _PIC_I8259_ICW4 PIC_I8259_ICW4, *PPIC_I8259_ICW4;
typedef union _SINGLE_LIST_HEADER SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_I686_XTSTRUCT_H */

File diff suppressed because it is too large Load Diff

View File

@@ -14,6 +14,7 @@
#include <xttarget.h>
#include <xttypes.h>
#include ARCH_HEADER(xtstruct.h)
#include ARCH_HEADER(rtltypes.h)
/* Exception types and handling mechanisms */
@@ -24,14 +25,49 @@
/* Maximum number of exception parameters */
#define EXCEPTION_MAXIMUM_PARAMETERS 15
/* IPI types */
#define IPI_APC 1
#define IPI_DPC 2
#define IPI_FREEZE 4
#define IPI_PACKET_READY 8
#define IPI_SYNC_REQUEST 16
/* IPI frozen states */
#define IPI_FROZEN_STATE_RUNNING 0x00
#define IPI_FROZEN_STATE_FROZEN 0x02
#define IPI_FROZEN_STATE_THAW 0x03
#define IPI_FROZEN_STATE_OWNER 0x04
#define IPI_FROZEN_STATE_FREEZE 0x05
#define IPI_FROZEN_STATE_ACTIVE 0x20
/* Lock queue states */
#define LOCK_QUEUE_WAIT 1
#define LOCK_QUEUE_OWNER 2
/* APC pending state length */
#define KAPC_STATE_LENGTH (FIELD_OFFSET(KAPC_STATE, UserApcPending) + sizeof(BOOLEAN))
/* Indices used to access the PushLock data structure */
#define KPUSHLOCK_INDEX ((ULONG_PTR)0x00)
#define KPUSHLOCK_LOCK ((ULONG_PTR)0x01)
#define KPUSHLOCK_WAITING ((ULONG_PTR)0x02)
#define KPUSHLOCK_WAKING ((ULONG_PTR)0x04)
#define KPUSHLOCK_MULTIPLE_SHARED ((ULONG_PTR)0x08)
#define KPUSHLOCK_INCREMENT_SHARED ((ULONG_PTR)0x10)
/* Mask for the pointer bits */
#define KPUSHLOCK_PTR_BITS ((ULONG_PTR)0x0F)
/* PushLock related definitions */
#define KPUSH_LOCK_TOTAL_BITS (sizeof(ULONG_PTR) * 8)
#define KPUSH_LOCK_SPIN_COUNT 1024
/* Kernel service descriptor tables count */
#define KSERVICE_TABLES_COUNT 4
/* Timer length */
/* Timer related definitions */
#define KTIMER_LENGTH (FIELD_OFFSET(KTIMER, Period) + sizeof(LONG))
#define KTIMER_TABLE_SIZE 512
/* Kernel builtin wait blocks */
#define EVENT_WAIT_BLOCK 2
@@ -43,6 +79,9 @@
#define READY_SKIP_QUANTUM 2
#define THREAD_QUANTUM 6
/* Dispatcher object type mask */
#define DISPATCHER_OBJECT_TYPE_MASK 0x7L
/* Thread priority levels */
#define THREAD_LOW_PRIORITY 0
#define THREAD_LOW_REALTIME_PRIORITY 16
@@ -79,6 +118,15 @@ typedef enum _KAPC_ENVIRONMENT
InsertApcEnvironment
} KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT;
/* Continue status enumeration list */
typedef enum _KCONTINUE_STATUS
{
ContinueError,
ContinueSuccess,
ContinueProcessorReselected,
ContinueNextProcessor
} KCONTINUE_STATUS, *PKCONTINUE_STATUS;
/* DPC importance enumeration list */
typedef enum _KDPC_IMPORTANCE
{
@@ -100,7 +148,7 @@ typedef enum _KOBJECTS
{
EventNotificationObject = 0,
EventSynchronizationObject = 1,
MutantObject = 2,
MutexObject = 2,
ProcessObject = 3,
QueueObject = 4,
SemaphoreObject = 5,
@@ -212,6 +260,55 @@ typedef enum _KTIMER_TYPE
SynchronizationTimer
} KTIMER_TYPE, *PKTIMER_TYPE;
/* Wait reason */
typedef enum _KWAIT_REASON
{
Executive,
FreePage,
PageIn,
PoolAllocation,
DelayExecution,
Suspended,
UserRequest,
WrExecutive,
WrFreePage,
WrPageIn,
WrPoolAllocation,
WrDelayExecution,
WrSuspended,
WrUserRequest,
WrEventPair,
WrQueue,
WrLpcReceive,
WrLpcReply,
WrVirtualMemory,
WrPageOut,
WrRendezvous,
WrKeyedEvent,
WrTerminated,
WrProcessInSwap,
WrCpuRateControl,
WrCalloutStack,
WrKernel,
WrResource,
WrPushLock,
WrMutex,
WrQuantumEnd,
WrDispatchInt,
WrPreempted,
WrYieldExecution,
WrFastMutex,
WrGuardedMutex,
WrRundown,
WrAlertByThreadId,
WrDeferredPreempt,
WrPhysicalFault,
WrIoRing,
WrMdlCache,
WrRcu,
MaximumWaitReason
} KWAIT_REASON, *PKWAIT_REASON;
/* APC Types */
typedef enum _MODE
{
@@ -252,6 +349,27 @@ typedef VOID (XTAPI *PKRUNDOWN_ROUTINE)(IN PKAPC Apc);
typedef VOID (XTCDECL *PKSTART_ROUTINE)(IN PVOID StartContext);
typedef VOID (XTCDECL *PKSYSTEM_ROUTINE)(IN PKSTART_ROUTINE StartRoutine, IN PVOID StartContext);
/* Dispatcher object header structure definition */
typedef struct _DISPATCHER_HEADER
{
union
{
struct
{
UCHAR Type;
UCHAR Absolute;
UCHAR Size;
union {
UCHAR Inserted;
BOOLEAN DebugActive;
};
};
VOLATILE LONG Lock;
};
LONG SignalState;
LIST_ENTRY WaitListHead;
} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
/* Exception record structure definition */
typedef struct _EXCEPTION_RECORD
{
@@ -263,6 +381,14 @@ typedef struct _EXCEPTION_RECORD
ULONG_PTR ExceptionInformation[EXCEPTION_MAXIMUM_PARAMETERS];
} EXCEPTION_RECORD, *PEXCEPTION_RECORD;
/* Extended affinity structure definition */
typedef struct _KAFFINITY_MAP
{
USHORT Size;
ULONG Reserved;
KAFFINITY Bitmap[];
} KAFFINITY_MAP, *PKAFFINITY_MAP;
/* Asynchronous Procedure Call (APC) object structure definition */
typedef struct _KAPC
{
@@ -331,11 +457,49 @@ typedef struct _KAPC_STATE
BOOLEAN UserApcPending;
} KAPC_STATE, *PKAPC_STATE;
/* Event gate structure definition */
typedef struct _KGATE
/* Device queue entry structure definition */
typedef struct _KDEVICE_QUEUE_ENTRY
{
LIST_ENTRY DeviceListEntry;
ULONG SortKey;
BOOLEAN Inserted;
} KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
/* Mutex object structure definition */
typedef struct _KMUTEX
{
DISPATCHER_HEADER Header;
} KGATE, *PKGATE;
LIST_ENTRY MutexListEntry;
PKTHREAD OwnerThread;
BOOLEAN Abandoned;
UCHAR ApcDisable;
} KMUTEX, *PKMUTEX;
/* Push Lock structure definition */
typedef union _KPUSH_LOCK
{
struct
{
ULONG_PTR Locked:1;
ULONG_PTR Waiting:1;
ULONG_PTR Waking:1;
ULONG_PTR MultipleShared:1;
ULONG_PTR Shared:(KPUSH_LOCK_TOTAL_BITS - 4);
};
ULONG_PTR Value;
PVOID Ptr;
} KPUSH_LOCK, *PKPUSH_LOCK;
/* Push lock wait block structure definition */
typedef struct _KPUSH_LOCK_WAIT_BLOCK
{
KEVENT WakeEvent;
PKPUSH_LOCK_WAIT_BLOCK Next;
PKPUSH_LOCK_WAIT_BLOCK Last;
PKPUSH_LOCK_WAIT_BLOCK Previous;
LONG ShareCount;
LONG Flags;
} KPUSH_LOCK_WAIT_BLOCK, *PKPUSH_LOCK_WAIT_BLOCK;
/* Semaphore object structure definition */
typedef struct _KSEMAPHORE
@@ -419,7 +583,8 @@ typedef struct _KPROCESS
ULONG_PTR DirectoryTable[2];
USHORT IopmOffset;
UCHAR Iopl;
VOLATILE KAFFINITY ActiveProcessors;
PKAFFINITY_MAP Affinity;
PKAFFINITY_MAP ActiveProcessors;
ULONG KernelTime;
ULONG UserTime;
LIST_ENTRY ReadyListHead;
@@ -427,7 +592,6 @@ typedef struct _KPROCESS
PVOID VdmTrapHandler;
LIST_ENTRY ThreadListHead;
KSPIN_LOCK ProcessLock;
KAFFINITY Affinity;
union
{
struct
@@ -476,13 +640,12 @@ typedef struct _KSHARED_DATA
typedef struct _KTHREAD
{
DISPATCHER_HEADER Header;
LIST_ENTRY MutantListHead;
LIST_ENTRY MutexListHead;
PVOID InitialStack;
PVOID KernelStack;
PVOID StackBase;
PVOID StackLimit;
KSPIN_LOCK ThreadLock;
ULONG ContextSwitches;
VOLATILE UCHAR State;
UCHAR NpxState;
@@ -507,7 +670,7 @@ typedef struct _KTHREAD
PKWAIT_BLOCK WaitBlockList;
BOOLEAN Alertable;
BOOLEAN WaitNext;
UCHAR WaitReason;
KWAIT_REASON WaitReason;
SCHAR Priority;
UCHAR StackSwap;
VOLATILE UCHAR SwapBusy;
@@ -545,9 +708,9 @@ typedef struct _KTHREAD
CHAR PreviousMode;
UCHAR ResourceIndex;
UCHAR DisableBoost;
KAFFINITY UserAffinity;
PKAFFINITY_MAP UserAffinity;
PKPROCESS Process;
KAFFINITY Affinity;
PKAFFINITY_MAP Affinity;
PVOID ServiceTable;
PKAPC_STATE ApcStatePointer[2];
KAPC_STATE SavedApcState;
@@ -563,12 +726,12 @@ typedef struct _KTHREAD
LIST_ENTRY ThreadListEntry;
UCHAR LargeStack;
UCHAR PowerState;
UCHAR NpxIrql;
UCHAR NpxRunLevel;
UCHAR Spare5;
BOOLEAN AutoAlignment;
UCHAR Iopl;
CCHAR FreezeCount;
CCHAR SuspendCount;
CHAR FreezeCount;
CHAR SuspendCount;
UCHAR Spare0[1];
UCHAR UserIdealProcessor;
UCHAR Spare2[3];

62
sdk/xtdk/lpctypes.h Normal file
View File

@@ -0,0 +1,62 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/lpctypes.h
* DESCRIPTION: Local Procedure Call (LPC) structures and definitions
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_LPCTYPES_H
#define __XTDK_LPCTYPES_H
#include <xttypes.h>
#include <xtstruct.h>
#include <iotypes.h>
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* LPC non-paged port queue structure definition */
typedef struct _LPCP_NONPAGED_PORT_QUEUE
{
KSEMAPHORE Semaphore;
struct _LPCP_PORT_OBJECT *BackPointer;
} LPCP_NONPAGED_PORT_QUEUE, *PLPCP_NONPAGED_PORT_QUEUE;
/* LPC port queue structure definition */
typedef struct _LPCP_PORT_QUEUE
{
PLPCP_NONPAGED_PORT_QUEUE NonPagedPortQueue;
PKSEMAPHORE Semaphore;
LIST_ENTRY ReceiveHead;
} LPCP_PORT_QUEUE, *PLPCP_PORT_QUEUE;
/* LPC port object structure definition */
typedef struct _LPCP_PORT_OBJECT
{
struct _LPCP_PORT_OBJECT *ConnectionPort;
struct _LPCP_PORT_OBJECT *ConnectedPort;
LPCP_PORT_QUEUE MsgQueue;
CLIENT_ID Creator;
PVOID ClientSectionBase;
PVOID ServerSectionBase;
PVOID PortContext;
PETHREAD ClientThread;
SECURITY_QUALITY_OF_SERVICE SecurityQos;
SECURITY_CLIENT_CONTEXT StaticSecurity;
LIST_ENTRY LpcReplyChainHead;
LIST_ENTRY LpcDataInfoChainHead;
union
{
PEPROCESS ServerProcess;
PEPROCESS MappingProcess;
};
ULONG MaxMessageLength;
ULONG MaxConnectionInfoLength;
ULONG Flags;
KEVENT WaitEvent;
} LPCP_PORT_OBJECT, *PLPCP_PORT_OBJECT;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_LPCTYPES_H */

View File

@@ -55,6 +55,9 @@
/* Protection field shift */
#define MM_PROTECT_FIELD_SHIFT 5
/* Process Quota Adjustment Thresholds */
#define MMNONPAGED_QUOTA_INCREASE (64*1024)
#define MMPAGED_QUOTA_INCREASE (512*1024)
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
@@ -107,14 +110,31 @@ typedef enum _MMSYSTEM_PTE_POOL_TYPE
MaximumPtePoolTypes
} MMSYSTEM_PTE_POOL_TYPE, *PMMSYSTEM_PTE_POOL_TYPE;
/* Page map routines structure definition */
typedef CONST STRUCT _CMMPAGEMAP_ROUTINES
/* Non-paged lookaside list indices */
typedef enum _NONPAGED_LOOKASIDE_NUMBER
{
VOID (XTAPI *ClearPte)(PHARDWARE_PTE PtePointer);
BOOLEAN (XTAPI *PteValid)(PHARDWARE_PTE PtePointer);
VOID (XTAPI *SetPteCaching)(PHARDWARE_PTE PtePointer, BOOLEAN CacheDisable, BOOLEAN WriteThrough);
VOID (XTAPI *SetPte)(PHARDWARE_PTE PtePointer, PFN_NUMBER PageFrameNumber, BOOLEAN Writable);
} CMMPAGEMAP_ROUTINES, *PCMMPAGEMAP_ROUTINES;
LookasideSmallIrpList,
LookasideLargeIrpList,
LookasideMdlList,
LookasideCreateInfoList,
LookasideNameBufferList,
LookasideTwilightList,
LookasideCompletionList,
LookasideMaximumList
} NONPAGED_LOOKASIDE_NUMBER, *PNONPAGED_LOOKASIDE_NUMBER;
/* Memory Descriptor List structure definition */
typedef struct _MDL
{
PMDL Next;
CSHORT Size;
CSHORT MdlFlags;
PEPROCESS Process;
PVOID MappedSystemVa;
PVOID StartVa;
ULONG ByteCount;
ULONG ByteOffset;
} MDL, *PMDL;
/* Color tables structure definition */
typedef struct _MMCOLOR_TABLES

357
sdk/xtdk/obtypes.h Normal file
View File

@@ -0,0 +1,357 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/obtypes.h
* DESCRIPTION: Object Manager structures definitions
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_OBTYPES_H
#define __XTDK_OBTYPES_H
#include <xtbase.h>
#include <xttypes.h>
#include <xtstruct.h>
#include <iotypes.h>
/* Object header information flag masks */
#define OBJECT_FLAG_NEW_OBJECT 0x01
#define OBJECT_FLAG_KERNEL_MODE 0x02
#define OBJECT_FLAG_CREATOR_INFO 0x04
#define OBJECT_FLAG_EXCLUSIVE 0x08
#define OBJECT_FLAG_PERMANENT 0x10
#define OBJECT_FLAG_SECURITY_QUOTA 0x20
#define OBJECT_FLAG_SINGLE_PROCESS 0x40
#define OBJECT_FLAG_DEFER_DELETE 0x80
/* Object lock states */
#define OBJECT_LOCK_STATE_WAIT_EXCLUSIVE 0xAAAA1234
#define OBJECT_LOCK_WAITSHARED_SIGNATURE 0xBBBB1234
#define OBJECT_LOCK_STATE_OWNED_EXCLUSIVE 0xCCCC1234
#define OBJECT_LOCK_OWNEDSHARED_SIGNATURE 0xDDDD1234
#define OBJECT_LOCK_STATE_RELEASED_SIGNATURE 0xEEEE1234
#define OBJECT_LOCK_STATE_INITIALIZED 0xFFFF1234
/* Object name attribute flags */
#define OBJECT_INHERIT 0x00000002L
#define OBJECT_PERMANENT 0x00000010L
#define OBJECT_EXCLUSIVE 0x00000020L
#define OBJECT_CASE_INSENSITIVE 0x00000040L
#define OBJECT_OPENIF 0x00000080L
#define OBJECT_OPENLINK 0x00000100L
#define OBJECT_KERNEL_HANDLE 0x00000200L
#define OBJECT_FORCE_ACCESS_CHECK 0x00000400L
#define OBJECT_VALID_ATTRIBUTES 0x000007F2L
/* Maximum number of defined object types */
#define OBJECT_MAX_DEFINED_OBJECT_TYPES 48
/* Object name buffer size */
#define OBJECT_NAME_BUFFER_SIZE 248
/* Object name lock flags */
#define OBJECT_NAME_LOCKED ((LONG)0x80000000)
#define OBJECT_REMOVE_QUEUE_LOCKED (PVOID)1
/* Object name path separator */
#define OBJECT_NAME_PATH_SEPARATOR ((WCHAR)L'\\')
/* Number of hash buckets */
#define OBJECT_NUMBER_HASH_BUCKETS 37
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Object Manager routine callbacks */
typedef VOID (XTAPI *POB_DUMP_METHOD)(IN PVOID Object, IN POBJECT_DUMP_CONTROL Control);
typedef XTSTATUS (XTAPI *POB_OPEN_METHOD)(IN OBJECT_OPEN_REASON Reason, IN PEPROCESS Process, IN PVOID ObjectBody, IN ACCESS_MASK GrantedAccess, IN ULONG HandleCount);
typedef VOID (XTAPI *POB_CLOSE_METHOD)(IN PEPROCESS Process, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG ProcessHandleCount, IN ULONG SystemHandleCount);
typedef VOID (XTAPI *POB_DELETE_METHOD)(IN PVOID Object);
typedef XTSTATUS (XTAPI *POB_PARSE_METHOD)(IN PVOID ParseObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE ProcessorMode, IN ULONG Attributes, IN OUT PUNICODE_STRING CompleteName, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos, OUT PVOID *Object);
typedef XTSTATUS (XTAPI *POB_SECURITY_METHOD)(IN PVOID Object, IN SECURITY_OPERATION_CODE OperationType, IN PSECURITY_INFORMATION SecurityInformation, IN PSECURITY_DESCRIPTOR SecurityDescriptor, IN OUT PULONG CapturedLength, IN OUT PSECURITY_DESCRIPTOR *ObjectSecurityDescriptor, IN MMPOOL_TYPE PoolType, IN PGENERIC_MAPPING GenericMapping);
typedef XTSTATUS (XTAPI *POB_QUERYNAME_METHOD)(IN PVOID Object, IN BOOLEAN HasObjectName, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength, IN KPROCESSOR_MODE ProcessorMode);
typedef BOOLEAN (XTAPI *POB_OKAYTOCLOSE_METHOD)(IN PEPROCESS Process, IN PVOID Object, IN HANDLE Handle, IN KPROCESSOR_MODE ProcessorMode);
/* Bitmasks used to identify the presence of optional object headers in memory */
typedef enum _OBJECT_HEADER_INFO
{
ObjectHeaderInfoNone = 0,
ObjectHeaderInfoCreatorInfo = 0x01,
ObjectHeaderInfoNameInfo = 0x02,
ObjectHeaderInfoHandleInfo = 0x04,
ObjectHeaderInfoQuotaInfo = 0x08,
ObjectHeaderInfoProcessInfo = 0x10
} OBJECT_HEADER_INFO, *POBJECT_HEADER_INFO;
/* List of information classes used when querying or setting object attributes */
typedef enum _OBJECT_INFORMATION_CLASS
{
ObjectBasicInfo,
ObjectNameInfo,
ObjectTypeInfo,
ObjectAllInfo,
ObjectHandleFlagInfo
} OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
/* List of valid reasons for creating, opening, or duplicating an object handle */
typedef enum _OBJECT_OPEN_REASON
{
ObCreateHandle,
ObOpenHandle,
ObDuplicateHandle,
ObInheritHandle,
ObMaxOpenReason
} OBJECT_OPEN_REASON, *POBJECT_OPEN_REASON;
/* Mapping of device names to object manager devices */
typedef struct _DEVICE_MAP
{
POBJECT_DIRECTORY DevicesDirectory;
POBJECT_DIRECTORY GlobalDevicesDirectory;
ULONG ReferenceCount;
ULONG DriveMap;
UCHAR DriveType[32];
} DEVICE_MAP, *PDEVICE_MAP;
/* Parameters provided by a caller when creating or opening an object */
typedef struct _OBJECT_ATTRIBUTES
{
ULONG Length;
HANDLE RootDirectory;
PUNICODE_STRING ObjectName;
ULONG Attributes;
PSECURITY_DESCRIPTOR SecurityDescriptor;
PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
/* Internal data stored during object creation */
typedef struct _OBJECT_CREATE_INFORMATION
{
ULONG Attributes;
HANDLE RootDirectory;
PVOID ParseContext;
KPROCESSOR_MODE ProbeMode;
ULONG PagedPoolCharge;
ULONG NonPagedPoolCharge;
ULONG SecurityDescriptorCharge;
PSECURITY_DESCRIPTOR SecurityDescriptor;
PSECURITY_QUALITY_OF_SERVICE SecurityQos;
SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
} OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
/* Optional header storing information about the object's creator */
typedef struct _OBJECT_CREATOR_INFO
{
LIST_ENTRY TypeList;
HANDLE CreatorProcessId;
} OBJECT_CREATOR_INFO, *POBJECT_CREATOR_INFO;
/* Directory object used to structure the namespace hierarchy */
typedef struct _OBJECT_DIRECTORY
{
POBJECT_DIRECTORY_ENTRY HashBuckets[OBJECT_NUMBER_HASH_BUCKETS];
KPUSH_LOCK Lock;
PDEVICE_MAP DeviceMap;
ULONG SessionId;
} OBJECT_DIRECTORY, *POBJECT_DIRECTORY;
/* Linked list entry representing an object within a directory bucket */
typedef struct _OBJECT_DIRECTORY_ENTRY
{
POBJECT_DIRECTORY_ENTRY ChainLink;
PVOID Object;
ULONG HashValue;
} OBJECT_DIRECTORY_ENTRY, *POBJECT_DIRECTORY_ENTRY;
/* Control structure used during object diagnostic dumps */
typedef struct _OBJECT_DUMP_CONTROL
{
PVOID Stream;
ULONG Detail;
} OBJECT_DUMP_CONTROL, *POBJECT_DUMP_CONTROL;
/* Entry tracking the number of open handles a specific process holds */
typedef struct _OBJECT_HANDLE_COUNT_ENTRY
{
PEPROCESS OwningProcess;
ULONG HandleTableIndex;
ULONG HandleCount;
} OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY;
/* Database array tracking handle counts for objects opened by processes */
typedef struct _OBJECT_HANDLE_COUNT_DATABASE
{
ULONG CountEntries;
OBJECT_HANDLE_COUNT_ENTRY HandleCountEntries[1];
} OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE;
/* Database tracking all handle counts across different processes */
typedef struct _OBJECT_HANDLE_COUNT_INFORMATION
{
ULONG TotalHandleCount;
ULONG EntryCount;
POBJECT_HANDLE_COUNT_ENTRY Entries;
} OBJECT_HANDLE_COUNT_INFORMATION, *POBJECT_HANDLE_COUNT_INFORMATION;
/* Optional header containing the handle count database */
typedef struct _OBJECT_HANDLE_INFO
{
OBJECT_HANDLE_COUNT_INFORMATION HandleCounts;
} OBJECT_HANDLE_INFO, *POBJECT_HANDLE_INFO;
/* Core object header */
typedef struct _OBJECT_HEADER
{
LONG_PTR PointerCount;
union
{
LONG_PTR HandleCount;
VOLATILE PVOID NextToFree;
};
POBJECT_TYPE Type;
UCHAR NameInfoOffset;
UCHAR HandleInfoOffset;
UCHAR QuotaInfoOffset;
UCHAR Flags;
union
{
POBJECT_CREATE_INFORMATION ObjectCreateInfo;
PVOID QuotaBlockCharged;
};
PSECURITY_DESCRIPTOR SecurityDescriptor;
QUAD Body;
} OBJECT_HEADER, *POBJECT_HEADER;
/* Creator tracking information */
typedef struct _OBJECT_HEADER_CREATOR_INFO
{
LIST_ENTRY TypeList;
PVOID CreatorUniqueProcess;
USHORT CreatorBackTraceIndex;
USHORT Reserved;
} OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO;
/* Union representing either a single handle count entry or a full database */
typedef union _OBJECT_HEADER_HANDLE_INFO
{
POBJECT_HANDLE_COUNT_DATABASE HandleCountDatabase;
OBJECT_HANDLE_COUNT_ENTRY SingleEntry;
} OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO;
/* Name information stored in the object header */
typedef struct _OBJECT_HEADER_NAME_INFO
{
POBJECT_DIRECTORY Directory;
UNICODE_STRING Name;
ULONG QueryReferences;
ULONG Reserved;
ULONG DbgReferenceCount;
} OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
/* Active quota information stored in the object header */
typedef struct _OBJECT_HEADER_QUOTA_INFO
{
ULONG PagedPoolCharge;
ULONG NonPagedPoolCharge;
ULONG SecurityDescriptorCharge;
PEPROCESS ExclusiveProcess;
} OBJECT_HEADER_QUOTA_INFO, *POBJECT_HEADER_QUOTA_INFO;
/* Context maintained during namespace traversal and directory lookups */
typedef struct _OBJECT_LOOKUP_CONTEXT
{
POBJECT_DIRECTORY Directory;
PVOID Object;
USHORT HashIndex;
BOOLEAN DirectoryLocked;
VOLATILE ULONG LockStateSignature;
} OBJECT_LOOKUP_CONTEXT, *POBJECT_LOOKUP_CONTEXT;
/* Optional header storing the object's hierarchical name and directory links */
typedef struct _OBJECT_NAME_INFO
{
LIST_ENTRY ObjectLinks;
UNICODE_STRING ObjectName;
PWSTR ObjectDirectoryPath;
} OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
/* Structure used to query an object's name */
typedef struct _OBJECT_NAME_INFORMATION
{
UNICODE_STRING Name;
} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
/* Memory layout sizes for the object's optional headers */
typedef struct _OBJECT_OPTIONAL_HEADER_LAYOUT
{
ULONG QuotaInfoSize;
ULONG HandleInfoSize;
ULONG NameInfoSize;
ULONG CreatorInfoSize;
ULONG TotalSize;
} OBJECT_OPTIONAL_HEADER_LAYOUT, *POBJECT_OPTIONAL_HEADER_LAYOUT;
/* Information block linking an object to a specific process */
typedef struct _OBJECT_PROCESS_INFO
{
LIST_ENTRY Entry;
PEPROCESS Process;
ULONG ReferenceCount;
} OBJECT_PROCESS_INFO, *POBJECT_PROCESS_INFO;
/* Optional header tracking memory pool charges */
typedef struct _OBJECT_QUOTA_INFO
{
ULONG PagedPoolCharge;
ULONG NonPagedPoolCharge;
ULONG SecurityDescriptorCharge;
PEPROCESS ExclusiveProcess;
} OBJECT_QUOTA_INFO, *POBJECT_QUOTA_INFO;
/* Configuration block defining the lifecycle and behavior of a specific object type */
typedef struct _OBJECT_TYPE_INITIALIZER
{
USHORT Length;
BOOLEAN UseDefaultObject;
BOOLEAN CaseInsensitive;
ULONG InvalidAttributes;
GENERIC_MAPPING GenericMapping;
ULONG ValidAccessMask;
BOOLEAN SecurityRequired;
BOOLEAN MaintainHandleCount;
BOOLEAN MaintainTypeList;
MMPOOL_TYPE PoolType;
ULONG DefaultPagedPoolCharge;
ULONG DefaultNonPagedPoolCharge;
POB_DUMP_METHOD DumpProcedure;
POB_OPEN_METHOD OpenProcedure;
POB_CLOSE_METHOD CloseProcedure;
POB_DELETE_METHOD DeleteProcedure;
POB_PARSE_METHOD ParseProcedure;
POB_SECURITY_METHOD SecurityProcedure;
POB_QUERYNAME_METHOD QueryNameProcedure;
POB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
/* Descriptor representing a registered object type in the system */
typedef struct _OBJECT_TYPE
{
LIST_ENTRY TypeList;
UNICODE_STRING Name;
PVOID DefaultObject;
ULONG Index;
ULONG TotalNumberOfObjects;
ULONG TotalNumberOfHandles;
ULONG HighWaterNumberOfObjects;
ULONG HighWaterNumberOfHandles;
OBJECT_TYPE_INITIALIZER TypeInfo;
KPUSH_LOCK TypeLock;
ULONG Key;
LIST_ENTRY CallbackList;
} OBJECT_TYPE;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_OBTYPES_H */

View File

@@ -14,6 +14,10 @@
#include <ketypes.h>
/* Processor performance scale factor */
#define POWER_PERFORMANCE_SCALE 100
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
@@ -21,6 +25,56 @@
typedef VOID (XTFASTCALL *PPROCESSOR_IDLE_FUNCTION)(IN PPROCESSOR_POWER_STATE PowerState);
typedef XTSTATUS (XTFASTCALL *PSET_PROCESSOR_THROTTLE)(IN UCHAR Throttle);
/* Device power states */
typedef enum _DEVICE_POWER_STATE
{
PowerDeviceUnspecified = 0,
PowerDeviceD0,
PowerDeviceD1,
PowerDeviceD2,
PowerDeviceD3,
PowerDeviceMaximum
} DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
/* Power actions list */
typedef enum _POWER_ACTION
{
PowerActionNone = 0,
PowerActionReserved,
PowerActionSleep,
PowerActionHibernate,
PowerActionShutdown,
PowerActionShutdownReset,
PowerActionShutdownOff,
PowerActionWarmEject
} POWER_ACTION, *PPOWER_ACTION;
typedef enum _POWER_STATE_TYPE
{
SystemPowerState = 0,
DevicePowerState
} POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
/* System power states */
typedef enum _SYSTEM_POWER_STATE
{
PowerSystemUnspecified = 0,
PowerSystemWorking,
PowerSystemSleeping1,
PowerSystemSleeping2,
PowerSystemSleeping3,
PowerSystemHibernate,
PowerSystemShutdown,
PowerSystemMaximum
} SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
/* Power state union definition */
typedef union _POWER_STATE
{
SYSTEM_POWER_STATE SystemState;
DEVICE_POWER_STATE DeviceState;
} POWER_STATE, *PPOWER_STATE;
/* Processor IDLE times structure definition */
typedef struct _PROCESSOR_IDLE_TIMES
{
@@ -91,5 +145,24 @@ typedef struct _PROCESSOR_POWER_STATE
ULONG LastC3UserTime;
} PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE;
/* System power state context structure definition */
typedef struct _SYSTEM_POWER_STATE_CONTEXT
{
union
{
struct
{
ULONG Reserved1:8;
ULONG TargetSystemState:4;
ULONG EffectiveSystemState:4;
ULONG CurrentSystemState:4;
ULONG IgnoreHibernationPath:1;
ULONG PseudoTransition:1;
ULONG Reserved2:10;
};
ULONG ContextAsUlong;
};
} SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_POTYPES_H */

View File

@@ -10,19 +10,56 @@
#define __XTDK_PSTYPES_H
#include <xttypes.h>
#include <ketypes.h>
#include <xtstruct.h>
#include <extypes.h>
/* Quota bypass marker */
#define PS_QUOTA_BYPASS_MARKER ((PEPROCESS_QUOTA_BLOCK)1)
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Process quota types */
typedef enum _PS_QUOTA_TYPE
{
PsNonPagedPool,
PsPagedPool,
PsPageFile,
PsQuotaTypes
} PS_QUOTA_TYPE, *PPS_QUOTA_TYPE;
/* Kernel's representation of a process object */
typedef struct _EPROCESS
{
KPROCESS ProcessControlBlock;
KPUSH_LOCK ProcessLock;
LARGE_INTEGER CreateTime;
LARGE_INTEGER ExitTime;
EX_RUNDOWN_REFERENCE RundownProtect;
HANDLE UniqueProcessId;
SIZE_T QuotaUsage[PsQuotaTypes];
UINT Reserved0;
} EPROCESS, *PEPROCESS;
/* Kernel's representation of a process quota entry*/
typedef struct _EPROCESS_QUOTA_ENTRY
{
SIZE_T Usage;
SIZE_T Limit;
SIZE_T Peak;
SIZE_T Return;
} EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
/* Kernel's representation of a process quota block */
typedef struct _EPROCESS_QUOTA_BLOCK
{
EPROCESS_QUOTA_ENTRY QuotaEntry[PsQuotaTypes];
LIST_ENTRY QuotaList;
ULONG ReferenceCount;
ULONG ProcessCount;
} EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
/* Kernel's representation of a thread object */
typedef struct _ETHREAD
{

View File

@@ -123,6 +123,12 @@ RtlCopyString(IN PCHAR Destination,
IN PCSTR Source,
IN ULONG Length);
XTCLINK
XTAPI
VOID
RtlCopyUnicodeString(IN OUT PUNICODE_STRING Destination,
IN PCUNICODE_STRING Source);
XTCLINK
XTAPI
VOID
@@ -187,6 +193,18 @@ XTCDECL
VOID
RtlInitializeListHead(IN PLIST_ENTRY ListHead);
XTCLINK
XTAPI
VOID
RtlInitializeUnicodeString(OUT PUNICODE_STRING Destination,
IN PCWSTR Source);
XTCLINK
XTAPI
XTSTATUS
RtlInitializeUnicodeStringEx(OUT PUNICODE_STRING Destination,
IN PCWSTR Source);
XTCLINK
XTCDECL
VOID

View File

@@ -4,6 +4,7 @@
* FILE: sdk/xtdk/rtltypes.h
* DESCRIPTION: Runtime library structures definitions
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
* Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_RTLTYPES_H
@@ -11,6 +12,7 @@
#include <xtbase.h>
#include <xttypes.h>
#include ARCH_HEADER(xtstruct.h)
/* UUID string lengths */
@@ -32,6 +34,23 @@
#define DOUBLE_SCIENTIFIC_PRECISION -4
#define DOUBLE_SIGN_BIT 0x8000000000000000ULL
/* Exception Record flags */
#define EXCEPTION_CONTINUE_SEARCH 0x00
#define EXCEPTION_NONCONTINUABLE 0x01
#define EXCEPTION_UNWINDING 0x02
#define EXCEPTION_EXIT_UNWIND 0x04
#define EXCEPTION_STACK_INVALID 0x08
#define EXCEPTION_NESTED_CALL 0x10
#define EXCEPTION_TARGET_UNWIND 0x20
#define EXCEPTION_COLLIDED_UNWIND 0x40
/* Exception Record accessors */
#define EXCEPTION_CODE _exception_code()
#define EXCEPTION_INFORMATION (PEXCEPTION_POINTERS)_exception_info()
/* Maximum number of lead bytes for NLS */
#define NLS_MAXIMUM_LEADBYTES 12
/* Print flag definitions */
#define PFL_ALWAYS_PRINT_SIGN 0x00000001
#define PFL_SPACE_FOR_PLUS 0x00000002
@@ -72,6 +91,74 @@
typedef XTSTATUS (*PWRITE_CHARACTER)(IN CHAR Character);
typedef XTSTATUS (*PWRITE_WIDE_CHARACTER)(IN WCHAR Character);
/* Compressed data information structure definition */
typedef struct _COMPRESSED_DATA_INFO
{
USHORT CompressionFormatAndEngine;
UCHAR CompressionUnitShift;
UCHAR ChunkShift;
UCHAR ClusterShift;
UCHAR Reserved;
USHORT NumberOfChunks;
ULONG CompressedChunkSizes[1];
} COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
/* Code page table structure definition */
typedef struct _CPTABLE_INFO
{
USHORT CodePage;
USHORT MaximumCharacterSize;
USHORT DefaultChar;
USHORT UniDefaultChar;
USHORT TransDefaultChar;
USHORT TransUniDefaultChar;
USHORT DBCSCodePage;
UCHAR LeadByte[NLS_MAXIMUM_LEADBYTES];
PUSHORT MultiByteTable;
PVOID WideCharTable;
PUSHORT DBCSRanges;
PUSHORT DBCSOffsets;
} CPTABLE_INFO, *PCPTABLE_INFO;
/* Exception Pointers structure definition */
typedef struct _EXCEPTION_POINTERS
{
PEXCEPTION_RECORD ExceptionRecord;
PCONTEXT ContextRecord;
} EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
/* 128-bit buffer containing a unique identifier value */
typedef struct _GUID
{
UINT Data1;
USHORT Data2;
USHORT Data3;
UCHAR Data4[8];
} GUID, *PGUID;
/* 32-bit double linked list structure definition */
typedef struct _LIST_ENTRY32
{
ULONG Flink;
ULONG Blink;
} LIST_ENTRY32, *PLIST_ENTRY32;
/* 64-bit double linked list structure definition */
typedef struct _LIST_ENTRY64
{
ULONGLONG Flink;
ULONGLONG Blink;
} LIST_ENTRY64, *PLIST_ENTRY64;
/* NLS table structure definition */
typedef struct _NLSTABLE_INFO
{
CPTABLE_INFO OemTableInfo;
CPTABLE_INFO AnsiTableInfo;
PUSHORT UpperCaseTable;
PUSHORT LowerCaseTable;
} NLSTABLE_INFO, *PNLSTABLE_INFO;
/* Red-black tree node color enumeration list */
typedef enum _RTL_BALANCED_NODE_COLOR
{
@@ -156,6 +243,12 @@ typedef struct _RTL_SHA1_CONTEXT
UCHAR Buffer[SHA1_BLOCK_SIZE];
} RTL_SHA1_CONTEXT, *PRTL_SHA1_CONTEXT;
/* Single linked list structure definition */
typedef struct _SINGLE_LIST_ENTRY
{
PSINGLE_LIST_ENTRY Next;
} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
/* Runtime time fields structure definition */
typedef struct _TIME_FIELDS
{

201
sdk/xtdk/setypes.h Normal file
View File

@@ -0,0 +1,201 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: sdk/xtdk/setypes.h
* DESCRIPTION: Kernel Security structures and definitions
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTDK_SETYPES_H
#define __XTDK_SETYPES_H
#include <xttypes.h>
#include <xtstruct.h>
#include <xtbase.h>
/* Privilege LUIDs */
#define SE_LUID_MIN_WELL_KNOWN_PRIVILEGE (LUID){2, 0}
#define SE_LUID_CREATE_TOKEN_PRIVILEGE (LUID){2, 0}
#define SE_LUID_ASSIGNPRIMARYTOKEN_PRIVILEGE (LUID){3, 0}
#define SE_LUID_LOCK_MEMORY_PRIVILEGE (LUID){4, 0}
#define SE_LUID_INCREASE_QUOTA_PRIVILEGE (LUID){5, 0}
#define SE_LUID_MACHINE_ACCOUNT_PRIVILEGE (LUID){6, 0}
#define SE_LUID_TCB_PRIVILEGE (LUID){7, 0}
#define SE_LUID_SECURITY_PRIVILEGE (LUID){8, 0}
#define SE_LUID_TAKE_OWNERSHIP_PRIVILEGE (LUID){9, 0}
#define SE_LUID_LOAD_DRIVER_PRIVILEGE (LUID){10, 0}
#define SE_LUID_SYSTEM_PROFILE_PRIVILEGE (LUID){11, 0}
#define SE_LUID_SYSTEMTIME_PRIVILEGE (LUID){12, 0}
#define SE_LUID_PROF_SINGLE_PROCESS_PRIVILEGE (LUID){13, 0}
#define SE_LUID_INC_BASE_PRIORITY_PRIVILEGE (LUID){14, 0}
#define SE_LUID_CREATE_PAGEFILE_PRIVILEGE (LUID){15, 0}
#define SE_LUID_CREATE_PERMANENT_PRIVILEGE (LUID){16, 0}
#define SE_LUID_BACKUP_PRIVILEGE (LUID){17, 0}
#define SE_LUID_RESTORE_PRIVILEGE (LUID){18, 0}
#define SE_LUID_SHUTDOWN_PRIVILEGE (LUID){19, 0}
#define SE_LUID_DEBUG_PRIVILEGE (LUID){20, 0}
#define SE_LUID_AUDIT_PRIVILEGE (LUID){21, 0}
#define SE_LUID_SYSTEM_ENVIRONMENT_PRIVILEGE (LUID){22, 0}
#define SE_LUID_CHANGE_NOTIFY_PRIVILEGE (LUID){23, 0}
#define SE_LUID_REMOTE_SHUTDOWN_PRIVILEGE (LUID){24, 0}
#define SE_LUID_UNDOCK_PRIVILEGE (LUID){25, 0}
#define SE_LUID_SYNC_AGENT_PRIVILEGE (LUID){26, 0}
#define SE_LUID_ENABLE_DELEGATION_PRIVILEGE (LUID){27, 0}
#define SE_LUID_MANAGE_VOLUME_PRIVILEGE (LUID){28, 0}
#define SE_LUID_IMPERSONATE_PRIVILEGE (LUID){29, 0}
#define SE_LUID_CREATE_GLOBAL_PRIVILEGE (LUID){30, 0}
#define SE_LUID_TRUSTED_CREDMAN_ACCESS_PRIVILEGE (LUID){31, 0}
#define SE_LUID_RELABEL_PRIVILEGE (LUID){32, 0}
#define SE_LUID_INC_WORKING_SET_PRIVILEGE (LUID){33, 0}
#define SE_LUID_TIME_ZONE_PRIVILEGE (LUID){34, 0}
#define SE_LUID_CREATE_SYMBOLIC_LINK_PRIVILEGE (LUID){35, 0}
/* Default security quota */
#define SE_DEFAULT_SECURITY_QUOTA 2048
#define SE_INITIAL_PRIVILEGE_COUNT 3
/* Token source length */
#define SE_TOKEN_SOURCE_LENGTH 8
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Security impersonation levels */
typedef enum _SECURITY_IMPERSONATION_LEVEL
{
SecurityAnonymous,
SecurityIdentification,
SecurityImpersonation,
SecurityDelegation
} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
/* Security operation codes */
typedef enum _SECURITY_OPERATION_CODE
{
SetSecurityDescriptor,
QuerySecurityDescriptor,
DeleteSecurityDescriptor,
AssignSecurityDescriptor
} SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
/* Generic security mapping structure definition */
typedef struct _GENERIC_MAPPING
{
ULONG GenericRead;
ULONG GenericWrite;
ULONG GenericExecute;
ULONG GenericAll;
} GENERIC_MAPPING, *PGENERIC_MAPPING;
/* LUID and attributes structure definition */
typedef struct _LUID_AND_ATTRIBUTES
{
LUID Luid;
ULONG Attributes;
} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
/* Initial privilege set structure definition */
typedef struct _INITIAL_PRIVILEGE_SET
{
ULONG PrivilegeCount;
ULONG Control;
LUID_AND_ATTRIBUTES Privilege[SE_INITIAL_PRIVILEGE_COUNT];
} INITIAL_PRIVILEGE_SET, * PINITIAL_PRIVILEGE_SET;
/* Privilege set structure definition */
typedef struct _PRIVILEGE_SET
{
ULONG PrivilegeCount;
ULONG Control;
LUID_AND_ATTRIBUTES Privilege[1];
} PRIVILEGE_SET, *PPRIVILEGE_SET;
/* Identifier authority structure definition */
typedef struct _SID_IDENTIFIER_AUTHORITY
{
UCHAR Value[6];
} SID_IDENTIFIER_AUTHORITY,*PSID_IDENTIFIER_AUTHORITY;
/* Security identifier structure definition */
typedef struct _SID
{
UCHAR Revision;
UCHAR SubAuthorityCount;
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
ULONG SubAuthority[1];
} SID, *PSID;
/* Token source structure definition */
typedef struct _TOKEN_SOURCE
{
CHAR SourceName[SE_TOKEN_SOURCE_LENGTH];
LUID SourceIdentifier;
} TOKEN_SOURCE, *PTOKEN_SOURCE;
/* Token control structure definition */
typedef struct _TOKEN_CONTROL
{
LUID TokenId;
LUID AuthenticationId;
LUID ModifiedId;
TOKEN_SOURCE TokenSource;
} TOKEN_CONTROL, *PTOKEN_CONTROL;
/* Security quality of service structure definition */
typedef struct _SECURITY_QUALITY_OF_SERVICE
{
ULONG Length;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode;
BOOLEAN EffectiveOnly;
} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
/* Security client context structure definition */
typedef struct _SECURITY_CLIENT_CONTEXT
{
SECURITY_QUALITY_OF_SERVICE SecurityQos;
PACCESS_TOKEN ClientToken;
BOOLEAN DirectlyAccessClientToken;
BOOLEAN DirectAccessEffectiveOnly;
BOOLEAN ServerIsRemote;
TOKEN_CONTROL ClientTokenControl;
} SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
/* Security subject context structure definition */
typedef struct _SECURITY_SUBJECT_CONTEXT
{
PACCESS_TOKEN ClientToken;
SECURITY_IMPERSONATION_LEVEL ImpersonationLevel;
PACCESS_TOKEN PrimaryToken;
PVOID ProcessAuditId;
} SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
/* Access state structure definition */
typedef struct _ACCESS_STATE
{
LUID OperationID;
BOOLEAN SecurityEvaluated;
BOOLEAN GenerateAudit;
BOOLEAN GenerateOnClose;
BOOLEAN PrivilegesAllocated;
ULONG Flags;
ACCESS_MASK RemainingDesiredAccess;
ACCESS_MASK PreviouslyGrantedAccess;
ACCESS_MASK OriginalDesiredAccess;
SECURITY_SUBJECT_CONTEXT SubjectSecurityContext;
PSECURITY_DESCRIPTOR SecurityDescriptor;
PVOID AuxData;
union
{
INITIAL_PRIVILEGE_SET InitialPrivilegeSet;
PRIVILEGE_SET PrivilegeSet;
} Privileges;
BOOLEAN AuditPrivileges;
UNICODE_STRING ObjectName;
UNICODE_STRING ObjectTypeName;
} ACCESS_STATE, *PACCESS_STATE;
#endif /* __XTOS_ASSEMBLER__ */
#endif /* __XTDK_SETYPES_H */

View File

@@ -17,6 +17,12 @@
/* C/C++ specific code */
#ifndef __XTOS_ASSEMBLER__
/* Access mask */
typedef ULONG ACCESS_MASK, *PACCESS_MASK;
/* Device type */
typedef ULONG DEVICE_TYPE;
/* Kernel affinity */
typedef ULONG_PTR KAFFINITY, *PKAFFINITY;
@@ -32,6 +38,12 @@ typedef UCHAR KRUNLEVEL, *PKRUNLEVEL;
/* Spin locks synchronization mechanism */
typedef ULONG_PTR KSPIN_LOCK, *PKSPIN_LOCK;
/* Locale identifier */
typedef ULONG LCID;
/* Access token */
typedef PVOID PACCESS_TOKEN;
/* Page Frame Number count */
typedef ULONG PFN_COUNT;
@@ -41,75 +53,14 @@ typedef ULONG_PTR PFN_NUMBER, *PPFN_NUMBER;
/* Physical address */
typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
/* 128-bit buffer containing a unique identifier value */
typedef struct _GUID
{
UINT Data1;
USHORT Data2;
USHORT Data3;
UCHAR Data4[8];
} GUID, *PGUID;
/* Security descriptor */
typedef PVOID PSECURITY_DESCRIPTOR;
/* Double linked list structure definition */
typedef struct _LIST_ENTRY
{
PLIST_ENTRY Flink;
PLIST_ENTRY Blink;
} LIST_ENTRY, *PLIST_ENTRY;
/* Security context tracking mode */
typedef BOOLEAN SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE;
/* 32-bit double linked list structure definition */
typedef struct _LIST_ENTRY32
{
ULONG Flink;
ULONG Blink;
} LIST_ENTRY32, *PLIST_ENTRY32;
/* 64-bit double linked list structure definition */
typedef struct _LIST_ENTRY64
{
ULONGLONG Flink;
ULONGLONG Blink;
} LIST_ENTRY64, *PLIST_ENTRY64;
/* Single linked list structure definition */
typedef struct _SINGLE_LIST_ENTRY
{
PSINGLE_LIST_ENTRY Next;
} SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
/* Header for a sequenced single linked list union definition */
typedef union _SINGLE_LIST_HEADER
{
ULONGLONG Alignment;
struct
{
SINGLE_LIST_ENTRY Next;
USHORT Depth;
USHORT Sequence;
};
} SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
/* 128-bit 16-byte aligned XMM register */
typedef struct _M128
{
ULONGLONG Low;
LONGLONG High;
} ALIGN(16) M128, *PM128;
/* Dispatcher object header structure definition */
typedef struct _DISPATCHER_HEADER
{
UCHAR Type;
union
{
UCHAR Absolute;
UCHAR NpxIrql;
};
UCHAR Inserted;
BOOLEAN DebugActive;
LONG SignalState;
LIST_ENTRY WaitListHead;
} DISPATCHER_HEADER, *PDISPATCHER_HEADER;
/* Security information */
typedef ULONG SECURITY_INFORMATION, *PSECURITY_INFORMATION;
#endif /* __XTOS_ASSEMBLER_ */
#endif /* __XTDK_XTBASE_H */

View File

@@ -34,6 +34,7 @@
#define MAXCHAR 0x7F
#define MINSHORT 0x8000
#define MAXSHORT 0x7FFF
#define MAXUSHORT 0xFFFF
#define MINLONG 0x80000000
#define MAXLONG 0x7FFFFFFF
#define MAXULONG 0xFFFFFFFF

View File

@@ -28,22 +28,27 @@
#include <xtuefi.h>
/* Low level data types headers */
#include <cmtypes.h>
#include <extypes.h>
#include <hltypes.h>
#include <iotypes.h>
#include <kdtypes.h>
#include <ketypes.h>
#include <ldrtypes.h>
#include <lpctypes.h>
#include <mmtypes.h>
#include <obtypes.h>
#include <potypes.h>
#include <pstypes.h>
#include <rtltypes.h>
#include <setypes.h>
/* Architecture-specific low level data types headers */
#include ARCH_HEADER(artypes.h)
#include ARCH_HEADER(hltypes.h)
#include ARCH_HEADER(ketypes.h)
#include ARCH_HEADER(mmtypes.h)
#include ARCH_HEADER(rtltypes.h)
/* XT routines */
#include <exfuncs.h>

View File

@@ -48,6 +48,20 @@
/* XT status code definitions */
#define STATUS_SUCCESS ((XTSTATUS) 0x00000000L)
#define STATUS_WAIT_0 ((XTSTATUS) 0x00000000L)
#define STATUS_WAIT_1 ((XTSTATUS) 0x00000001L)
#define STATUS_WAIT_2 ((XTSTATUS) 0x00000002L)
#define STATUS_WAIT_3 ((XTSTATUS) 0x00000003L)
#define STATUS_WAIT_63 ((XTSTATUS) 0x0000003FL)
#define STATUS_ABANDONED ((XTSTATUS) 0x00000080L)
#define STATUS_ABANDONED_WAIT_0 ((XTSTATUS) 0x00000080L)
#define STATUS_ABANDONED_WAIT_63 ((XTSTATUS) 0x000000BFL)
#define STATUS_ALERTED ((XTSTATUS) 0x00000101L)
#define STATUS_TIMEOUT ((XTSTATUS) 0x00000102L)
#define STATUS_PENDING ((XTSTATUS) 0x00000103L)
#define STATUS_REPARSE ((XTSTATUS) 0x00000104L)
#define STATUS_DATATYPE_MISALIGNMENT ((XTSTATUS) 0x80000002L)
#define STATUS_WAKE_SYSTEM_DEBUGGER ((XTSTATUS) 0x80000007L)
#define STATUS_END_OF_MEDIA ((XTSTATUS) 0x8000001EL)
#define STATUS_RESOURCE_LOCKED ((XTSTATUS) 0xC0000000L)
#define STATUS_UNSUCCESSFUL ((XTSTATUS) 0xC0000001L)
@@ -59,6 +73,9 @@
#define STATUS_INVALID_PARAMETER ((XTSTATUS) 0xC000000DL)
#define STATUS_END_OF_FILE ((XTSTATUS) 0xC0000011L)
#define STATUS_NO_MEMORY ((XTSTATUS) 0xC0000017L)
#define STATUS_BUFFER_TOO_SMALL ((XTSTATUS) 0xC0000023L)
#define STATUS_OBJECT_NAME_INVALID ((XTSTATUS) 0xC0000033L)
#define STATUS_OBJECT_NAME_COLLISION ((XTSTATUS) 0xC0000035L)
#define STATUS_PORT_DISCONNECTED ((XTSTATUS) 0xC0000037L)
#define STATUS_CRC_ERROR ((XTSTATUS) 0xC000003FL)
#define STATUS_FLOAT_OVERFLOW ((XTSTATUS) 0xC0000091L)
@@ -66,8 +83,9 @@
#define STATUS_INSUFFICIENT_RESOURCES ((XTSTATUS) 0xC000009AL)
#define STATUS_DEVICE_NOT_READY ((XTSTATUS) 0xC00000A3L)
#define STATUS_NOT_SUPPORTED ((XTSTATUS) 0xC00000BBL)
#define STATUS_TIMEOUT ((XTSTATUS) 0x00000102L)
#define STATUS_NAME_TOO_LONG ((XTSTATUS) 0xC0000106L)
#define STATUS_IO_DEVICE_ERROR ((XTSTATUS) 0xC0000185L)
#define STATUS_MUTEX_LIMIT_EXCEEDED ((XTSTATUS) 0xC0000191L)
#define STATUS_NOT_FOUND ((XTSTATUS) 0xC0000225L)
#endif /* __XTDK_XTSTATUS_H */

View File

@@ -17,6 +17,12 @@
/* Enumeration lists forward references */
typedef enum _ADJUST_REASON ADJUST_REASON, *PADJUST_REASON;
typedef enum _BUS_QUERY_ID_TYPE BUS_QUERY_ID_TYPE, *PBUS_QUERY_ID_TYPE;
typedef enum _DEVICE_POWER_STATE DEVICE_POWER_STATE, *PDEVICE_POWER_STATE;
typedef enum _DEVICE_RELATION_TYPE DEVICE_RELATION_TYPE, *PDEVICE_RELATION_TYPE;
typedef enum _DEVICE_TEXT_TYPE DEVICE_TEXT_TYPE, *PDEVICE_TEXT_TYPE;
typedef enum _DEVICE_USAGE_NOTIFICATION_TYPE DEVICE_USAGE_NOTIFICATION_TYPE, *PDEVICE_USAGE_NOTIFICATION_TYPE;
typedef enum _DIRECTORY_NOTIFY_INFORMATION_CLASS DIRECTORY_NOTIFY_INFORMATION_CLASS, *PDIRECTORY_NOTIFY_INFORMATION_CLASS;
typedef enum _EXCEPTION_DISPOSITION EXCEPTION_DISPOSITION, *PEXCEPTION_DISPOSITION;
typedef enum _EFI_ALLOCATE_TYPE EFI_ALLOCATE_TYPE, *PEFI_ALLOCATE_TYPE;
typedef enum _EFI_FRAMEWORK_CPU_DESIGNATION EFI_FRAMEWORK_CPU_DESIGNATION, *PEFI_FRAMEWORK_CPU_DESIGNATION;
@@ -41,8 +47,15 @@ typedef enum _EFI_TIMER_DELAY EFI_TIMER_DELAY, *PEFI_TIMER_DELAY;
typedef enum _EFI_UART_PARITY_TYPE EFI_UART_PARITY_TYPE, *PEFI_UART_PARITY_TYPE;
typedef enum _EFI_UART_STOP_BITS_TYPE EFI_UART_STOP_BITS_TYPE, *PEFI_UART_STOP_BITS_TYPE;
typedef enum _EFI_UNIVERSA_GRAPHICS_BLT_OPERATION EFI_UNIVERSA_GRAPHICS_BLT_OPERATION, *PEFI_UNIVERSA_GRAPHICS_BLT_OPERATION;
typedef enum _FILE_INFORMATION_CLASS FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
typedef enum _FS_INFORMATION_CLASS FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
typedef enum _HAL_APIC_MODE HAL_APIC_MODE, *PHAL_APIC_MODE;
typedef enum _INTERFACE_TYPE INTERFACE_TYPE, *PINTERFACE_TYPE;
typedef enum _IO_ALLOCATION_ACTION IO_ALLOCATION_ACTION, *PIO_ALLOCATION_ACTION;
typedef enum _IRQ_DEVICE_POLICY IRQ_DEVICE_POLICY, *PIRQ_DEVICE_POLICY;
typedef enum _IRQ_PRIORITY IRQ_PRIORITY, *PIRQ_PRIORITY;
typedef enum _KAPC_ENVIRONMENT KAPC_ENVIRONMENT, *PKAPC_ENVIRONMENT;
typedef enum _KCONTINUE_STATUS KCONTINUE_STATUS, *PKCONTINUE_STATUS;
typedef enum _KDPC_IMPORTANCE KDPC_IMPORTANCE, *PKDPC_IMPORTANCE;
typedef enum _KEVENT_TYPE KEVENT_TYPE, *PKEVENT_TYPE;
typedef enum _KOBJECTS KOBJECTS, *PKOBJECTS;
@@ -51,19 +64,32 @@ typedef enum _KPROFILE_SOURCE KPROFILE_SOURCE, *PKPROFILE_SOURCE;
typedef enum _KTHREAD_STATE KTHREAD_STATE, *PKTHREAD_STATE;
typedef enum _KTIMER_TYPE KTIMER_TYPE, *PKTIMER_TYPE;
typedef enum _KUBSAN_DATA_TYPE KUBSAN_DATA_TYPE, *PKUBSAN_DATA_TYPE;
typedef enum _KWAIT_REASON KWAIT_REASON, *PKWAIT_REASON;
typedef enum _LOADER_MEMORY_TYPE LOADER_MEMORY_TYPE, *PLOADER_MEMORY_TYPE;
typedef enum _MMPAGELISTS MMPAGELISTS, *PMMPAGELISTS;
typedef enum _MMPFN_CACHE_ATTRIBUTE MMPFN_CACHE_ATTRIBUTE, *PMMPFN_CACHE_ATTRIBUTE;
typedef enum _MMPOOL_TYPE MMPOOL_TYPE, *PMMPOOL_TYPE;
typedef enum _MMSYSTEM_PTE_POOL_TYPE MMSYSTEM_PTE_POOL_TYPE, *PMMSYSTEM_PTE_POOL_TYPE;
typedef enum _MODE MODE, *PMODE;
typedef enum _NONPAGED_LOOKASIDE_NUMBER NONPAGED_LOOKASIDE_NUMBER, *PNONPAGED_LOOKASIDE_NUMBER;
typedef enum _OBJECT_HEADER_INFO OBJECT_HEADER_INFO, *POBJECT_HEADER_INFO;
typedef enum _OBJECT_INFORMATION_CLASS OBJECT_INFORMATION_CLASS, *POBJECT_INFORMATION_CLASS;
typedef enum _OBJECT_OPEN_REASON OBJECT_OPEN_REASON, *POBJECT_OPEN_REASON;
typedef enum _POWER_ACTION POWER_ACTION, *PPOWER_ACTION;
typedef enum _POWER_STATE_TYPE POWER_STATE_TYPE, *PPOWER_STATE_TYPE;
typedef enum _PS_QUOTA_TYPE PS_QUOTA_TYPE, *PPS_QUOTA_TYPE;
typedef enum _RTL_BALANCED_NODE_COLOR RTL_BALANCED_NODE_COLOR, *PRTL_BALANCED_NODE_COLOR;
typedef enum _RTL_VARIABLE_TYPE RTL_VARIABLE_TYPE, *PRTL_VARIABLE_TYPE;
typedef enum _SECURITY_IMPERSONATION_LEVEL SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL;
typedef enum _SECURITY_OPERATION_CODE SECURITY_OPERATION_CODE, *PSECURITY_OPERATION_CODE;
typedef enum _SYSTEM_FIRMWARE_TYPE SYSTEM_FIRMWARE_TYPE, *PSYSTEM_FIRMWARE_TYPE;
typedef enum _SYSTEM_POWER_STATE SYSTEM_POWER_STATE, *PSYSTEM_POWER_STATE;
typedef enum _SYSTEM_RESOURCE_TYPE SYSTEM_RESOURCE_TYPE, *PSYSTEM_RESOURCE_TYPE;
typedef enum _WAIT_TYPE WAIT_TYPE, *PWAIT_TYPE;
typedef enum _WORK_QUEUE_TYPE WORK_QUEUE_TYPE, *PWORK_QUEUE_TYPE;
/* Structures forward references */
typedef struct _ACCESS_STATE ACCESS_STATE, *PACCESS_STATE;
typedef struct _ACPI_CACHE_LIST ACPI_CACHE_LIST, *PACPI_CACHE_LIST;
typedef struct _ACPI_DESCRIPTION_HEADER ACPI_DESCRIPTION_HEADER, *PACPI_DESCRIPTION_HEADER;
typedef struct _ACPI_FADT ACPI_FADT, *PACPI_FADT;
@@ -82,9 +108,21 @@ typedef struct _ACPI_XSDT ACPI_XSDT, *PACPI_XSDT;
typedef struct _ANSI_STRING ANSI_STRING, *PANSI_STRING;
typedef struct _ANSI_STRING32 ANSI_STRING32, *PANSI_STRING32;
typedef struct _ANSI_STRING64 ANSI_STRING64, *PANSI_STRING64;
typedef struct _CLIENT_ID CLIENT_ID, *PCLIENT_ID;
typedef struct _CM_FULL_RESOURCE_DESCRIPTOR CM_FULL_RESOURCE_DESCRIPTOR, *PCM_FULL_RESOURCE_DESCRIPTOR;
typedef struct _CM_PARTIAL_RESOURCE_DESCRIPTOR CM_PARTIAL_RESOURCE_DESCRIPTOR, *PCM_PARTIAL_RESOURCE_DESCRIPTOR;
typedef struct _CM_PARTIAL_RESOURCE_LIST CM_PARTIAL_RESOURCE_LIST, *PCM_PARTIAL_RESOURCE_LIST;
typedef struct _CM_RESOURCE_LIST CM_RESOURCE_LIST, *PCM_RESOURCE_LIST;
typedef struct _COMPRESSED_DATA_INFO COMPRESSED_DATA_INFO, *PCOMPRESSED_DATA_INFO;
typedef struct _CPPORT CPPORT, *PCPPORT;
typedef const struct _CMMPAGEMAP_ROUTINES CMMPAGEMAP_ROUTINES, *PCMMPAGEMAP_ROUTINES;
typedef struct _CPTABLE_INFO CPTABLE_INFO, *PCPTABLE_INFO;
typedef struct _CSTRING CSTRING, *PCSTRING;
typedef struct _DEVICE_CAPABILITIES DEVICE_CAPABILITIES, *PDEVICE_CAPABILITIES;
typedef struct _DEVICE_MAP DEVICE_MAP, *PDEVICE_MAP;
typedef struct _DEVICE_OBJECT DEVICE_OBJECT, *PDEVICE_OBJECT;
typedef struct _DEVOBJ_EXTENSION DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
typedef struct _DRIVER_EXTENSION DRIVER_EXTENSION, *PDRIVER_EXTENSION;
typedef struct _DRIVER_OBJECT DRIVER_OBJECT, *PDRIVER_OBJECT;
typedef struct _EFI_1394_DEVICE_PATH EFI_1394_DEVICE_PATH, *PEFI_1394_DEVICE_PATH;
typedef struct _EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR, *PEFI_ACPI_ADDRESS_SPACE_DESCRIPTOR;
typedef struct _EFI_ACPI_ADR_DEVICE_PATH EFI_ACPI_ADR_DEVICE_PATH, *PEFI_ACPI_ADR_DEVICE_PATH;
@@ -240,27 +278,52 @@ typedef struct _EFI_VENDOR_DEVICE_PATH EFI_VENDOR_DEVICE_PATH, *PEFI_VENDOR_DEVI
typedef struct _EFI_VLAN_DEVICE_PATH EFI_VLAN_DEVICE_PATH, *PEFI_VLAN_DEVICE_PATH;
typedef struct _EFI_WORD_REGS EFI_WORD_REGS, *PEFI_WORD_REGS;
typedef struct _EPROCESS EPROCESS, *PEPROCESS;
typedef struct _EPROCESS_QUOTA_BLOCK EPROCESS_QUOTA_BLOCK, *PEPROCESS_QUOTA_BLOCK;
typedef struct _EPROCESS_QUOTA_ENTRY EPROCESS_QUOTA_ENTRY, *PEPROCESS_QUOTA_ENTRY;
typedef struct _ERESOURCE ERESOURCE, *PERESOURCE;
typedef struct _ETHREAD ETHREAD, *PETHREAD;
typedef struct _EX_RUNDOWN_REFERENCE EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
typedef struct _EXCEPTION_POINTERS EXCEPTION_POINTERS, *PEXCEPTION_POINTERS;
typedef struct _EXCEPTION_RECORD EXCEPTION_RECORD, *PEXCEPTION_RECORD;
typedef struct _EXCEPTION_REGISTRATION_RECORD EXCEPTION_REGISTRATION_RECORD, *PEXCEPTION_REGISTRATION_RECORD;
typedef struct _FAST_IO_DISPATCH FAST_IO_DISPATCH, *PFAST_IO_DISPATCH;
typedef struct _FILE_BASIC_INFORMATION FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION;
typedef struct _FILE_GET_QUOTA_INFORMATION FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
typedef struct _FILE_NETWORK_OPEN_INFORMATION FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION;
typedef struct _FILE_OBJECT FILE_OBJECT, *PFILE_OBJECT;
typedef struct _FILE_STANDARD_INFORMATION FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION;
typedef struct _FIRMWARE_INFORMATION_BLOCK FIRMWARE_INFORMATION_BLOCK, *PFIRMWARE_INFORMATION_BLOCK;
typedef struct _FLOAT128 FLOAT128, *PFLOAT128;
typedef struct _GENERAL_LOOKASIDE GENERAL_LOOKASIDE, *PGENERAL_LOOKASIDE;
typedef struct _GENERIC_ADDRESS GENERIC_ADDRESS, *PGENERIC_ADDRESS;
typedef struct _GENERIC_MAPPING GENERIC_MAPPING, *PGENERIC_MAPPING;
typedef struct _GUID GUID, *PGUID;
typedef struct _HL_FRAMEBUFFER_DATA HL_FRAMEBUFFER_DATA, *PHL_FRAMEBUFFER_DATA;
typedef struct _HL_SCROLL_REGION_DATA HL_SCROLL_REGION_DATA, *PHL_SCROLL_REGION_DATA;
typedef struct _INITIAL_PRIVILEGE_SET INITIAL_PRIVILEGE_SET, *PINITIAL_PRIVILEGE_SET;
typedef struct _INTERFACE INTERFACE, *PINTERFACE;
typedef struct _IO_COMPLETION_CONTEXT IO_COMPLETION_CONTEXT, *PIO_COMPLETION_CONTEXT;
typedef struct _IO_RESOURCE_DESCRIPTOR IO_RESOURCE_DESCRIPTOR, *PIO_RESOURCE_DESCRIPTOR;
typedef struct _IO_RESOURCE_LIST IO_RESOURCE_LIST, *PIO_RESOURCE_LIST;
typedef struct _IO_RESOURCE_REQUIREMENTS_LIST IO_RESOURCE_REQUIREMENTS_LIST, *PIO_RESOURCE_REQUIREMENTS_LIST;
typedef struct _IO_SECURITY_CONTEXT IO_SECURITY_CONTEXT, *PIO_SECURITY_CONTEXT;
typedef struct _IO_STACK_LOCATION IO_STACK_LOCATION, *PIO_STACK_LOCATION;
typedef struct _IO_STATUS_BLOCK IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
typedef struct _IO_TIMER IO_TIMER, *PIO_TIMER;
typedef struct _IRP IRP, *PIRP;
typedef struct _KAFFINITY_MAP KAFFINITY_MAP, *PKAFFINITY_MAP;
typedef struct _KAPC KAPC, *PKAPC;
typedef struct _KAPC_STATE KAPC_STATE, *PKAPC_STATE;
typedef struct _KD_DEBUG_MODE KD_DEBUG_MODE, *PKD_DEBUG_MODE;
typedef struct _KD_DISPATCH_TABLE KD_DISPATCH_TABLE, *PKD_DISPATCH_TABLE;
typedef struct _KDPC KDPC, *PKDPC;
typedef struct _KDPC_DATA KDPC_DATA, *PKDPC_DATA;
typedef struct _KDEVICE_QUEUE_ENTRY KDEVICE_QUEUE_ENTRY, *PKDEVICE_QUEUE_ENTRY;
typedef struct _KERNEL_INITIALIZATION_BLOCK KERNEL_INITIALIZATION_BLOCK, *PKERNEL_INITIALIZATION_BLOCK;
typedef struct _KEVENT KEVENT, *PKEVENT;
typedef struct _KGATE KGATE, *PKGATE;
typedef struct _KLOCK_QUEUE_HANDLE KLOCK_QUEUE_HANDLE, *PKLOCK_QUEUE_HANDLE;
typedef struct _KMUTEX KMUTEX, *PKMUTEX;
typedef struct _KPROCESS KPROCESS, *PKPROCESS;
typedef struct _KPUSH_LOCK_WAIT_BLOCK KPUSH_LOCK_WAIT_BLOCK, *PKPUSH_LOCK_WAIT_BLOCK;
typedef struct _KQUEUE KQUEUE, *PKQUEUE;
typedef struct _KSEMAPHORE KSEMAPHORE, *PKSEMAPHORE;
typedef struct _KSERVICE_DESCRIPTOR_TABLE KSERVICE_DESCRIPTOR_TABLE, *PKSERVICE_DESCRIPTOR_TABLE;
@@ -287,12 +350,48 @@ typedef struct _LIST_ENTRY64 LIST_ENTRY64, *PLIST_ENTRY64;
typedef struct _LOADER_GRAPHICS_INFORMATION_BLOCK LOADER_GRAPHICS_INFORMATION_BLOCK, *PLOADER_GRAPHICS_INFORMATION_BLOCK;
typedef struct _LOADER_INFORMATION_BLOCK LOADER_INFORMATION_BLOCK, *PLOADER_INFORMATION_BLOCK;
typedef struct _LOADER_MEMORY_DESCRIPTOR LOADER_MEMORY_DESCRIPTOR, *PLOADER_MEMORY_DESCRIPTOR;
typedef struct _LOOKASIDE_LIST LOOKASIDE_LIST, *PLOOKASIDE_LIST;
typedef struct _LOOKASIDE_LIST_EX LOOKASIDE_LIST_EX, *PLOOKASIDE_LIST_EX;
typedef struct _LPCP_NONPAGED_PORT_QUEUE LPCP_NONPAGED_PORT_QUEUE, *PLPCP_NONPAGED_PORT_QUEUE;
typedef struct _LPCP_PORT_OBJECT LPCP_PORT_OBJECT, *PLPCP_PORT_OBJECT;
typedef struct _LPCP_PORT_QUEUE LPCP_PORT_QUEUE, *PLPCP_PORT_QUEUE;
typedef struct _LUID LUID, *PLUID;
typedef struct _LUID_AND_ATTRIBUTES LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES;
typedef struct _M128 M128, *PM128;
typedef struct _MAILSLOT_CREATE_PARAMETERS MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
typedef struct _MDL MDL, *PMDL;
typedef struct _MMCOLOR_TABLES MMCOLOR_TABLES, *PMMCOLOR_TABLES;
typedef struct _MMFREE_POOL_ENTRY MMFREE_POOL_ENTRY, *PMMFREE_POOL_ENTRY;
typedef struct _MMMEMORY_LAYOUT MMMEMORY_LAYOUT, *PMMMEMORY_LAYOUT;
typedef struct _MMPFNENTRY MMPFNENTRY, *PMMPFNENTRY;
typedef struct _MMPFNLIST MMPFNLIST, *PMMPFNLIST;
typedef struct _NAMED_PIPE_CREATE_PARAMETERS NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
typedef struct _NLSTABLE_INFO NLSTABLE_INFO, *PNLSTABLE_INFO;
typedef struct _NONPAGED_LOOKASIDE_LIST NONPAGED_LOOKASIDE_LIST, *PNONPAGED_LOOKASIDE_LIST;
typedef struct _OBJECT_ATTRIBUTES OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;
typedef struct _OBJECT_CREATE_INFORMATION OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
typedef struct _OBJECT_CREATOR_INFO OBJECT_CREATOR_INFO, *POBJECT_CREATOR_INFO;
typedef struct _OBJECT_DIRECTORY OBJECT_DIRECTORY, *POBJECT_DIRECTORY;
typedef struct _OBJECT_DIRECTORY_ENTRY OBJECT_DIRECTORY_ENTRY, *POBJECT_DIRECTORY_ENTRY;
typedef struct _OBJECT_DUMP_CONTROL OBJECT_DUMP_CONTROL, *POBJECT_DUMP_CONTROL;
typedef struct _OBJECT_HANDLE_COUNT_DATABASE OBJECT_HANDLE_COUNT_DATABASE, *POBJECT_HANDLE_COUNT_DATABASE;
typedef struct _OBJECT_HANDLE_COUNT_ENTRY OBJECT_HANDLE_COUNT_ENTRY, *POBJECT_HANDLE_COUNT_ENTRY;
typedef struct _OBJECT_HANDLE_COUNT_INFORMATION OBJECT_HANDLE_COUNT_INFORMATION, *POBJECT_HANDLE_COUNT_INFORMATION;
typedef struct _OBJECT_HANDLE_INFO OBJECT_HANDLE_INFO, *POBJECT_HANDLE_INFO;
typedef struct _OBJECT_HEADER OBJECT_HEADER, *POBJECT_HEADER;
typedef struct _OBJECT_HEADER_CREATOR_INFO OBJECT_HEADER_CREATOR_INFO, *POBJECT_HEADER_CREATOR_INFO;
typedef struct _OBJECT_HEADER_NAME_INFO OBJECT_HEADER_NAME_INFO, *POBJECT_HEADER_NAME_INFO;
typedef struct _OBJECT_HEADER_QUOTA_INFO OBJECT_HEADER_QUOTA_INFO, *POBJECT_HEADER_QUOTA_INFO;
typedef struct _OBJECT_LOOKUP_CONTEXT OBJECT_LOOKUP_CONTEXT, *POBJECT_LOOKUP_CONTEXT;
typedef struct _OBJECT_NAME_INFO OBJECT_NAME_INFO, *POBJECT_NAME_INFO;
typedef struct _OBJECT_NAME_INFORMATION OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION;
typedef struct _OBJECT_OPTIONAL_HEADER_LAYOUT OBJECT_OPTIONAL_HEADER_LAYOUT, *POBJECT_OPTIONAL_HEADER_LAYOUT;
typedef struct _OBJECT_PROCESS_INFO OBJECT_PROCESS_INFO, *POBJECT_PROCESS_INFO;
typedef struct _OBJECT_QUOTA_INFO OBJECT_QUOTA_INFO, *POBJECT_QUOTA_INFO;
typedef struct _OBJECT_TYPE OBJECT_TYPE, *POBJECT_TYPE;
typedef struct _OBJECT_TYPE_INITIALIZER OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
typedef struct _OWNER_ENTRY OWNER_ENTRY, *POWNER_ENTRY;
typedef struct _PAGED_LOOKASIDE_LIST PAGED_LOOKASIDE_LIST, *PPAGED_LOOKASIDE_LIST;
typedef struct _PCAT_FIRMWARE_INFORMATION PCAT_FIRMWARE_INFORMATION, *PPCAT_FIRMWARE_INFORMATION;
typedef struct _PCI_BRIDGE_CONTROL_REGISTER PCI_BRIDGE_CONTROL_REGISTER, *PPCI_BRIDGE_CONTROL_REGISTER;
typedef struct _PCI_COMMON_CONFIG PCI_COMMON_CONFIG, *PPCI_COMMON_CONFIG;
@@ -326,26 +425,41 @@ typedef struct _PHYSICAL_MEMORY_RUN PHYSICAL_MEMORY_RUN, *PPHYSICAL_MEMORY_RUN;
typedef struct _POOL_HEADER POOL_HEADER, *PPOOL_HEADER;
typedef struct _POOL_TRACKING_BIG_ALLOCATIONS POOL_TRACKING_BIG_ALLOCATIONS, *PPOOL_TRACKING_BIG_ALLOCATIONS;
typedef struct _POOL_TRACKING_TABLE POOL_TRACKING_TABLE, *PPOOL_TRACKING_TABLE;
typedef struct _POWER_SEQUENCE POWER_SEQUENCE, *PPOWER_SEQUENCE;
typedef struct _PRIVILEGE_SET PRIVILEGE_SET, *PPRIVILEGE_SET;
typedef struct _PROCESSOR_IDENTITY PROCESSOR_IDENTITY, *PPROCESSOR_IDENTITY;
typedef struct _PROCESSOR_POWER_STATE PROCESSOR_POWER_STATE, *PPROCESSOR_POWER_STATE;
typedef struct _QUAD QUAD, *PQUAD;
typedef struct _RTL_BALANCED_NODE RTL_BALANCED_NODE, *PRTL_BALANCED_NODE;
typedef struct _RTL_BITMAP RTL_BITMAP, *PRTL_BITMAP;
typedef struct _RTL_PRINT_CONTEXT RTL_PRINT_CONTEXT, *PRTL_PRINT_CONTEXT;
typedef struct _RTL_PRINT_FORMAT_PROPERTIES RTL_PRINT_FORMAT_PROPERTIES, *PRTL_PRINT_FORMAT_PROPERTIES;
typedef struct _RTL_RB_TREE RTL_RB_TREE, *PRTL_RB_TREE;
typedef struct _SCSI_REQUEST_BLOCK SCSI_REQUEST_BLOCK, *PSCSI_REQUEST_BLOCK;
typedef struct _SECTION_OBJECT_POINTERS SECTION_OBJECT_POINTERS, *PSECTION_OBJECT_POINTERS;
typedef struct _SECURITY_CLIENT_CONTEXT SECURITY_CLIENT_CONTEXT, *PSECURITY_CLIENT_CONTEXT;
typedef struct _SECURITY_QUALITY_OF_SERVICE SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE;
typedef struct _SECURITY_SUBJECT_CONTEXT SECURITY_SUBJECT_CONTEXT, *PSECURITY_SUBJECT_CONTEXT;
typedef struct _SID SID, *PSID;
typedef struct _SID_IDENTIFIER_AUTHORITY SID_IDENTIFIER_AUTHORITY, *PSID_IDENTIFIER_AUTHORITY;
typedef struct _SINGLE_LIST_ENTRY SINGLE_LIST_ENTRY, *PSINGLE_LIST_ENTRY;
typedef struct _SMBIOS_TABLE_HEADER SMBIOS_TABLE_HEADER, *PSMBIOS_TABLE_HEADER;
typedef struct _SMBIOS3_TABLE_HEADER SMBIOS3_TABLE_HEADER, *PSMBIOS3_TABLE_HEADER;
typedef struct _STRING STRING, *PSTRING;
typedef struct _STRING32 STRING32, *PSTRING32;
typedef struct _STRING64 STRING64, *PSTRING64;
typedef struct _SYSTEM_POWER_STATE_CONTEXT SYSTEM_POWER_STATE_CONTEXT, *PSYSTEM_POWER_STATE_CONTEXT;
typedef struct _THREAD_INFORMATION_BLOCK THREAD_INFORMATION_BLOCK, *PTHREAD_INFORMATION_BLOCK;
typedef struct _TIME_FIELDS TIME_FIELDS, *PTIME_FIELDS;
typedef struct _TIMER_ROUTINES TIMER_ROUTINES, *PTIMER_ROUTINES;
typedef struct _TOKEN_CONTROL TOKEN_CONTROL, *PTOKEN_CONTROL;
typedef struct _TOKEN_SOURCE TOKEN_SOURCE, *PTOKEN_SOURCE;
typedef struct _UEFI_FIRMWARE_INFORMATION UEFI_FIRMWARE_INFORMATION, *PUEFI_FIRMWARE_INFORMATION;
typedef struct _UNICODE_STRING UNICODE_STRING, *PUNICODE_STRING;
typedef struct _UNICODE_STRING32 UNICODE_STRING32, *PUNICODE_STRING32;
typedef struct _UNICODE_STRING64 UNICODE_STRING64, *PUNICODE_STRING64;
typedef struct _VPB VPB, *PVPB;
typedef struct _WORK_QUEUE_ITEM WORK_QUEUE_ITEM, *PWORK_QUEUE_ITEM;
typedef struct _XTBL_BOOT_PARAMETERS XTBL_BOOT_PARAMETERS, *PXTBL_BOOT_PARAMETERS;
typedef struct _XTBL_BOOT_PROTOCOL XTBL_BOOT_PROTOCOL, *PXTBL_BOOT_PROTOCOL;
typedef struct _XTBL_BOOTMENU_ITEM XTBL_BOOTMENU_ITEM, *PXTBL_BOOTMENU_ITEM;
@@ -374,8 +488,11 @@ typedef union _EFI_HASH_OUTPUT EFI_HASH_OUTPUT, *PEFI_HASH_OUTPUT;
typedef union _EFI_IA32_REGISTER_SET EFI_IA32_REGISTER_SET, *PEFI_IA32_REGISTER_SET;
typedef union _EFI_IP_ADDRESS EFI_IP_ADDRESS, *PEFI_IP_ADDRESS;
typedef union _EFI_PXE_BASE_CODE_PACKET EFI_PXE_BASE_CODE_PACKET, *PEFI_PXE_BASE_CODE_PACKET;
typedef union _EX_RUNDOWN_REFERENCE EX_RUNDOWN_REFERENCE, *PEX_RUNDOWN_REFERENCE;
typedef union _KPUSH_LOCK KPUSH_LOCK, *PKPUSH_LOCK;
typedef union _LARGE_INTEGER LARGE_INTEGER, *PLARGE_INTEGER;
typedef union _SINGLE_LIST_HEADER SINGLE_LIST_HEADER, *PSINGLE_LIST_HEADER;
typedef union _OBJECT_HEADER_HANDLE_INFO OBJECT_HEADER_HANDLE_INFO, *POBJECT_HEADER_HANDLE_INFO;
typedef union _POWER_STATE POWER_STATE, *PPOWER_STATE;
typedef union _ULARGE_INTEGER ULARGE_INTEGER, *PULARGE_INTEGER;
#endif /* __XTOS_ASSEMBLER__ */

View File

@@ -11,6 +11,7 @@
#include <xttarget.h>
#include <xtcompat.h>
#include <xtstruct.h>
/* C/C++ specific code */
@@ -156,6 +157,41 @@ typedef LPCUWSTR PCUTSTR, LPCUTSTR;
/* Variadic ABI types */
typedef __builtin_va_list VA_LIST, *PVA_LIST;
/* ANSI string structure */
typedef struct _ANSI_STRING
{
USHORT Length;
USHORT MaximumLength;
PSTR Buffer;
} ANSI_STRING, *PANSI_STRING;
typedef const ANSI_STRING *PCANSI_STRING;
/* 32-bit ANSI string structure */
typedef struct _ANSI_STRING32
{
USHORT Length;
USHORT MaximumLength;
ULONG Buffer;
} ANSI_STRING32, *PANSI_STRING32;
typedef const ANSI_STRING32 *PCANSI_STRING32;
/* 64-bit ANSI string structure */
typedef struct _ANSI_STRING64
{
USHORT Length;
USHORT MaximumLength;
ULONGLONG Buffer;
} ANSI_STRING64, *PANSI_STRING64;
typedef const ANSI_STRING64 *PCANSI_STRING64;
/* Constant counted string structure */
typedef struct _CSTRING
{
USHORT Length;
USHORT MaximumLength;
PCCHAR Buffer;
} CSTRING, *PCSTRING;
/* 128-bit floats structure */
typedef struct _FLOAT128
{
@@ -191,21 +227,32 @@ typedef union _LARGE_INTEGER
LONGLONG QuadPart;
} LARGE_INTEGER, *PLARGE_INTEGER;
/* 64-bit unsigned integer union */
typedef union _ULARGE_INTEGER
/* Double linked list structure definition */
typedef struct _LIST_ENTRY
{
struct
{
ULONG LowPart;
ULONG HighPart;
};
struct
{
ULONG LowPart;
ULONG HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
PLIST_ENTRY Flink;
PLIST_ENTRY Blink;
} LIST_ENTRY, *PLIST_ENTRY;
/* Locally Unique Identifier structure definition */
typedef struct _LUID
{
ULONG LowPart;
LONG HighPart;
} LUID, *PLUID;
/* 128-bit 16-byte aligned XMM register */
typedef struct _M128
{
ULONGLONG Low;
LONGLONG High;
} ALIGN(16) M128, *PM128;
/* Quadruple-word alignment structure definition */
typedef struct _QUAD
{
unsigned long long Alignment;
} QUAD, *PQUAD;
/* Counted string structure */
typedef struct _STRING
@@ -231,40 +278,21 @@ typedef struct _STRING64
ULONGLONG Buffer;
} STRING64, *PSTRING64;
/* Constant counted string structure */
typedef struct _CSTRING
/* 64-bit unsigned integer union */
typedef union _ULARGE_INTEGER
{
USHORT Length;
USHORT MaximumLength;
PCCHAR Buffer;
} CSTRING, *PCSTRING;
/* ANSI string structure */
typedef struct _ANSI_STRING
{
USHORT Length;
USHORT MaximumLength;
PSTR Buffer;
} ANSI_STRING, *PANSI_STRING;
typedef const ANSI_STRING *PCANSI_STRING;
/* 32-bit ANSI string structure */
typedef struct _ANSI_STRING32
{
USHORT Length;
USHORT MaximumLength;
ULONG Buffer;
} ANSI_STRING32, *PANSI_STRING32;
typedef const ANSI_STRING32 *PCANSI_STRING32;
/* 64-bit ANSI string structure */
typedef struct _ANSI_STRING64
{
USHORT Length;
USHORT MaximumLength;
ULONGLONG Buffer;
} ANSI_STRING64, *PANSI_STRING64;
typedef const ANSI_STRING64 *PCANSI_STRING64;
struct
{
ULONG LowPart;
ULONG HighPart;
};
struct
{
ULONG LowPart;
ULONG HighPart;
} u;
ULONGLONG QuadPart;
} ULARGE_INTEGER, *PULARGE_INTEGER;
/* UNICODE string structure */
typedef struct _UNICODE_STRING

View File

@@ -14,7 +14,10 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/data.cc
${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/procsup.cc
${XTOSKRNL_SOURCE_DIR}/ar/${ARCH}/traps.cc
${XTOSKRNL_SOURCE_DIR}/ex/data.cc
${XTOSKRNL_SOURCE_DIR}/ex/exports.cc
${XTOSKRNL_SOURCE_DIR}/ex/laslist.cc
${XTOSKRNL_SOURCE_DIR}/ex/resource.cc
${XTOSKRNL_SOURCE_DIR}/ex/rundown.cc
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/cpu.cc
${XTOSKRNL_SOURCE_DIR}/hl/${ARCH}/firmware.cc
@@ -31,30 +34,38 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/hl/fbdev.cc
${XTOSKRNL_SOURCE_DIR}/hl/init.cc
${XTOSKRNL_SOURCE_DIR}/hl/ioreg.cc
${XTOSKRNL_SOURCE_DIR}/kd/${ARCH}/debug.cc
${XTOSKRNL_SOURCE_DIR}/kd/data.cc
${XTOSKRNL_SOURCE_DIR}/kd/dbgio.cc
${XTOSKRNL_SOURCE_DIR}/kd/debug.cc
${XTOSKRNL_SOURCE_DIR}/kd/exports.cc
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/dispatch.cc
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/krnlinit.cc
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/kthread.cc
${XTOSKRNL_SOURCE_DIR}/ke/${ARCH}/proc.cc
${XTOSKRNL_SOURCE_DIR}/ke/affinity.cc
${XTOSKRNL_SOURCE_DIR}/ke/apc.cc
${XTOSKRNL_SOURCE_DIR}/ke/bootinfo.cc
${XTOSKRNL_SOURCE_DIR}/ke/crash.cc
${XTOSKRNL_SOURCE_DIR}/ke/data.cc
${XTOSKRNL_SOURCE_DIR}/ke/dispatch.cc
${XTOSKRNL_SOURCE_DIR}/ke/dispobj.cc
${XTOSKRNL_SOURCE_DIR}/ke/dpc.cc
${XTOSKRNL_SOURCE_DIR}/ke/event.cc
${XTOSKRNL_SOURCE_DIR}/ke/exports.cc
${XTOSKRNL_SOURCE_DIR}/ke/ipi.cc
${XTOSKRNL_SOURCE_DIR}/ke/kprocess.cc
${XTOSKRNL_SOURCE_DIR}/ke/krnlinit.cc
${XTOSKRNL_SOURCE_DIR}/ke/kthread.cc
${XTOSKRNL_SOURCE_DIR}/ke/kubsan.cc
${XTOSKRNL_SOURCE_DIR}/ke/pushlock.cc
${XTOSKRNL_SOURCE_DIR}/ke/runlevel.cc
${XTOSKRNL_SOURCE_DIR}/ke/schedule.cc
${XTOSKRNL_SOURCE_DIR}/ke/semphore.cc
${XTOSKRNL_SOURCE_DIR}/ke/shdata.cc
${XTOSKRNL_SOURCE_DIR}/ke/spinlock.cc
${XTOSKRNL_SOURCE_DIR}/ke/sysres.cc
${XTOSKRNL_SOURCE_DIR}/ke/sysserv.cc
${XTOSKRNL_SOURCE_DIR}/ke/systime.cc
${XTOSKRNL_SOURCE_DIR}/ke/timer.cc
${XTOSKRNL_SOURCE_DIR}/mm/${ARCH}/mmgr.cc
@@ -74,26 +85,37 @@ list(APPEND XTOSKRNL_SOURCE
${XTOSKRNL_SOURCE_DIR}/mm/paging.cc
${XTOSKRNL_SOURCE_DIR}/mm/pfn.cc
${XTOSKRNL_SOURCE_DIR}/mm/pool.cc
${XTOSKRNL_SOURCE_DIR}/mm/probe.cc
${XTOSKRNL_SOURCE_DIR}/mm/pte.cc
${XTOSKRNL_SOURCE_DIR}/mm/quota.cc
${XTOSKRNL_SOURCE_DIR}/po/idle.cc
${XTOSKRNL_SOURCE_DIR}/ps/process.cc
${XTOSKRNL_SOURCE_DIR}/ps/thread.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/atomic.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/dispatch.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/exsup.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/intrin.cc
${XTOSKRNL_SOURCE_DIR}/rtl/${ARCH}/slist.cc
${XTOSKRNL_SOURCE_DIR}/rtl/atomic.cc
${XTOSKRNL_SOURCE_DIR}/rtl/bitmap.cc
${XTOSKRNL_SOURCE_DIR}/rtl/data.cc
${XTOSKRNL_SOURCE_DIR}/rtl/endian.cc
${XTOSKRNL_SOURCE_DIR}/rtl/exports.cc
${XTOSKRNL_SOURCE_DIR}/rtl/exsup.cc
${XTOSKRNL_SOURCE_DIR}/rtl/guid.cc
${XTOSKRNL_SOURCE_DIR}/rtl/lifo.cc
${XTOSKRNL_SOURCE_DIR}/rtl/llist.cc
${XTOSKRNL_SOURCE_DIR}/rtl/math.cc
${XTOSKRNL_SOURCE_DIR}/rtl/memory.cc
${XTOSKRNL_SOURCE_DIR}/rtl/nls.cc
${XTOSKRNL_SOURCE_DIR}/rtl/rbtree.cc
${XTOSKRNL_SOURCE_DIR}/rtl/sha1.cc
${XTOSKRNL_SOURCE_DIR}/rtl/slist.cc
${XTOSKRNL_SOURCE_DIR}/rtl/string.cc
${XTOSKRNL_SOURCE_DIR}/rtl/time.cc
${XTOSKRNL_SOURCE_DIR}/rtl/widestr.cc)
${XTOSKRNL_SOURCE_DIR}/rtl/unicode.cc
${XTOSKRNL_SOURCE_DIR}/rtl/widestr.cc
${XTOSKRNL_SOURCE_DIR}/se/descript.cc
${XTOSKRNL_SOURCE_DIR}/se/privileg.cc)
# Set module definition SPEC file
set_specfile(xtoskrnl.spec xtoskrnl.exe)

View File

@@ -40,6 +40,7 @@ corresponding C++ namespace in which the subsystem's classes and routines reside
* Ke - Core Kernel Library
* Mm - Memory Manager
* Po - Plug&Play and Power Manager
* Ps - Process and Thread Manager
* Rtl - Runtime library
### AR: Architecture Library
@@ -76,6 +77,12 @@ This subsystem handles power management events, such as shutdown or standby. It
supporting device detection and installation at boot time. Furthermore, it is responsible for starting and stopping
devices on demand.
### PS: Process and Thread Manager
This subsystem is responsible for managing the lifecycle of processes and threads within the operating system. It
handles the creation, termination, and state tracking of these execution units. Furthermore, it provides the high-level
executive abstractions required to allocate system resources, manage process boundaries, and coordinate with the core
kernel for thread execution.
### RTL: Runtime Library
The Runtime Library provides a kernel-mode implementation of common C library functions. It includes many utility
routines, for use by other kernel components.

View File

@@ -467,9 +467,11 @@ ApEnterLongMode:
/* Save the pointer to PROCESSOR_START_BLOCK */
movq %rdi, %rcx
pushq %rdi
/* Call the EntryPoint routine */
/* Allocate 32 bytes of shadow space */
subq $32, %rsp
/* Fetch the EntryPoint address and call the routine */
movq PROCESSOR_START_BLOCK_EntryPoint(%rdi), %rax
call *%rax

View File

@@ -617,6 +617,56 @@ AR::CpuFunctions::ReadWriteBarrier(VOID)
: "memory");
}
/**
* Performs a Bit Scan Forward instruction to locate the most significant set bit.
*
* @param Index
* Receives the zero-based index of the highest set bit when one is found.
*
* @param Mask
* Supplies the bitmap to scan.
*
* @return This routine returns TRUE when a set bit was found, otherwise FALSE.
*
* @since XT 1.0
*/
XTCDECL
BOOLEAN
AR::CpuFunctions::ScanForwardBit(OUT PULONG Index,
IN ULONG Mask)
{
/* Defer to the BSF instruction */
__asm__("bsfl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask));
/* Report whether the input had any bit set */
return Mask ? TRUE : FALSE;
}
/**
* Performs a Bit Scan Reverse instruction to locate the most significant set bit.
*
* @param Index
* Receives the zero-based index of the highest set bit when one is found.
*
* @param Mask
* Supplies the bitmap to scan.
*
* @return This routine returns TRUE when a set bit was found, otherwise FALSE.
*
* @since XT 1.0
*/
XTCDECL
BOOLEAN
AR::CpuFunctions::ScanReverseBit(OUT PULONG Index,
IN ULONG Mask)
{
/* Defer to the BSR instruction */
__asm__("bsrl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask));
/* Report whether the input had any bit set */
return Mask ? TRUE : FALSE;
}
/**
* Instructs the processor to set the interrupt flag.
*

View File

@@ -28,7 +28,7 @@ XTAPI
VOID
AR::ProcessorSupport::GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType,
OUT PVOID *TrampolineCode,
OUT PULONG_PTR TrampolineSize)
OUT PULONG TrampolineSize)
{
/* Get trampoline information */
switch(TrampolineType)
@@ -320,30 +320,28 @@ AR::ProcessorSupport::InitializeIdt(IN PKPROCESSOR_BLOCK ProcessorBlock)
}
/* Setup IDT handlers for known interrupts and traps */
SetIdtGate(ProcessorBlock->IdtBase, 0x00, (PVOID)ArTrapEntry[0x00], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x01, (PVOID)ArTrapEntry[0x01], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x00, (PVOID)ArTrapEntry[0x00], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x01, (PVOID)ArTrapEntry[0x01], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x02, (PVOID)ArTrapEntry[0x02], KGDT_R0_CODE, KIDT_IST_NMI, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x03, (PVOID)ArTrapEntry[0x03], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x04, (PVOID)ArTrapEntry[0x04], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x05, (PVOID)ArTrapEntry[0x05], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x06, (PVOID)ArTrapEntry[0x06], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x07, (PVOID)ArTrapEntry[0x07], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x08, (PVOID)ArTrapEntry[0x08], KGDT_R0_CODE, KIDT_IST_PANIC, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x09, (PVOID)ArTrapEntry[0x09], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0A, (PVOID)ArTrapEntry[0x0A], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0B, (PVOID)ArTrapEntry[0x0B], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0C, (PVOID)ArTrapEntry[0x0C], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0D, (PVOID)ArTrapEntry[0x0D], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0E, (PVOID)ArTrapEntry[0x0E], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x10, (PVOID)ArTrapEntry[0x10], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x11, (PVOID)ArTrapEntry[0x11], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x12, (PVOID)ArTrapEntry[0x12], KGDT_R0_CODE, KIDT_IST_MCA, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x13, (PVOID)ArTrapEntry[0x13], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x03, (PVOID)ArTrapEntry[0x03], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x04, (PVOID)ArTrapEntry[0x04], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x05, (PVOID)ArTrapEntry[0x05], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x06, (PVOID)ArTrapEntry[0x06], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x07, (PVOID)ArTrapEntry[0x07], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x08, (PVOID)ArTrapEntry[0x08], KGDT_R0_CODE, KIDT_IST_PANIC, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x09, (PVOID)ArTrapEntry[0x09], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0A, (PVOID)ArTrapEntry[0x0A], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0B, (PVOID)ArTrapEntry[0x0B], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0C, (PVOID)ArTrapEntry[0x0C], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0D, (PVOID)ArTrapEntry[0x0D], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x0E, (PVOID)ArTrapEntry[0x0E], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x10, (PVOID)ArTrapEntry[0x10], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x11, (PVOID)ArTrapEntry[0x11], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x12, (PVOID)ArTrapEntry[0x12], KGDT_R0_CODE, KIDT_IST_MCA, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x13, (PVOID)ArTrapEntry[0x13], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x1F, (PVOID)ArTrapEntry[0x1F], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x2C, (PVOID)ArTrapEntry[0x2C], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x2D, (PVOID)ArTrapEntry[0x2D], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_TRAP_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x2F, (PVOID)ArTrapEntry[0x2F], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0xE1, (PVOID)ArInterruptEntry[0xE1], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING0, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x2C, (PVOID)ArTrapEntry[0x2C], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_INTERRUPT_GATE);
SetIdtGate(ProcessorBlock->IdtBase, 0x2D, (PVOID)ArTrapEntry[0x2D], KGDT_R0_CODE, KIDT_IST_RESERVED, KIDT_ACCESS_RING3, AMD64_INTERRUPT_GATE);
}
/**
@@ -477,8 +475,9 @@ AR::ProcessorSupport::InitializeProcessorBlock(OUT PKPROCESSOR_BLOCK ProcessorBl
/* Set initial MXCSR register value */
ProcessorBlock->Prcb.MxCsr = INITIAL_MXCSR;
/* Set initial runlevel */
/* Set initial runlevel and mark processor as started */
ProcessorBlock->RunLevel = PASSIVE_LEVEL;
ProcessorBlock->Started = TRUE;
}
/**

View File

@@ -171,14 +171,6 @@ AR::Traps::DispatchTrap(IN PKTRAP_FRAME TrapFrame)
/* Debug-Service-Request raised */
HandleTrap2D(TrapFrame);
break;
case 0x2F:
/* Software Interrupt at DISPATCH level */
HandleTrap2F(TrapFrame);
break;
case 0xE1:
/* InterProcessor Interrupt (IPI) */
HandleTrapE1(TrapFrame);
break;
default:
/* Unknown/Unexpected trap */
HandleTrapFF(TrapFrame);
@@ -608,40 +600,6 @@ AR::Traps::HandleTrap2D(IN PKTRAP_FRAME TrapFrame)
KE::Crash::Panic(0x2D);
}
/**
* Handles the trap 0x2F when a software interrupt gets generated at DISPATCH_LEVEL.
*
* @param TrapFrame
* Supplies a kernel trap frame pushed by common trap handler on the stack.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
AR::Traps::HandleTrap2F(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Unhandled software interrupt at DISPATCH level (0x2F)!\n");
}
/**
* Handles the trap 0xE1 when InterProcessor Interrupt (IPI) occurs.
*
* @param TrapFrame
* Supplies a kernel trap frame pushed by common trap handler on the stack.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTCDECL
VOID
AR::Traps::HandleTrapE1(IN PKTRAP_FRAME TrapFrame)
{
DebugPrint(L"Unhandled IPI interrupt (0xE1)!\n");
}
/**
* Handles the trap 0xFF when Unexpected Interrupt occurs.
*

View File

@@ -587,6 +587,56 @@ AR::CpuFunctions::ReadWriteBarrier(VOID)
: "memory");
}
/**
* Performs a Bit Scan Forward instruction to locate the most significant set bit.
*
* @param Index
* Receives the zero-based index of the highest set bit when one is found.
*
* @param Mask
* Supplies the bitmap to scan.
*
* @return This routine returns TRUE when a set bit was found, otherwise FALSE.
*
* @since XT 1.0
*/
XTCDECL
BOOLEAN
AR::CpuFunctions::ScanForwardBit(OUT PULONG Index,
IN ULONG Mask)
{
/* Defer to the BSF instruction */
__asm__("bsfl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask));
/* Report whether the input had any bit set */
return Mask ? TRUE : FALSE;
}
/**
* Performs a Bit Scan Reverse instruction to locate the most significant set bit.
*
* @param Index
* Receives the zero-based index of the highest set bit when one is found.
*
* @param Mask
* Supplies the bitmap to scan.
*
* @return This routine returns TRUE when a set bit was found, otherwise FALSE.
*
* @since XT 1.0
*/
XTCDECL
BOOLEAN
AR::CpuFunctions::ScanReverseBit(OUT PULONG Index,
IN ULONG Mask)
{
/* Defer to the BSR instruction */
__asm__("bsrl %[Mask], %[Index]" : [Index] "=r" (*Index) : [Mask] "mr" (Mask));
/* Report whether the input had any bit set */
return Mask ? TRUE : FALSE;
}
/**
* Instructs the processor to set the interrupt flag.
*

View File

@@ -28,7 +28,7 @@ XTAPI
VOID
AR::ProcessorSupport::GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType,
OUT PVOID *TrampolineCode,
OUT PULONG_PTR TrampolineSize)
OUT PULONG TrampolineSize)
{
/* Get trampoline information */
switch(TrampolineType)
@@ -465,8 +465,9 @@ AR::ProcessorSupport::InitializeProcessorBlock(OUT PKPROCESSOR_BLOCK ProcessorBl
ProcessorBlock->Prcb.IdleThread = &(KE::KThread::GetInitialThread())->ThreadControlBlock;
ProcessorBlock->Prcb.NextThread = NULLPTR;
/* Set initial runlevel */
/* Set initial runlevel and mark processor as started */
ProcessorBlock->RunLevel = PASSIVE_LEVEL;
ProcessorBlock->Started = TRUE;
}
/**

43
xtoskrnl/ex/data.cc Normal file
View File

@@ -0,0 +1,43 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/ex/data.cc
* DESCRIPTION: Kernel Executive global and static data
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
*/
#include <xtos.hh>
/* Tracks all active non-paged lookaside lists in the system */
LIST_ENTRY EX::LookasideList::NonPagedLookasideListHead;
/* Spinlock protecting the integrity of the NonPagedLookasideListHead */
KSPIN_LOCK EX::LookasideList::NonPagedLookasideListLock;
/* Array of standard system lookaside lists for non-paged pool allocations */
GENERAL_LOOKASIDE EX::LookasideList::NonPagedPoolLookasideLists[POOL_LOOKASIDE_LISTS];
/* Tracks all active paged lookaside lists in the system */
LIST_ENTRY EX::LookasideList::PagedLookasideListHead;
/* Spinlock protecting the integrity of the PagedLookasideListHead */
KSPIN_LOCK EX::LookasideList::PagedLookasideListLock;
/* Array of standard system lookaside lists for paged pool allocations */
GENERAL_LOOKASIDE EX::LookasideList::PagedPoolLookasideLists[POOL_LOOKASIDE_LISTS];
/* Tracks all standard pool lookaside lists */
LIST_ENTRY EX::LookasideList::PoolLookasideListHead;
/* Tracks dynamic system lookaside lists */
LIST_ENTRY EX::LookasideList::SystemLookasideListHead;
/* Specifies the default timeout interval for resource wait operations */
LARGE_INTEGER EX::Resources::ResourcesTimeOut;
/* Tracks all initialized structures currently active in the system */
LIST_ENTRY EX::Resources::SystemResourcesList;
/* The global spinlock that protects the system resources list */
KSPIN_LOCK EX::Resources::SystemResourcesLock;

453
xtoskrnl/ex/laslist.cc Normal file
View File

@@ -0,0 +1,453 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/ex/laslist.cc
* DESCRIPTION: Lookaside Lists support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.hh>
/**
* Attempts to allocate a fixed-size buffer from the specified non-paged lookaside list.
*
* @param LookasideList
* Supplies a pointer to the non-paged lookaside list.
*
* @return Returns a pointer to the allocated buffer, or NULLPTR if the allocation fails.
*
* @since XT 1.0
*/
XTAPI
PVOID
EX::LookasideList::AllocateFromLookasideList(IN PNONPAGED_LOOKASIDE_LIST LookasideList)
{
PVOID Buffer;
/* Increment the total number of allocation requests */
LookasideList->Global.TotalAllocates++;
/* Attempt to pop an entry from the lookaside list */
Buffer = RTL::Atomic::PopEntrySingleList(&LookasideList->Global.ListHead);
if(!Buffer)
{
/* Increment the miss counter */
LookasideList->Global.AllocateMisses++;
/* Fallback to standard pool allocator */
(LookasideList->Global.Allocate)(LookasideList->Global.Type, LookasideList->Global.Size,
&Buffer, LookasideList->Global.Tag);
}
/* Return the allocated buffer */
return Buffer;
}
/**
* Attempts to allocate a fixed-size buffer from the specified paged lookaside list.
*
* @param LookasideList
* Supplies a pointer to the paged lookaside list.
*
* @return Returns a pointer to the allocated buffer, or NULLPTR if the allocation fails.
*
* @since XT 1.0
*/
XTAPI
PVOID
EX::LookasideList::AllocateFromLookasideList(IN PPAGED_LOOKASIDE_LIST LookasideList)
{
PVOID Buffer;
/* Increment the total number of allocation requests */
LookasideList->Global.TotalAllocates++;
/* Attempt to pop an entry from the lookaside list */
Buffer = RTL::Atomic::PopEntrySingleList(&LookasideList->Global.ListHead);
if(!Buffer)
{
/* Increment the miss counter */
LookasideList->Global.AllocateMisses++;
/* Fallback to standard pool allocator */
(LookasideList->Global.Allocate)(LookasideList->Global.Type, LookasideList->Global.Size,
&Buffer, LookasideList->Global.Tag);
}
/* Return the allocated buffer */
return Buffer;
}
/**
* Allocates a memory block from the specified per-processor lookaside list.
*
* @param Number
* Supplies the index of the lookaside list to allocate from.
*
* @return This routine returns a pointer to the allocated memory block, or NULLPTR if allocation fails.
*
* @since XT 1.0
*/
XTAPI
PVOID
EX::LookasideList::AllocateFromPerProcessorList(IN NONPAGED_LOOKASIDE_NUMBER Number)
{
PKPROCESSOR_CONTROL_BLOCK Prcb;
PGENERAL_LOOKASIDE Lookaside;
PVOID Entry;
/* Retrieve the current Processor Control Block */
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
/* Target the processor's local lookaside list and increment the tracking metric */
Lookaside = Prcb->LookasideList[Number].Local;
Lookaside->TotalAllocates++;
/* Attempt a pop from the local list */
Entry = RTL::Atomic::PopEntrySingleList(&Lookaside->ListHead);
if(Entry != NULLPTR)
{
/* Return the retrieved a pre-allocated block */
return Entry;
}
/* Record a local cache miss */
Lookaside->AllocateMisses++;
Lookaside->TotalAllocates++;
/* Switch the target to the shared global lookaside list */
Lookaside = Prcb->LookasideList[Number].Global;
/* Attempt a pop from the global list */
Entry = RTL::Atomic::PopEntrySingleList(&Lookaside->ListHead);
if(Entry != NULLPTR)
{
/* Return the retrieved a pre-allocated block */
return Entry;
}
/* Both caches are saturated, record a miss */
Lookaside->AllocateMisses++;
/* Invoke the pool allocator */
(Lookaside->Allocate)(Lookaside->Type, Lookaside->Size, &Entry, Lookaside->Tag);
/* Return the newly allocated block */
return Entry;
}
/**
* Returns a previously allocated memory block to the specified non-paged lookaside list.
*
* @param LookasideList
* Supplies a pointer to the non-paged lookaside list.
*
* @param Entry
* Supplies a pointer to the memory block being freed.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::LookasideList::FreeToLookasideList(IN PNONPAGED_LOOKASIDE_LIST LookasideList,
IN PVOID Entry)
{
/* Increment the tracking metric */
LookasideList->Global.TotalFrees++;
/* Verify if the lookaside list has reached its maximum capacity threshold */
if(RTL::SinglyList::QueryListDepth(&LookasideList->Global.ListHead) >= LookasideList->Global.Depth)
{
/* The list is full, record a capacity miss */
LookasideList->Global.FreeMisses++;
(LookasideList->Global.Free)(Entry);
}
else
{
/* Push the block onto the lookaside list */
RTL::Atomic::PushEntrySingleList(&LookasideList->Global.ListHead, (PSINGLE_LIST_ENTRY)Entry);
}
}
/**
* Returns a previously allocated memory block to the specified paged lookaside list.
*
* @param LookasideList
* Supplies a pointer to the paged lookaside list.
*
* @param Entry
* Supplies a pointer to the memory block being freed.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::LookasideList::FreeToLookasideList(IN PPAGED_LOOKASIDE_LIST LookasideList,
IN PVOID Entry)
{
/* Increment the tracking metric */
LookasideList->Global.TotalFrees++;
/* Verify if the lookaside list has reached its maximum capacity threshold */
if(RTL::SinglyList::QueryListDepth(&LookasideList->Global.ListHead) >= LookasideList->Global.Depth)
{
/* The list is full, record a capacity miss */
LookasideList->Global.FreeMisses++;
(LookasideList->Global.Free)(Entry);
}
else
{
/* Push the block onto the lookaside list */
RTL::Atomic::PushEntrySingleList(&LookasideList->Global.ListHead, (PSINGLE_LIST_ENTRY)Entry);
}
}
/**
* Frees a memory block back to the specified per-processor lookaside list.
*
* @param Number
* Supplies the index of the lookaside list receiving the freed block.
*
* @param Entry
* Supplies a pointer to the memory block being freed.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::LookasideList::FreeToPerProcessorList(IN NONPAGED_LOOKASIDE_NUMBER Number,
IN PVOID Entry)
{
PKPROCESSOR_CONTROL_BLOCK Prcb;
PGENERAL_LOOKASIDE Lookaside;
/* Retrieve the current Processor Control Block */
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
/* Target the processor's local lookaside list and increment the tracking metric */
Lookaside = Prcb->LookasideList[Number].Local;
Lookaside->TotalFrees += 1;
/* Check if the lookaside list has reached its maximum capacity threshold */
if(RTL::SinglyList::QueryListDepth(&Lookaside->ListHead) >= Lookaside->Depth)
{
/* The local list is full, record a capacity miss */
Lookaside->FreeMisses++;
Lookaside->TotalFrees++;
/* Switch the target to the shared global lookaside list */
Lookaside = Prcb->LookasideList[Number].Global;
/* Check if the lookaside list has reached its maximum capacity threshold */
if(RTL::SinglyList::QueryListDepth(&Lookaside->ListHead) >= Lookaside->Depth)
{
/* Both caches are saturated, record a miss */
Lookaside->FreeMisses++;
(Lookaside->Free)(Entry);
/* Exit the routine */
return;
}
}
/* Push the block onto the selected lookaside list */
RTL::Atomic::PushEntrySingleList(&Lookaside->ListHead, (PSINGLE_LIST_ENTRY)Entry);
}
/**
* Initializes a generic lookaside list and inserts it into the tracking list.
*
* @param LookasideList
* Supplies a pointer to the general lookaside list structure to initialize.
*
* @param PoolType
* Supplies the type of memory pool to be allocated.
*
* @param Size
* Supplies the size, in bytes, of the entries to be allocated from the lookaside list.
*
* @param Tag
* Supplies the pool tag to be used for allocations.
*
* @param MaxDepth
* Supplies the maximum number of entries the lookaside list should hold.
*
* @param ListHead
* Supplies a pointer to the linked list header used to track this lookaside list.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::LookasideList::InitializeLookasideList(IN OUT PGENERAL_LOOKASIDE LookasideList,
IN MMPOOL_TYPE PoolType,
IN ULONG Size,
IN ULONG Tag,
IN USHORT MaxDepth,
IN PLIST_ENTRY ListHead)
{
/* Initialize the singly linked list header and insert it into the tracking list */
RTL::SinglyList::InitializeListHead(&LookasideList->ListHead);
RTL::LinkedList::InsertTailList(ListHead, &LookasideList->ListEntry);
/* Initialize lookaside list properties */
LookasideList->Allocate = &MM::Allocator::AllocatePool;
LookasideList->AllocateHits = 0;
LookasideList->Depth = 2;
LookasideList->Free = &MM::Allocator::FreePool;
LookasideList->FreeHits = 0;
LookasideList->LastAllocateHits = 0;
LookasideList->LastTotalAllocates = 0;
LookasideList->MaximumDepth = MaxDepth;
LookasideList->Size = Size;
LookasideList->Tag = Tag;
LookasideList->TotalAllocates = 0;
LookasideList->TotalFrees = 0;
LookasideList->Type = PoolType;
}
/**
* Initializes the per-processor lookaside list pointers.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::LookasideList::InitializePointers(VOID)
{
PGENERAL_LOOKASIDE LookasideList;
PKPROCESSOR_CONTROL_BLOCK Prcb;
ULONG Index, Offset;
XTSTATUS Status;
/* Retrieve the processor control block */
Prcb = KE::Processor::GetCurrentProcessorControlBlock();
/* Allocate a contiguous memory block for lookaside lists */
Status = MM::Allocator::AllocatePool(NonPagedPool, sizeof(GENERAL_LOOKASIDE) * POOL_LOOKASIDE_LISTS * 2,
(PVOID*)&LookasideList, TAG_MM_MEMORY_POOL);
/* Initialize both non-paged and paged lookaside lists for all pool indexes */
for(Index = 0; Index < POOL_LOOKASIDE_LISTS; Index++)
{
/* Wire the global pointer for the non-paged lookaside list */
Prcb->NonPagedLookasideList[Index].Global = &NonPagedPoolLookasideLists[Index];
/* Check if the contiguous allocation was successful */
if(Status == STATUS_SUCCESS && LookasideList)
{
/* Map the pointer to the first half of the contiguous block */
Prcb->NonPagedLookasideList[Index].Local = &LookasideList[Index];
/* Initialize the local non-paged list */
EX::LookasideList::InitializeLookasideList(&LookasideList[Index], NonPagedPool,
(Index + 1) * 8, TAG_MM_MEMORY_POOL,
256, &PoolLookasideListHead);
}
else
{
/* Allocation failed, use shared global list */
Prcb->NonPagedLookasideList[Index].Local = &NonPagedPoolLookasideLists[Index];
}
/* Wire the global pointer for the paged lookaside list */
Prcb->PagedLookasideList[Index].Global = &PagedPoolLookasideLists[Index];
/* Check if the contiguous allocation was successful */
if(Status == STATUS_SUCCESS && LookasideList)
{
/* Calculate the offset into the second half of the contiguous memory block */
Offset = POOL_LOOKASIDE_LISTS + Index;
/* Map the pointer to the second half of the contiguous block */
Prcb->PagedLookasideList[Index].Local = &LookasideList[Offset];
/* Initialize the local paged list */
EX::LookasideList::InitializeLookasideList(&LookasideList[Offset], PagedPool,
(Index + 1) * 8, TAG_MM_MEMORY_POOL,
256, &PoolLookasideListHead);
}
else
{
/* Allocation failed, use shared global list */
Prcb->PagedLookasideList[Index].Local = &PagedPoolLookasideLists[Index];
}
}
}
/**
* Initializes global system lookaside lists and their synchronization primitives.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::LookasideList::InitializeSystemLookasideLists(VOID)
{
ULONG Index;
/* Initialize spinlocks for protecting lookaside list operations */
KE::SpinLock::InitializeSpinLock(&NonPagedLookasideListLock);
KE::SpinLock::InitializeSpinLock(&PagedLookasideListLock);
/* Initialize global list heads for tracking various types of lookaside lists */
RTL::LinkedList::InitializeListHead(&NonPagedLookasideListHead);
RTL::LinkedList::InitializeListHead(&PagedLookasideListHead);
RTL::LinkedList::InitializeListHead(&PoolLookasideListHead);
RTL::LinkedList::InitializeListHead(&SystemLookasideListHead);
/* Initialize standard pool lookaside lists */
for(Index = 0; Index < POOL_LOOKASIDE_LISTS; Index++)
{
/* Initialize non-paged pool lookaside list */
InitializeLookasideList(&NonPagedPoolLookasideLists[Index], NonPagedPool, (Index + 1) * 8,
TAG_MM_MEMORY_POOL, 256, &PoolLookasideListHead);
/* Initialize paged pool lookaside list */
InitializeLookasideList(&PagedPoolLookasideLists[Index], PagedPool, (Index + 1) * 8,
TAG_MM_MEMORY_POOL, 256, &PoolLookasideListHead);
}
}
/**
* Retrieves the head of the pool lookaside list tracker.
*
* @return This routine returns a pointer to the global pool lookaside list head.
*
* @since XT 1.0
*/
XTAPI
PLIST_ENTRY
EX::LookasideList::GetPoolLookasideListHead(VOID)
{
/* Return the head of the pool lookaside list */
return &PoolLookasideListHead;
}
/**
* Retrieves the head of the system-wide lookaside list tracker.
*
* @return This routine returns a pointer to the global system lookaside list head.
*
* @since XT 1.0
*/
XTAPI
PLIST_ENTRY
EX::LookasideList::GetSystemLookasideListHead(VOID)
{
/* Return the head of the pool lookaside list */
return &SystemLookasideListHead;
}

169
xtoskrnl/ex/resource.cc Normal file
View File

@@ -0,0 +1,169 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/ex/resource.cc
* DESCRIPTION: Exclusive resource synchronization support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.hh>
/**
* Deletes a system resource and frees its associated memory allocations.
*
* @param Resource
* Supplies a pointer to the resource to be deleted.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
EX::Resources::DeleteResource(IN PERESOURCE Resource)
{
/* Start a guarded code block */
{
/* Raise runlevel to DISPATCH level and acquire system resources lock */
KE::RaiseRunLevel RunLevel(DISPATCH_LEVEL);
KE::QueuedSpinLockGuard Guard(&SystemResourcesLock);
/* Remove the resource from the system resource list */
RTL::LinkedList::RemoveEntryList(&Resource->SystemResourcesList);
}
/* Check if exclusive waiters event exists */
if(Resource->ExclusiveWaiters)
{
/* Free the exclusive waiters event */
MM::Allocator::FreePool(Resource->ExclusiveWaiters);
}
/* Check if owner table exists */
if(Resource->OwnerTable)
{
/* Free the owner table */
MM::Allocator::FreePool(Resource->OwnerTable);
}
/* Check if shared waiters semaphore exists */
if(Resource->SharedWaiters)
{
/* Free the shared waiters semaphore */
MM::Allocator::FreePool(Resource->SharedWaiters);
}
/* Return success */
return STATUS_SUCCESS;
}
/**
* Initializes a system resource object.
*
* @param Resource
* Supplies a pointer to the resource structure to be initialized.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
EX::Resources::InitializeResource(IN PERESOURCE Resource)
{
/* Clear the entire resource structure */
RTL::Memory::ZeroMemory(Resource, sizeof(ERESOURCE));
/* Initialize the spinlock used for managing this resource */
KE::SpinLock::InitializeSpinLock(&Resource->SpinLock);
/* Raise runlevel to DISPATCH level and acquire the global system resources lock */
KE::RaiseRunLevel RunLevel(DISPATCH_LEVEL);
KE::QueuedSpinLockGuard Guard(&SystemResourcesLock);
/* Insert the resource into the global tracking list */
RTL::LinkedList::InsertTailList(&SystemResourcesList, &Resource->SystemResourcesList);
/* Return success */
return STATUS_SUCCESS;
}
/**
* Initializes the global system resource structures and synchronization primitives.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTAPI
VOID
EX::Resources::InitializeSystemResources(VOID)
{
/* Set the default timeout for resource operations to 4 seconds relative to now */
ResourcesTimeOut.QuadPart = -40000000LL;
/* Initialize the global system resources list and its protecting spinlock */
RTL::LinkedList::InitializeListHead(&SystemResourcesList);
KE::SpinLock::InitializeSpinLock(&SystemResourcesLock);
}
/**
* Reinitializes an existing resource object, resetting its state and synchronization primitives.
*
* @param Resource
* Supplies a pointer to the resource structure to be reinitialized.
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
EX::Resources::ReinitializeResource(IN PERESOURCE Resource)
{
ULONG Index;
/* Zero the active count and flags */
Resource->ActiveCount = 0;
Resource->ActiveEntries = 0;
Resource->Flag = 0;
/* Zero the contention count and counters */
Resource->ContentionCount = 0;
Resource->NumberOfSharedWaiters = 0;
Resource->NumberOfExclusiveWaiters = 0;
/* Zero the owner entry */
Resource->OwnerEntry.OwnerThread = 0;
Resource->OwnerEntry.TableSize = 0;
/* Check if exclusive waiters event exists */
if(Resource->ExclusiveWaiters)
{
/* Reinitialize the event */
KE::Event::InitializeEvent(Resource->ExclusiveWaiters, SynchronizationEvent, FALSE);
}
/* Check if owner table exists */
if(Resource->OwnerTable)
{
/* Iterate over the owner table */
for(Index = 1; Index < Resource->OwnerTable->TableSize; Index++)
{
/* Zero the owner table */
Resource->OwnerTable[Index].OwnerCount = 0;
Resource->OwnerTable[Index].OwnerThread = 0;
}
}
/* Check if shared waiters semaphore exists */
if(Resource->SharedWaiters)
{
/* Reinitialize the semaphore */
KE::Semaphore::InitializeSemaphore(Resource->SharedWaiters, 0, MAXLONG);
}
/* Return success */
return STATUS_SUCCESS;
}

View File

@@ -4,6 +4,7 @@
* FILE: xtoskrnl/ex/rundown.cc
* DESCRIPTION: Rundown protection mechanism
* DEVELOPERS: Rafal Kupiec <belliash@codingworkshop.eu.org>
* Aiken Harris <harraiken91@gmail.com>
*/
#include <xtos.hh>
@@ -22,6 +23,28 @@
XTFASTCALL
BOOLEAN
EX::Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{
/* Acquire protection */
return AcquireProtection(Descriptor, 1);
}
/**
* Acquires the rundown protection for given descriptor.
*
* @param Descriptor
* Supplies a pointer to the rundown block descriptor.
*
* @param Count
* Supplies the number of times the protection should be acquired.
*
* @return This routine returns TRUE if protection acquired successfully, or FALSE otherwise.
*
* @since XT 1.0
*/
XTFASTCALL
BOOLEAN
EX::Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor,
IN ULONG Count)
{
ULONG_PTR CurrentValue, NewValue;
@@ -39,7 +62,7 @@ EX::Rundown::AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
}
/* Attempt to increment the usage count */
NewValue = CurrentValue + 2;
NewValue = CurrentValue + 2 * Count;
/* Exchange the value */
NewValue = (ULONG_PTR)RTL::Atomic::CompareExchangePointer(&Descriptor->Ptr, (PVOID)NewValue,
@@ -71,6 +94,7 @@ XTFASTCALL
VOID
EX::Rundown::CompleteProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{
/* Mark the descriptor as completely run down */
RTL::Atomic::ExchangePointer(&Descriptor->Ptr, (PVOID)EX_RUNDOWN_ACTIVE);
}
@@ -106,6 +130,7 @@ XTFASTCALL
VOID
EX::Rundown::ReInitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{
/* Reset the descriptor to its initial state */
RTL::Atomic::ExchangePointer(&Descriptor->Ptr, NULLPTR);
}
@@ -122,39 +147,71 @@ EX::Rundown::ReInitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
XTFASTCALL
VOID
EX::Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor)
{
/* Release protection */
ReleaseProtection(Descriptor, 1);
}
/**
* Releases the rundown protection for given descriptor.
*
* @param Descriptor
* Supplies a pointer to the descriptor to be initialized.
*
* @param Count
* Supplies the number of references to release.
*
* @return This routine does not return any value.
*
* @since XT 1.0
*/
XTFASTCALL
VOID
EX::Rundown::ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor,
IN ULONG Count)
{
ULONG_PTR CurrentValue, NewValue;
PEX_RUNDOWN_WAIT_BLOCK WaitBlock;
/* Read the current state of the rundown descriptor */
CurrentValue = Descriptor->Count;
/* Enter a CAS loop */
while(TRUE)
{
/* Check if the rundown is currently active */
if(CurrentValue & 0x1)
{
/* Extract the pointer to the wait block */
WaitBlock = (PEX_RUNDOWN_WAIT_BLOCK)(CurrentValue & ~0x1);
/* Decrement the pending reference count */
if(!RTL::Atomic::Decrement64((PLONG_PTR)&WaitBlock->Count))
{
/* Signal the event to wake up the teardown thread */
KE::Event::SetEvent(&WaitBlock->WakeEvent, 0, FALSE);
}
/* Break the loop */
break;
}
else
{
/* Attempt to decrement the usage count */
NewValue = CurrentValue - 2;
NewValue = CurrentValue - 2 * Count;
/* Exchange the value */
NewValue = (ULONG_PTR)RTL::Atomic::CompareExchangePointer(&Descriptor->Ptr, (PVOID)NewValue,
(PVOID)CurrentValue);
/* Check if the atomic swap succeeded without interference from other processors */
if(NewValue == CurrentValue)
{
/* Reference count is decremented, break the loop */
break;
}
/* Collision detected, update current state and retry */
CurrentValue = NewValue;
}
}

View File

@@ -28,7 +28,7 @@ ACPI_SYSTEM_INFO HL::Acpi::SystemInfo;
ACPI_TIMER_INFO HL::Acpi::TimerInfo;
/* Represents the number of active processors */
KAFFINITY HL::Cpu::ActiveProcessors;
PKAFFINITY_MAP HL::Cpu::ActiveProcessors;
/* Metadata detailing the linear frame buffer geometry */
HL_FRAMEBUFFER_DATA HL::FrameBuffer::FrameBufferData;

View File

@@ -409,7 +409,7 @@ HL::FrameBuffer::EnableShadowBuffer(VOID)
/* Allocate non-paged memory for the shadow buffer */
Status = MM::Allocator::AllocatePool(NonPagedPool, FrameBufferSize,
&ScreenShadowBuffer, SIGNATURE32('F', 'B', 'U', 'F'));
&ScreenShadowBuffer, TAG_HL_FRAMEBUFFER);
if(Status != STATUS_SUCCESS)
{
/* Allocation failed, return status code */

View File

@@ -24,7 +24,6 @@ VOID
HL::Cpu::InitializeProcessor(VOID)
{
PKPROCESSOR_BLOCK ProcessorBlock;
KAFFINITY Affinity;
/* Get current processor block */
ProcessorBlock = KE::Processor::GetCurrentProcessorBlock();
@@ -33,17 +32,46 @@ HL::Cpu::InitializeProcessor(VOID)
ProcessorBlock->StallScaleFactor = INITIAL_STALL_FACTOR;
ProcessorBlock->Idr = 0xFFFFFFFF;
/* Set processor affinity */
Affinity = (KAFFINITY) 1 << ProcessorBlock->CpuNumber;
/* Apply affinity to a set of processors */
ActiveProcessors |= Affinity;
/* Check if active processors map is initialized */
if(ActiveProcessors != NULLPTR)
{
/* Register this CPU in the global active processors map */
KE::Affinity::AtomicSetProcessorAffinity(ActiveProcessors, ProcessorBlock->CpuNumber);
}
/* Initialize APIC for this processor */
HL::Pic::InitializePic();
/* Set the APIC running level */
HL::RunLevel::SetRunLevel(KE::Processor::GetCurrentProcessorBlock()->RunLevel);
HL::RunLevel::SetRunLevel(ProcessorBlock->RunLevel);
}
/**
* Initializes the global processor affinity map for active processors and registers Bootstrap Processor (BSP).
*
* @return This routine returns a status code indicating the success or failure of the operation.
*
* @since XT 1.0
*/
XTAPI
XTSTATUS
HL::Cpu::InitializeProcessorAffinity(VOID)
{
XTSTATUS Status;
/* Allocate an array of pointers */
Status = KE::Affinity::CreateAffinityMap(KE::Processor::GetInstalledCpus(), &ActiveProcessors);
if(Status != STATUS_SUCCESS)
{
/* Failed to allocate memory, return error */
return Status;
}
/* Register BSP in the global active processors map */
KE::Affinity::SetProcessorAffinity(ActiveProcessors, 0);
/* Return success */
return STATUS_SUCCESS;
}
/**
@@ -57,9 +85,9 @@ XTAPI
XTSTATUS
HL::Cpu::StartAllProcessors(VOID)
{
ULONG CpuNumber, Index, MaxCpus, SipiVector, Timeout, TrampolinePages;
PVOID CpuStructures, TrampolineAddress, TrampolineCode;
ULONG_PTR AllocationSize, TrampolineCodeSize;
ULONG ApPages, CpuNumber, Index, MaxCpus, SipiVector, Timeout, TrampolineCodeSize;
PVOID ApVirtualAddress, CpuStructures, TrampolineCode;
PHYSICAL_ADDRESS ApPhysicalAddress;
PPROCESSOR_START_BLOCK StartBlock;
PKPROCESSOR_BLOCK ProcessorBlock;
PACPI_SYSTEM_INFO SysInfo;
@@ -108,27 +136,34 @@ HL::Cpu::StartAllProcessors(VOID)
return STATUS_UNSUCCESSFUL;
}
/* Compute trampoline memory allocation size (trampoline + processor start block + temporary stack) */
AllocationSize = TrampolineCodeSize + sizeof(PROCESSOR_START_BLOCK) + 512;
TrampolinePages = (ULONG)(ROUND_UP(AllocationSize, MM_PAGE_SIZE) / MM_PAGE_SIZE);
/* Allocate real mode memory for AP trampoline */
Status = MM::HardwarePool::AllocateRealModeMemory(TrampolinePages, &TrampolineAddress);
/* Allocate low memory for AP trampoline code */
Status = MM::HardwarePool::AllocateLowMemory(&ApPhysicalAddress, &ApVirtualAddress);
if(Status != STATUS_SUCCESS)
{
/* Failed to allocate memory, print error message and return error */
DebugPrint(L"Failed to allocate %lu pages for AP Trampoline!\n", TrampolinePages);
DebugPrint(L"Failed to allocate low memory for AP Trampoline!\n");
return Status;
}
/* Copy trampoline code to low memory */
RTL::Memory::CopyMemory(TrampolineAddress, TrampolineCode, TrampolineCodeSize);
RTL::Memory::CopyMemory(ApVirtualAddress, TrampolineCode, TrampolineCodeSize);
/* Compute number of pages for trampoline */
ApPages = MM::HardwarePool::CalculateRealModeAllocationPages(TrampolineCodeSize);
/* Temporarily identity map trampoline address */
Status = MM::HardwarePool::MapRealModeMemory(ApPhysicalAddress, ApPages);
if(Status != STATUS_SUCCESS)
{
/* Failed to map memory, return error */
return Status;
}
/* Get start block address relative to trampoline address */
StartBlock = (PPROCESSOR_START_BLOCK)((PUCHAR)TrampolineAddress + TrampolineCodeSize);
StartBlock = (PPROCESSOR_START_BLOCK)((PUCHAR)ApVirtualAddress + TrampolineCodeSize);
/* Get SIPI vector */
SipiVector = (ULONG)((ULONG_PTR)TrampolineAddress >> 12);
SipiVector = (ULONG)(ApPhysicalAddress.QuadPart >> APIC_VECTOR_SIPI_SHIFT);
/* Loop over all CPUs */
CpuNumber = 0;
@@ -155,8 +190,8 @@ HL::Cpu::StartAllProcessors(VOID)
Status = MM::KernelPool::AllocateProcessorStructures(&CpuStructures);
if(Status != STATUS_SUCCESS)
{
/* Failed to allocate memory, unmap memory and return error */
MM::HardwarePool::UnmapHardwareMemory(TrampolineAddress, TrampolinePages, TRUE);
/* Failed to allocate memory, unmap temporary identity mapping and return error */
MM::HardwarePool::UnmapRealModeMemory(ApPhysicalAddress, ApPages);
return Status;
}
@@ -214,7 +249,7 @@ HL::Cpu::StartAllProcessors(VOID)
}
}
/* Unmap trampoline memory and return success */
MM::HardwarePool::UnmapHardwareMemory(TrampolineAddress, TrampolinePages, TRUE);
/* Unmap temporary identity mapping and return success */
MM::HardwarePool::UnmapRealModeMemory(ApPhysicalAddress, ApPages);
return STATUS_SUCCESS;
}

View File

@@ -42,6 +42,10 @@ namespace AR
STATIC XTCDECL ULONGLONG ReadTimeStampCounter(VOID);
STATIC XTCDECL ULONGLONG ReadTimeStampCounterProcessor(OUT PULONG TscAux);
STATIC XTCDECL VOID ReadWriteBarrier(VOID);
STATIC XTCDECL BOOLEAN ScanForwardBit(OUT PULONG Index,
IN ULONG Mask);
STATIC XTCDECL BOOLEAN ScanReverseBit(OUT PULONG Index,
IN ULONG Mask);
STATIC XTCDECL VOID SetInterruptFlag(VOID);
STATIC XTCDECL VOID StoreGlobalDescriptorTable(OUT PVOID Destination);
STATIC XTCDECL VOID StoreInterruptDescriptorTable(OUT PVOID Destination);

View File

@@ -30,7 +30,7 @@ namespace AR
STATIC XTAPI PVOID GetBootStack(VOID);
STATIC XTAPI VOID GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType,
OUT PVOID *TrampolineCode,
OUT PULONG_PTR TrampolineSize);
OUT PULONG TrampolineSize);
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
STATIC XTAPI VOID InitializeProcessorStructures(IN PVOID ProcessorStructures,
OUT PKGDTENTRY *Gdt,

View File

@@ -51,8 +51,6 @@ namespace AR
STATIC XTCDECL VOID HandleTrap1F(IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleTrap2C(IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleTrap2D(IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleTrap2F(IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleTrapE1(IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleTrapFF(IN PKTRAP_FRAME TrapFrame);
};
}

View File

@@ -41,6 +41,10 @@ namespace AR
STATIC XTCDECL ULONGLONG ReadTimeStampCounter(VOID);
STATIC XTCDECL ULONGLONG ReadTimeStampCounterProcessor(OUT PULONG TscAux);
STATIC XTCDECL VOID ReadWriteBarrier(VOID);
STATIC XTCDECL BOOLEAN ScanForwardBit(OUT PULONG Index,
IN ULONG Mask);
STATIC XTCDECL BOOLEAN ScanReverseBit(OUT PULONG Index,
IN ULONG Mask);
STATIC XTCDECL VOID SetInterruptFlag(VOID);
STATIC XTCDECL VOID StoreGlobalDescriptorTable(OUT PVOID Destination);
STATIC XTCDECL VOID StoreInterruptDescriptorTable(OUT PVOID Destination);

View File

@@ -33,7 +33,7 @@ namespace AR
STATIC XTAPI PVOID GetBootStack(VOID);
STATIC XTAPI VOID GetTrampolineInformation(IN TRAMPOLINE_TYPE TrampolineType,
OUT PVOID *TrampolineCode,
OUT PULONG_PTR TrampolineSize);
OUT PULONG TrampolineSize);
STATIC XTAPI VOID InitializeProcessor(IN PVOID ProcessorStructures);
STATIC XTAPI VOID InitializeProcessorStructures(IN PVOID ProcessorStructures,
OUT PKGDTENTRY *Gdt,

View File

@@ -11,6 +11,8 @@
#include <xtos.hh>
#include <ex/laslist.hh>
#include <ex/resource.hh>
#include <ex/rundown.hh>
#endif /* __XTOSKRNL_EX_HH */

View File

@@ -0,0 +1,53 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ex/laslist.hh
* DESCRIPTION: Lookaside Lists support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_EX_LASLIST_HH
#define __XTOSKRNL_EX_LASLIST_HH
#include <xtos.hh>
/* Kernel Executive */
namespace EX
{
class LookasideList
{
private:
STATIC LIST_ENTRY NonPagedLookasideListHead;
STATIC KSPIN_LOCK NonPagedLookasideListLock;
STATIC GENERAL_LOOKASIDE NonPagedPoolLookasideLists[POOL_LOOKASIDE_LISTS];
STATIC LIST_ENTRY PagedLookasideListHead;
STATIC KSPIN_LOCK PagedLookasideListLock;
STATIC GENERAL_LOOKASIDE PagedPoolLookasideLists[POOL_LOOKASIDE_LISTS];
STATIC LIST_ENTRY PoolLookasideListHead;
STATIC LIST_ENTRY SystemLookasideListHead;
public:
STATIC XTAPI PVOID AllocateFromLookasideList(IN PNONPAGED_LOOKASIDE_LIST LookasideList);
STATIC XTAPI PVOID AllocateFromLookasideList(IN PPAGED_LOOKASIDE_LIST LookasideList);
STATIC XTAPI PVOID AllocateFromPerProcessorList(IN NONPAGED_LOOKASIDE_NUMBER Number);
STATIC XTAPI VOID FreeToLookasideList(IN PNONPAGED_LOOKASIDE_LIST LookasideList,
IN PVOID Entry);
STATIC XTAPI VOID FreeToLookasideList(IN PPAGED_LOOKASIDE_LIST LookasideList,
IN PVOID Entry);
STATIC XTAPI VOID FreeToPerProcessorList(IN NONPAGED_LOOKASIDE_NUMBER Number,
IN PVOID Entry);
STATIC XTAPI VOID InitializeLookasideList(IN OUT PGENERAL_LOOKASIDE LookasideList,
IN MMPOOL_TYPE PoolType,
IN ULONG Size,
IN ULONG Tag,
IN USHORT MaxDepth,
IN PLIST_ENTRY ListHead);
STATIC XTAPI VOID InitializePointers(VOID);
STATIC XTAPI VOID InitializeSystemLookasideLists(VOID);
STATIC XTAPI PLIST_ENTRY GetPoolLookasideListHead(VOID);
STATIC XTAPI PLIST_ENTRY GetSystemLookasideListHead(VOID);
};
}
#endif /* __XTOSKRNL_EX_LASLIST_HH */

View File

@@ -0,0 +1,33 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ex/resource.hh
* DESCRIPTION: Exclusive resource synchronization support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_EX_RESOURCE_HH
#define __XTOSKRNL_EX_RESOURCE_HH
#include <xtos.hh>
/* Kernel Executive */
namespace EX
{
class Resources
{
private:
STATIC LARGE_INTEGER ResourcesTimeOut;
STATIC LIST_ENTRY SystemResourcesList;
STATIC KSPIN_LOCK SystemResourcesLock;
public:
STATIC XTAPI XTSTATUS DeleteResource(IN PERESOURCE Resource);
STATIC XTAPI XTSTATUS InitializeResource(IN PERESOURCE Resource);
STATIC XTAPI VOID InitializeSystemResources(VOID);
STATIC XTAPI XTSTATUS ReinitializeResource(IN PERESOURCE Resource);
};
}
#endif /* __XTOSKRNL_EX_RESOURCES_HH */

View File

@@ -12,17 +12,21 @@
#include <xtos.hh>
/* Architecture-specific Library */
/* Kernel Executive */
namespace EX
{
class Rundown
{
public:
STATIC XTFASTCALL BOOLEAN AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
STATIC XTFASTCALL BOOLEAN AcquireProtection(IN PEX_RUNDOWN_REFERENCE Descriptor,
IN ULONG Count);
STATIC XTFASTCALL VOID CompleteProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
STATIC XTFASTCALL VOID InitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
STATIC XTFASTCALL VOID ReInitializeProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
STATIC XTFASTCALL VOID ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor);
STATIC XTFASTCALL VOID ReleaseProtection(IN PEX_RUNDOWN_REFERENCE Descriptor,
IN ULONG Count);
STATIC XTFASTCALL VOID WaitForProtectionRelease(IN PEX_RUNDOWN_REFERENCE Descriptor);
};
}

View File

@@ -18,10 +18,11 @@ namespace HL
class Cpu
{
private:
STATIC KAFFINITY ActiveProcessors;
STATIC PKAFFINITY_MAP ActiveProcessors;
public:
STATIC XTAPI VOID InitializeProcessor(VOID);
STATIC XTAPI XTSTATUS InitializeProcessorAffinity(VOID);
STATIC XTAPI XTSTATUS StartAllProcessors(VOID);
};
}

View File

@@ -13,5 +13,6 @@
#include <kd/dbg.hh>
#include <kd/dbgio.hh>
#include <kd/debug.hh>
#endif /* __XTOSKRNL_KD_HH */

View File

@@ -0,0 +1,38 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/kd/debug.hh
* DESCRIPTION: Kernel Debugger
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KD_DEBUG_HH
#define __XTOSKRNL_KD_DEBUG_HH
#include <xtos.hh>
/* Kernel Debugger */
namespace KD
{
class Debugger
{
public:
STATIC PKD_PRINT_ROUTINE KdPrint;
private:
STATIC BOOLEAN Active;
public:
STATIC XTAPI BOOLEAN DebuggerActive(VOID);
STATIC XTAPI VOID EnterDebugger(IN PKTRAP_FRAME TrapFrame);
STATIC XTAPI KCONTINUE_STATUS SwitchProcessor(VOID);
private:
STATIC XTAPI BOOLEAN ProcessCpuStateChange(IN PEXCEPTION_RECORD ExceptionRecord,
IN OUT PCONTEXT Context,
IN BOOLEAN SecondChanceException);
};
}
#endif /* __XTOSKRNL_KD_DEBUG_HH */

View File

@@ -11,23 +11,29 @@
#include <xtos.hh>
#include <ke/affinity.hh>
#include <ke/apc.hh>
#include <ke/bootinfo.hh>
#include <ke/crash.hh>
#include <ke/dispatch.hh>
#include <ke/dispobj.hh>
#include <ke/dpc.hh>
#include <ke/event.hh>
#include <ke/guard.hh>
#include <ke/ipi.hh>
#include <ke/kprocess.hh>
#include <ke/krnlinit.hh>
#include <ke/kthread.hh>
#include <ke/kubsan.hh>
#include <ke/proc.hh>
#include <ke/pushlock.hh>
#include <ke/runlevel.hh>
#include <ke/schedule.hh>
#include <ke/semphore.hh>
#include <ke/shdata.hh>
#include <ke/spinlock.hh>
#include <ke/sysres.hh>
#include <ke/sysserv.hh>
#include <ke/systime.hh>
#include <ke/timer.hh>

View File

@@ -0,0 +1,49 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ke/affinity.hh
* DESCRIPTION: XT kernel processor affinity management support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KE_AFFINITY_HH
#define __XTOSKRNL_KE_AFFINITY_HH
#include <xtos.hh>
/* Kernel Library */
namespace KE
{
class Affinity
{
public:
STATIC XTFASTCALL VOID AtomicSetProcessorAffinity(IN OUT PKAFFINITY_MAP AffinityMap,
IN ULONG CpuNumber);
STATIC XTFASTCALL VOID CalculateAffinityMapSize(IN ULONG CpuCount,
OUT PULONG RequiredMapSize,
OUT PULONG RequiredBlockCount);
STATIC XTFASTCALL BOOLEAN CheckProcessorAffinity(IN PKAFFINITY_MAP AffinityMap,
IN ULONG CpuNumber);
STATIC XTFASTCALL VOID ClearAffinityMap(IN OUT PKAFFINITY_MAP AffinityMap);
STATIC XTFASTCALL VOID ClearProcessorAffinity(IN OUT PKAFFINITY_MAP AffinityMap,
IN ULONG CpuNumber);
STATIC XTAPI XTSTATUS CopyAffinity(OUT PKAFFINITY_MAP Destination,
IN PKAFFINITY_MAP Source);
STATIC XTAPI XTSTATUS CreateAffinityMap(IN ULONG CpuCount,
OUT PKAFFINITY_MAP* AffinityMap);
STATIC XTAPI VOID DestroyAffinityMap(IN PKAFFINITY_MAP AffinityMap);
STATIC XTAPI ULONG FindNextLeftSetProcessor(IN ULONG ThreadSeed,
IN PKAFFINITY_MAP AffinityMap);
STATIC XTAPI ULONG FindNextRightSetProcessor(IN ULONG ThreadSeed,
IN PKAFFINITY_MAP AffinityMap);
STATIC XTAPI XTSTATUS InitializeAffinityMap(IN OUT PKAFFINITY_MAP AffinityMap,
IN ULONG BufferSize);
STATIC XTFASTCALL VOID SetAllProcessorsAffinity(IN OUT PKAFFINITY_MAP AffinityMap);
STATIC XTFASTCALL VOID SetProcessorAffinity(IN OUT PKAFFINITY_MAP AffinityMap,
IN ULONG CpuNumber);
};
}
#endif /* __XTOSKRNL_KE_AFFINITY_HH */

View File

@@ -18,6 +18,11 @@ namespace KE
class Apc
{
public:
STATIC XTAPI VOID CheckApcDelivery(VOID);
STATIC XTAPI VOID DeliverApc(IN KPROCESSOR_MODE ProcessorMode,
IN PKEXCEPTION_FRAME ExceptionFrame,
IN PKTRAP_FRAME TrapFrame);
STATIC XTCDECL VOID HandleApcInterrupt(IN PKTRAP_FRAME TrapFrame);
STATIC XTAPI VOID InitializeApc(IN PKAPC Apc,
IN PKTHREAD Thread,
IN KAPC_ENVIRONMENT Environment,

View File

@@ -17,7 +17,16 @@ namespace KE
{
class Crash
{
private:
STATIC PKPROCESSOR_CONTROL_BLOCK FreezeOwner;
STATIC BOOLEAN KernelPanic;
STATIC KRUNLEVEL RunLevel;
public:
STATIC XTAPI VOID FreezeCurrentExecution(IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame);
STATIC XTAPI BOOLEAN FreezeExecution(IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame);
STATIC XTAPI VOID HaltSystem(VOID);
STATIC XTAPI VOID Panic(IN ULONG Code);
STATIC XTAPI VOID Panic(IN ULONG Code,
@@ -25,6 +34,8 @@ namespace KE
IN ULONG_PTR Parameter2,
IN ULONG_PTR Parameter3,
IN ULONG_PTR Parameter4);
STATIC XTAPI BOOLEAN SystemCrashed(VOID);
STATIC XTAPI VOID ThawExecution(IN BOOLEAN Interrupts);
};
}

View File

@@ -18,13 +18,25 @@ namespace KE
class Dispatcher
{
public:
STATIC XTAPI VOID EnterIdleLoop(VOID);
STATIC XTFASTCALL VOID ExitDispatcher(IN KRUNLEVEL OldRunLevel);
STATIC XTCDECL VOID HandleDispatchInterrupt(IN PKTRAP_FRAME TrapFrame);
STATIC XTFASTCALL BOOLEAN SwitchContext(IN PKTHREAD CurrentThread,
IN KRUNLEVEL RunLevel);
STATIC XTAPI XTSTATUS WaitForSingleObject(IN PVOID Object,
IN KWAIT_REASON WaitReason,
IN KPROCESSOR_MODE WaitMode,
IN BOOLEAN Alertable,
IN PLARGE_INTEGER Timeout);
STATIC XTAPI VOID UpdateRunTime(IN PKTRAP_FRAME TrapFrame,
IN KRUNLEVEL RunLevel);
private:
STATIC XTFASTCALL PLARGE_INTEGER ComputeWaitInterval(IN PLARGE_INTEGER OriginalDueTime,
IN PLARGE_INTEGER PreviousDueTime,
IN OUT PLARGE_INTEGER NewDueTime);
STATIC XTFASTCALL XTSTATUS SatisfyWaitingObject(IN PDISPATCHER_HEADER Object,
IN PKTHREAD Thread);
STATIC XTFASTCALL BOOLEAN SwitchThreadContext(IN PKTHREAD CurrentThread,
IN BOOLEAN ApcBypass);
STATIC XTFASTCALL BOOLEAN SwitchThreadStack(IN PKTHREAD CurrentThread,

View File

@@ -0,0 +1,29 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ke/dispobj.hh
* DESCRIPTION: Kernel Thread Dispatcher Objects
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KE_DISPOBJ_HH
#define __XTOSKRNL_KE_DISPOBJ_HH
#include <xtos.hh>
/* Kernel Library */
namespace KE
{
class DispatcherObject
{
public:
STATIC XTFASTCALL VOID SatisfyWaitingMutexObject(IN PKMUTEX MutexObject,
IN PKTHREAD Thread);
STATIC XTFASTCALL VOID SatisfyWaitingNonMutexObject(IN PDISPATCHER_HEADER MutexObject);
STATIC XTFASTCALL VOID SatisfyWaitingObject(IN PDISPATCHER_HEADER MutexObject,
IN PKTHREAD Thread);
};
}
#endif /* __XTOSKRNL_KE_DISPOBJ_HH */

View File

@@ -25,6 +25,8 @@ namespace KE
STATIC XTAPI LONG SetEvent(IN PKEVENT Event,
IN KPRIORITY Increment,
IN BOOLEAN Wait);
STATIC XTAPI VOID SetEventBoostPriority(IN PKEVENT Event,
IN OUT PKTHREAD* WaitingThread);
};
}

View File

@@ -12,45 +12,95 @@
#include <xtos.hh>
#include <ke/spinlock.hh>
/* Kernel Library */
namespace KE
{
class QueuedSpinLockGuard
{
private:
KSPIN_LOCK_QUEUE_LEVEL QueuedLockLevel;
KLOCK_QUEUE_HANDLE LockQueueHandle;
PKSPIN_LOCK Lock;
BOOLEAN Owned;
public:
QueuedSpinLockGuard(IN OUT KSPIN_LOCK_QUEUE_LEVEL LockLevel)
QueuedSpinLockGuard(IN OUT PKSPIN_LOCK SpinLock,
IN BOOLEAN Acquire = TRUE)
{
QueuedLockLevel = LockLevel;
KE::SpinLock::AcquireQueuedSpinLock(QueuedLockLevel);
Lock = SpinLock;
Owned = Acquire;
if(Owned)
{
KE::SpinLock::AcquireQueuedSpinLock(Lock, &LockQueueHandle);
}
}
~QueuedSpinLockGuard()
{
KE::SpinLock::ReleaseQueuedSpinLock(QueuedLockLevel);
if(Owned)
{
KE::SpinLock::ReleaseQueuedSpinLock(&LockQueueHandle);
}
}
QueuedSpinLockGuard(const QueuedSpinLockGuard&) = delete;
QueuedSpinLockGuard& operator=(const QueuedSpinLockGuard&) = delete;
};
class SystemQueuedSpinLockGuard
{
private:
KSPIN_LOCK_QUEUE_LEVEL QueuedLockLevel;
BOOLEAN Owned;
public:
SystemQueuedSpinLockGuard(IN OUT KSPIN_LOCK_QUEUE_LEVEL LockLevel,
IN BOOLEAN Acquire = TRUE)
{
QueuedLockLevel = LockLevel;
Owned = Acquire;
if(Owned)
{
KE::SpinLock::AcquireQueuedSpinLock(QueuedLockLevel);
}
}
~SystemQueuedSpinLockGuard()
{
if(Owned)
{
KE::SpinLock::ReleaseQueuedSpinLock(QueuedLockLevel);
}
}
SystemQueuedSpinLockGuard(const SystemQueuedSpinLockGuard&) = delete;
SystemQueuedSpinLockGuard& operator=(const SystemQueuedSpinLockGuard&) = delete;
};
class SpinLockGuard
{
private:
PKSPIN_LOCK Lock;
BOOLEAN Owned;
public:
SpinLockGuard(IN OUT PKSPIN_LOCK SpinLock)
SpinLockGuard(IN OUT PKSPIN_LOCK SpinLock,
IN BOOLEAN Acquire = TRUE)
{
Lock = SpinLock;
KE::SpinLock::AcquireSpinLock(Lock);
Owned = Acquire;
if(Owned)
{
KE::SpinLock::AcquireSpinLock(Lock);
}
}
~SpinLockGuard()
{
KE::SpinLock::ReleaseSpinLock(Lock);
if(Owned)
{
KE::SpinLock::ReleaseSpinLock(Lock);
}
}
SpinLockGuard(const SpinLockGuard&) = delete;

View File

@@ -0,0 +1,31 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ke/ipi.hh
* DESCRIPTION: Interprocessor interrupt support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KE_IPI_HH
#define __XTOSKRNL_KE_IPI_HH
#include <xtos.hh>
/* Kernel Library */
namespace KE
{
class Ipi
{
public:
STATIC XTCDECL VOID HandleIpiInterrupt(IN PKTRAP_FRAME TrapFrame);
STATIC XTAPI BOOLEAN HandleIpiService(IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame);
STATIC XTAPI VOID SendBroadcastIpi(IN ULONG Request,
IN BOOLEAN Self);
STATIC XTAPI VOID SendIpi(IN ULONG Request,
IN PKAFFINITY_MAP TargetSet);
};
}
#endif /* __XTOSKRNL_KE_IPI_HH */

View File

@@ -21,10 +21,13 @@ namespace KE
STATIC EPROCESS InitialProcess;
public:
STATIC XTAPI PKPROCESS GetIdleProcess(VOID);
STATIC XTAPI PEPROCESS GetInitialProcess(VOID);
STATIC XTAPI XTSTATUS InitializeIdleProcess(IN OUT PKPROCESS IdleProcess,
IN PULONG_PTR DirectoryTable);
STATIC XTAPI VOID InitializeProcess(IN OUT PKPROCESS Process,
IN KPRIORITY Priority,
IN KAFFINITY Affinity,
IN PKAFFINITY_MAP AffinityMap,
IN PULONG_PTR DirectoryTable,
IN BOOLEAN Alignment);
};

View File

@@ -24,6 +24,7 @@ namespace KE
private:
STATIC XTAPI VOID BootstrapKernel(VOID);
STATIC XTAPI VOID InitializeInterruptHandlers(VOID);
STATIC XTAPI VOID InitializeKernel(VOID);
};
}

View File

@@ -21,7 +21,14 @@ namespace KE
STATIC ETHREAD InitialThread;
public:
STATIC XTAPI VOID AttachThread(IN PKTHREAD Thread);
STATIC XTFASTCALL VOID EnterCriticalRegion();
STATIC XTFASTCALL VOID EnterCriticalRegion(IN PKTHREAD Thread);
STATIC XTAPI PETHREAD GetInitialThread(VOID);
STATIC XTAPI XTSTATUS InitializeIdleThread(IN PKPROCESS IdleProcess,
IN OUT PKTHREAD IdleThread,
IN PKPROCESSOR_CONTROL_BLOCK Prcb,
IN PVOID Stack);
STATIC XTAPI XTSTATUS InitializeThread(IN PKPROCESS Process,
IN OUT PKTHREAD Thread,
IN PKSYSTEM_ROUTINE SystemRoutine,
@@ -30,15 +37,18 @@ namespace KE
IN PCONTEXT Context,
IN PVOID EnvironmentBlock,
IN PVOID Stack,
IN BOOLEAN StartThread);
STATIC XTAPI VOID StartThread(IN PKTHREAD Thread);
IN BOOLEAN AttachToProcess);
STATIC XTFASTCALL VOID LeaveCriticalRegion();
STATIC XTFASTCALL VOID LeaveCriticalRegion(IN PKTHREAD Thread);
private:
STATIC XTAPI VOID HandleSystemThreadExit(VOID);
STATIC XTAPI VOID InitializeThreadContext(IN PKTHREAD Thread,
IN PKSYSTEM_ROUTINE SystemRoutine,
IN PKSTART_ROUTINE StartRoutine,
IN PVOID StartContext,
IN PCONTEXT ContextRecord);
STATIC XTAPI VOID RunThread(VOID);
STATIC XTAPI VOID SuspendNop(IN PKAPC Apc,
IN OUT PKNORMAL_ROUTINE *NormalRoutine,
IN OUT PVOID *NormalContext,
@@ -48,6 +58,7 @@ namespace KE
STATIC XTAPI VOID SuspendThread(IN PVOID NormalContext,
IN PVOID SystemArgument1,
IN PVOID SystemArgument2);
STATIC XTAPI VOID SwitchToUserMode(VOID);
};
}

View File

@@ -26,12 +26,25 @@ namespace KE
STATIC XTAPI PKPROCESSOR_CONTROL_BLOCK GetCurrentProcessorControlBlock(VOID);
STATIC XTAPI ULONG GetCurrentProcessorNumber(VOID);
STATIC XTAPI PKTHREAD GetCurrentThread(VOID);
STATIC XTAPI ULONG GetInstalledCpus(VOID);
STATIC XTAPI PKPROCESSOR_BLOCK GetProcessorBlock(IN ULONG CpuNumber);
STATIC XTAPI XTSTATUS InitializeProcessorBlocks();
STATIC XTAPI VOID RegisterHardwareId(IN ULONG HardwareId);
STATIC XTAPI VOID RegisterProcessorBlock(ULONG CpuNumber,
PKPROCESSOR_BLOCK ProcessorBlock);
STATIC XTAPI VOID SaveProcessorState(OUT PKPROCESSOR_STATE CpuState);
STATIC XTAPI VOID RestoreProcessorContext(IN OUT PKTRAP_FRAME TrapFrame,
IN OUT PKEXCEPTION_FRAME ExceptionFrame,
IN PCONTEXT ContextFrame,
IN ULONG ContextFlags);
STATIC XTAPI VOID RestoreProcessorControlState(IN PKPROCESSOR_STATE CpuState);
STATIC XTAPI VOID RestoreProcessorState(OUT PKTRAP_FRAME TrapFrame,
OUT PKEXCEPTION_FRAME ExceptionFrame);
STATIC XTAPI VOID SaveProcessorContext(IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame,
IN OUT PCONTEXT ContextRecord);
STATIC XTAPI VOID SaveProcessorControlState(OUT PKPROCESSOR_STATE CpuState);
STATIC XTAPI VOID SaveProcessorState(IN PKTRAP_FRAME TrapFrame,
IN PKEXCEPTION_FRAME ExceptionFrame);
};
}

View File

@@ -0,0 +1,44 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ke/pushlock.hh
* DESCRIPTION: XT Kernel Push Lock support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KE_PUSHLOCK_HH
#define __XTOSKRNL_KE_PUSHLOCK_HH
#include <xtos.hh>
/* Kernel Library */
namespace KE
{
class PushLock
{
public:
STATIC XTFASTCALL VOID AcquireExclusivePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID AcquireSharedPushLock(PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID AcquireWaitExclusivePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID AcquireWaitSharedPushLock(IN OUT PKPUSH_LOCK PushLock);
STATIC XTFASTCALL BOOLEAN ConvertSharedPushLockToExclusive(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID InitializePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleaseExclusivePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleasePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleaseSharedPushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleaseWaitExclusivePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleaseWaitSharedPushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID ReleaseWaitPushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL BOOLEAN TryAcquireExclusivePushLock(PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID TryWakePushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID WaitOnPushLock(IN PKPUSH_LOCK PushLock);
STATIC XTFASTCALL VOID WakePushLockWaiters(IN PKPUSH_LOCK PushLock, IN KPUSH_LOCK OldState);
private:
STATIC XTINLINE VOID OptimizePushLockList(IN PKPUSH_LOCK PushLock, IN KPUSH_LOCK OldValue);
STATIC XTINLINE VOID SpinPushLock(IN PKPUSH_LOCK_WAIT_BLOCK WaitBlock);
};
}
#endif /* __XTOSKRNL_KE_PUSHLOCK_HH */

View File

@@ -27,17 +27,26 @@ namespace KE
{
private:
KRUNLEVEL PreviousRunLevel;
BOOLEAN Switched;
public:
LowerRunLevel(KRUNLEVEL RunLevel)
LowerRunLevel(IN KRUNLEVEL RunLevel,
IN BOOLEAN ChangeLevel = TRUE)
{
PreviousRunLevel = KE::RunLevel::GetCurrentRunLevel();
KE::RunLevel::LowerRunLevel(RunLevel);
Switched = ChangeLevel;
if(Switched)
{
KE::RunLevel::LowerRunLevel(RunLevel);
}
}
~LowerRunLevel()
{
KE::RunLevel::RaiseRunLevel(PreviousRunLevel);
if(Switched)
{
KE::RunLevel::RaiseRunLevel(PreviousRunLevel);
}
}
LowerRunLevel(const LowerRunLevel&) = delete;
@@ -48,17 +57,26 @@ namespace KE
{
private:
KRUNLEVEL PreviousRunLevel;
BOOLEAN Switched;
public:
RaiseRunLevel(KRUNLEVEL RunLevel)
RaiseRunLevel(IN KRUNLEVEL RunLevel,
IN BOOLEAN ChangeLevel = TRUE)
{
PreviousRunLevel = KE::RunLevel::GetCurrentRunLevel();
KE::RunLevel::RaiseRunLevel(RunLevel);
Switched = ChangeLevel;
if(Switched)
{
KE::RunLevel::RaiseRunLevel(RunLevel);
}
}
~RaiseRunLevel()
{
KE::RunLevel::LowerRunLevel(PreviousRunLevel);
if(Switched)
{
KE::RunLevel::LowerRunLevel(PreviousRunLevel);
}
}
RaiseRunLevel(const RaiseRunLevel&) = delete;

View File

@@ -0,0 +1,30 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ke/schedule.hh
* DESCRIPTION: XT Kernel Thread Scheduler
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KE_SCHEDULE_HH
#define __XTOSKRNL_KE_SCHEDULE_HH
#include <xtos.hh>
/* Kernel Library */
namespace KE
{
class Scheduler
{
public:
STATIC XTFASTCALL VOID InsertDeferredReadyList(IN PKTHREAD Thread);
STATIC XTAPI VOID ProcessQuantumEnd(VOID);
STATIC XTAPI VOID ProcessReadyThread(IN PKTHREAD Thread);
STATIC XTFASTCALL VOID QueueReadyThread(IN PKTHREAD Thread,
IN PKPROCESSOR_CONTROL_BLOCK Prcb);
STATIC XTAPI VOID ReadyThread(IN PKTHREAD Thread);
};
}
#endif /* __XTOSKRNL_KE_SCHEDULE_HH */

View File

@@ -36,13 +36,20 @@ namespace KE
public:
STATIC XTFASTCALL VOID AcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel);
STATIC XTFASTCALL VOID AcquireQueuedSpinLock(IN PKSPIN_LOCK SpinLock,
IN PKLOCK_QUEUE_HANDLE LockQueueHandle);
STATIC XTFASTCALL VOID AcquireSpinLock(IN OUT PKSPIN_LOCK SpinLock);
STATIC XTAPI VOID InitializeAllLocks();
STATIC XTAPI VOID InitializeLockQueues();
STATIC XTAPI VOID InitializeSpinLock(IN PKSPIN_LOCK SpinLock);
STATIC XTFASTCALL VOID ReleaseQueuedSpinLock(IN KSPIN_LOCK_QUEUE_LEVEL LockLevel);
STATIC XTFASTCALL VOID ReleaseQueuedSpinLock(IN PKLOCK_QUEUE_HANDLE LockQueueHandle);
STATIC XTFASTCALL VOID ReleaseSpinLock(IN OUT PKSPIN_LOCK SpinLock);
STATIC XTFASTCALL BOOLEAN TestSpinLock(IN PKSPIN_LOCK SpinLock);
private:
STATIC XTFASTCALL VOID AcquireQueuedSpinLock(IN PKSPIN_LOCK_QUEUE LockQueue);
STATIC XTFASTCALL VOID ReleaseQueuedSpinLock(IN PKSPIN_LOCK_QUEUE LockQueue);
};
}

View File

@@ -0,0 +1,25 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ke/sysserv.hh
* DESCRIPTION: System Services Descriptor Table
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_KE_SYSSERV_HH
#define __XTOSKRNL_KE_SYSSERV_HH
#include <xtos.hh>
/* Kernel Library */
namespace KE
{
class SystemServices
{
public:
STATIC XTAPI PKSERVICE_DESCRIPTOR_TABLE GetSystemServicesDescriptorTable(VOID);
};
}
#endif /* __XTOSKRNL_KE_SYSSERV_HH */

View File

@@ -25,6 +25,7 @@ namespace KE
STATIC ULONG TimeAdjustment;
public:
STATIC XTAPI VOID GetInterruptTime(OUT PLARGE_INTEGER InterruptTime);
STATIC XTAPI VOID GetSystemTime(OUT PLARGE_INTEGER SystemTime);
STATIC XTAPI VOID SetSystemTime(IN PLARGE_INTEGER NewTime,
OUT PLARGE_INTEGER OldTime,

View File

@@ -17,6 +17,9 @@ namespace KE
{
class Timer
{
private:
STATIC LIST_ENTRY TimerTableListHead[KTIMER_TABLE_SIZE];
public:
STATIC XTAPI BOOLEAN CancelTimer(IN PKTIMER Timer);
STATIC XTAPI VOID ClearTimer(IN PKTIMER Timer);
@@ -28,6 +31,9 @@ namespace KE
IN LARGE_INTEGER DueTime,
IN LONG Period,
IN PKDPC Dpc);
STATIC XTAPI VOID VerifySystemTimerExpiration(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
IN PKTRAP_FRAME TrapFrame,
IN LARGE_INTEGER Time);
private:
STATIC XTAPI VOID RemoveTimer(IN OUT PKTIMER Timer);

View File

@@ -24,5 +24,8 @@
#include <mm/pfault.hh>
#include <mm/pfn.hh>
#include <mm/pool.hh>
#include <mm/probe.hh>
#include <mm/quota.hh>
#include <mm/tags.hh>
#endif /* __XTOSKRNL_MM_HH */

View File

@@ -52,6 +52,7 @@ namespace MM
XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
XTAPI ULONG GetPxeOffset(IN PVOID Address);
VIRTUAL XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer) = 0;
VIRTUAL ULONG_PTR GetUserProbeAddress(VOID) = 0;
XTAPI BOOLEAN GetXpaStatus();
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer);
@@ -80,6 +81,7 @@ namespace MM
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
XTAPI VOID InitializePageMapInfo(VOID);
};
@@ -90,6 +92,7 @@ namespace MM
XTAPI PVOID GetPpeVirtualAddress(IN PMMPPE PpePointer);
XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
XTAPI VOID InitializePageMapInfo(VOID);
};
}

View File

@@ -49,6 +49,7 @@ namespace MM
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
STATIC XTAPI PMMPXE GetPxeAddress(IN PVOID Address);
STATIC XTAPI PVOID GetPxeVirtualAddress(IN PMMPXE PxePointer);
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
STATIC XTAPI VOID InitializePageMapSupport(VOID);
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,

View File

@@ -20,6 +20,8 @@ namespace MM
private:
STATIC LOADER_MEMORY_DESCRIPTOR HardwareAllocationDescriptors[MM_HARDWARE_ALLOCATION_DESCRIPTORS];
STATIC PVOID HardwareHeapStart;
STATIC PHYSICAL_ADDRESS LowMemoryPhysicalAddress;
STATIC PVOID LowMemoryVirtualAddress;
STATIC ULONG UsedHardwareAllocationDescriptors;
public:
@@ -27,12 +29,19 @@ namespace MM
IN BOOLEAN Aligned,
IN ULONGLONG MaximumAddress,
OUT PPHYSICAL_ADDRESS Buffer);
STATIC XTAPI XTSTATUS AllocateRealModeMemory(IN PFN_NUMBER PageCount,
OUT PVOID *MemoryAddress);
STATIC XTAPI XTSTATUS AllocateLowMemory(OUT PPHYSICAL_ADDRESS PhysicalAddress,
OUT PVOID *VirtualAddress);
STATIC XTAPI ULONG CalculateRealModeAllocationPages(IN ULONG TrampolineCodeSize);
STATIC XTAPI XTSTATUS FreeHardwareMemory(IN PHYSICAL_ADDRESS PhysicalAddress,
IN PFN_NUMBER PageCount);
STATIC XTAPI XTSTATUS FreeRealModeMemory(IN PVOID VirtualAddress,
IN PFN_NUMBER PageCount);
STATIC XTAPI XTSTATUS MapHardwareMemory(IN PHYSICAL_ADDRESS PhysicalAddress,
IN PFN_NUMBER PageCount,
IN BOOLEAN FlushTlb,
OUT PVOID *VirtualAddress);
STATIC XTAPI XTSTATUS MapRealModeMemory(IN PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG Size);
STATIC XTAPI VOID MarkHardwareMemoryWriteThrough(IN PVOID VirtualAddress,
IN PFN_NUMBER PageCount);
STATIC XTAPI VOID RemapHardwareMemory(IN PVOID VirtualAddress,
@@ -41,6 +50,8 @@ namespace MM
STATIC XTAPI XTSTATUS UnmapHardwareMemory(IN PVOID VirtualAddress,
IN PFN_NUMBER PageCount,
IN BOOLEAN FlushTlb);
STATIC XTAPI VOID UnmapRealModeMemory(IN PHYSICAL_ADDRESS PhysicalAddress,
IN ULONG Size);
};
}

View File

@@ -46,6 +46,7 @@ namespace MM
VIRTUAL XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer) = 0;
VIRTUAL XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer) = 0;
VIRTUAL XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer) = 0;
XTAPI ULONG_PTR GetUserProbeAddress(VOID);
XTAPI BOOLEAN GetXpaStatus();
VIRTUAL XTAPI VOID InitializePageMapInfo(VOID) = 0;
VIRTUAL XTAPI BOOLEAN PteValid(IN PMMPTE PtePointer) = 0;

View File

@@ -45,6 +45,7 @@ namespace MM
STATIC XTAPI ULONG GetPteSoftwarePrototype(IN PMMPTE PtePointer);
STATIC XTAPI ULONG GetPteSoftwareTransition(IN PMMPTE PtePointer);
STATIC XTAPI PVOID GetPteVirtualAddress(IN PMMPTE PtePointer);
STATIC XTAPI ULONG_PTR GetUserProbeAddress(VOID);
STATIC XTAPI BOOLEAN GetXpaStatus(VOID);
STATIC XTAPI VOID InitializePageMapSupport(VOID);
STATIC XTAPI XTSTATUS MapVirtualAddress(IN PVOID VirtualAddress,

View File

@@ -0,0 +1,44 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/mm/probe.hh
* DESCRIPTION: Memory Manager read/write probe support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_MM_PROBE_HH
#define __XTOSKRNL_MM_PROBE_HH
#include <xtos.hh>
/* Memory Manager */
namespace MM
{
class Probe
{
public:
STATIC XTAPI VOID ProbeForRead(IN CONST PVOID Address,
IN SIZE_T Size,
IN ULONG Alignment);
STATIC XTAPI VOID ProbeForReadArray(IN CONST PVOID Array,
IN ULONG ItemSize,
IN ULONG ItemCount,
IN ULONG Alignment);
STATIC XTAPI VOID ProbeForReadStructure(IN CONST PVOID Address,
IN SIZE_T Size,
IN ULONG Alignment);
STATIC XTAPI VOID ProbeForWrite(IN PVOID Address,
IN SIZE_T Size,
IN ULONG Alignment);
STATIC XTAPI VOID ProbeForWriteArray(IN OUT PVOID Array,
IN ULONG ItemSize,
IN ULONG ItemCount,
IN ULONG Alignment);
STATIC XTAPI VOID ProbeForWriteStructure(IN PVOID Address,
IN SIZE_T Size,
IN ULONG Alignment);
};
}
#endif /* __XTOSKRNL_MM_PROBE_HH */

View File

@@ -0,0 +1,33 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/mm/quota.hh
* DESCRIPTION: Memory Manager Quota support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_MM_QUOTA_HH
#define __XTOSKRNL_MM_QUOTA_HH
#include <xtos.hh>
/* Memory Manager */
namespace MM
{
class Quota
{
private:
STATIC SIZE_T PagedPoolQuota;
STATIC SIZE_T NonPagedPoolQuota;
public:
STATIC XTAPI BOOLEAN RaisePoolQuota(IN MMPOOL_TYPE PoolType,
IN SIZE_T CurrentQuotaLimit,
OUT PSIZE_T NewQuotaLimit);
STATIC XTAPI VOID ReturnPoolQuota(IN MMPOOL_TYPE PoolType,
IN SIZE_T ReturnedQuota);
};
}
#endif /* __XTOSKRNL_MM_QUOTA_HH */

View File

@@ -0,0 +1,24 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/mm/tags.hh
* DESCRIPTION: Memory Manager allocation tags
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_MM_TAGS_HH
#define __XTOSKRNL_MM_TAGS_HH
#include <xtos.hh>
/* Allocation tags */
#define TAG_HL_FRAMEBUFFER SIGNATURE32('F', 'B', 'U', 'F')
#define TAG_MM_BIG_ALLOC SIGNATURE32('B', 'I', 'G', 'A')
#define TAG_MM_MEMORY_MGR SIGNATURE32('M', 'M', 'G', 'R')
#define TAG_MM_OVERFLOW SIGNATURE32('O', 'V', 'F', 'L')
#define TAG_MM_MEMORY_POOL SIGNATURE32('P', 'O', 'O', 'L')
#define TAG_MM_NONE SIGNATURE32('N', 'O', 'N', 'E')
#define TAG_SE_DESCRIPTOR SIGNATURE32('S', 'E', 'S', 'D')
#endif /* __XTOSKRNL_MM_TAGS_HH */

View File

@@ -12,7 +12,7 @@
#include <xtos.hh>
/* Runtime Library */
/* Power Management */
namespace PO
{
class Idle

18
xtoskrnl/includes/ps.hh Normal file
View File

@@ -0,0 +1,18 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ps.hh
* DESCRIPTION: Process and thread management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_PS_HH
#define __XTOSKRNL_PS_HH
#include <xtos.hh>
#include <ps/process.hh>
#include <ps/thread.hh>
#endif /* __XTOSKRNL_PS_HH */

View File

@@ -0,0 +1,26 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ps/process.hh
* DESCRIPTION: Process Management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_PS_PROCESS_HH
#define __XTOSKRNL_PS_PROCESS_HH
#include <xtos.hh>
/* Process and thread management */
namespace PS
{
class Process
{
public:
STATIC XTAPI XTSTATUS CreateIdleProcess(IN PKPROCESSOR_CONTROL_BLOCK Prcb);
STATIC XTFASTCALL PEPROCESS GetCurrentProcess(VOID);
};
}
#endif /* __XTOSKRNL_PS_PROCESS_HH */

View File

@@ -0,0 +1,26 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/ps/thread.hh
* DESCRIPTION: Thread Management
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_PS_THREAD_HH
#define __XTOSKRNL_PS_THREAD_HH
#include <xtos.hh>
/* Process and thread management */
namespace PS
{
class Thread
{
public:
STATIC XTAPI XTSTATUS CreateIdleThread(IN PKPROCESSOR_CONTROL_BLOCK Prcb,
IN PVOID Stack);
};
}
#endif /* __XTOSKRNL_PS_THREAD_HH */

View File

@@ -17,15 +17,19 @@
#include <rtl/bitmap.hh>
#include <rtl/dispatch.hh>
#include <rtl/endian.hh>
#include <rtl/exsup.hh>
#include <rtl/guid.hh>
#include <rtl/lifo.hh>
#include <rtl/llist.hh>
#include <rtl/math.hh>
#include <rtl/memory.hh>
#include <rtl/nls.hh>
#include <rtl/rbtree.hh>
#include <rtl/sha1.hh>
#include <rtl/slist.hh>
#include <rtl/string.hh>
#include <rtl/time.hh>
#include <rtl/unicode.hh>
#include <rtl/widestr.hh>
#endif /* __XTOSKRNL_RTL_HH */

View File

@@ -18,6 +18,16 @@ namespace RTL
class Atomic
{
public:
STATIC XTFASTCALL CHAR Add8(IN PCHAR Address,
IN CHAR Value);
STATIC XTFASTCALL SHORT Add16(IN PSHORT Address,
IN SHORT Value);
STATIC XTFASTCALL LONG Add32(IN PLONG Address,
IN LONG Value);
STATIC XTFASTCALL LONG_PTR Add64(IN PLONG_PTR Address,
IN LONG_PTR Value);
STATIC XTFASTCALL PVOID AddPointer(IN PVOID *Address,
IN PVOID Value);
STATIC XTFASTCALL CHAR And8(IN PCHAR Address,
IN CHAR Mask);
STATIC XTFASTCALL SHORT And16(IN PSHORT Address,
@@ -26,6 +36,10 @@ namespace RTL
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR And64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
STATIC XTFASTCALL UCHAR BitTestAndReset(IN PLONG Base,
IN LONG Offset);
STATIC XTFASTCALL UCHAR BitTestAndReset64(IN PLONGLONG Base,
IN LONGLONG Offset);
STATIC XTFASTCALL UCHAR BitTestAndSet(IN PLONG Base,
IN LONG Offset);
STATIC XTFASTCALL UCHAR BitTestAndSet64(IN PLONGLONG Base,
@@ -67,7 +81,7 @@ namespace RTL
IN LONG_PTR Value);
STATIC XTFASTCALL PVOID ExchangePointer(IN PVOID *Address,
IN PVOID Exchange);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY FlushSingleList(IN PSINGLE_LIST_HEADER Header);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY FlushSingleList(IN PSINGLE_LIST_HEADER ListHead);
STATIC XTFASTCALL CHAR Increment8(IN PCHAR Address);
STATIC XTFASTCALL SHORT Increment16(IN PSHORT Address);
STATIC XTFASTCALL LONG Increment32(IN PLONG Address);
@@ -80,8 +94,8 @@ namespace RTL
IN LONG Mask);
STATIC XTFASTCALL LONG_PTR Or64(IN PLONG_PTR Address,
IN LONG_PTR Mask);
STATIC XTFASTCALL XTFASTCALL PSINGLE_LIST_ENTRY PopEntrySingleList(IN PSINGLE_LIST_HEADER Header);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PushEntrySingleList(IN PSINGLE_LIST_HEADER Header,
STATIC XTFASTCALL XTFASTCALL PSINGLE_LIST_ENTRY PopEntrySingleList(IN PSINGLE_LIST_HEADER ListHead);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PushEntrySingleList(IN PSINGLE_LIST_HEADER ListHead,
IN PSINGLE_LIST_ENTRY Entry);
STATIC XTFASTCALL CHAR Xor8(IN PCHAR Address,
IN CHAR Mask);

View File

@@ -0,0 +1,27 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/exsup.hh
* DESCRIPTION: Exception handling
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_EXSUP_HH
#define __XTOSKRNL_RTL_EXSUP_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Exception
{
public:
STATIC XTAPI VOID RaiseException(IN PEXCEPTION_RECORD ExceptionRecord);
STATIC XTAPI VOID RaiseStatus(IN XTSTATUS Status);
STATIC XTAPI LONG SystemFilter(VOID);
};
}
#endif /* __XTOSKRNL_RTL_EXSUP_HH */

View File

@@ -0,0 +1,31 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/lifo.hh
* DESCRIPTION: Last In First Out (LIFO) queue implementation
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_LIFO_HH
#define __XTOSKRNL_RTL_LIFO_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class LifoQueue
{
public:
STATIC XTFASTCALL BOOLEAN EmptyList(IN PSINGLE_LIST_ENTRY ListHead);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PeekEntryList(IN PSINGLE_LIST_ENTRY ListHead);
STATIC XTFASTCALL PSINGLE_LIST_ENTRY PopEntryList(IN OUT PSINGLE_LIST_ENTRY ListHead);
STATIC XTFASTCALL VOID PushEntryList(IN OUT PSINGLE_LIST_ENTRY ListHead,
IN PSINGLE_LIST_ENTRY Entry);
STATIC XTFASTCALL BOOLEAN SearchEntryList(IN PSINGLE_LIST_ENTRY ListHead,
IN PSINGLE_LIST_ENTRY Entry);
};
}
#endif /* __XTOSKRNL_RTL_LIFO_HH */

View File

@@ -0,0 +1,34 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/nls.hh
* DESCRIPTION: National Language Support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_NLS_HH
#define __XTOSKRNL_RTL_NLS_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Nls
{
public:
STATIC XTAPI VOID GetDefaultCodePage(OUT PUSHORT AnsiCodePage,
OUT PUSHORT OemCodePage);
STATIC XTAPI VOID InitializeCodePageTable(IN PUSHORT TableBase,
OUT PCPTABLE_INFO CodePageTable);
STATIC XTAPI VOID InitializeNlsTables(IN PUSHORT AnsiTableBase,
IN PUSHORT OemTableBase,
IN PUSHORT CaseTableBase,
OUT PNLSTABLE_INFO NlsTable);
STATIC XTAPI WCHAR ToLowerUnicodeCharacter(IN WCHAR WideCHaracter);
STATIC XTAPI WCHAR ToUpperUnicodeCharacter(IN WCHAR WideCharacter);
};
}
#endif /* __XTOSKRNL_RTL_NLS_HH */

View File

@@ -0,0 +1,29 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/rtl/unicode.hh
* DESCRIPTION: Unicode support
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_RTL_UNICODE_HH
#define __XTOSKRNL_RTL_UNICODE_HH
#include <xtos.hh>
/* Runtime Library */
namespace RTL
{
class Unicode
{
public:
STATIC XTAPI VOID CopyString(IN OUT PUNICODE_STRING Destination,
IN PCUNICODE_STRING Source);
STATIC XTAPI XTSTATUS InitializeString(OUT PUNICODE_STRING Destination,
IN PCWSTR Source,
IN BOOLEAN Truncate = FALSE);
};
}
#endif /* __XTOSKRNL_RTL_UNICODE_HH */

18
xtoskrnl/includes/se.hh Normal file
View File

@@ -0,0 +1,18 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/se.hh
* DESCRIPTION: Kernel Security
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_SE_HH
#define __XTOSKRNL_SE_HH
#include <xtos.hh>
#include <se/descript.hh>
#include <se/privileg.hh>
#endif /* __XTOSKRNL_SE_HH */

View File

@@ -0,0 +1,35 @@
/**
* PROJECT: ExectOS
* COPYRIGHT: See COPYING.md in the top level directory
* FILE: xtoskrnl/includes/se/descript.hh
* DESCRIPTION: Security Descriptors
* DEVELOPERS: Aiken Harris <harraiken91@gmail.com>
*/
#ifndef __XTOSKRNL_SE_DESCRIPT_HH
#define __XTOSKRNL_SE_DESCRIPT_HH
#include <xtos.hh>
/* Kernel Security */
namespace SE
{
class Descriptor
{
public:
STATIC XTAPI XTSTATUS CaptureSecurityDescriptor(IN PSECURITY_DESCRIPTOR InputDescriptor,
IN KPROCESSOR_MODE ProcessorMode,
IN MMPOOL_TYPE PoolType,
IN BOOLEAN ForceCapture,
OUT PSECURITY_DESCRIPTOR *OutputDescriptor);
STATIC XTFASTCALL ULONG ComputeSecurityQuota(IN ULONG Size);
STATIC XTAPI XTSTATUS ComputeQuotaInformationSize(IN PSECURITY_DESCRIPTOR SecurityDescriptor,
OUT PULONG QuotaSize);
STATIC XTAPI VOID ReleaseSecurityDescriptor(IN PSECURITY_DESCRIPTOR Descriptor,
IN KPROCESSOR_MODE ProcessorMode,
IN BOOLEAN ForceRelease);
};
}
#endif /* __XTOSKRNL_SE_DESCRIPT_HH */

Some files were not shown because too many files have changed in this diff Show More