introduce a stable NTL_DDK driver ABI to replace direct HAL_API and kernel-header access in drivers, add code/kernel/io_ddk.c and code/public/ntlite/ddk/ headers, change DriverEntry to take (const NTL_DDK*, NTL_DRIVER_INIT*), update kmain to build the DDK once via IoInitializeDdk/IoGetDdk and hand it to both boot and runtime drivers, downgrade code/public/ntlite/ddi/io_driver.h to a legacy I/O model header pulling from ntlite/ddk instead of kernel internals, move code/third_party/lwip into code/drivers/net/lwip/third_party, fix up lwip_sources.txt and build.c include paths to match, split build.c's single CFLAGS macro into COMMON/KERNEL/USER/BOOT/DRIVER cflags.
This commit is contained in:
1 parent
08329516ba
commit
485a6bbfe7
385 files changed
+1822
-1079
No files matched your search
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "ahci.h"
|
||||
|
||||
const HAL_API *g_hal;
|
||||
const NTL_DDK* gAhciDdk;
|
||||
DRIVER_OBJECT g_driver;
|
||||
|
||||
static AHCI_CONTROLLER* g_controllers[MAX_AHCI_CONTROLLERS];
|
||||
@@ -58,7 +58,7 @@ static KSTATUS port_init_memory(AHCI_DRIVE *drv) {
|
||||
|
||||
drv->structPhys = MmPfnAllocateContiguous(PORT_PAGES_STRUCT, MmPfnUseDma);
|
||||
if (!drv->structPhys) return NTLSTATUS_NO_MEMORY;
|
||||
drv->structVirt = g_hal->PhysToVirt(drv->structPhys);
|
||||
drv->structVirt = gAhciDdk->Memory->PhysToVirt(drv->structPhys);
|
||||
// Force NOCACHE on DMA descriptor memory.
|
||||
MmPteProtectRange((uintptr_t)drv->structVirt,
|
||||
PORT_PAGES_STRUCT * 4096, flags);
|
||||
@@ -66,7 +66,7 @@ static KSTATUS port_init_memory(AHCI_DRIVE *drv) {
|
||||
|
||||
drv->bouncePhys = MmPfnAllocateContiguous(BOUNCE_PAGES, MmPfnUseDma);
|
||||
if (!drv->bouncePhys) return NTLSTATUS_NO_MEMORY;
|
||||
drv->bounceVirt = g_hal->PhysToVirt(drv->bouncePhys);
|
||||
drv->bounceVirt = gAhciDdk->Memory->PhysToVirt(drv->bouncePhys);
|
||||
// Bounce buffer: NOCACHE to ensure CPU writes reach physical memory
|
||||
// before the HBA's DMA engine reads them.
|
||||
MmPteProtectRange((uintptr_t)drv->bounceVirt,
|
||||
@@ -887,9 +887,13 @@ static KSTATUS AhciAddDevice(DRIVER_OBJECT* driver, DEVICE_OBJECT* physicalDevic
|
||||
}
|
||||
|
||||
// Implements the driver Entry operation.
|
||||
KSTATUS DriverEntry(const HAL_API *hal) {
|
||||
KSTATUS DriverEntry(const NTL_DDK* ddk, NTL_DRIVER_INIT* init) {
|
||||
(void)init;
|
||||
if (!ddk || !ddk->Memory || !ddk->Memory->PhysToVirt)
|
||||
return NTLSTATUS_INVALID_PARAMETER;
|
||||
|
||||
DbgPrint("AHCI: driver loading...\n");
|
||||
g_hal = hal;
|
||||
gAhciDdk = ddk;
|
||||
g_controllerCount = 0;
|
||||
g_nextDiskIndex = 0;
|
||||
|
||||
|
||||
@@ -7,16 +7,15 @@
|
||||
#include <string.h>
|
||||
#include <ntlite/ddi/io_driver.h>
|
||||
#include <ntlite/ddi/pci.h>
|
||||
#include <kernel/mm_phys.h>
|
||||
#include <kernel/mm_pfn.h>
|
||||
#include <kernel/mm_virt.h>
|
||||
#include <kernel/ke_debug.h>
|
||||
#include <kernel/ke_event.h>
|
||||
#include <kernel/ke_semaphore.h>
|
||||
#include <kernel/ke_thread.h>
|
||||
#include <kernel/ke_irq.h>
|
||||
#include <kernel/ke_irp.h>
|
||||
#include <kernel/ke_dpc.h>
|
||||
#include <ntlite/ddk/ddk.h>
|
||||
#include <ntlite/ddk/memory.h>
|
||||
#include <ntlite/ddk/debug.h>
|
||||
#include <ntlite/ddk/event.h>
|
||||
#include <ntlite/ddk/semaphore.h>
|
||||
#include <ntlite/ddk/thread.h>
|
||||
#include <ntlite/ddk/interrupt.h>
|
||||
#include <ntlite/ddk/irp.h>
|
||||
#include <ntlite/ddk/dpc.h>
|
||||
|
||||
typedef enum {
|
||||
FIS_TYPE_REG_H2D = 0x27,
|
||||
@@ -379,7 +378,7 @@ struct AHCI_CONTROLLER {
|
||||
bool removed;
|
||||
};
|
||||
|
||||
extern const HAL_API *g_hal;
|
||||
extern const NTL_DDK* gAhciDdk;
|
||||
extern DRIVER_OBJECT g_driver;
|
||||
|
||||
KSTATUS ahci_map_mmio(uint64_t physBase, uint64_t length);
|
||||
|
||||
@@ -10,7 +10,7 @@ KSTATUS ahci_map_mmio(uint64_t physBase, uint64_t length) {
|
||||
uint64_t pageEnd = (physBase + length + PAGE_SIZE - 1u) & ~(uint64_t)(PAGE_SIZE - 1u);
|
||||
int pageIndex = 0;
|
||||
for (uint64_t phys = pageBase; phys < pageEnd; phys += PAGE_SIZE, pageIndex++) {
|
||||
uintptr_t virt = (uintptr_t)g_hal->PhysToVirt(phys);
|
||||
uintptr_t virt = (uintptr_t)gAhciDdk->Memory->PhysToVirt(phys);
|
||||
uint64_t flags = PAGE_PRESENT | PAGE_WRITE | PAGE_NOCACHE;
|
||||
KSTATUS st = MmPteMapPage(virt, phys, flags, MmPteMapFailIfPresent);
|
||||
// Ignore NTLSTATUS_ALREADY_EXISTS - a prior mapping with different flags
|
||||
|
||||
Reference in new issue
Block a user