/* lptDrv.h - IBM-PC LPT */ /* Copyright 1984-2000, 2010 Wind River Systems, Inc. */ /* modification history -------------------- 01h,29apr10,pad Moved extern C statement after include statements. 01g,23mar01,sru add register spacing field to LPT_RESOURCE SPR# 65937 01f,23aug00,jgn move _ASMLANGUAGE guard to prevent header file problems with assembler builds 01e,04jan00,dat SPR 29875, chg'd SEMAPHOREs to SEM_IDs 01d,22nov99,stv added missing header files (SPR #24014). 01c,10dec97,ms added lptResources import 01b,18oct96,hdn re-written. 01a,13oct94,hdn written. */ #ifndef __INClptDrvh #define __INClptDrvh #ifndef _ASMLANGUAGE /* includes */ #include "iosLib.h" #include "semLib.h" #ifdef __cplusplus extern "C" { #endif typedef struct lptDev /* LPT_DEV */ { DEV_HDR devHdr; BOOL created; /* TRUE if this device has been created */ BOOL autofeed; /* TRUE if enable autofeed */ BOOL inservice; /* TRUE if interrupt in service */ ULONG data; /* data register */ ULONG stat; /* status register */ ULONG ctrl; /* control register */ int intCnt; /* interrupt count */ int retryCnt; /* retry count */ int busyWait; /* loop count for BUSY wait */ int strobeWait; /* loop count for STROBE wait */ int timeout; /* timeout second for syncSem */ int intLevel; /* interrupt level */ SEM_ID muteSem; /* mutex semaphore */ SEM_ID syncSem; /* sync semaphore */ } LPT_DEV; typedef struct lptResource /* LPT_RESOURCE */ { int ioBase; /* IO base address */ int intVector; /* interrupt vector */ int intLevel; /* interrupt level */ BOOL autofeed; /* TRUE if enable autofeed */ int busyWait; /* loop count for BUSY wait */ int strobeWait; /* loop count for STROBE wait */ int retryCnt; /* retry count */ int timeout; /* timeout second for syncSem */ int regDelta; /* register address spacing */ } LPT_RESOURCE; /* IO address (LPT) */ #define N_LPT_CHANNELS 3 /* max LPT channels */ /* register definitions */ #define CAST #define LPT_REG_ADDR_INTERVAL 1 /* address diff of adjacent regs. */ #define LPT_ADRS(base,reg) (CAST (base+(reg*LPT_REG_ADDR_INTERVAL))) /* register spacing based on header file definition */ #define LPT_DATA(base) LPT_ADRS(base,0x00) /* data reg. */ #define LPT_STAT(base) LPT_ADRS(base,0x01) /* status reg. */ #define LPT_CTRL(base) LPT_ADRS(base,0x02) /* control reg. */ /* register spacing based on resource structure */ #define LPT_DATA_RES(resource) (resource->ioBase + (0 * resource->regDelta)) #define LPT_STAT_RES(resource) (resource->ioBase + (1 * resource->regDelta)) #define LPT_CTRL_RES(resource) (resource->ioBase + (2 * resource->regDelta)) /* control register */ #define C_STROBE 0x01 /* STROBE signal */ #define C_AUTOFEED 0x02 /* AUTOFEED signal */ #define C_NOINIT 0x04 /* INITIALIZE signal */ #define C_SELECT 0x08 /* SELECT INPUT signal */ #define C_ENABLE 0x10 /* ENABLE interrupt */ #define C_INPUT 0x20 /* DATA DIRECTION control bit */ /* status register */ #define S_NODERR 0x08 /* Device error */ #define S_SELECT 0x10 /* Device selected */ #define S_PERR 0x20 /* Device out of paper */ #define S_NOACK 0x40 /* Printer ready */ #define S_NOBUSY 0x80 /* Device busy */ #define S_MASK 0xb8 /* mask bits */ /* ioctl functions */ #define LPT_SETCONTROL 0 #define LPT_GETSTATUS 1 IMPORT LPT_RESOURCE lptResources[]; /* function declarations */ #if defined(__STDC__) || defined(__cplusplus) STATUS lptDrv (int channels, LPT_RESOURCE *pResource); STATUS lptDevCreate (char *name, int channel); #else STATUS lptDrv (); STATUS lptDevCreate (); #endif /* __STDC__ */ #endif /* _ASMLANGUAGE */ #ifdef __cplusplus } #endif #endif /* __INClptDrvh */