287 lines
6 KiB
C
287 lines
6 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1997 - 1999 SCM Microsystems, Inc.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
PscrNT.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Driver header - NT Version
|
||
|
|
||
|
Author:
|
||
|
|
||
|
Andreas Straub (SCM Microsystems, Inc.)
|
||
|
Klaus Schuetz (Microsoft Corp.)
|
||
|
|
||
|
Revision History:
|
||
|
|
||
|
Andreas Straub 1.00 8/18/1997 Initial Version
|
||
|
Klaus Schuetz 1.01 9/20/1997 Timing changed
|
||
|
Andreas Straub 1.02 9/24/1997 Low Level error handling,
|
||
|
minor bugfixes, clanup
|
||
|
Andreas Straub 1.03 10/8/1997 Timing changed, generic SCM
|
||
|
interface changed
|
||
|
Andreas Straub 1.04 10/18/1997 Interrupt handling changed
|
||
|
Andreas Straub 1.05 10/19/1997 Generic IOCTL's added
|
||
|
Andreas Straub 1.06 10/25/1997 Timeout limit for FW update variable
|
||
|
Andreas Straub 1.07 11/7/1997 Version information added
|
||
|
Andreas Straub 1.08 11/10/1997 Generic IOCTL GET_CONFIGURATION
|
||
|
Klaus Schuetz 1998 PnP and Power Management added
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#if !defined ( __PSCR_NT_DRV_H__ )
|
||
|
#define __PSCR_NT_DRV_H__
|
||
|
#define SMARTCARD_POOL_TAG '4SCS'
|
||
|
|
||
|
#include <wdm.h>
|
||
|
#include <DEVIOCTL.H>
|
||
|
#include "SMCLIB.h"
|
||
|
#include "WINSMCRD.h"
|
||
|
|
||
|
#include "PscrRdWr.h"
|
||
|
|
||
|
#if !defined( STATUS_DEVICE_REMOVED )
|
||
|
#define STATUS_DEVICE_REMOVED STATUS_UNSUCCESSFUL
|
||
|
#endif
|
||
|
|
||
|
#define SysCompareMemory( p1, p2, Len ) ( RtlCompareMemory( p1,p2, Len ) != Len )
|
||
|
#define SysCopyMemory( pDest, pSrc, Len ) RtlCopyMemory( pDest, pSrc, Len )
|
||
|
#define SysFillMemory( pDest, Value, Len ) RtlFillMemory( pDest, Len, Value )
|
||
|
|
||
|
#define DELAY_WRITE_PSCR_REG 1
|
||
|
#define DELAY_PSCR_WAIT 5
|
||
|
|
||
|
#define LOBYTE( any ) ((UCHAR)( any & 0xFF ) )
|
||
|
#define HIBYTE( any ) ((UCHAR)( ( any >> 8) & 0xFF ))
|
||
|
|
||
|
typedef struct _DEVICE_EXTENSION
|
||
|
{
|
||
|
SMARTCARD_EXTENSION SmartcardExtension;
|
||
|
|
||
|
// The PDO that we are attached to
|
||
|
PDEVICE_OBJECT AttachedPDO;
|
||
|
|
||
|
// The DPC object for post interrupt processing
|
||
|
KDPC DpcObject;
|
||
|
|
||
|
// Out interrupt resource
|
||
|
PKINTERRUPT InterruptObject;
|
||
|
|
||
|
// Flag that indicates if we need to unmap the port upon stop
|
||
|
BOOLEAN UnMapPort;
|
||
|
|
||
|
// Our PnP device name
|
||
|
UNICODE_STRING DeviceName;
|
||
|
|
||
|
// Current number of io-requests
|
||
|
LONG IoCount;
|
||
|
|
||
|
// Used to access IoCount;
|
||
|
KSPIN_LOCK SpinLock;
|
||
|
|
||
|
// Used to signal that the device has been removed
|
||
|
KEVENT ReaderRemoved;
|
||
|
|
||
|
// Used to signal that the reader is able to process reqeusts
|
||
|
KEVENT ReaderStarted;
|
||
|
|
||
|
// Used to signal the the reader has been closed
|
||
|
LONG ReaderOpen;
|
||
|
|
||
|
// Used to keep track of the current power state the reader is in
|
||
|
LONG PowerState;
|
||
|
|
||
|
// Number of pending card tracking interrupts
|
||
|
ULONG PendingInterrupts;
|
||
|
|
||
|
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
|
||
|
|
||
|
#define PSCR_MAX_DEVICE 2
|
||
|
|
||
|
#define IOCTL_PSCR_COMMAND SCARD_CTL_CODE( 0x8000 )
|
||
|
#define IOCTL_GET_VERSIONS SCARD_CTL_CODE( 0x8001 )
|
||
|
#define IOCTL_SET_TIMEOUT SCARD_CTL_CODE( 0x8002 )
|
||
|
#define IOCTL_GET_CONFIGURATION SCARD_CTL_CODE( 0x8003 )
|
||
|
|
||
|
typedef struct _VERSION_CONTROL
|
||
|
{
|
||
|
ULONG SmclibVersion;
|
||
|
UCHAR DriverMajor,
|
||
|
DriverMinor,
|
||
|
FirmwareMajor,
|
||
|
FirmwareMinor,
|
||
|
UpdateKey;
|
||
|
} VERSION_CONTROL, *PVERSION_CONTROL;
|
||
|
|
||
|
#define SIZEOF_VERSION_CONTROL sizeof( VERSION_CONTROL )
|
||
|
|
||
|
typedef struct _PSCR_CONFIGURATION
|
||
|
{
|
||
|
PPSCR_REGISTERS IOBase;
|
||
|
ULONG IRQ;
|
||
|
|
||
|
} PSCR_CONFIGURATION, *PPSCR_CONFIGURATION;
|
||
|
|
||
|
#define SIZEOF_PSCR_CONFIGURATION sizeof( PSCR_CONFIGURATION )
|
||
|
|
||
|
void SysDelay( ULONG Timeout );
|
||
|
|
||
|
BOOLEAN
|
||
|
PscrMapIOPort(
|
||
|
INTERFACE_TYPE InterfaceType,
|
||
|
ULONG BusNumber,
|
||
|
PHYSICAL_ADDRESS BusAddress,
|
||
|
ULONG Length,
|
||
|
PULONG pIOPort
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
DriverEntry(
|
||
|
PDRIVER_OBJECT DriverObject,
|
||
|
PUNICODE_STRING RegistryPath
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrPnP(
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrPower(
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrCreateAndStartDevice(
|
||
|
PDRIVER_OBJECT DriverObject
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrCreateDevice(
|
||
|
IN PDRIVER_OBJECT DriverObject,
|
||
|
OUT PDEVICE_OBJECT *DeviceObject
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrStartDevice(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PCM_FULL_RESOURCE_DESCRIPTOR FullResourceDescriptor
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrPcmciaCallComplete(
|
||
|
IN PDEVICE_OBJECT DeviceObject,
|
||
|
IN PIRP Irp,
|
||
|
IN PKEVENT Event
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrStopDevice(
|
||
|
PDEVICE_OBJECT DeviceObject
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrReportResources(
|
||
|
PDRIVER_OBJECT DriverObject,
|
||
|
PCM_FULL_RESOURCE_DESCRIPTOR FullResourceDesciptor
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrAddDevice(
|
||
|
IN PDRIVER_OBJECT DriverObject,
|
||
|
IN PDEVICE_OBJECT PhysicalDeviceObject
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrUnloadDevice(
|
||
|
PDEVICE_OBJECT DeviceObject
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrUnloadDriver(
|
||
|
PDRIVER_OBJECT DriverObject
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
IsPnPDriver(
|
||
|
void
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrFinishPendingRequest(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
NTSTATUS NTStatus
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrCancel(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrCleanup(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
PscrIrqServiceRoutine(
|
||
|
PKINTERRUPT Interrupt,
|
||
|
PDEVICE_EXTENSION DeviceExtension
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrDpcRoutine(
|
||
|
PKDPC Dpc,
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PDEVICE_EXTENSION DeviceExtension,
|
||
|
PSMARTCARD_EXTENSION SmartcardExtension
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrGenericIOCTL(
|
||
|
PSMARTCARD_EXTENSION SmartcardExtension
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrCreateClose(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrSystemControl(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrDeviceIoControl(
|
||
|
PDEVICE_OBJECT DeviceObject,
|
||
|
PIRP Irp
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrInterruptEvent(
|
||
|
IN PDEVICE_OBJECT DeviceObject
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
PscrFreeze(
|
||
|
PSMARTCARD_EXTENSION SmartcardExtension
|
||
|
);
|
||
|
|
||
|
NTSTATUS
|
||
|
PscrCallPcmciaDriver(
|
||
|
IN PDEVICE_OBJECT AttachedPDO,
|
||
|
IN PIRP Irp
|
||
|
);
|
||
|
#endif // __PSCR_NT_DRV_H__
|
||
|
|