replace ad hoc driver loading with a proper driver manager, new DDK, new PnP manager with device matching, asynchronous startup, resource ownership and removal, add shared PCI capability helpers, replace typed, rigid services with a proper service manager, implement proper system shutdown and restart, shutting down unloads drivers and shuts down services, add simple power button, remove heavyweight boot self-tests and SMP stress runs, add monotonic timestamps to kernel debug output, fruitless USB and PS/2 fixes, make test builds opt in.
This commit is contained in:
1 parent
c0ad63c27f
commit
d36f19509c
160 files changed
+6563
-7366
No files matched your search
@@ -0,0 +1,90 @@
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
#include <ntlite/status.h>
|
||||
#include <ntlite/ddk/device.h>
|
||||
|
||||
#define NTL_DDK_MODULE_EXPORT_NAME "NtlDriverModule"
|
||||
#define NTL_DDK_MODULE_SIGNATURE 0x324D444Eu // "NDM2" in little-endian memory.
|
||||
#define NTL_DDK_MODULE_ABI_VERSION 5u
|
||||
|
||||
typedef struct NTL_MODULE NTL_MODULE;
|
||||
typedef KSTATUS (*NTL_MODULE_INITIALIZE)(NTL_MODULE* module);
|
||||
typedef KSTATUS (*NTL_MODULE_PREPARE_SHUTDOWN)(NTL_MODULE* module);
|
||||
typedef void (*NTL_MODULE_COMMIT_SHUTDOWN)(NTL_MODULE* module);
|
||||
|
||||
struct DRIVER_OBJECT;
|
||||
|
||||
typedef struct NTL_MODULE_EXPORT {
|
||||
uint32_t Signature;
|
||||
uint32_t Version;
|
||||
uint32_t Size;
|
||||
uint32_t Flags;
|
||||
NTL_MODULE_INITIALIZE Initialize;
|
||||
const NTL_DEVICE_DESC* Devices;
|
||||
uint32_t DeviceCount;
|
||||
uint32_t Reserved;
|
||||
struct DRIVER_OBJECT* const* IoDrivers;
|
||||
uint32_t IoDriverCount;
|
||||
uint32_t Reserved2;
|
||||
NTL_MODULE_PREPARE_SHUTDOWN PrepareShutdown;
|
||||
NTL_MODULE_COMMIT_SHUTDOWN CommitShutdown;
|
||||
} NTL_MODULE_EXPORT;
|
||||
|
||||
#ifdef __cplusplus
|
||||
static_assert(sizeof(NTL_MODULE_EXPORT) == 72u, "DDK module export ABI changed");
|
||||
#define NTL_DDK_C_EXPORT extern "C"
|
||||
#else
|
||||
_Static_assert(sizeof(NTL_MODULE_EXPORT) == 72u, "DDK module export ABI changed");
|
||||
#define NTL_DDK_C_EXPORT
|
||||
#endif
|
||||
|
||||
#define NTL_DECLARE_MODULE(initialize_fn) \
|
||||
NTL_DDK_C_EXPORT __declspec(dllexport) const NTL_MODULE_EXPORT NtlDriverModule = { \
|
||||
NTL_DDK_MODULE_SIGNATURE, NTL_DDK_MODULE_ABI_VERSION, \
|
||||
(uint32_t)sizeof(NTL_MODULE_EXPORT), 0u, (initialize_fn), 0, 0u, 0u, 0, 0u, 0u, 0, 0 \
|
||||
}
|
||||
|
||||
#define NTL_DECLARE_DEVICE_MODULE(deviceArray) \
|
||||
NTL_DDK_C_EXPORT __declspec(dllexport) const NTL_MODULE_EXPORT NtlDriverModule = { \
|
||||
NTL_DDK_MODULE_SIGNATURE, NTL_DDK_MODULE_ABI_VERSION, \
|
||||
(uint32_t)sizeof(NTL_MODULE_EXPORT), 0u, 0, (deviceArray), \
|
||||
(uint32_t)(sizeof(deviceArray) / sizeof((deviceArray)[0])), 0u, 0, 0u, 0u, 0, 0 \
|
||||
}
|
||||
|
||||
#define NTL_DECLARE_IO_MODULE(initialize_fn, driverArray) \
|
||||
NTL_DDK_C_EXPORT __declspec(dllexport) const NTL_MODULE_EXPORT NtlDriverModule = { \
|
||||
NTL_DDK_MODULE_SIGNATURE, NTL_DDK_MODULE_ABI_VERSION, \
|
||||
(uint32_t)sizeof(NTL_MODULE_EXPORT), 0u, (initialize_fn), 0, 0u, 0u, \
|
||||
(driverArray), (uint32_t)(sizeof(driverArray) / sizeof((driverArray)[0])), 0u, 0, 0 \
|
||||
}
|
||||
|
||||
#define NTL_DECLARE_MODULE_WITH_SHUTDOWN(initialize_fn, prepareFn, commitFn) \
|
||||
NTL_DDK_C_EXPORT __declspec(dllexport) const NTL_MODULE_EXPORT NtlDriverModule = { \
|
||||
NTL_DDK_MODULE_SIGNATURE, NTL_DDK_MODULE_ABI_VERSION, \
|
||||
(uint32_t)sizeof(NTL_MODULE_EXPORT), 0u, (initialize_fn), 0, 0u, 0u, \
|
||||
0, 0u, 0u, (prepareFn), (commitFn) \
|
||||
}
|
||||
|
||||
#define NTL_DECLARE_IO_MODULE_WITH_SHUTDOWN(initialize_fn, driverArray, prepareFn, commitFn) \
|
||||
NTL_DDK_C_EXPORT __declspec(dllexport) const NTL_MODULE_EXPORT NtlDriverModule = { \
|
||||
NTL_DDK_MODULE_SIGNATURE, NTL_DDK_MODULE_ABI_VERSION, \
|
||||
(uint32_t)sizeof(NTL_MODULE_EXPORT), 0u, (initialize_fn), 0, 0u, 0u, \
|
||||
(driverArray), (uint32_t)(sizeof(driverArray) / sizeof((driverArray)[0])), 0u, \
|
||||
(prepareFn), (commitFn) \
|
||||
}
|
||||
|
||||
// Query the configured module identity; the returned string is borrowed.
|
||||
#ifdef NTL_KERNEL_BUILD
|
||||
#define NTL_DDK_MODULE_API __declspec(dllexport)
|
||||
#else
|
||||
#define NTL_DDK_MODULE_API __declspec(dllimport)
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
NTL_DDK_MODULE_API const char* NtlModuleGetName(const NTL_MODULE* module);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
Reference in new issue
Block a user