Files
nt-lite/code/drivers/bus/usb/usb.c
T

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);