Synchronize up to trunk's revision r57689.
[reactos.git] / drivers / bluetooth / fbtusb / fbtdev.c
old mode 100755 (executable)
new mode 100644 (file)
index 15f96e1..9479e53
 #include "fbtusr.h"
 
 // Dispatch routine for CreateHandle
-NTSTATUS FreeBT_DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
+NTSTATUS NTAPI FreeBT_DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 {
-    ULONG                       i;
+    //ULONG                       i;
     NTSTATUS                    ntStatus;
     PFILE_OBJECT                fileObject;
     PDEVICE_EXTENSION           deviceExtension;
     PIO_STACK_LOCATION          irpStack;
-    PFREEBT_PIPE_CONTEXT               pipeContext;
-    PUSBD_INTERFACE_INFORMATION        interface;
+    //PFREEBT_PIPE_CONTEXT        pipeContext;
+    PUSBD_INTERFACE_INFORMATION interface;
 
     PAGED_CODE();
 
@@ -71,12 +71,12 @@ NTSTATUS FreeBT_DispatchCreate(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
     }
 
-       if (deviceExtension->OpenHandleCount>0)
-       {
-               ntStatus = STATUS_ACCESS_VIOLATION;
-               goto FreeBT_DispatchCreate_Exit;
+    if (deviceExtension->OpenHandleCount>0)
+    {
+        ntStatus = STATUS_ACCESS_VIOLATION;
+        goto FreeBT_DispatchCreate_Exit;
 
-       }
+    }
 
     // opening a device as opposed to pipe.
     ntStatus = STATUS_SUCCESS;
@@ -99,21 +99,21 @@ FreeBT_DispatchCreate_Exit:
 }
 
 // Dispatch routine for CloseHandle
-NTSTATUS FreeBT_DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
+NTSTATUS NTAPI FreeBT_DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 {
     NTSTATUS               ntStatus;
     PFILE_OBJECT           fileObject;
     PDEVICE_EXTENSION      deviceExtension;
     PIO_STACK_LOCATION     irpStack;
-    PFREEBT_PIPE_CONTEXT  pipeContext;
-    PUSBD_PIPE_INFORMATION pipeInformation;
+    //PFREEBT_PIPE_CONTEXT  pipeContext;
+    //PUSBD_PIPE_INFORMATION pipeInformation;
 
     PAGED_CODE();
 
     irpStack = IoGetCurrentIrpStackLocation(Irp);
     fileObject = irpStack->FileObject;
-    pipeContext = NULL;
-    pipeInformation = NULL;
+    //pipeContext = NULL;
+    //pipeInformation = NULL;
     deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
 
     FreeBT_DbgPrint(3, ("FreeBT_DispatchClose: Entered\n"));
@@ -132,18 +132,18 @@ NTSTATUS FreeBT_DispatchClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 }
 
 // Called when a HCI Send on the control pipe completes
