89 lines
2.6 KiB
C
89 lines
2.6 KiB
C
#include <ntlite/ddk/module.h>
|
|
// 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);
|