home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Internet 2000 May
/
MICD_2000_05.iso
/
CBuilder5
/
INSTALL
/
DATA1.CAB
/
Program_Built_Files
/
Include
/
seclink.h
< prev
next >
Wrap
C/C++ Source or Header
|
2000-02-01
|
15KB
|
293 lines
#pragma option push -b -a8 -pc -A- /*P_O_Push*/
/* Copyright Data Connection Ltd. 1989 */
/*****************************************************************************/
/* Link Device Driver interface constants and structures. */
/*****************************************************************************/
/*****************************************************************************/
/* WIN32 16/04/92 SW Added more helpful names from WIN32 hdr file */
/* IHV 03/06/92 MF2 Add semfisui.h */
/* CDDD1 06/04/93 CD Change TxFrame DevIoctl code */
/* STAT1 21/01/94 CD Fix what we do with stats (& general cleanup) */
/* MODEM 06/04/95 AB Add support for the modem status program */
/*****************************************************************************/
/*****************************************************************************/
/* This include file is used in 3 components */
/* */
/* - the NT driver LINK_NTDRIVER */
/* - the X25 link service for NT LINK_NTX25 */
/* - the SDLC link service for NT LINK_NTSDLC */
/* */
/* These are distinguished based on #defines as set in the following */
/* */
/*****************************************************************************/
#ifdef IMADRIVER
#define LINK_NTDRIVER
#else
#ifdef SDLC
#define LINK_NTSDLC
#else
#define LINK_NTX25
#endif
#endif
/*****************************************************************************/
/* Device function codes for DosDevIOCtl to link device driver */
/*****************************************************************************/
#define IoctlCodeSetEvent 0x410
#define IoctlCodeSetLinkChar 0x420
#define IoctlCodeSetV24 0x430
#define IoctlCodeTxFrame 0x441 /* Main Tx so 1 CDDD1*/
#define IoctlCodeAbortTransmit 0x450
#define IoctlCodeAbortReceiver 0x460
#define IoctlCodeSetInterfaceRecord 0x610 /* Retired */
#define IoctlCodeGetV24 0x623 /* No data buffer so 3 */
#define IoctlCodeRxFrame 0x632 /* Main Rx so 2 */
#define IoctlCodeReadInterfaceRecord 0x642
/*****************************************************************************/
/* Constants for the driver-specific IOCtl return codes. */
/*****************************************************************************/
#define CEDNODMA 0xff80 /* Warning (NO DMA!) from set link chrctrstcs */
/*****************************************************************************/
/* Equates for the link options byte 1. */
/*****************************************************************************/
#define CEL4WIRE 0x80
#define CELNRZI 0x40
#define CELPDPLX 0x20
#define CELSDPLX 0x10
#define CELCLOCK 0x08
#define CELDSRS 0x04
#define CELSTNBY 0x02
#define CELDMA 0x01
/*****************************************************************************/
/* Equates for the driver set link characteristics byte 1. */
/*****************************************************************************/
#define CED4WIRE 0x80
#define CEDNRZI 0x40
#define CEDHDLC 0x20
#define CEDFDPLX 0x10
#define CEDCLOCK 0x08
#define CEDDMA 0x04
#define CEDRSTAT 0x02
#define CEDCSTAT 0x01
/* Nicer names for NT-style code */
#define LinkOption_4Wire CED4WIRE
#define LinkOption_NRZI CEDNRZI
#define LinkOption_HDLC CEDHDLC
#define LinkOption_FullDuplex CEDFDPLX
#define LinkOption_InternalClock CEDCLOCK
#define LinkOption_DMA CEDDMA
#define LinkOption_ResetStatistics CEDRSTAT
/*****************************************************************************/
/* Equates for the ouput V24 interface flags. */
/*****************************************************************************/
#define CED24RTS 0x01
#define CED24DTR 0x02
#define CED24DRS 0x04
#define CED24SLS 0x08
#define CED24TST 0x10
/* Nicer names for NT-style code */
#define IR_OV24RTS CED24RTS
#define IR_OV24DTR CED24DTR
#define IR_OV24DSRS CED24DRS
#define IR_OV24SlSt CED24SLS
#define IR_OV24Test CED24TST
/*****************************************************************************/
/* Equates for the input V24 interface flags. */
/*****************************************************************************/
#define CED24CTS 0x01
#define CED24DSR 0x02
#define CED24DCD 0x04
#define CED24RI 0x08
/* Nicer names for NT-style code */
#define IR_IV24CTS CED24CTS
#define IR_IV24DSR CED24DSR
#define IR_IV24DCD CED24DCD
#define IR_IV24RI CED24RI
#define IR_IV24Test 0x10
/*****************************************************************************/
/* Structure for the device driver interface record. */
/*****************************************************************************/
#define CEDSTCRC 0 /* Frames received with incorrect CRC */
#define CEDSTOFL 1 /* Frames received longer than the maximum */
#define CEDSTUFL 2 /* Frames received less than 4 octets long */
#define CEDSTSPR 3 /* Frames received ending on a non-octet bndry */
#define CEDSTABT 4 /* Aborted frames received */
#define CEDSTTXU 5 /* Transmitter interrupt underruns */
#define CEDSTRXO 6 /* Receiver interrupt overruns */
#define CEDSTDCD 7 /* DCD (RLSD) lost during frame reception */
#define CEDSTCTS 8 /* CTS lost while transmitting */
#define CEDSTDSR 9 /* DSR drops */
#define CEDSTHDW 10 /* Hardware failures - adapter errors */
#define CEDSTMAX 11
#define SA_CRC_Error CEDSTCRC
#define SA_RxFrameTooBig CEDSTOFL
#define SA_RxFrameTooShort CEDSTUFL
#define SA_Spare CEDSTSPR
#define SA_RxAbort CEDSTABT
#define SA_TxUnderrun CEDSTTXU
#define SA_RxOverrun CEDSTRXO
#define SA_DCDDrop CEDSTDCD
#define SA_CTSDrop CEDSTCTS
#define SA_DSRDrop CEDSTDSR
#define SA_HardwareError CEDSTHDW /* e.g. CmdBufferFull not set */
#define SA_Max_Stat CEDSTMAX
typedef struct _INTERFACE_RECORD
{
/***************************************************************************/
/* Note: we are here trying to mirror the OS/2 layout, complete with */
/* lengths. However, due to the (justifiable) pickiness of the 32- */
/* bit compiler, all shorts have been changed to 'int's - that way */
/* the results of calculations can be assigned to them without a lot */
/* of shenanigans (or typecasting). */
/***************************************************************************/
int RxFrameCount; /* incremented after each frame rx'd */
int TxMaxFrSizeNow; /* max available frame size av. now */
/* (changes after each Tx DevIoctl */
/* to DD or after Tx completed) */
int StatusCount; /* How many status events have been */
/* triggered. */
UCHAR V24In; /* Last 'getv24i/f' value got */
UCHAR V24Out; /* Last 'setv24 outputs' value set */
/* The values for the indices into the link statistics array of the */
/* various types of statistic. */
int StatusArray[SA_Max_Stat];
} IR,
* PIR;
/*****************************************************************************/
/* New structure used by the link to acumulate stats *STAT1*/
/*****************************************************************************/
typedef struct _STATS
{
int StatusCount;
int StatusArray[SA_Max_Stat];
} STATS;
/*****************************************************************************/
/* Structure for the set link characteristics parameter block. */
/*****************************************************************************/
typedef struct _SLPARMS
{
int SLFrameSize; /* max frame size on link - must be */
/* in range 270 to ?2K-ish */
LONG SLDataRate; /* not used by us - external clocks */
UCHAR SLOurAddress1; /* ) e.g C1/FF or 00/00 or 01/03 */
UCHAR SLOurAddress2; /* ) */
UCHAR SLLinkOptionsByte; /* see documentation & LinkOption_* */
UCHAR SLSpare1;
}
SLPARMS;
#ifndef IMADRIVER
/*****************************************************************************/
/* DEVICEIOCTL macros */
/*****************************************************************************/
/* NT_SUCCESS ripped of from DDK's ntdef.h, which we do not want to include */
/* for now temporarily (12/5/92) */
#define NT_SUCCESS(Status) ((NTSTATUS)(Status) >= 0)
#define SETEVENTHANDLE(H) \
NtDeviceIoControlFile(seldrvrh,H,NULL,NULL,&IoStatus, \
IoctlCodeSetEvent,NULL,0L,NULL,0L)
#define SETINTERFACERECORD(R) \
NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeSetInterfaceRecord,&R,sizeof(R), \
NULL,0L)
#define SETV24STATUS \
NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeSetV24,NULL,0L, \
&pInterfaceRecord->V24Out,1L); \
\
if (SavedIROut != (pInterfaceRecord->V24Out & 0x03)) \
{ \
SavedIROut = (pInterfaceRecord->V24Out & 0x03); \
pModemStatus->V24Out = pInterfaceRecord->V24Out; \
}
#define GETV24STATUS(rc) \
rc |= NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeGetV24,NULL,0L,NULL,0L); \
rc |= READINTERFACERECORD; \
if (SavedIRIn != (InterfaceRecord.V24In & 0x0F)) \
{ \
SavedIRIn = (InterfaceRecord.V24In & 0x0F); \
pModemStatus->V24In = InterfaceRecord.V24In; \
}
/*****************************************************************************/
/* Check for reset stats request and reset if required *STAT1*/
/*****************************************************************************/
#define SETLINKCHARACTERISTICS(A,rc) \
rc = NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeSetLinkChar,&A,sizeof(A),NULL,0L);\
if (A.SLLinkOptionsByte & CEDRSTAT) \
{ \
memset(&Stats,0,sizeof(STATS)); \
}
/*****************************************************************************/
/* Note we now pass the user buffer in the input fields, not the output */
/* fields CDDD1*/
/*****************************************************************************/
#define TRANSMITFRAME(A,B) \
NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeTxFrame,A,B,NULL,0L);
#define RECEIVEFRAME(A,B) \
NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeRxFrame,NULL,0L,A,B);
/*****************************************************************************/
/* Due to a problem sharing a structure between the driver and link we're */
/* going to get the driver to reset it's stats after every call to read the */
/* interface record, and get the link to accumulate the stats *STAT1*/
/*****************************************************************************/
#define READINTERFACERECORD \
NtDeviceIoControlFile(seldrvrh,NULL,NULL,NULL,&IoStatus, \
IoctlCodeReadInterfaceRecord,NULL,0L, \
&InterfaceRecord,sizeof(InterfaceRecord));\
if (!rc) \
{ \
int i; \
Stats.StatusCount += InterfaceRecord.StatusCount; \
for (i=0;i<SA_Max_Stat;i++) \
{ \
Stats.StatusArray[i] += InterfaceRecord.StatusArray[i]; \
} \
}
#endif
#pragma option pop /*P_O_Pop*/