-NTSTATUS FreeBT_HCISendCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
+NTSTATUS NTAPI FreeBT_HCISendCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
 {
-    ULONG               stageLength;
+    //ULONG               stageLength;
     NTSTATUS            ntStatus;
 
     FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_HCISendCompletion, status=0x%08X\n", Irp->IoStatus.Status));
 
-       if (Irp->PendingReturned)
-               IoMarkIrpPending(Irp);
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
 
     ExFreePool(Context);
-       FreeBT_IoDecrement(DeviceObject->DeviceExtension);
+    FreeBT_IoDecrement(DeviceObject->DeviceExtension);
     ntStatus = Irp->IoStatus.Status;
     Irp->IoStatus.Information = 0;
 
@@ -153,81 +153,81 @@ NTSTATUS FreeBT_HCISendCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, I
 
 // Called the DeviceIOControl handler to send an HCI command received from the user
 // HCI Commands are sent on the (default) control pipe
-NTSTATUS FreeBT_SendHCICommand(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID IoBuffer, IN ULONG InputBufferLength)
+NTSTATUS NTAPI FreeBT_SendHCICommand(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID IoBuffer, IN ULONG InputBufferLength)
 {
-       PDEVICE_EXTENSION       deviceExtension;
-    ULONG                              urbFlags;
-       ULONG                           stageLength;
-       PVOID                           pBuffer;
-       PURB                            urb;
-       NTSTATUS                        ntStatus;
-    PIO_STACK_LOCATION nextStack;
-       //PFBT_HCI_CMD_HEADER   pHCICommand;
-       //LARGE_INTEGER         delay;
-
-       deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
-       if (!deviceExtension)
-       {
-               ntStatus=STATUS_INVALID_PARAMETER;
-               FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Failed to get DeviceExtension\n"));
-               Irp->IoStatus.Status = ntStatus;
-               Irp->IoStatus.Information = 0;
-               IoCompleteRequest(Irp, IO_NO_INCREMENT);
-               return ntStatus;
-
-       }
-
-       // The user is doing a reset, reset all the pipes as well, so that any
-       // old events or data are removed
-       /*pHCICommand=(PFBT_HCI_CMD_HEADER)IoBuffer;
-       if (pHCICommand->OpCode==FBT_HCI_CMD_RESET)
-       {
-               FreeBT_ResetPipe(DeviceObject, deviceExtension->EventPipe.PipeHandle);
-               FreeBT_ResetPipe(DeviceObject, deviceExtension->DataInPipe.PipeHandle);
-               FreeBT_ResetPipe(DeviceObject, deviceExtension->DataOutPipe.PipeHandle);
-               FreeBT_ResetPipe(DeviceObject, deviceExtension->AudioInPipe.PipeHandle);
-               FreeBT_ResetPipe(DeviceObject, deviceExtension->AudioOutPipe.PipeHandle);
-
-               // Wait a second for the device to recover
-               FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Sleeping\n"));
-               delay.QuadPart = -10000 * 5000; // 5s
+    PDEVICE_EXTENSION   deviceExtension;
+    //ULONG               urbFlags;
+    //ULONG               stageLength;
+    //PVOID               pBuffer;
+    PURB                urb;
+    NTSTATUS            ntStatus;
+    PIO_STACK_LOCATION  nextStack;
+    //PFBT_HCI_CMD_HEADER pHCICommand;
+    //LARGE_INTEGER       delay;
+
+    deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
+    if (!deviceExtension)
+    {
+        ntStatus=STATUS_INVALID_PARAMETER;
+        FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Failed to get DeviceExtension\n"));
+        Irp->IoStatus.Status = ntStatus;
+        Irp->IoStatus.Information = 0;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        return ntStatus;
+
+    }
+
+    // The user is doing a reset, reset all the pipes as well, so that any
+    // old events or data are removed
+    /*pHCICommand=(PFBT_HCI_CMD_HEADER)IoBuffer;
+    if (pHCICommand->OpCode==FBT_HCI_CMD_RESET)
+    {
+        FreeBT_ResetPipe(DeviceObject, deviceExtension->EventPipe.PipeHandle);
+        FreeBT_ResetPipe(DeviceObject, deviceExtension->DataInPipe.PipeHandle);
+        FreeBT_ResetPipe(DeviceObject, deviceExtension->DataOutPipe.PipeHandle);
+        FreeBT_ResetPipe(DeviceObject, deviceExtension->AudioInPipe.PipeHandle);
+        FreeBT_ResetPipe(DeviceObject, deviceExtension->AudioOutPipe.PipeHandle);
+
+        // Wait a second for the device to recover
+        FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Sleeping\n"));
+        delay.QuadPart = -10000 * 5000; // 5s
         KeWaitForSingleObject(&deviceExtension->DelayEvent,
                               Executive,
                               UserMode,
                               FALSE,
                               &delay);
 
-               FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Finished sleeping\n"));
+        FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Finished sleeping\n"));
 
 
-       }*/
+    }*/
 
-       // Create the URB
+    // Create the URB
     urb = (PURB)ExAllocatePool(NonPagedPool, sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST));
     if(urb == NULL)
     {
         FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_SendHCICommand: Failed to alloc mem for urb\n"));
         ntStatus = STATUS_INSUFFICIENT_RESOURCES;
-               Irp->IoStatus.Status = ntStatus;
-               Irp->IoStatus.Information = 0;
-               IoCompleteRequest(Irp, IO_NO_INCREMENT);
-               return ntStatus;
+        Irp->IoStatus.Status = ntStatus;
+        Irp->IoStatus.Information = 0;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        return ntStatus;
 
     }
 
