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

📄 xrisr.h

📁 wince 5.0下 实现PCI8串口卡驱动
💻 H
字号:
//
// Copyright (c) 2005 Exar Corporation.  All rights reserved.
//
//
// File: xrisr.h
//
// Purpose: Exar PCI UART's Serial Installable Interrupt Service Routine definitions.
//
//
#ifndef __ISR16550_H_
#define __ISR16550_H_

#include <pkfuncs.h>
#define USER_IOCTL(X) (IOCTL_KLIB_USER + (X))
#define IOCTL_ISR16550_INFO USER_IOCTL(0)
#define IOCTL_ISR16550_UNLOAD USER_IOCTL(1)

typedef struct {
    DWORD dwBufferSize;
    DWORD dwWaterMark;
    DWORD dwFIFO_In;
    DWORD dwFIFO_Out;
    BYTE  bBuffer[1];
} XmitDataBuffer;
typedef volatile XmitDataBuffer * PXmitDataBuffer;

typedef struct  {
    BYTE bIntFlag,bIntData;
} IIR_EVENT;
typedef struct {
    DWORD dwBufferSize;
    DWORD dwWaterMark;
    DWORD dwFIFO_In;
    DWORD dwFIFO_Out;
    IIR_EVENT  bBuffer[1];
} RcvDataBuffer;
typedef volatile RcvDataBuffer * PRcvDataBuffer;

__inline static DWORD GetRcvDataSize(PRcvDataBuffer pReceiveBuffer)
{
    register DWORD dwFIFO_In=pReceiveBuffer->dwFIFO_In,dwFIFO_Out=pReceiveBuffer->dwFIFO_Out;
    if (dwFIFO_In<dwFIFO_Out) 
        return dwFIFO_In+pReceiveBuffer->dwBufferSize - dwFIFO_Out;
    else
        return dwFIFO_In - dwFIFO_Out;
}
__inline static DWORD GetRcvAvailableBuffer(PRcvDataBuffer pReceiveBuffer)
{
    register DWORD dwFIFO_In=pReceiveBuffer->dwFIFO_In,dwFIFO_Out=pReceiveBuffer->dwFIFO_Out;
    if (dwFIFO_In<dwFIFO_Out) 
        return dwFIFO_Out-dwFIFO_In;
    else
        return dwFIFO_Out +pReceiveBuffer->dwBufferSize - dwFIFO_In;
}
__inline static DWORD IncRcvIndex(PRcvDataBuffer pReceiveBuffer,DWORD dwIndex)
{
    return (dwIndex+1<pReceiveBuffer->dwBufferSize)?dwIndex+1:0;

}
__inline static DWORD GetXmitDataSize(PXmitDataBuffer pReceiveBuffer)
{
    register DWORD dwFIFO_In=pReceiveBuffer->dwFIFO_In,dwFIFO_Out=pReceiveBuffer->dwFIFO_Out;
    if (dwFIFO_In<dwFIFO_Out) 
        return dwFIFO_In+pReceiveBuffer->dwBufferSize - dwFIFO_Out;
    else
        return dwFIFO_In - dwFIFO_Out;
}
__inline static DWORD GetXmitAvailableBuffer(PXmitDataBuffer pReceiveBuffer)
{
    register DWORD dwFIFO_In=pReceiveBuffer->dwFIFO_In,dwFIFO_Out=pReceiveBuffer->dwFIFO_Out;
    if (dwFIFO_In<dwFIFO_Out) 
        return dwFIFO_Out-dwFIFO_In;
    else
        return dwFIFO_Out +pReceiveBuffer->dwBufferSize - dwFIFO_In;
}
__inline static DWORD IncXmitIndex(PXmitDataBuffer pReceiveBuffer,DWORD dwIndex)
{
    return (dwIndex+1<pReceiveBuffer->dwBufferSize)?dwIndex+1:0;

}
typedef struct {
    PVOID pBlockPhysAddr;
    DWORD dwBlockSize; 
    DWORD SysIntr;
    PBYTE pIoAddress;
    LONG  lIoSpace;
    DWORD dwReceiveHWWaterMaker;
    DWORD uMultiplier;
    DWORD bIntrBypass;
    DWORD InBufferOffset;
    DWORD OutBufferOffset;

} ISR16550_INFO;

typedef volatile ISR16550_INFO * PISR16550_INFO; 

#ifdef __cplusplus
extern "C" {
#endif 
DWORD CreateInstance(  void  );
BOOL IOControl(
    DWORD   InstanceIndex,
    DWORD   IoControlCode, 
    LPVOID  pInBuf, 
    DWORD   InBufSize,
    LPVOID  pOutBuf, 
    DWORD   OutBufSize, 
    LPDWORD pBytesReturned
    ) ;
DWORD ISRHandler(
    DWORD InstanceIndex
    );
#ifdef __cplusplus
};
#endif
 
#endif

⌨️ 快捷键说明

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