96 lines
3.7 KiB
C
96 lines
3.7 KiB
C
|
/*++ BUILD Version: 0002
|
||
|
*
|
||
|
* WOW v1.0
|
||
|
*
|
||
|
* Copyright (c) 1991, Microsoft Corporation
|
||
|
*
|
||
|
* WOWCOMM.H
|
||
|
* Constants, macros, etc common to WOW16/WOW32
|
||
|
*
|
||
|
* History:
|
||
|
* Created 28-Apr-1993 by Craig Jones (v-cjones)
|
||
|
*
|
||
|
--*/
|
||
|
#ifndef __WOWCOMM__ // has this been included before?
|
||
|
#define __WOWCOMM__
|
||
|
|
||
|
#ifndef UNALIGNED // this makes UNALIGNED visible only to 32-bit stuff
|
||
|
#define UNALIGNED // and invisible to 16-bit stuff
|
||
|
#endif
|
||
|
|
||
|
/* XLATOFF */
|
||
|
#pragma pack(1)
|
||
|
/* XLATON */
|
||
|
|
||
|
// COMDEB - Communications Device Equipment Block. (copied from ibmcom.inc)
|
||
|
//
|
||
|
// This is essentially a superset of the DCB used outside of this
|
||
|
// module. The DCB is contained within the DEB as the first fields.
|
||
|
// The fields which follow are data and status fields which
|
||
|
// are unique to this implementation.
|
||
|
//
|
||
|
// AltQInAddr and AltQOutAddr are alternate queue pointers which are used when
|
||
|
// in "supervisor" mode. Supervisor mode is a processor mode other than the
|
||
|
// one which Windows normally runs in. In standard mode Windows, supervisor
|
||
|
// mode is REAL mode. In enhanced mode Windows, supervisor mode is RING 0
|
||
|
// protected mode. For more details see comments in IBMINT.ASM.
|
||
|
|
||
|
// RS232 Data Equip Block
|
||
|
typedef struct _COMDEB16 { /* cdeb16 */
|
||
|
BYTE ComDCB; // size of this struct
|
||
|
WORD ComErr; // Non-zero if I/O error
|
||
|
WORD Port; // Base I/O Address
|
||
|
WORD NotifyHandle;
|
||
|
WORD NotifyFlags;
|
||
|
WORD RecvTrigger; // char count threshold for calling
|
||
|
WORD SendTrigger; // char count threshold for calling
|
||
|
|
||
|
// The following fields are specific to com ports only
|
||
|
WORD IRQhook; // ptr to IRQ_Hook_Struc
|
||
|
WORD NextDEB; // ptr to next DEB that is sharing IRQ
|
||
|
WORD XOffPoint; // Q count where XOff is sent
|
||
|
WORD EvtMask; // Mask of events to check for
|
||
|
WORD EvtWord; // Event flags
|
||
|
DWORD QInAddr; // Address of the queue
|
||
|
DWORD AltQInAddr; // Addr of queue in "supervisor" mode
|
||
|
WORD QInSize; // Length of queue in bytes
|
||
|
DWORD QOutAddr; // Address of the queue
|
||
|
DWORD AltQOutAddr; // Addr of queue in "supervisor" mode
|
||
|
WORD QOutSize; // Length of queue in bytes
|
||
|
WORD QInCount; // Number of bytes currently in queue
|
||
|
WORD QInGet; // Offset into queue to get bytes from
|
||
|
WORD QInPut; // Offset into queue to put bytes in
|
||
|
WORD QOutCount; // Number of bytes currently in queue
|
||
|
WORD QOutGet; // Offset into queue to get bytes from
|
||
|
WORD QOutPut; // Offset into queue to put bytes in
|
||
|
BYTE EFlags; // Extended flags
|
||
|
BYTE MSRShadow; // Modem Status Register Shadow
|
||
|
BYTE ErrorMask; // Default error-checking mask
|
||
|
BYTE RxMask; // Character mask
|
||
|
BYTE ImmedChar; // Char to be transmitted immediately
|
||
|
BYTE HSFlag; // Handshake flag
|
||
|
BYTE HHSLines; // 8250 DTR/RTS bits for handshaking
|
||
|
BYTE OutHHSLines; // Lines that must be high to output
|
||
|
BYTE MSRMask; // Mask of Modem Lines to check
|
||
|
BYTE MSRInfinite; // Mask of MSR lines that must be high
|
||
|
BYTE IntVecNum; // Interrupt vector number
|
||
|
BYTE LSRShadow; // Line Status Register shadow
|
||
|
WORD QOutMod; // Characters sent mod xOnLim ENQ/ETX [rkh]
|
||
|
DWORD VCD_data;
|
||
|
BYTE VCDflags;
|
||
|
BYTE MiscFlags; // still more flags
|
||
|
} COMDEB16;
|
||
|
typedef COMDEB16 UNALIGNED *PCOMDEB16;
|
||
|
|
||
|
// In 3.0 MSRShadow had this relationship to EvtWord and major COM apps all
|
||
|
// use this offset of 35 to get to MSRShadow so that they can determine the
|
||
|
// current status of the Modem Status bits. We need to maintain this offset
|
||
|
// so that these apps will continue to run.
|
||
|
|
||
|
/* XLATOFF */
|
||
|
#pragma pack()
|
||
|
/* XLATON */
|
||
|
|
||
|
#endif // __WOWCOMM__
|
||
|
|