-       UsbBuildVendorRequest(
-               urb,
-               URB_FUNCTION_CLASS_DEVICE, // This works, for CSR and Silicon Wave
-               sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
-               0,
-               0,
-               0,
-               0,
-               0,
-               IoBuffer,
-               NULL,
-               InputBufferLength,
-               NULL);
+    UsbBuildVendorRequest(
+        urb,
+        URB_FUNCTION_CLASS_DEVICE, // This works, for CSR and Silicon Wave
+        sizeof(struct _URB_CONTROL_VENDOR_OR_CLASS_REQUEST),
+        0,
+        0,
+        0,
+        0,
+        0,
+        IoBuffer,
+        NULL,
+        InputBufferLength,
+        NULL);
 
     // use the original irp as an internal device control irp
     nextStack = IoGetNextIrpStackLocation(Irp);
@@ -236,41 +236,41 @@ NTSTATUS FreeBT_SendHCICommand(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN P
     nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
 
     IoSetCompletionRoutine(
-               Irp,
-               (PIO_COMPLETION_ROUTINE)FreeBT_HCISendCompletion,
-               urb,
-               TRUE,
-               TRUE,
-               TRUE);
+        Irp,
+        (PIO_COMPLETION_ROUTINE)FreeBT_HCISendCompletion,
+        urb,
+        TRUE,
+        TRUE,
+        TRUE);
 
     // We return STATUS_PENDING; call IoMarkIrpPending.
     IoMarkIrpPending(Irp);
 
-       FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand::"));
+    FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand::"));
     FreeBT_IoIncrement(deviceExtension);
 
-       FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand: Sending IRP %X to underlying driver\n", Irp));
+    FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand: Sending IRP %X to underlying driver\n", Irp));
     ntStatus=IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
     if(!NT_SUCCESS(ntStatus))
     {
         FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand: IoCallDriver fails with status %X\n", ntStatus));
 
-               FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand::"));
-               FreeBT_IoDecrement(deviceExtension);
+        FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand::"));
+        FreeBT_IoDecrement(deviceExtension);
 
         // If the device was surprise removed out, the pipeInformation field is invalid.
         // similarly if the request was cancelled, then we need not reset the device.
         if((ntStatus != STATUS_CANCELLED) && (ntStatus != STATUS_DEVICE_NOT_CONNECTED))
-                       ntStatus = FreeBT_ResetDevice(DeviceObject);
+            ntStatus = FreeBT_ResetDevice(DeviceObject);
 
         else
             FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_SendHCICommand: ntStatus is STATUS_CANCELLED or STATUS_DEVICE_NOT_CONNECTED\n"));
 
-               Irp->IoStatus.Status = ntStatus;
-               Irp->IoStatus.Information = 0;
-               IoCompleteRequest(Irp, IO_NO_INCREMENT);
+        Irp->IoStatus.Status = ntStatus;
+        Irp->IoStatus.Information = 0;
+        IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
-               return ntStatus;
+        return ntStatus;
 
     }
 
@@ -281,38 +281,38 @@ NTSTATUS FreeBT_SendHCICommand(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN P
 }
 
 // Called when a HCI Get on the event pipe completes
-NTSTATUS FreeBT_HCIEventCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
+NTSTATUS NTAPI FreeBT_HCIEventCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
 {
-    ULONG               stageLength;
+    //ULONG               stageLength;
     NTSTATUS            ntStatus;
     PIO_STACK_LOCATION  nextStack;
-    PURB                               urb;
+    PURB                urb;
 
     FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_HCIEventCompletion, status=0x%08X\n", Irp->IoStatus.Status));
 
-       if (Irp->PendingReturned)
-               IoMarkIrpPending(Irp);
+    if (Irp->PendingReturned)
+        IoMarkIrpPending(Irp);
 
     // initialize variables
-       urb=(PURB)Context;
+    urb=(PURB)Context;
     ntStatus = Irp->IoStatus.Status;
     Irp->IoStatus.Information = urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
     nextStack = IoGetNextIrpStackLocation(Irp);
 
     ExFreePool(Context);
-       FreeBT_IoDecrement(DeviceObject->DeviceExtension);
+    FreeBT_IoDecrement(DeviceObject->DeviceExtension);
 
     return ntStatus;
 
 }
 
 // Called from the DeviceIOControl handler to wait for an event on the interrupt pipe
