⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 genport.h

📁 win2000下
💻 H
字号:
/*++

Copyright (c) 1990-2000 Microsoft Corporation, All Rights Reserved
 
Module Name:

    genport.h

Abstract:  Include file for Generic Port I/O Example Driver


Author:    Robert R. Howell         January 6, 1993


Environment:

    Kernel mode

Revision History:

 Eliyas Yakub     Dec 29, 1998

     Converted to Windows 2000
     
--*/
#include <ntddk.h>
#include "gpioctl.h"        // Get IOCTL interface definitions

#if     !defined(__GENPORT_H__)
#define __GENPORT_H__

// NT device name
#define GPD_DEVICE_NAME L"\\Device\\PCI954"

// File system device name.   When you execute a CreateFile call to open the
// device, use "\\.\GpdDev", or, given C's conversion of \\ to \, use
// "\\\\.\\GpdDev"

#define DOS_DEVICE_NAME L"\\DosDevices\\PCI954Dev"

#define PORTIO_TAG 'TROP'
//定义DeviceID和VenderID
#define PCI_954_VID 0x0011
#define PCI_954_DID 0x8357
// driver local data structure specific to each device object
typedef struct _LOCAL_DEVICE_INFO {
	PUNICODE_STRING RegistryPath;
    PVOID               PortBase;       // base port address
    ULONG               PortCount;      // Count of I/O addresses used.
    ULONG               PortMemoryType; // HalTranslateBusAddress MemoryType
    PDEVICE_OBJECT      DeviceObject;   // The Gpd device object.
    PDEVICE_OBJECT      NextLowerDriver;     // The top of the stack
    BOOLEAN             Started;
    BOOLEAN             Removed;
    BOOLEAN             PortWasMapped;  // If TRUE, we have to unmap on unload  
    BOOLEAN             Filler[1]; 		//bug fix
    IO_REMOVE_LOCK      RemoveLock;
	//以下是我增加的,与中断相关的
    PKINTERRUPT			InterruptObject;
    BOOLEAN				FoundInterrupt;
    KIRQL				InterruptLevel;
    ULONG				InterruptVector;
    KAFFINITY			InterruptAffinity;
    KINTERRUPT_MODE		InterruptMode;
	ULONG				TestIsr;
	//增加结束

	//与PCI相关的信息
	ULONG				BusNumber;
	PCI_SLOT_NUMBER 	SlotNumber;
	//结束 与PCI相关的信息

	//与收发相关的变量
    PVOID			ComBase[COM_NUM];       // base port address

	COM_SET_MODE	ComState[COM_NUM];	// 串口状态
    BOOLEAN         Inited[COM_NUM];	//is SetBaudrade

	KSEMAPHORE		BufSemaphore[2][COM_NUM];
	PVOID			BufBase[2][COM_NUM];
	PVOID			DataNumBase[2][COM_NUM];
	PVOID			PtrBuf[2][COM_NUM];
	//结束 与收发相关的变量
} LOCAL_DEVICE_INFO, *PLOCAL_DEVICE_INFO;
//
// Some static string tables we use as part of debugging
//
static PSTR CmResourceTypeStrings[] = 
{
    "CmResourceTypeNull",
    "CmResourceTypePort",
    "CmResourceTypeInterrupt",
    "CmResourceTypeMemory",
    "CmResourceTypeDma",
    "CmResourceTypeDeviceSpecific",
    "CmResourceTypeMaximum"
};

static PSTR CmShareDispositionStrings[] = 
{
    "CmResourceShareUndetermined",
    "CmResourceShareDeviceExclusive",
    "CmResourceShareDriverExclusive",
    "CmResourceShareShared"
};

#if DBG
#define DebugPrint(_x_) \
               DbgPrint ("PortIo:"); \
               DbgPrint _x_;

#define TRAP() DbgBreakPoint()

#else
#define DebugPrint(_x_)
#define TRAP()
#endif


/********************* function prototypes ***********************************/
//

NTSTATUS    
DriverEntry(       
    IN  PDRIVER_OBJECT DriverObject,
    IN  PUNICODE_STRING RegistryPath 
    );


NTSTATUS    
GpdDispatch(       
    IN  PDEVICE_OBJECT pDO,
    IN  PIRP pIrp                    
    );

NTSTATUS    
GpdIoctlReadPort(  
    IN  PLOCAL_DEVICE_INFO pLDI,
    IN  PIRP pIrp,
    IN  PIO_STACK_LOCATION IrpStack,
    IN  ULONG IoctlCode              
    );

NTSTATUS    
GpdIoctlWritePort( 
    IN  PLOCAL_DEVICE_INFO pLDI,
    IN  PIRP pIrp,
    IN  PIO_STACK_LOCATION IrpStack,
    IN  ULONG IoctlCode              
    );

VOID        
GpdUnload(         
    IN  PDRIVER_OBJECT DriverObject 
    );


NTSTATUS
GpdAddDevice(
    IN PDRIVER_OBJECT DriverObject,
    IN PDEVICE_OBJECT PhysicalDeviceObject
    );


NTSTATUS
GpdDispatchPnp (
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP Irp
    );

NTSTATUS
GpdStartDevice (
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP             Irp
    );

NTSTATUS
GpdDispatchPower(
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP              Irp
    );
NTSTATUS 
GpdDispatchSystemControl(
    IN PDEVICE_OBJECT    DeviceObject,
    IN PIRP              Irp
    );
PCHAR
PnPMinorFunctionString (
    UCHAR MinorFunction
);
BOOLEAN
GpdInterruptService(
    IN  PKINTERRUPT Interrupt,
    IN  PVOID       Extension
    );
NTSTATUS
SerialReadData(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP pIrp,
	IN PIO_STACK_LOCATION IrpStack,
	IN USHORT ComIndex
    );
NTSTATUS
SerialWriteData(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP pIrp,
	IN PIO_STACK_LOCATION IrpStack,
	IN USHORT ComIndex
    );
NTSTATUS
SerialSetBaud(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP pIrp,
	IN PIO_STACK_LOCATION IrpStack
    );
NTSTATUS
SerialReset(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP pIrp,
	IN PIO_STACK_LOCATION IrpStack
    );
USHORT
GetDataNum(
		   IN PDEVICE_OBJECT DeviceObject,
		   IN USHORT ComIndex,
		   IN USHORT Direct
		   );
		   
NTSTATUS
WriteSwitch(
    IN PDEVICE_OBJECT DeviceObject,
    IN PIRP pIrp,
   	IN PIO_STACK_LOCATION IrpStack
    );
#endif


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -