#include // USB driver package entry point. This file registers the USB bus, class, hub, HID, storage, and xHCI drivers. #include "usb.h" DRIVER_OBJECT gXhciDriver; static const IO_DEVICE_ID gXhciIds[] = { { IoBusPci, { "PCI\\CC_0C0330", sizeof("PCI\\CC_0C0330") - 1 } }, }; static const IO_DRIVER_ID_TABLE gXhciIdTable = { gXhciIds, sizeof(gXhciIds) / sizeof(gXhciIds[0]), }; const char* UsbControllerName(uint8_t progIf) { switch (progIf) { case 0x00: return "UHCI"; case 0x10: return "OHCI"; case 0x20: return "EHCI"; case 0x30: return "xHCI"; default: return "USB"; } } // Initializes xhci Driver. static KSTATUS UsbInitializeXhciDriver(void) { memset(&gXhciDriver, 0, sizeof(gXhciDriver)); IoInitializeDriverObject(&gXhciDriver, SYS_SV_LITERAL("xhci")); gXhciDriver.IdTable = &gXhciIdTable; gXhciDriver.DriverAddDevice = XhciAddDevice; gXhciDriver.MajorFunction[IRP_MJ_PNP] = XhciDispatchPnp; return NTLSTATUS_SUCCESS; } static KSTATUS DriverInitialize(NTL_MODULE* module) { (void)module; DbgPrint("usb: driver loading phase2-xecp-20261023\n"); KSTATUS st = UsbInitializeBusModel(); if (!KSUCCESS(st)) { DbgPrint("usb: bus model initialisation failed st=0x%x\n", st); return st; } st = UsbInitializeCompositeDriver(); if (!KSUCCESS(st)) { DbgPrint("usb: composite driver initialisation failed st=0x%x\n", st); return st; } st = UsbInitializeHidDriver(); if (!KSUCCESS(st)) { DbgPrint("usb: HID driver initialisation failed st=0x%x\n", st); return st; } st = UsbInitializeStorageDriver(); if (!KSUCCESS(st)) { DbgPrint("usb: storage driver initialisation failed st=0x%x\n", st); return st; } st = UsbInitializeHubDriver(); if (!KSUCCESS(st)) { DbgPrint("usb: hub driver initialisation failed st=0x%x\n", st); return st; } st = UsbInitializeXhciDriver(); if (!KSUCCESS(st)) { DbgPrint("usb: xHCI driver initialisation failed st=0x%x\n", st); return st; } DbgPrint("usb: driver initialized\n"); return NTLSTATUS_SUCCESS; } extern DRIVER_OBJECT gUsbBusDriver; extern DRIVER_OBJECT gUsbCompositeDriver; extern DRIVER_OBJECT gUsbHidDriver; extern DRIVER_OBJECT gUsbStorageDriver; extern DRIVER_OBJECT gUsbHubDriver; static DRIVER_OBJECT* const gModuleIoDrivers[] = { &gXhciDriver, &gUsbBusDriver, &gUsbCompositeDriver, &gUsbHidDriver, &gUsbStorageDriver, &gUsbHubDriver }; NTL_DECLARE_IO_MODULE(DriverInitialize, gModuleIoDrivers);