-NTSTATUS FreeBT_GetHCIEvent(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID IoBuffer, IN ULONG InputBufferLength)
+NTSTATUS NTAPI FreeBT_GetHCIEvent(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID IoBuffer, IN ULONG InputBufferLength)
 {
-       PDEVICE_EXTENSION       deviceExtension;
-       PURB                            urb;
-       NTSTATUS                        ntStatus;
-    PIO_STACK_LOCATION nextStack;
+    PDEVICE_EXTENSION   deviceExtension;
+    PURB                urb;
+    NTSTATUS            ntStatus;
+    PIO_STACK_LOCATION  nextStack;
 
     FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_GetHCIEvent: Entered\n"));
 
@@ -346,17 +346,17 @@ NTSTATUS FreeBT_GetHCIEvent(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOI
     nextStack->Parameters.DeviceIoControl.IoControlCode = IOCTL_INTERNAL_USB_SUBMIT_URB;
 
     IoSetCompletionRoutine(
-               Irp,
-               (PIO_COMPLETION_ROUTINE)FreeBT_HCIEventCompletion,
-               urb,
-               TRUE,
-               TRUE,
-               TRUE);
+        Irp,
+        (PIO_COMPLETION_ROUTINE)FreeBT_HCIEventCompletion,
+        urb,
+        TRUE,
+        TRUE,
+        TRUE);
 
     // We return STATUS_PENDING; call IoMarkIrpPending.
     IoMarkIrpPending(Irp);
 
-       FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_GetHCIEvent::"));
+    FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_GetHCIEvent::"));
     FreeBT_IoIncrement(deviceExtension);
 
     ntStatus = IoCallDriver(deviceExtension->TopOfStackDeviceObject, Irp);
@@ -364,8 +364,8 @@ NTSTATUS FreeBT_GetHCIEvent(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOI
     {
         FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_GetHCIEvent: IoCallDriver fails with status %X\n", ntStatus));
 
-               FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_GetHCIEvent::"));
-               FreeBT_IoDecrement(deviceExtension);
+        FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_GetHCIEvent::"));
+        FreeBT_IoDecrement(deviceExtension);
 
         // If the device was surprise removed out, the pipeInformation field is invalid.
         // similarly if the request was cancelled, then we need not reset the pipe.
@@ -409,7 +409,7 @@ FreeBT_GetHCIEvent_Exit:
 }
 
 // DeviceIOControl dispatch
-NTSTATUS FreeBT_DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
+NTSTATUS NTAPI FreeBT_DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 {
     ULONG              code;
     PVOID              ioBuffer;
@@ -432,17 +432,17 @@ NTSTATUS FreeBT_DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
     if (deviceExtension->DeviceState != Working)
     {
         FreeBT_DbgPrint(1, ("FBTUSB: Invalid device state\n"));
-               ntStatus = STATUS_INVALID_DEVICE_STATE;
-               goto FreeBT_DispatchDevCtrlExit;
+        ntStatus = STATUS_INVALID_DEVICE_STATE;
+        goto FreeBT_DispatchDevCtrlExit;
 
-       }
+    }
 
     FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchDevCtrl::"));
 
     // Make sure that any selective suspend request has been completed.
     if (deviceExtension->SSEnable)
     {
-           FreeBT_DbgPrint(3, ("Waiting on the IdleReqPendEvent\n"));
+        FreeBT_DbgPrint(3, ("Waiting on the IdleReqPendEvent\n"));
         KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
                               Executive,
                               KernelMode,
@@ -453,49 +453,49 @@ NTSTATUS FreeBT_DispatchDevCtrl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
 
     switch(code)
     {
-       case IOCTL_FREEBT_HCI_SEND_CMD:
-               FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_SEND_CMD received\n"));
-               if (inputBufferLength<FBT_HCI_CMD_MIN_SIZE)
-               {
-                       ntStatus = STATUS_BUFFER_TOO_SMALL;
-                       FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_SEND_CMD: Buffer too small\n"));
-                       goto FreeBT_DispatchDevCtrlExit;
+    case IOCTL_FREEBT_HCI_SEND_CMD:
+        FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_SEND_CMD received\n"));
+        if (inputBufferLength<FBT_HCI_CMD_MIN_SIZE)
+        {
+            ntStatus = STATUS_BUFFER_TOO_SMALL;
+            FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_SEND_CMD: Buffer too small\n"));
+            goto FreeBT_DispatchDevCtrlExit;
 
-               }
+        }
 
-               if (inputBufferLength>FBT_HCI_CMD_MAX_SIZE)
-               {
-                       ntStatus = STATUS_INVALID_BUFFER_SIZE;
-                       FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_SEND_CMD: Buffer too long\n"));
-                       goto FreeBT_DispatchDevCtrlExit;
+        if (inputBufferLength>FBT_HCI_CMD_MAX_SIZE)
+        {
+            ntStatus = STATUS_INVALID_BUFFER_SIZE;
+            FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_SEND_CMD: Buffer too long\n"));
+            goto FreeBT_DispatchDevCtrlExit;
 
-               }
+        }
 
-               return FreeBT_SendHCICommand(DeviceObject, Irp, ioBuffer, inputBufferLength);
-               break;
+        return FreeBT_SendHCICommand(DeviceObject, Irp, ioBuffer, inputBufferLength);
+        break;
 
-       case IOCTL_FREEBT_HCI_GET_EVENT:
-               FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_GET_EVENT received\n"));
-               if (outputBufferLength<FBT_HCI_EVENT_MAX_SIZE)
-               {
-                       ntStatus = STATUS_BUFFER_TOO_SMALL;
-                       FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_GET_EVENT: Buffer too small\n"));
-                       goto FreeBT_DispatchDevCtrlExit;
+    case IOCTL_FREEBT_HCI_GET_EVENT:
+        FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_GET_EVENT received\n"));
+        if (outputBufferLength<FBT_HCI_EVENT_MAX_SIZE)
+        {
+            ntStatus = STATUS_BUFFER_TOO_SMALL;
+            FreeBT_DbgPrint(3, ("FBTUSB: IOCTL_FREEBT_HCI_GET_EVENT: Buffer too small\n"));
+            goto FreeBT_DispatchDevCtrlExit;
 
-               }
+        }
 
-               return FreeBT_GetHCIEvent(DeviceObject, Irp, ioBuffer, outputBufferLength);
-               break;
+        return FreeBT_GetHCIEvent(DeviceObject, Irp, ioBuffer, outputBufferLength);
+        break;
 
     default:
-       FreeBT_DbgPrint(3, ("FBTUSB: Invalid IOCTL 0x%08x received\n", code));
+        FreeBT_DbgPrint(3, ("FBTUSB: Invalid IOCTL 0x%08x received\n", code));
         ntStatus = STATUS_INVALID_DEVICE_REQUEST;
         break;
 
     }
 
 FreeBT_DispatchDevCtrlExit:
-       Irp->IoStatus.Information = 0;
+    Irp->IoStatus.Information = 0;
     Irp->IoStatus.Status = ntStatus;
     IoCompleteRequest(Irp, IO_NO_INCREMENT);
 
@@ -503,7 +503,7 @@ FreeBT_DispatchDevCtrlExit:
 }
 
 // Submit URB_FUNCTION_RESET_PIPE
-NTSTATUS FreeBT_ResetPipe(IN PDEVICE_OBJECT DeviceObject, IN USBD_PIPE_HANDLE PipeHandle)
+NTSTATUS NTAPI FreeBT_ResetPipe(IN PDEVICE_OBJECT DeviceObject, IN USBD_PIPE_HANDLE PipeHandle)
 {
     PURB              urb;
     NTSTATUS          ntStatus;
@@ -543,7 +543,7 @@ NTSTATUS FreeBT_ResetPipe(IN PDEVICE_OBJECT DeviceObject, IN USBD_PIPE_HANDLE Pi
 }
 
 // Call FreeBT_ResetParentPort to reset the device
-NTSTATUS FreeBT_ResetDevice(IN PDEVICE_OBJECT DeviceObject)
+NTSTATUS NTAPI FreeBT_ResetDevice(IN PDEVICE_OBJECT DeviceObject)
 {
     NTSTATUS ntStatus;
     ULONG    portStatus;
@@ -562,7 +562,7 @@ NTSTATUS FreeBT_ResetDevice(IN PDEVICE_OBJECT DeviceObject)
 }
 
 // Read port status from the lower driver (USB class driver)
-NTSTATUS FreeBT_GetPortStatus(IN PDEVICE_OBJECT DeviceObject, IN OUT PULONG PortStatus)
+NTSTATUS NTAPI FreeBT_GetPortStatus(IN PDEVICE_OBJECT DeviceObject, IN OUT PULONG PortStatus)
 {
     NTSTATUS           ntStatus;
     KEVENT             event;
@@ -614,7 +614,7 @@ NTSTATUS FreeBT_GetPortStatus(IN PDEVICE_OBJECT DeviceObject, IN OUT PULONG Port
 }
 
 // Sends an IOCTL_INTERNAL_USB_RESET_PORT via the lower driver
-NTSTATUS FreeBT_ResetParentPort(IN PDEVICE_OBJECT DeviceObject)
+NTSTATUS NTAPI FreeBT_ResetParentPort(IN PDEVICE_OBJECT DeviceObject)
 {
     NTSTATUS           ntStatus;
     KEVENT             event;
@@ -666,7 +666,7 @@ NTSTATUS FreeBT_ResetParentPort(IN PDEVICE_OBJECT DeviceObject)
 }
 
 // Send an idle request to the lower driver
-NTSTATUS SubmitIdleRequestIrp(IN PDEVICE_EXTENSION DeviceExtension)
+NTSTATUS NTAPI SubmitIdleRequestIrp(IN PDEVICE_EXTENSION DeviceExtension)
 {
     PIRP                    irp;
     NTSTATUS                ntStatus;
@@ -883,7 +883,7 @@ SubmitIdleRequestIrp_Exit:
 }
 
 
-VOID IdleNotificationCallback(IN PDEVICE_EXTENSION DeviceExtension)
+VOID NTAPI IdleNotificationCallback(IN PDEVICE_EXTENSION DeviceExtension)
 {
     NTSTATUS                ntStatus;
     POWER_STATE             powerState;
@@ -978,7 +978,7 @@ VOID IdleNotificationCallback(IN PDEVICE_EXTENSION DeviceExtension)
 }
 
 
-NTSTATUS IdleNotificationRequestComplete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension)
+NTSTATUS NTAPI IdleNotificationRequestComplete(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PDEVICE_EXTENSION DeviceExtension)
 {
     NTSTATUS                ntStatus;
     POWER_STATE             powerState;
@@ -1090,7 +1090,7 @@ IdleNotificationRequestComplete_Exit:
 
 }
 
-VOID CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension)
+VOID NTAPI CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension)
 {
     PIRP  irp;
     KIRQL oldIrql;
@@ -1125,13 +1125,13 @@ VOID CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension)
         {
             FreeBT_DbgPrint(3, ("IoCancelIrp returns TRUE\n"));
 
-               }
+        }
 
         else
         {
             FreeBT_DbgPrint(3, ("IoCancelIrp returns FALSE\n"));
 
-               }
+        }
 
         // ....we decrement the FreeIdleIrpCount from 2 to 1.
         // if completion routine runs ahead of us, then this routine
