#include "fbtusr.h"
// Read/Write handler
-NTSTATUS FreeBT_DispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
+NTSTATUS NTAPI FreeBT_DispatchRead(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
- PMDL mdl;
- PURB urb;
- ULONG totalLength;
- ULONG stageLength;
- NTSTATUS ntStatus;
- ULONG_PTR virtualAddress;
- PFILE_OBJECT fileObject;
- PDEVICE_EXTENSION deviceExtension;
- PIO_STACK_LOCATION irpStack;
- PIO_STACK_LOCATION nextStack;
- PFREEBT_RW_CONTEXT rwContext;
- ULONG maxLength=0;
+ PMDL mdl;
+ PURB urb;
+ ULONG totalLength;
+ ULONG stageLength;
+ NTSTATUS ntStatus;
+ ULONG_PTR virtualAddress;
+ PFILE_OBJECT fileObject;
+ PDEVICE_EXTENSION deviceExtension;
+ PIO_STACK_LOCATION irpStack;
+ PIO_STACK_LOCATION nextStack;
+ PFREEBT_RW_CONTEXT rwContext;
+ //ULONG maxLength=0;
urb = NULL;
mdl = NULL;
// Make sure that any selective suspend request has been completed.
if (deviceExtension->SSEnable)
{
- FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Waiting on the IdleReqPendEvent\n"));
+ FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: Waiting on the IdleReqPendEvent\n"));
KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
Executive,
KernelMode,
}
- FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Transfer data length = %d\n", totalLength));
+ FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_DispatchRead: Transfer data length = %d\n", totalLength));
if (totalLength == 0)
{
ntStatus = STATUS_SUCCESS;
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead::"));
FreeBT_IoIncrement(deviceExtension);
- FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: URB sent to lower driver, IRP is pending\n"));
+ FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchRead: URB sent to lower driver, IRP is pending\n"));
// we return STATUS_PENDING and not the status returned by the lower layer.
return STATUS_PENDING;
}
-NTSTATUS FreeBT_ReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
+NTSTATUS NTAPI FreeBT_ReadCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
- ULONG stageLength;
- NTSTATUS ntStatus;
- PIO_STACK_LOCATION nextStack;
- PFREEBT_RW_CONTEXT rwContext;
- PDEVICE_EXTENSION deviceExtension;
+ //ULONG stageLength;
+ NTSTATUS ntStatus;
+ //PIO_STACK_LOCATION nextStack;
+ PFREEBT_RW_CONTEXT rwContext;
+ PDEVICE_EXTENSION deviceExtension;
- deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
+ deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
rwContext = (PFREEBT_RW_CONTEXT) Context;
ntStatus = Irp->IoStatus.Status;
if (NT_SUCCESS(ntStatus))
{
- Irp->IoStatus.Information = rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
+ Irp->IoStatus.Information = rwContext->Urb->UrbBulkOrInterruptTransfer.TransferBufferLength;
}
else
{
- Irp->IoStatus.Information = 0;
+ Irp->IoStatus.Information = 0;
FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_ReadCompletion: - failed with status = %X\n", ntStatus));
}
}
// Read/Write handler
-NTSTATUS FreeBT_DispatchWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
+NTSTATUS NTAPI FreeBT_DispatchWrite(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
- PMDL mdl;
- PURB urb;
- ULONG totalLength;
- ULONG stageLength;
- NTSTATUS ntStatus;
- ULONG_PTR virtualAddress;
- PFILE_OBJECT fileObject;
- PDEVICE_EXTENSION deviceExtension;
- PIO_STACK_LOCATION irpStack;
- PIO_STACK_LOCATION nextStack;
- PFREEBT_RW_CONTEXT rwContext;
- ULONG maxLength=0;
+ PMDL mdl;
+ PURB urb;
+ ULONG totalLength;
+ ULONG stageLength;
+ NTSTATUS ntStatus;
+ ULONG_PTR virtualAddress;
+ PFILE_OBJECT fileObject;
+ PDEVICE_EXTENSION deviceExtension;
+ PIO_STACK_LOCATION irpStack;
+ PIO_STACK_LOCATION nextStack;
+ PFREEBT_RW_CONTEXT rwContext;
+ //ULONG maxLength=0;
urb = NULL;
mdl = NULL;
// Make sure that any selective suspend request has been completed.
if (deviceExtension->SSEnable)
{
- FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteDispatch: Waiting on the IdleReqPendEvent\n"));
+ FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_WriteDispatch: Waiting on the IdleReqPendEvent\n"));
KeWaitForSingleObject(&deviceExtension->NoIdleReqPendEvent,
Executive,
KernelMode,
}
- FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Transfer data length = %d\n", totalLength));
+ FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Transfer data length = %d\n", totalLength));
if (totalLength>FBT_HCI_DATA_MAX_SIZE)
{
- FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Buffer exceeds maximum packet length (%d), failing IRP\n", FBT_HCI_DATA_MAX_SIZE));
+ FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Buffer exceeds maximum packet length (%d), failing IRP\n", FBT_HCI_DATA_MAX_SIZE));
ntStatus = STATUS_INVALID_BUFFER_SIZE;
ExFreePool(rwContext);
goto FreeBT_DispatchWrite_Exit;
if (totalLength<FBT_HCI_DATA_MIN_SIZE)
{
- FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Zero length buffer, completing IRP\n"));
+ FreeBT_DbgPrint(1, ("FBTUSB: FreeBT_WriteDispatch: Zero length buffer, completing IRP\n"));
ntStatus = STATUS_BUFFER_TOO_SMALL;
ExFreePool(rwContext);
goto FreeBT_DispatchWrite_Exit;
FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite::"));
FreeBT_IoIncrement(deviceExtension);
- FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: URB sent to lower driver, IRP is pending\n"));
+ FreeBT_DbgPrint(3, ("FBTUSB: FreeBT_DispatchWrite: URB sent to lower driver, IRP is pending\n"));
// we return STATUS_PENDING and not the status returned by the lower layer.
return STATUS_PENDING;
}
-NTSTATUS FreeBT_WriteCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
+NTSTATUS NTAPI FreeBT_WriteCompletion(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN PVOID Context)
{
- ULONG stageLength;
- NTSTATUS ntStatus;
- PIO_STACK_LOCATION nextStack;
- PFREEBT_RW_CONTEXT rwContext;
- PDEVICE_EXTENSION deviceExtension;
+ ULONG stageLength;
+ NTSTATUS ntStatus;
+ PIO_STACK_LOCATION nextStack;
+ PFREEBT_RW_CONTEXT rwContext;
+ PDEVICE_EXTENSION deviceExtension;
- deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
+ deviceExtension = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension;
rwContext = (PFREEBT_RW_CONTEXT) Context;
ntStatus = Irp->IoStatus.Status;
else
{
// No more data to transfer
- FreeBT_DbgPrint(1, ("FBTUSB: FreeNT_WriteCompletion: Write completed, %d bytes written\n", Irp->IoStatus.Information));
+ FreeBT_DbgPrint(1, ("FBTUSB: FreeNT_WriteCompletion: Write completed, %d bytes written\n", Irp->IoStatus.Information));
Irp->IoStatus.Information = rwContext->Numxfer;
}