Author: fireball Date: Tue Oct 3 01:23:41 2006 New Revision: 24369
URL: http://svn.reactos.org/svn/reactos?rev=24369&view=rev Log: - Change CONNECT_DATA to DEV_CONNECT_DATA - Add the last bit to the usb mouse driver to make it functional - recognition by mouclass.sys, and sending input data to it - Misc small changes
Now USB mouse works in 2nd stage (you need to add usbdriver.sys as a legacy driver to the registry certainly)
TODO, but not of the top priority: - Make unloading correct
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/compdrv.c Tue Oct 3 01:23:41 2006 @@ -24,7 +24,7 @@
VOID compdev_set_cfg_completion(PURB purb, PVOID context); VOID compdev_select_driver(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle); -BOOLEAN compdev_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle); +BOOLEAN compdev_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle); BOOLEAN compdev_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle); BOOLEAN compdev_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
@@ -72,7 +72,7 @@ }
BOOLEAN -compdev_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle) +compdev_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle) { PURB purb; PUSB_CTRL_SETUP_PACKET psetup; @@ -403,7 +403,7 @@ if (credit) { // ok, we find one - CONNECT_DATA param; + DEV_CONNECT_DATA param;
if (pcand->disp_tbl.dev_connect) {
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.c Tue Oct 3 01:23:41 2006 @@ -1080,9 +1080,9 @@ DEV_HANDLE dev_handle; NTSTATUS status; PUSB_DRIVER pdriver; - PCONNECT_DATA pcd = (PCONNECT_DATA) Parameter; + PDEV_CONNECT_DATA pcd = (PDEV_CONNECT_DATA) Parameter; PUSB_DEV_MANAGER dev_mgr; - CONNECT_DATA param; + DEV_CONNECT_DATA param;
if (pcd == NULL) return FALSE; @@ -1111,7 +1111,7 @@ PUSB_DRIVER pdriver, pcand; LONG credit, match, i; DEV_HANDLE handle = 0; - CONNECT_DATA cd; + DEV_CONNECT_DATA cd;
USE_BASIC_NON_PENDING_IRQL;
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/devmgr.h Tue Oct 3 01:23:41 2006 @@ -1,16 +1,16 @@ #ifndef __DEVMGR_H__ #define __DEVMGR_H__
-typedef struct _CONNECT_DATA +typedef struct _DEV_CONNECT_DATA { DEV_HANDLE dev_handle; struct _USB_DRIVER *pdriver; struct _USB_DEV_MANAGER *dev_mgr; PUSB_INTERFACE_DESC if_desc;
-} CONNECT_DATA, *PCONNECT_DATA; - -typedef BOOLEAN ( *PDEV_CONNECT_EX )( PCONNECT_DATA init_param, DEV_HANDLE dev_handle ); +} DEV_CONNECT_DATA, *PDEV_CONNECT_DATA; + +typedef BOOLEAN ( *PDEV_CONNECT_EX )( PDEV_CONNECT_DATA init_param, DEV_HANDLE dev_handle ); typedef BOOLEAN ( *PDEV_CONNECT )( struct _USB_DEV_MANAGER *dev_mgr, DEV_HANDLE dev_handle ); typedef BOOLEAN ( *PDRVR_INIT )( struct _USB_DEV_MANAGER *dev_mgr, struct _USB_DRIVER *pdriver );
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/gendrv.c Tue Oct 3 01:23:41 2006 @@ -75,7 +75,7 @@
VOID gendrv_set_cfg_completion(PURB purb, PVOID context);
-BOOLEAN gendrv_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle); +BOOLEAN gendrv_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle);
BOOLEAN gendrv_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
@@ -168,7 +168,7 @@ }
BOOLEAN -gendrv_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle) +gendrv_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle) { PURB purb; PUSB_CTRL_SETUP_PACKET psetup; @@ -717,7 +717,7 @@
BOOLEAN -gendrv_if_connect(PCONNECT_DATA params, DEV_HANDLE if_handle) +gendrv_if_connect(PDEV_CONNECT_DATA params, DEV_HANDLE if_handle) { // // try to search the registry to find one driver.
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/hub.c Tue Oct 3 01:23:41 2006 @@ -79,7 +79,7 @@
NTSTATUS hub_start_int_request(PUSB_DEV pdev);
-BOOLEAN hub_connect(PCONNECT_DATA init_param, DEV_HANDLE dev_handle); +BOOLEAN hub_connect(PDEV_CONNECT_DATA init_param, DEV_HANDLE dev_handle);
BOOLEAN hub_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle);
@@ -1908,7 +1908,7 @@ }
BOOLEAN -hub_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle) +hub_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle) { URB urb, *purb; CHAR buf[512];
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/mouse.c Tue Oct 3 01:23:41 2006 @@ -8,6 +8,7 @@
#include "usbdriver.h" #include "ntddmou.h" +#include "kbdmou.h"
//FIXME: is it needed at all? typedef struct _USBMP_DEVICE_EXTENSION @@ -15,10 +16,14 @@ BOOLEAN IsFDO; } USBMP_DEVICE_EXTENSION, *PUSBMP_DEVICE_EXTENSION;
+/* Data for embedded drivers */ +//CONNECT_DATA KbdClassInformation; +CONNECT_DATA MouseClassInformation; + PDEVICE_OBJECT MouseFdo = NULL;
-BOOLEAN mouse_connect(PCONNECT_DATA dev_mgr, DEV_HANDLE dev_handle); +BOOLEAN mouse_connect(PDEV_CONNECT_DATA dev_mgr, DEV_HANDLE dev_handle); BOOLEAN mouse_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle); BOOLEAN mouse_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle); VOID mouse_irq(PURB purb, PVOID pcontext); @@ -63,6 +68,9 @@ pdriver->disp_tbl.dev_disconnect = mouse_disconnect; pdriver->disp_tbl.dev_stop = mouse_stop; pdriver->disp_tbl.dev_reserved = NULL; + + // Zero out the class information structure + RtlZeroMemory(&MouseClassInformation, sizeof(CONNECT_DATA));
// Create the device MouseCreateDevice(dev_mgr->usb_driver_obj); @@ -91,7 +99,7 @@ }
BOOLEAN -mouse_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle) +mouse_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle) { PURB purb; NTSTATUS status; @@ -219,7 +227,7 @@ mouse_irq(PURB purb, PVOID pcontext) { MOUSE_INPUT_DATA MouseInputData; - //ULONG InputDataConsumed; + ULONG InputDataConsumed; NTSTATUS status; PMOUSE_DRVR_EXTENSION pdev_ext = (PMOUSE_DRVR_EXTENSION)pcontext; signed char *data = pdev_ext->mouse_data; @@ -275,18 +283,18 @@ }
// Commit the input data somewhere... - /*if (UsbPortInterface.MouseConnectData->ClassService) + if (MouseClassInformation.ClassService) { KIRQL OldIrql;
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); - (*(PSERVICE_CALLBACK_ROUTINE)UsbPortInterface.MouseConnectData->ClassService)( - UsbPortInterface.MouseConnectData->ClassDeviceObject, + (*(PSERVICE_CALLBACK_ROUTINE)MouseClassInformation.ClassService)( + MouseClassInformation.ClassDeviceObject, &MouseInputData, (&MouseInputData)+1, &InputDataConsumed); KeLowerIrql(OldIrql); - }*/ + }
// Save old button data pdev_ext->btn_old = data[0]; @@ -338,7 +346,7 @@ NTSTATUS MouseDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) { - //NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST; + NTSTATUS Status = STATUS_INVALID_DEVICE_REQUEST;
usb_dbg_print(DBGLVL_MAXIMUM, ("MouseDispatch(DO %p, code 0x%lx) called\n", DeviceObject, @@ -356,7 +364,7 @@ { case IOCTL_INTERNAL_KEYBOARD_CONNECT: DPRINT("IOCTL_INTERNAL_KEYBOARD_CONNECT\n"); - if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA)) { + if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(DEV_CONNECT_DATA)) { DPRINT1("Keyboard IOCTL_INTERNAL_KEYBOARD_CONNECT " "invalid buffer size\n"); Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; @@ -365,7 +373,7 @@
RtlCopyMemory(&KbdClassInformation, Stk->Parameters.DeviceIoControl.Type3InputBuffer, - sizeof(CONNECT_DATA)); + sizeof(DEV_CONNECT_DATA));
Irp->IoStatus.Status = STATUS_SUCCESS; break; @@ -484,7 +492,9 @@ intcontfailure: Status = Irp->IoStatus.Status; } - else if (DeviceObject == MouseFdo) + else +#endif + if (DeviceObject == MouseFdo) { // it's mouse's IOCTL PIO_STACK_LOCATION Stk; @@ -495,10 +505,10 @@ switch (Stk->Parameters.DeviceIoControl.IoControlCode) { case IOCTL_INTERNAL_MOUSE_CONNECT: - DPRINT("IOCTL_INTERNAL_MOUSE_CONNECT\n"); + usb_dbg_print(DBGLVL_MAXIMUM, ("IOCTL_INTERNAL_MOUSE_CONNECT\n")); if (Stk->Parameters.DeviceIoControl.InputBufferLength < sizeof(CONNECT_DATA)) { - DPRINT1("IOCTL_INTERNAL_MOUSE_CONNECT: " - "invalid buffer size\n"); + usb_dbg_print(DBGLVL_MINIMUM, ("IOCTL_INTERNAL_MOUSE_CONNECT: " + "invalid buffer size\n")); Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; goto intcontfailure2; } @@ -517,28 +527,16 @@ intcontfailure2: Status = Irp->IoStatus.Status; } - else - { - return UsbMpPdoInternalDeviceControlCore(DeviceObject, Irp); - } - - - if (Status == STATUS_INVALID_DEVICE_REQUEST) { - DPRINT1("Invalid internal device request!\n"); + + if (Status == STATUS_INVALID_DEVICE_REQUEST) + { + usb_dbg_print(DBGLVL_MINIMUM, ("Invalid internal device request!\n")); }
if (Status != STATUS_PENDING) IoCompleteRequest(Irp, IO_NO_INCREMENT);
return Status; - -#endif - - // Default handler - Irp->IoStatus.Information = 0; - Irp->IoStatus.Status = STATUS_NOT_SUPPORTED; - IoCompleteRequest(Irp, IO_NO_INCREMENT); - return STATUS_NOT_SUPPORTED; }
NTSTATUS @@ -571,7 +569,7 @@ goto cleanup; }
- Status = ZwSetValueKey(hPortKey, DeviceName, 0, REG_SZ, (PVOID)RegistryPath, wcslen(RegistryPath) * sizeof(WCHAR) + sizeof(UNICODE_NULL)); + Status = ZwSetValueKey(hPortKey, DeviceName, 0, REG_SZ, (PVOID)RegistryPath, (ULONG)(wcslen(RegistryPath) * sizeof(WCHAR) + sizeof(UNICODE_NULL))); if (!NT_SUCCESS(Status)) { usb_dbg_print(DBGLVL_MINIMUM, ("ZwSetValueKey() failed with status 0x%08lx\n", Status));
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/uhci.c Tue Oct 3 01:23:41 2006 @@ -128,7 +128,7 @@
extern VOID rh_timer_svc_int_completion(PUSB_DEV dev, PVOID context);
-ULONG debug_level = DBGLVL_MAXIMUM; +ULONG debug_level = DBGLVL_MINIMUM;//DBGLVL_MAXIMUM; PDRIVER_OBJECT usb_driver_obj = NULL; extern USB_DEV_MANAGER g_dev_mgr;
Modified: trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/usb/nt4compat/usbdr... ============================================================================== --- trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c (original) +++ trunk/reactos/drivers/usb/nt4compat/usbdriver/umss.c Tue Oct 3 01:23:41 2006 @@ -65,7 +65,7 @@
VOID NTAPI umss_start_io(IN PDEVICE_OBJECT dev_obj, IN PIRP irp); NTSTATUS umss_port_dispatch_routine(PDEVICE_OBJECT pdev_obj, PIRP irp); -BOOLEAN umss_connect(PCONNECT_DATA dev_mgr, DEV_HANDLE dev_handle); +BOOLEAN umss_connect(PDEV_CONNECT_DATA dev_mgr, DEV_HANDLE dev_handle); BOOLEAN umss_disconnect(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle); BOOLEAN umss_stop(PUSB_DEV_MANAGER dev_mgr, DEV_HANDLE dev_handle); NTSTATUS umss_dispatch_routine(PDEVICE_OBJECT pdev_obj, PIRP irp); @@ -384,7 +384,7 @@ }
BOOLEAN -umss_connect(PCONNECT_DATA param, DEV_HANDLE dev_handle) +umss_connect(PDEV_CONNECT_DATA param, DEV_HANDLE dev_handle) { PURB purb; NTSTATUS status; @@ -1475,7 +1475,7 @@ }
BOOLEAN -umss_if_connect(PCONNECT_DATA params, DEV_HANDLE if_handle) +umss_if_connect(PDEV_CONNECT_DATA params, DEV_HANDLE if_handle) { PURB purb; LONG if_idx, i;