@@ -1153,7 +1153,7 @@ VOID CancelSelectSuspend(IN PDEVICE_EXTENSION DeviceExtension)
 
 }
 
-VOID PoIrpCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN PIO_STATUS_BLOCK IoStatus)
+VOID NTAPI PoIrpCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN PIO_STATUS_BLOCK IoStatus)
 {
     PIRP_COMPLETION_CONTEXT irpContext;
     irpContext = NULL;
@@ -1167,7 +1167,7 @@ VOID PoIrpCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction,
     if(irpContext)
     {
         KeSetEvent(irpContext->Event, 0, FALSE);
-       FreeBT_IoDecrement(irpContext->DeviceExtension);
+        FreeBT_IoDecrement(irpContext->DeviceExtension);
         ExFreePool(irpContext);
 
     }
@@ -1176,7 +1176,7 @@ VOID PoIrpCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction,
 
 }
 
-VOID PoIrpAsyncCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN PIO_STATUS_BLOCK IoStatus)
+VOID NTAPI PoIrpAsyncCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN PIO_STATUS_BLOCK IoStatus)
 {
     PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION) Context;
     FreeBT_DbgPrint(3, ("PoIrpAsyncCompletionFunc::"));
@@ -1186,7 +1186,7 @@ VOID PoIrpAsyncCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunc
 
 }
 
-VOID WWIrpCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN PIO_STATUS_BLOCK IoStatus)
+VOID NTAPI WWIrpCompletionFunc(IN PDEVICE_OBJECT DeviceObject, IN UCHAR MinorFunction, IN POWER_STATE PowerState, IN PVOID Context, IN PIO_STATUS_BLOCK IoStatus)
 {
     PDEVICE_EXTENSION DeviceExtension = (PDEVICE_EXTENSION) Context;