diff options
Diffstat (limited to '')
-rw-r--r-- | private/ntos/tdi/irda/inc/af_irda.h | 100 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/decdirda.h | 174 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irda.h | 857 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irdalink.h | 34 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irerr.h | 110 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irlap.h | 66 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irlaplog.h | 44 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irlmp.h | 60 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/irmac.h | 32 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/oscfg.h | 62 | ||||
-rw-r--r-- | private/ntos/tdi/irda/inc/tmp.h | 31 |
11 files changed, 1570 insertions, 0 deletions
diff --git a/private/ntos/tdi/irda/inc/af_irda.h b/private/ntos/tdi/irda/inc/af_irda.h new file mode 100644 index 000000000..5e5d36b0d --- /dev/null +++ b/private/ntos/tdi/irda/inc/af_irda.h @@ -0,0 +1,100 @@ +// +// this is the header file that describes the IRDA address family +// +// CREATED 4/28: AldenG +// + +#ifndef __AFIRDA__ +#define __AFIRDA__ + +#include <winsock.h> + +#define AF_IRDA 22 // see winsock.h +#define PF_IRDA AF_IRDA + +#define SOL_IRLMP 0x00FF + +#define IRLMP_ENUMDEVICES 0x00000010 +#define IRLMP_IAS_SET 0x00000011 +#define IRLMP_IAS_QUERY 0x00000012 +#define IRLMP_SEND_PDU_LEN 0x00000013 +#define IRLMP_EXCLUSIVE_MODE 0x00000014 +#define IRLMP_IRLPT_MODE 0x00000015 +#define IRLMP_9WIRE_MODE 0x00000016 + +#define IAS_ATTRIB_NO_CLASS 0x00000010 +#define IAS_ATTRIB_NO_ATTRIB 0x00000000 +#define IAS_ATTRIB_INT 0x00000001 +#define IAS_ATTRIB_OCTETSEQ 0x00000002 +#define IAS_ATTRIB_STR 0x00000003 + +typedef struct _SOCKADDR_IRDA +{ + u_short irdaAddressFamily; + u_char irdaDeviceID[4]; + char irdaServiceName[25]; +} SOCKADDR_IRDA, *PSOCKADDR_IRDA; + +typedef struct _IRDA_DEVICE_INFO +{ + u_char irdaDeviceID[4]; + char irdaDeviceName[22]; + u_char Reserved[2]; +} IRDA_DEVICE_INFO, *PIRDA_DEVICE_INFO, FAR *LPIRDA_DEVICE_INFO; + +typedef struct _DEVICELIST +{ + ULONG numDevice; + IRDA_DEVICE_INFO Device[1]; +} DEVICELIST, *PDEVICELIST, FAR *LPDEVICELIST; + +typedef struct _IAS_SET +{ + char irdaClassName[61]; + char irdaAttribName[61]; + u_short irdaAttribType; + union + { + int irdaAttribInt; + struct + { + int Len; + u_char OctetSeq[1]; + u_char Reserved[3]; + } irdaAttribOctetSeq; + struct + { + int Len; + u_char CharSet; + u_char UsrStr[1]; + u_char Reserved[2]; + } irdaAttribUsrStr; + } irdaAttribute; +} IAS_SET, *PIAS_SET, FAR *LPIAS_SET; + +typedef struct _IAS_QUERY +{ + u_char irdaDeviceID[4]; + char irdaClassName[61]; + char irdaAttribName[61]; + u_short irdaAttribType; + union + { + int irdaAttribInt; + struct + { + int Len; + u_char OctetSeq[1]; + u_char Reserved[3]; + } irdaAttribOctetSeq; + struct + { + int Len; + u_char CharSet; + u_char UsrStr[1]; + u_char Reserved[2]; + } irdaAttribUsrStr; + } irdaAttribute; +} IAS_QUERY, *PIAS_QUERY, FAR *LPIAS_QUERY; + +#endif // __AFIRDA__ diff --git a/private/ntos/tdi/irda/inc/decdirda.h b/private/ntos/tdi/irda/inc/decdirda.h new file mode 100644 index 000000000..d93b0d9e3 --- /dev/null +++ b/private/ntos/tdi/irda/inc/decdirda.h @@ -0,0 +1,174 @@ +// returns pointers pOutStr +TCHAR *DecodeIRDA(int *pFrameType,// return frame type (-1 = bad frame) + BYTE *pFrameBuf, // pointer to buffer containing IRLAP frame + UINT FrameLen, // length of buffer + TCHAR *pOutStr, // string where decode packet is placed + UINT DecodeLayer,// 2-LAP only, 3-LAP/LMP, 4-LAP/LMP/TTP + BOOL fNoConnAddr,// TRUE->Don't show connection address in str + int DispMode // DISP_ASCII/HEX/BOTH +); + +#define DISP_ASCII 1 +#define DISP_HEX 2 +#define DISP_BOTH 3 + +extern int BaudBitMask; + +#define IRLAP_BOF 0xC0 +#define IRLAP_EOF 0xC1 +#define IRLAP_ESC 0x7D +#define IRLAP_COMP_BIT 0x20 + +#define IRLAP_BROADCAST 0xfe +#define _IRLAP_CMD 0x01 +#define _IRLAP_RSP 0x00 + +#define IRLAP_I_FRM 0x00 +#define IRLAP_S_FRM 0x01 +#define IRLAP_U_FRM 0x03 + +/* +** Unnumbered Frame types with P/F bit set to 0 +*/ +#define IRLAP_UI 0x03 +#define IRLAP_XID_CMD 0x2f +#define IRLAP_TEST 0xe3 +#define IRLAP_SNRM 0x83 +#define IRLAP_DISC 0x43 +#define IRLAP_UA 0x63 +#define IRLAP_FRMR 0x87 +#define IRLAP_DM 0x0f +#define IRLAP_XID_RSP 0xaf + +/* +** Supervisory Frames +*/ +#define IRLAP_RR 0x01 +#define IRLAP_RNR 0x05 +#define IRLAP_REJ 0x09 +#define IRLAP_SREJ 0x0d + + +#define IRLAP_GET_ADDR(addr) (addr >> 1) +#define IRLAP_GET_CRBIT(addr) (addr & 1) +#define IRLAP_GET_PFBIT(cntl) ((cntl >>4) & 1) +#define IRLAP_GET_UCNTL(cntl) (cntl & 0xEF) +#define IRLAP_GET_SCNTL(cntl) (cntl & 0x0F) +#define IRLAP_FRAME_TYPE(cntl) (cntl & 0x01 ? (cntl & 3) : 0) +#define IRLAP_GET_NR(cntl) ((cntl & 0xE0) >> 5) +#define IRLAP_GET_NS(cntl) ((cntl & 0xE) >> 1) + +/* +** XID stuff +*/ +#define XID_DISCV_FORMAT_ID 0x01 +#define XID_NEGPARMS_FORMAT_ID 0x02 + +typedef struct +{ + BYTE SrcAddr[4]; + BYTE DestAddr[4]; + BYTE NoOfSlots:2; + BYTE GenNewAddr:1; + BYTE Reserved:5; + BYTE SlotNo; + BYTE Version; +} XID_DISCV_FORMAT; + +/* +** SNRM +*/ +typedef struct +{ + BYTE SrcAddr[4]; + BYTE DestAddr[4]; + BYTE ConnAddr; + BYTE FirstPI; +} SNRM_FORMAT; + +/* +** UA +*/ +typedef struct +{ + BYTE SrcAddr[4]; + BYTE DestAddr[4]; + BYTE FirstPI; +} UA_FORMAT; + +/* +** LM-PDU stuff +*/ +typedef struct +{ + BYTE DLSAP_SEL:7; + BYTE CntlBit:1; + BYTE SLSAP_SEL:7; + BYTE RsvrdBi1:1; +} LM_HEADER; + +/* LM-PDU frame types */ +#define LM_PDU_CNTL_FRAME 1 +#define LM_PDU_DATA_FRAME 0 + +typedef struct +{ + BYTE OpCode:7; + BYTE ABit:1; +} LM_CNTL_FORMAT; + +/* Opcodes */ +#define LM_PDU_CONNECT 1 +#define LM_PDU_DISCONNECT 2 +#define LM_PDU_ACCESSMODE 3 + +#define LM_PDU_REQUEST 0 +#define LM_PDU_CONFIRM 1 + +#define LM_PDU_SUCCESS 0 +#define LM_PDU_FAILURE 1 +#define LM_PDU_UNSUPPORTED 0xFF + +#define LM_PDU_MULTIPLEXED 0 +#define LM_PDU_EXCLUSIVE 1 + +/* Max disconnect reason code, see _LM_PDU_DscReason[] in decdirda.c */ +#define LM_PDU_MAX_DSC_REASON 0x8 + +/* +** Negotiation Parameter Identifiers +*/ +#define NEG_PI_BAUD 0x01 +#define NEG_PI_MAX_TAT 0x82 +#define NEG_PI_DATA_SZ 0x83 +#define NEG_PI_WIN_SZ 0x84 +#define NEG_PI_BOFS 0x85 +#define NEG_PI_MIN_TAT 0x86 +#define NEG_PI_DISC_THRESH 0x08 + +// Tiny TP! + +#define TTP_PFLAG_NO_PARMS 0 +#define TTP_PFLAG_PARMS 1 + +#define TTP_MBIT_NOT_FINAL 1 +#define TTP_MBIT_FINAL 0 + +typedef struct +{ + BYTE InitialCredit : 7; + BYTE ParmFlag : 1; +} TTP_CONN_HEADER; + +typedef struct +{ + BYTE AdditionalCredit : 7; + BYTE MoreBit : 1; +} TTP_DATA_HEADER; + +#define net_short(x) ((((x)&0xff) << 8) | (((x)&0xff00) >> 8)) + +#define net_long(x) (((((DWORD UNALIGNED)(x))&0xffL)<<24) | \ + ((((DWORD UNALIGNED)(x))&0xff00L)<<8) | \ + ((((DWORD UNALIGNED)(x))&0xff0000L)>>8) | \ + ((((DWORD UNALIGNED)(x))&0xff000000L)>>24)) diff --git a/private/ntos/tdi/irda/inc/irda.h b/private/ntos/tdi/irda/inc/irda.h new file mode 100644 index 000000000..ab9d55674 --- /dev/null +++ b/private/ntos/tdi/irda/inc/irda.h @@ -0,0 +1,857 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: irda.h +* +* Description: Definitions used across the IRDA stack +* +* Author: mbert +* +* Date: 4/15/95 +* +* This file primarily defines the IRDA message (IRDA_MSG) used for +* communicating with the stack and communication between the layers +* of the stack. IRDA_MSG provides the following services: +* MAC_CONTROL_SERVICE +* IRLAP_DISCOVERY_SERVICE +* IRDA_DISCONNECT_SERVICE +* IRDA_CONNECT_SERVICE +* IRDA_DATA_SERVICE +* IRLMP_ACCESSMODE_SERVICE +* IRLMP_IAS_SERVICE +* +* IRDA_MSG usage: +* +* +-------+ +* | IRLAP | +* +-------+ +* | +* | IRMAC_Down(IRDA_MSG) +* \|/ +* +-------+ +* | IRMAC | +* +-------+ +* |**************************************************************************| +* | Prim | MsgType and parameters | +* |==========================================================================| +* | MAC_DATA_REQ | IRDA_DATA_SERVICE | +* | | o IRDA_MSG_pHdrRead = start of IRDA headers | +* | | o IRDA_MSG_pHdrWrite = end of header | +* | | o IRDA_MSG_pRead = start of data | +* | | o IRDA_MSG_pWrite = end of data | +* |--------------------------+-----------------------------------------------| +* | MAC_CONTROL_REQ | MAC_CONTROL_SERVICE | +* | | o IRDA_MSG_Op = MAC_INITIALIZIE_LINK | +* | | - IRDA_MSG_Port | +* | | - IRDA_MSG_Baud | +* | | - IRDA_MSG_MinTat = min turn time | +* | | - IRDA_MSG_NumBOFs = # added when tx'ing | +* | | - IRDA_MSG_DataSize = max rx frame | +* | | - IRDA_MSG_SetIR = TRUE/FALSE (does an | +* | | EscapeComm(SETIR) to select int/ext | +* | | dongle) | +* | | o IRDA_MSG_Op = MAC_MEDIA_SENSE | +* | | - IRDA_MSG_SenseTime (in ms) | +* | | o IRDA_MSG_Op = MAC_RECONFIG_LINK | +* | | - IRDA_MSG_Baud | +* | | - IRDA_MSG_NumBOFs = # added when tx'ing | +* | | - IRDA_MSG_DataSize = max rx frame | +* | | - IRDA_MSG_MinTat = min turn time | +* | | o IRDA_MSG_OP = MAC_SHUTDOWN_LINK | +* |--------------------------------------------------------------------------| +* +* +-------+ +* | IRLAP | +* +-------+ +* /|\ +* | IRLAP_Up(IRDA_MSG) +* | +* +-------+ +* | IRMAC | +* +-------+ +* |**************************************************************************| +* | Prim | MsgType and parameters | +* |==========================================================================| +* | MAC_DATA_IND | IRDA_DATA_SERVICE | +* | | o IRDA_MSG_pRead = start of frame | +* | | (includes IRLAP header) | +* | | o IRDA_MSG_pWrite = end of frame | +* | | (excludes FCS) | +* |--------------------------+-----------------------------------------------| +* | MAC_CONTROL_CONF | MAC_CONTROL_SERVICE | +* | | o IRDA_MSG_Op = MAC_MEDIA_SENSE | +* | | - IRDA_MSG_OpStatus = MAC_MEDIA_BUSY | +* | | MAC_MEDIA_CLEAR | +* |--------------------------------------------------------------------------| +* +* +-------+ +* | IRLMP | +* +-------+ +* | +* | IRLAP_Down(IRDA_MSG) +* \|/ +* +-------+ +* | IRLAP | +* +-------+ +* |**************************************************************************| +* | Prim | MsgType and parameters | +* |==========================================================================| +* | IRLAP_DISCOVERY_REQ | IRLAP_DISCOVERY_SERVICE | +* | IRLAP_Down() returns | o IRDA_MSG_SenseMedia = TRUE/FALSE | +* | IRLAP_REMOTE_DISCOVERY_IN_PROGRESS_ERR or | +* | IRLAP_REMOTE_CONNECT_IN_PROGRESS_ERR when indicated | +* |--------------------------+-----------------------------------------------| +* | IRLAP_CONNECT_REQ | IRDA_CONNECT_SERVICE | +* | | o IRDA_MSG_RemoteDevAddr | +* | IRLAP_Down() returns | | +* | IRLAP_REMOTE_DISCOVERY_IN_PROGRESS_ERR when indicated | +* |--------------------------+-----------------------------------------------| +* | IRLAP_CONNECT_RESP | no parms | +* |--------------------------+-----------------------------------------------| +* | IRLAP_DISCONNECT_REQ | no parms | +* |--------------------------+-----------------------------------------------| +* | IRLAP_DATA_REQ | IRDA_DATA_SERVICE | +* | IRLAP_UDATA_REQ | o IRDA_MSG_pHdrRead = start of IRLMP header | +* | IRLAP_Down() returns | o IRDA_MSG_pHdrWrite = end of header | +* | IRLAP_REMOTE_BUSY to | o IRDA_MSG_pRead = start of data | +* | to flow off LMP. | o IRDA_MSG_pWrite = end of data | +* |--------------------------------------------------------------------------| +* | IRLAP_FLOWON_REQ | no parms | +* |--------------------------------------------------------------------------| +* +* +-------+ +* | IRLMP | +* +-------+ +* /|\ +* | IRLMP_Up(IRDA_MSG) +* | +* +-------+ +* | IRLAP | +* +-------+ +* |**************************************************************************| +* | Prim | MsgType and parameters | +* |==========================================================================| +* | IRLAP_DISCOVERY_IND | IRLAP_DISCOVERY_SERVICE | +* | | o pDevList = Discovery info of device that | +* | | initiated discovery | +* |--------------------------+-----------------------------------------------| +* | IRLAP_DISCOVERY_CONF | IRLAP_DISCOVERY_SERVICE | +* | | o IRDA_MSG_pDevList = list of discovered | +* | | devices, NULL when | +* | | status != IRLAP_DISCOVERY_COMPLETED | +* | | o IRDA_MSG_DscvStatus = | +* | | MAC_MEDIA_BUSY | +* | | IRLAP_REMOTE_DISCOVERY_IN_PROGRESS | +* | | IRLAP_DISCOVERY_COLLISION | +* | | IRLAP_REMOTE_CONNECTION_IN_PROGRESS | +* | | IRLAP_DISCOVERY_COMPLETED | +* |--------------------------+-----------------------------------------------| +* | IRLAP_CONNECT_IND | IRDA_CONNECT_SERVICE | +* | | o IRDA_MSG_RemoteDevAddr | +* | | o IRDA_MSG_pQOS = Negotiated QOS | +* |--------------------------------------------------------------------------| +* | IRLAP_CONNECT_CONF | IRDA_CONNECT_SERVICE | +* | | o IRDA_MSG_pQOS = Negotiated QOS, only when | +* | | successful | +* | | o IRDA_MSG_ConnStatus = | +* | | IRLAP_CONNECTION_COMPLETE | +* |--------------------------+-----------------------------------------------| +* | IRLAP_DISCONNECT_IND | IRDA_DISCONNECT_SERVICE | +* | | o IRDA_MSG_DiscStatus = | +* | | IRLAP_DISCONNECT_COMPLETED | +* | | IRLAP_REMOTED_INITIATED | +* | | IRLAP_PRIMARY_CONFLICT | +* | | IRLAP_REMOTE_DISCOVERY_IN_PROGRESS | +* | | IRLAP_NO_RESPONSE | +* | | IRLAP_DECLINE_RESET | +* | | MAC_MEDIA_BUSY | +* |--------------------------+-----------------------------------------------| +* | IRLAP_DATA_IND | IRDA_DATA_SERVICE | +* | IRLAP_UDATA_IND | o IRDA_MSG_pRead = start of IRLMP packet | +* | | o IRDA_MSG_pWrite = end of IRLMP packet | +* |--------------------------+-----------------------------------------------| +* | IRLAP_DATA_CONF | IRDA_DATA_SERVICE | +* | IRLAP_UDATA_CONF | o IRDA_MSG_DataStatus = | +* | | ILAP_DATA_REQUEST_COMPLETED | +* | | IRLAP_DATA_REQUEST_FAILED_LINK_RESET | +* |--------------------------+-----------------------------------------------| +* | IRLAP_STATUS_IND | no parms | +* |--------------------------------------------------------------------------| +* +* +--------------+ +* | TransportAPI | +* +--------------+ +* | +* | IRLMP_Down(IRLMPContext, IRDA_MSG) +* \|/ +* +-------+ +* | IRLMP | +* +-------+ +* |**************************************************************************| +* | Prim | MsgType and parameters | +* |==========================================================================| +* | IRLMP_DISCOVERY_REQ | no parms | +* |--------------------------+-----------------------------------------------| +* | IRLMP_CONNECT_REQ | IRDA_CONNECT_SERVICE | +* | IRLMP_Down() returns | o IRDA_MSG_RemoteDevAddr | +* | IRLMP_LINK_IN_USE | o IRDA_MSG_RemoteLSAPSel | +* | when the requested | o IRDA_MSG_pQOS (may be NULL) | +* | connection is to a | o IRDA_MSG_pConnData | +* | remote device other | o IRDA_MSG_ConnDataLen | +* | than the one the link | o IRDA_MSG_LocalLSAPSel | +* | is currently connected | o IRDA_MSG_pContext | +* | or connecting to. | o IRDA_MSG_UseTTP | +* | | o IRDA_MSG_TTPCredits | +* | | o IRDA_MSG_MaxSDUSize - Max size that this | +* | | IRLMP client can receive. | +* |--------------------------+-----------------------------------------------| +* | IRLMP_CONNECT_RESP | IRDA_CONNECT_SERVICE | +* | | o IRDA_MSG_pConnData | +* | | o IRDA_MSG_ConnDataLen | +* | | o IRDA_MSG_pContext | +* | | o IRDA_MSG_MaxSDUSize - Max size that this | +* | | IRLMP client can receive. | +* | | o IRDA_MSG_TTPCredits | +* |--------------------------+-----------------------------------------------| +* | IRLMP_DISCONNECT_REQ | IRDA_DISCONNECT_SERVICE | +* | | o IRDA_MSG_pDiscData | +* | | o IRDA_MSG_DiscDataLen | +* | | | +* | | | +* |--------------------------+-----------------------------------------------| +* | IRLMP_DATA/UDATA_REQ | IRDA_DATA_SERVICE | +* | IRLMP_Down() may return| o IRDA_MSG_pDataContext = ptr to NDIS_BUFFER| +* | IRLMP_REMOTE_BUSY, | o IRDA_MSG_IrCOMM_9Wire = TRUE/FALSE | +* | when tx cred exhausted| | +* | in multiplexed mode. | | +* | IRLAP_REMOTE_BUSY, | | +* | when remote IRLAP | | +* | flowed off in exclMode| | +* | In either case the req | | +* | was successful. | | +* |--------------------------------------------------------------------------| +* | IRLMP_ACCESSMODE_REQ | IRLMP_ACCESSMODE_SERVICE | +* | IRLMP_Down() may return| o IRDA_MSG_AccessMode = IRLMP_MULTIPLEXED | +* | IRLMP_IN_EXCLUSIVE_MODE| IRLMP_EXCLUSIVE | +* | if already in excl-mode| o IRDA_MSG_IrLPTMode - TRUE, doesn't send | +* | IRLMP_IN_MULTIPLEXED...| the Access PDU | +* | if other LSAPs exist or| | +* | requesting trans to this state when already in it. | +* |--------------------------------------------------------------------------| +* | IRLMP_FLOWON_REQ | no parms | +* |--------------------------------------------------------------------------| +* | IRLMP_MORECREDIT_REQ | IRDA_CONNECT_SERVICE (cuz parm is defined) | +* | | o IRDA_MSG_TTPCredits | +* |--------------------------------------------------------------------------| +* | IRLMP_GETVALUEBYCLASS_REQ| IRDA_IAS_SERVICE | +* | | o IRDA_MSG_pIASQuery | +* | | o IRDA_MSG_AttribLen | +* | | o IRDA_MSG_IASQueryPerms | +* |--------------------------------------------------------------------------| +* +* +* +--------------+ +* | TransportAPI | +* +--------------+ +* /|\ +* | TransportAPI_Up(TransportAPIContext, IRDA_MSG) +* | +* +-------+ +* | IRLMP | +* +-------+ +* |**************************************************************************| +* | Prim | MsgType and parameters | +* |==========================================================================| +* | IRLAP_DISCOVERY_IND | IRLAP_DISCOVERY_SERVICE | +* | | o pDevList = aged Discovery list | +* |--------------------------+-----------------------------------------------| +* | IRLMP_DISCOVERY_CONF | same as IRLAP_DISCOVERY_CONF. The device list | +* | | however is the one maintained in IRLMP | +* |--------------------------+-----------------------------------------------| +* | IRLMP_DISCONNECT_IND | IRDA_DISCONNECT_SERVICE | +* | | o IRDA_MSG_DiscReason = | +* | | see IRLMP_DISC_REASON below | +* | | o IRDA_MSG_pDiscData - may be NULL | +* | | o IRDA_MSG_DiscDataLen | +* |--------------------------+-----------------------------------------------| +* | IRLMP_CONNECT_IND | IRDA_CONNECT_SERVICE | +* | | o IRDA_MSG_RemoteDevAddr | +* | | o IRDA_MSG_RemoteLSAPSel; | +* | | o IRDA_MSG_LocalLSAPSel; | +* | | o IRDA_MSG_pQOS | +* | | o IRDA_MSG_pConnData | +* | | o IRDA_MSG_ConnDataLen | +* | | o IRDA_MSG_pContext | +* | | o IRDA_MSG_MaxSDUSize - Max size that this | +* | | IRLMP client can send to peer | +* | | o IRDA_MSG_MaxPDUSize | +* |--------------------------+-----------------------------------------------| +* | IRLMP_CONNECT_CONF | IRDA_CONNECT_SERVICE | +* | | o IRDA_MSG_pQOS | +* | | o IRDA_MSG_pConnData | +* | | o IRDA_MSG_ConnDataLen | +* | | o IRDA_MSG_pContext | +* | | o IRDA_MSG_MaxSDUSize - Max size that this | +* | | IRLMP client can send to peer | +* | | o IRDA_MSG_MaxPDUSize | +* |--------------------------+-----------------------------------------------| +* | IRLMP_DATA_IND | IRDA_DATA_SERVICE | +* | | o IRDA_MSG_pRead = start of User Data | +* | | o IRDA_MSG_pWrite = end of User Data | +* | | o IRDA_MSG_FinalSeg = TRUE/FALSE | +* |--------------------------+-----------------------------------------------| +* | IRLMP_DATA_CONF | IRDA_DATA_SERVICE | +* | | o IRDA_MSG_pDataContext = ptr to NDIS_BUFFER| +* | | o IRDA_MSG_DataStatus = | +* | | IRLMP_DATA_REQUEST_COMPLETED | +* | | IRLMP_DATA_REQUEST_FAILED | +* |--------------------------+-----------------------------------------------| +* | IRLMP_ACCESSMODE_IND | IRLMP_ACCESSMODE_SERVICE | +* | | o IRDA_MSG_AccessMode = | +* | | IRLMP_EXCLUSIVE | +* | | IRLMP_MULTIPLEXED | +* |--------------------------+-----------------------------------------------| +* | IRLMP_ACCESSMODE_CONF | IRLMP_ACCESSMODE_SERVICE | +* | | o IRDA_MSG_AccessMode = | +* | | IRLMP_EXCLUSIVE | +* | | IRLMP_MULTIPLEXED | +* | | o IRDA_MSG_ModeStatus = | +* | | IRLMP_ACCESSMODE_SUCCESS | +* | | IRLMP_ACCESSMODE_FAILURE | +* |--------------------------+-----------------------------------------------| +* |IRLMP_GETVALUEBYCLASS_CONF| IRDA_DATA_SERVICE | +* | | o IRDA_MSG_pIASQuery | +* | | o IRDA_MSG_IASStatus = An IRLMP_DISC_REASON | +* | | (see below) | +* |--------------------------------------------------------------------------| +*/ + +#include <nt.h> +#include <ntos.h> +#include <ntrtl.h> +#include <nturtl.h> + +#include <windef.h> +#include <winbase.h> +#include <winsock.h> +#include <wsahelp.h> +#include <basetyps.h> + +#include <ndis.h> + +#include <af_irda.h> + +#include <cxport.h> + +#include <irerr.h> + +#include <tmp.h> + +#define TEMPERAMENTAL_SERIAL_DRIVER // drivers busted. intercharacter delays cause + // IrLAP to reset. + +#ifdef DEBUG +// Prototypes for Debugging Output +void IRDA_DebugOut (TCHAR *pFormat, ...); +void IRDA_DebugStartLog (void); +void IRDA_DebugEndLog (void *, void *); +#endif + +// Debug zone definitions. +/* +#define ZONE_IRDA DEBUGZONE(0) +#define ZONE_IRLAP DEBUGZONE(2) +#ifdef PEG +#define ZONE_IRMAC DEBUGZONE(1) +#define ZONE_IRLMP DEBUGZONE(3) +#define ZONE_IRLMP_CONN DEBUGZONE(4) +#define ZONE_IRLMP_CRED DEBUGZONE(5) +#else +extern int ZONE_IRMAC; +extern int ZONE_IRLMP; +extern int ZONE_IRLMP_CONN; +extern int ZONE_IRLMP_CRED; +#endif +#define ZONE_DISCOVER DEBUGZONE(8) +#define ZONE_PRINT DEBUGZONE(9) +#define ZONE_ADDR DEBUGZONE(10) +#define ZONE_MISC DEBUGZONE(11) +#define ZONE_ALLOC DEBUGZONE(12) +#define ZONE_FUNCTION DEBUGZONE(13) +#define ZONE_WARN DEBUGZONE(14) +#define ZONE_ERROR DEBUGZONE(15) +*/ + + +#define IRDA_ALLOC_MEM(ptr, sz, id) ((ptr) = CTEAllocMem(sz)) +#define IRDA_FREE_MEM(ptr) CTEFreeMem((ptr)) + +//extern CRITICAL_SECTION IrdaCS; + +// Time how low we wait for the critical section +/* +#define ENTER_IRDA_WITH_CRITICAL_SECTION(s) do { \ + LPWSTR Owner = IrdaCSOwner; \ + DWORD StartTick = GetTickCount(); \ + EnterCriticalSection (&IrdaCS); \ + IrdaCSOwner = s; \ + StartTick = GetTickCount() - StartTick; \ + if (StartTick > MaxWaitIrdaCS) { \ + DEBUGMSG (1, (TEXT("%s: IRDA Wait for CS %dms (Owner=%s)\r\n"), \ + s, StartTick, Owner)); \ + MaxWaitIrdaCS = StartTick; \ + } \ + } while (0) + + +#define LEAVE_IRDA_WITH_CRITICAL_SECTION IrdaCSOwner = TEXT(""), LeaveCriticalSection(&IrdaCS) + +#else // TIME_CS +#define ENTER_IRDA_WITH_CRITICAL_SECTION(s) EnterCriticalSection(&IrdaCS) + +#define LEAVE_IRDA_WITH_CRITICAL_SECTION LeaveCriticalSection(&IrdaCS) +#endif // TIME_CS +*/ +#define STATIC static + +#define RetOnErr(func) do {if((_rc = func) != SUCCESS) return _rc;} while(0) + +typedef struct +{ + CTETimer CteTimer; + VOID (*ExpFunc)(PVOID Context); + PVOID Context; + UINT Timeout; + BOOL Late; +#ifdef DEBUG + char *pName; +#endif +} IRDA_TIMER, *PIRDA_TIMER; + +#define IRMAC_CONTEXT(ilcb) ((ilcb)->IrmacContext) +#define IRLAP_CONTEXT(ilcb) ((ilcb)->IrlapContext) +#define IRLMP_CONTEXT(ilcb) ((ilcb)->IrlmpContext) + +// Device/Discovery Information +#define IRLAP_DSCV_INFO_LEN 32 +#define IRDA_DEV_ADDR_LEN 4 + +typedef struct +{ + LIST_ENTRY Linkage; + BYTE DevAddr[IRDA_DEV_ADDR_LEN]; + int DscvMethod; + int IRLAP_Version; + BYTE DscvInfo[IRLAP_DSCV_INFO_LEN]; + int DscvInfoLen; + int NotSeenCnt; // used by IRLMP to determine when to remove + // the device from its list + PVOID LinkContext; // Link on which device was discovered +} IRDA_DEVICE; + +// IRLAP Quality of Service +#define BIT_0 1 +#define BIT_1 2 +#define BIT_2 4 +#define BIT_3 8 +#define BIT_4 16 +#define BIT_5 32 +#define BIT_6 64 +#define BIT_7 128 +#define BIT_8 256 + +#define BPS_2400 BIT_0 // Baud Rates +#define BPS_9600 BIT_1 +#define BPS_19200 BIT_2 +#define BPS_38400 BIT_3 +#define BPS_57600 BIT_4 +#define BPS_115200 BIT_5 +#define BPS_4000000 BIT_8 + +#define MAX_TAT_500 BIT_0 // Maximum Turnaround Time (millisecs) +#define MAX_TAT_250 BIT_1 +#define MAX_TAT_100 BIT_2 +#define MAX_TAT_50 BIT_3 +#define MAX_TAT_25 BIT_4 +#define MAX_TAT_10 BIT_5 +#define MAX_TAT_5 BIT_6 + +#define DATA_SIZE_64 BIT_0 // Data Size (bytes) +#define DATA_SIZE_128 BIT_1 +#define DATA_SIZE_256 BIT_2 +#define DATA_SIZE_512 BIT_3 +#define DATA_SIZE_1024 BIT_4 +#define DATA_SIZE_2048 BIT_5 + +#define FRAMES_1 BIT_0 // Window Size +#define FRAMES_2 BIT_1 +#define FRAMES_3 BIT_2 +#define FRAMES_4 BIT_3 +#define FRAMES_5 BIT_4 +#define FRAMES_6 BIT_5 +#define FRAMES_7 BIT_6 + +#define BOFS_48 BIT_0 // Additional Beginning of Frame Flags +#define BOFS_24 BIT_1 +#define BOFS_12 BIT_2 +#define BOFS_5 BIT_3 +#define BOFS_3 BIT_4 +#define BOFS_2 BIT_5 +#define BOFS_1 BIT_6 +#define BOFS_0 BIT_7 + +#define MIN_TAT_10 BIT_0 // Minumum Turnaround Time (millisecs) +#define MIN_TAT_5 BIT_1 +#define MIN_TAT_1 BIT_2 +#define MIN_TAT_0_5 BIT_3 +#define MIN_TAT_0_1 BIT_4 +#define MIN_TAT_0_05 BIT_5 +#define MIN_TAT_0_01 BIT_6 +#define MIN_TAT_0 BIT_7 + +#define DISC_TIME_3 BIT_0 // Link Disconnect/Threshold Time (seconds) +#define DISC_TIME_8 BIT_1 +#define DISC_TIME_12 BIT_2 +#define DISC_TIME_16 BIT_3 +#define DISC_TIME_20 BIT_4 +#define DISC_TIME_25 BIT_5 +#define DISC_TIME_30 BIT_6 +#define DISC_TIME_40 BIT_7 + +typedef struct +{ + UINT bfBaud; + UINT bfMaxTurnTime; + UINT bfDataSize; + UINT bfWindowSize; + UINT bfBofs; + UINT bfMinTurnTime; + UINT bfDisconnectTime; // holds threshold time also +} IRDA_QOS_PARMS; + + +// IrDA Message Primitives +typedef enum +{ + MAC_DATA_REQ = 0, // Keep in sync with table in irlaplog.c + MAC_DATA_IND, + MAC_CONTROL_REQ, + MAC_CONTROL_CONF, + IRLAP_DISCOVERY_REQ, + IRLAP_DISCOVERY_IND, + IRLAP_DISCOVERY_CONF, + IRLAP_CONNECT_REQ, + IRLAP_CONNECT_IND, + IRLAP_CONNECT_RESP, + IRLAP_CONNECT_CONF, + IRLAP_DISCONNECT_REQ, + IRLAP_DISCONNECT_IND, + IRLAP_DATA_REQ, // Don't fuss with the order, CONF must be 2 from REQ + IRLAP_DATA_IND, + IRLAP_DATA_CONF, + IRLAP_UDATA_REQ, + IRLAP_UDATA_IND, + IRLAP_UDATA_CONF, + IRLAP_STATUS_IND, + IRLAP_FLOWON_REQ, + IRLAP_FLOWON_IND, + IRLMP_DISCOVERY_REQ, + IRLMP_DISCOVERY_IND, + IRLMP_DISCOVERY_CONF, + IRLMP_CONNECT_REQ, + IRLMP_CONNECT_IND, + IRLMP_CONNECT_RESP, + IRLMP_CONNECT_CONF, + IRLMP_DISCONNECT_REQ, + IRLMP_DISCONNECT_IND, + IRLMP_DATA_REQ, + IRLMP_DATA_IND, + IRLMP_DATA_CONF, + IRLMP_UDATA_REQ, + IRLMP_UDATA_IND, + IRLMP_UDATA_CONF, + IRLMP_ACCESSMODE_REQ, + IRLMP_ACCESSMODE_IND, + IRLMP_ACCESSMODE_CONF, + IRLMP_FLOWON_REQ, + IRLMP_FLOWON_IND, + IRLMP_MORECREDIT_REQ, + IRLMP_GETVALUEBYCLASS_REQ, + IRLMP_GETVALUEBYCLASS_CONF +} IRDA_SERVICE_PRIM; + +typedef enum +{ + MAC_MEDIA_BUSY, // keep in sync with IRDA_StatStr in irlaplog.c + MAC_MEDIA_CLEAR, + IRLAP_DISCOVERY_COLLISION, + IRLAP_REMOTE_DISCOVERY_IN_PROGRESS, + IRLAP_REMOTE_CONNECT_IN_PROGRSS, + IRLAP_DISCOVERY_COMPLETED, + IRLAP_REMOTE_CONNECTION_IN_PROGRESS, + IRLAP_CONNECTION_COMPLETED, + IRLAP_REMOTE_INITIATED, + IRLAP_PRIMARY_CONFLICT, + IRLAP_DISCONNECT_COMPLETED, + IRLAP_NO_RESPONSE, + IRLAP_DECLINE_RESET, + IRLAP_DATA_REQUEST_COMPLETED, + IRLAP_DATA_REQUEST_FAILED_LINK_RESET, + IRLAP_DATA_REQUEST_FAILED_REMOTE_BUSY, + IRLMP_NO_RESPONSE, + IRLMP_ACCESSMODE_SUCCESS, + IRLMP_ACCESSMODE_FAILURE, + IRLMP_DATA_REQUEST_COMPLETED, + IRLMP_DATA_REQUEST_FAILED +} IRDA_SERVICE_STATUS; + +// MAC Control Service Request Message - MAC_CONTROL_REQ/CONF +typedef enum +{ + MAC_INITIALIZE_LINK, // keep in sync with MAC_OpStr in irlaplog.c + MAC_SHUTDOWN_LINK, + MAC_RECONFIG_LINK, + MAC_MEDIA_SENSE, +} MAC_CONTROL_OPERATION; + +typedef struct +{ + MAC_CONTROL_OPERATION Op; + int Port; + int Baud; + int NumBOFs; + int MinTat; + int DataSize; + int SenseTime; + IRDA_SERVICE_STATUS OpStatus; + BOOL SetIR; +} MAC_CONTROL_SERVICE; + +// IRLAP Discovery Service Request Message - IRLAP_DISCOVERY_IND/CONF +typedef struct +{ + LIST_ENTRY *pDevList; + IRDA_SERVICE_STATUS DscvStatus; + BOOL SenseMedia; +} IRLAP_DISCOVERY_SERVICE; + +// IRDA Connection Service Request Message - IRLAP_CONNECT_REQ/IND/CONF +// IRLMP_CONNECT_REQ/CONF +typedef struct +{ + BYTE RemoteDevAddr[IRDA_DEV_ADDR_LEN]; + IRDA_QOS_PARMS *pQOS; + int LocalLSAPSel; + int RemoteLSAPSel; + BYTE *pConnData; + int ConnDataLen; + void *pContext; + int MaxPDUSize; + int MaxSDUSize; + int TTPCredits; + IRDA_SERVICE_STATUS ConnStatus; + BOOL UseTTP; +} IRDA_CONNECT_SERVICE; + +// IRDA Disconnection Service Request Message - IRLAP_DISCONNECT_REQ/IND +// IRLMP_DISCONNECT_REQ/IND +typedef enum +{ + IRLMP_USER_REQUEST = 1, + IRLMP_UNEXPECTED_IRLAP_DISC, + IRLMP_IRLAP_CONN_FAILED, + IRLMP_IRLAP_RESET, + IRLMP_LM_INITIATED_DISC, + IRLMP_DISC_LSAP, + IRLMP_NO_RESPONSE_LSAP, + IRLMP_NO_AVAILABLE_LSAP, + IRLMP_MAC_MEDIA_BUSY, + IRLMP_IRLAP_REMOTE_DISCOVERY_IN_PROGRESS, + + IRLMP_IAS_NO_SUCH_OBJECT, // these are added for the IAS_GetValueByClass.Conf + IRLMP_IAS_NO_SUCH_ATTRIB, + IRLMP_IAS_SUCCESS, + IRLMP_IAS_SUCCESS_LISTLEN_GREATER_THAN_ONE, + + IRLMP_UNSPECIFIED_DISC = 0xFF +} IRLMP_DISC_REASON; + +typedef struct +{ + BYTE *pDiscData; // IRLMP_DISCONNECT_REQ/IND only + int DiscDataLen; // IRLMP_DISCONNECT_REQ/IND only + IRLMP_DISC_REASON DiscReason; // IRLMP_DISCONNECT_REQ/IND only + IRDA_SERVICE_STATUS DiscStatus; // Indication only +} IRDA_DISCONNECT_SERVICE; + +// IRDA Data Service Request Message +#define IRLAP_HEADER_LEN 2 +#define IRLMP_HEADER_LEN 6 +#define TTP_HEADER_LEN 8 +#define IRDA_HEADER_LEN IRLAP_HEADER_LEN+IRLMP_HEADER_LEN+TTP_HEADER_LEN+1 + // + 1 IRComm WACK!! + +typedef struct +{ + void *pOwner; + void *pDataContext; // How IRDA gets user data + int SegCount; // Number of segments + BOOL FinalSeg; + BYTE *pBase; + BYTE *pLimit; + BYTE *pRead; + BYTE *pWrite; + void *pTdiSendComp; + void *pTdiSendCompCnxt; + BOOL IrCOMM_9Wire; +#ifdef TEMPERAMENTAL_SERIAL_DRIVER + int FCS; +#endif + IRDA_SERVICE_STATUS DataStatus; // for CONF + // |------------------------| + // | pRead o------------- + // |------------------------| | + // | pWrite o---------- | + // |------------------------| | | + // | pBase o------- | | + // |------------------------| | | | + // | pLimit o---- | | | + // |------------------------| | | | | + // | | | | | + // ------------------------ | | | | + // | |<---- | | + // | | | | | + // | |<--------<- + // | | | + // | |<- + // ------------------------ + BYTE *pHdrRead; + BYTE *pHdrWrite; + BYTE Header[IRDA_HEADER_LEN]; + // |------------------------| + // | pHdrRead o------------- + // |------------------------| | + // | pHdrWrite o---------- | + // |------------------------| | | + // Header--->| | | | + // | | | | + // | |<--------<- + // | | | + // | |<------- + // ------------------------ + // + // On the receive side, all headers are contained + // at pRead, not in the above Header array + // +} IRDA_DATA_SERVICE; + +typedef enum +{ + IRLMP_MULTIPLEXED, + IRLMP_EXCLUSIVE +} IRLMP_ACCESSMODE; + +typedef struct +{ + IRLMP_ACCESSMODE AccessMode; + IRDA_SERVICE_STATUS ModeStatus; + BOOL IrLPTMode; // if true don't send PDU +} IRLMP_ACCESSMODE_SERVICE; + +typedef struct +{ + IAS_QUERY *pIASQuery; + int AttribLen; // OctetSeq or UsrStr len + int IASQueryPerms; + IRLMP_DISC_REASON IASStatus; +} IRLMP_IAS_SERVICE; + +typedef struct irda_msg +{ + LIST_ENTRY Linkage; + IRDA_SERVICE_PRIM Prim; + union + { + MAC_CONTROL_SERVICE MAC_ControlService; + IRLAP_DISCOVERY_SERVICE IRLAP_DiscoveryService; + IRDA_DISCONNECT_SERVICE IRDA_DisconnectService; + IRDA_CONNECT_SERVICE IRDA_ConnectService; + IRDA_DATA_SERVICE IRDA_DataService; + IRLMP_ACCESSMODE_SERVICE IRLMP_AccessModeService; + IRLMP_IAS_SERVICE IRLMP_IASService; + } MsgType; + +} IRDA_MSG, *PIRDA_MSG; + +#define IRDA_MSG_Op MsgType.MAC_ControlService.Op +#define IRDA_MSG_Port MsgType.MAC_ControlService.Port +#define IRDA_MSG_Baud MsgType.MAC_ControlService.Baud +#define IRDA_MSG_NumBOFs MsgType.MAC_ControlService.NumBOFs +#define IRDA_MSG_MinTat MsgType.MAC_ControlService.MinTat +#define IRDA_MSG_DataSize MsgType.MAC_ControlService.DataSize +#define IRDA_MSG_OpStatus MsgType.MAC_ControlService.OpStatus +#define IRDA_MSG_SetIR MsgType.MAC_ControlService.SetIR +#define IRDA_MSG_SenseTime MsgType.MAC_ControlService.SenseTime + +#define IRDA_MSG_pOwner MsgType.IRDA_DataService.pOwner +#define IRDA_MSG_pDataContext MsgType.IRDA_DataService.pDataContext +#define IRDA_MSG_SegCount MsgType.IRDA_DataService.SegCount +#define IRDA_MSG_FinalSeg MsgType.IRDA_DataService.FinalSeg +#define IRDA_MSG_pHdrRead MsgType.IRDA_DataService.pHdrRead +#define IRDA_MSG_pHdrWrite MsgType.IRDA_DataService.pHdrWrite +#define IRDA_MSG_Header MsgType.IRDA_DataService.Header +#define IRDA_MSG_pBase MsgType.IRDA_DataService.pBase +#define IRDA_MSG_pLimit MsgType.IRDA_DataService.pLimit +#define IRDA_MSG_pRead MsgType.IRDA_DataService.pRead +#define IRDA_MSG_pWrite MsgType.IRDA_DataService.pWrite +#define IRDA_MSG_DataStatus MsgType.IRDA_DataService.DataStatus +#define IRDA_MSG_pTdiSendComp MsgType.IRDA_DataService.pTdiSendComp +#define IRDA_MSG_pTdiSendCompCnxt MsgType.IRDA_DataService.pTdiSendCompCnxt +#define IRDA_MSG_IrCOMM_9Wire MsgType.IRDA_DataService.IrCOMM_9Wire +#ifdef TEMPERAMENTAL_SERIAL_DRIVER +#define IRDA_MSG_FCS MsgType.IRDA_DataService.FCS +#endif + +#define IRDA_MSG_pDevList MsgType.IRLAP_DiscoveryService.pDevList +#define IRDA_MSG_DscvStatus MsgType.IRLAP_DiscoveryService.DscvStatus +#define IRDA_MSG_SenseMedia MsgType.IRLAP_DiscoveryService.SenseMedia + +#define IRDA_MSG_RemoteDevAddr MsgType.IRDA_ConnectService.RemoteDevAddr +#define IRDA_MSG_pQOS MsgType.IRDA_ConnectService.pQOS +#define IRDA_MSG_LocalLSAPSel MsgType.IRDA_ConnectService.LocalLSAPSel +#define IRDA_MSG_RemoteLSAPSel MsgType.IRDA_ConnectService.RemoteLSAPSel +#define IRDA_MSG_pConnData MsgType.IRDA_ConnectService.pConnData +#define IRDA_MSG_ConnDataLen MsgType.IRDA_ConnectService.ConnDataLen +#define IRDA_MSG_ConnStatus MsgType.IRDA_ConnectService.ConnStatus +#define IRDA_MSG_pContext MsgType.IRDA_ConnectService.pContext +#define IRDA_MSG_UseTTP MsgType.IRDA_ConnectService.UseTTP +#define IRDA_MSG_MaxSDUSize MsgType.IRDA_ConnectService.MaxSDUSize +#define IRDA_MSG_MaxPDUSize MsgType.IRDA_ConnectService.MaxPDUSize +#define IRDA_MSG_TTPCredits MsgType.IRDA_ConnectService.TTPCredits + +#define IRDA_MSG_pDiscData MsgType.IRDA_DisconnectService.pDiscData +#define IRDA_MSG_DiscDataLen MsgType.IRDA_DisconnectService.DiscDataLen +#define IRDA_MSG_DiscReason MsgType.IRDA_DisconnectService.DiscReason +#define IRDA_MSG_DiscStatus MsgType.IRDA_DisconnectService.DiscStatus + +#define IRDA_MSG_AccessMode MsgType.IRLMP_AccessModeService.AccessMode +#define IRDA_MSG_ModeStatus MsgType.IRLMP_AccessModeService.ModeStatus +#define IRDA_MSG_IrLPTMode MsgType.IRLMP_AccessModeService.IrLPTMode + +#define IRDA_MSG_pIASQuery MsgType.IRLMP_IASService.pIASQuery +#define IRDA_MSG_AttribLen MsgType.IRLMP_IASService.AttribLen +#define IRDA_MSG_IASQueryPerms MsgType.IRLMP_IASService.IASQueryPerms +#define IRDA_MSG_IASStatus MsgType.IRLMP_IASService.IASStatus + +extern LIST_ENTRY IrdaLinkCbList; + +VOID IrdaTimerInitialize(PIRDA_TIMER pTimer, + VOID (*ExpFunc)(PVOID Context), + UINT Timeout, + PVOID Context); + +VOID IrdaTimerStart(PIRDA_TIMER pTimer); + +VOID IrdaTimerStop(PIRDA_TIMER pTimer); + diff --git a/private/ntos/tdi/irda/inc/irdalink.h b/private/ntos/tdi/irda/inc/irdalink.h new file mode 100644 index 000000000..e96f13665 --- /dev/null +++ b/private/ntos/tdi/irda/inc/irdalink.h @@ -0,0 +1,34 @@ +NTSTATUS IrdaNdisInitialize(); + +#define IRDA_NDIS_BUFFER_POOL_SIZE 4 +#define IRDA_NDIS_PACKET_POOL_SIZE 4 +#define IRDA_MSG_LIST_LEN 2 +#define IRDA_MSG_DATA_SIZE 64 + +typedef struct +{ + PIRDA_MSG pIMsg; + MEDIA_SPECIFIC_INFORMATION MediaInfo; +} IRDA_PROTOCOL_RESERVED, *PIRDA_PROTOCOL_RESERVED; + +typedef struct IrdaLinkControlBlock +{ + LIST_ENTRY Linkage; + NDIS_SPIN_LOCK SpinLock; + NDIS_HANDLE BindContext; + NDIS_HANDLE NdisBindingHandle; + NDIS_EVENT SyncEvent; + NDIS_STATUS SyncStatus; + int MediaBusy; + PVOID IrlapContext; + PVOID IrlmpContext; + NDIS_HANDLE BufferPool; + NDIS_HANDLE PacketPool; + LIST_ENTRY IMsgList; + int IMsgListLen; + UINT ExtraBofs; // These should be per connection for + UINT MinTat; // multipoint +} IRDA_LINK_CB, *PIRDA_LINK_CB; + +IRDA_MSG *AllocMacIMsg(PIRDA_LINK_CB); + diff --git a/private/ntos/tdi/irda/inc/irerr.h b/private/ntos/tdi/irda/inc/irerr.h new file mode 100644 index 000000000..7490c6fba --- /dev/null +++ b/private/ntos/tdi/irda/inc/irerr.h @@ -0,0 +1,110 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: irerr.h +* +* Description: IR error defines +* +* Author: mmiller +* +* Date: 4/25/95 +* +*/ + +#ifndef SUCCESS +#define SUCCESS 0 +#endif + +#define IR_ERROR_BASE 20000 +#define IRLAP_ERROR_BASE IR_ERROR_BASE + 100 +#define IRLMP_ERROR_BASE IR_ERROR_BASE + 200 + +#define IRMAC_TX_OVERFLOW (IR_ERROR_BASE+0) +#define IRMAC_WRITE_FAILED (IR_ERROR_BASE+1) +#define IRMAC_READ_FAILED (IR_ERROR_BASE+2) +#define IRMAC_BAD_FCS (IR_ERROR_BASE+3) +#define IRMAC_RX_OVERFLOW (IR_ERROR_BASE+4) +#define IRMAC_TIMEOUT (IR_ERROR_BASE+5) +#define IRMAC_BAD_PRIM (IR_ERROR_BASE+6) +#define IRMAC_BAD_OP (IR_ERROR_BASE+7) +#define IRMAC_OPEN_PORT_FAILED (IR_ERROR_BASE+8) +#define IRMAC_SET_BAUD_FAILED (IR_ERROR_BASE+9) +#define IRMAC_MALLOC_FAILED (IR_ERROR_BASE+10) +#define IRMAC_ALREADY_INIT (IR_ERROR_BASE+11) +#define IRMAC_BAD_TIMER (IR_ERROR_BASE+12) +#define IRMAC_NOT_INITIALIZED (IR_ERROR_BASE+13) +#define IRMAC_LINK_RESET (IR_ERROR_BASE+14) + +#define IRLAP_NOT_INITIALIZED (IRLAP_ERROR_BASE + 0) +#define IRLAP_BAD_PRIM (IRLAP_ERROR_BASE + 1) +#define IRLAP_BAD_STATE (IRLAP_ERROR_BASE + 2) +#define IRLAP_BAD_OPSTATUS (IRLAP_ERROR_BASE + 3) +#define IRLAP_BAD_OP (IRLAP_ERROR_BASE + 4) +#define IRLAP_MALLOC_FAILED (IRLAP_ERROR_BASE + 5) +#define IRLAP_BAUD_NEG_ERR (IRLAP_ERROR_BASE + 6) +#define IRLAP_DISC_NEG_ERR (IRLAP_ERROR_BASE + 7) +#define IRLAP_MAXTAT_NEG_ERR (IRLAP_ERROR_BASE + 8) +#define IRLAP_MINTAT_NEG_ERR (IRLAP_ERROR_BASE + 9) +#define IRLAP_DATASIZE_NEG_ERR (IRLAP_ERROR_BASE + 10) +#define IRLAP_WINSIZE_NEG_ERR (IRLAP_ERROR_BASE + 11) +#define IRLAP_BOFS_NEG_ERR (IRLAP_ERROR_BASE + 12) +#define IRLAP_LINECAP_ERR (IRLAP_ERROR_BASE + 13) +#define IRLAP_BAD_SLOTNO (IRLAP_ERROR_BASE + 14) +#define IRLAP_XID_CMD_NOT_P (IRLAP_ERROR_BASE + 15) +#define IRLAP_SNRM_NO_QOS (IRLAP_ERROR_BASE + 16) +#define IRLAP_UA_NO_QOS (IRLAP_ERROR_BASE + 17) +#define IRLAP_XID_CMD_RSP (IRLAP_ERROR_BASE + 18) +#define IRLAP_SNRM_NOT_CMD (IRLAP_ERROR_BASE + 19) +#define IRLAP_SNRM_NOT_P (IRLAP_ERROR_BASE + 20) +#define IRLAP_UA_NOT_RSP (IRLAP_ERROR_BASE + 21) +#define IRLAP_UA_NOT_F (IRLAP_ERROR_BASE + 22) +#define IRLAP_MSG_LIST_EMPTY (IRLAP_ERROR_BASE + 23) +#define IRLAP_MSG_LIST_FULL (IRLAP_ERROR_BASE + 24) +#define IRLAP_RXD_BAD_FRAME (IRLAP_ERROR_BASE + 25) +#define IRLAP_BAD_CRBIT_IFRAME (IRLAP_ERROR_BASE + 26) +#define IRLAP_BAD_DATA_REQUEST (IRLAP_ERROR_BASE + 27) +#define IRLAP_DISC_CMD_RSP (IRLAP_ERROR_BASE + 28) +#define IRLAP_DISC_CMD_NOT_P (IRLAP_ERROR_BASE + 29) +#define IRLAP_DM_RSP_NOT_F (IRLAP_ERROR_BASE + 30) +#define IRLAP_DM_RSP_CMD (IRLAP_ERROR_BASE + 31) +#define IRLAP_FRMR_RSP_CMD (IRLAP_ERROR_BASE + 32) +#define IRLAP_FRMR_RSP_NOT_F (IRLAP_ERROR_BASE + 33) +#define IRLAP_BAD_QOS (IRLAP_ERROR_BASE + 34) +#define IRLAP_NULL_MSG (IRLAP_ERROR_BASE + 35) +#define IRLAP_BAD_MAX_SLOT (IRLAP_ERROR_BASE + 36) +#define IRLAP_REMOTE_DISCOVERY_IN_PROGRESS_ERR (IRLAP_ERROR_BASE + 37) +#define IRLAP_REMOTE_CONNECTION_IN_PROGRESS_ERR (IRLAP_ERROR_BASE + 38) +#define IRLAP_REMOTE_BUSY (IRLAP_ERROR_BASE + 39) + +#define IRLMP_NOT_INITIALIZED (IRLMP_ERROR_BASE + 0) +#define IRLMP_LSAP_BAD_STATE (IRLMP_ERROR_BASE + 1) +#define IRLMP_USER_DATA_LEN_EXCEEDED (IRLMP_ERROR_BASE + 2) +#define IRLMP_LINK_IN_USE (IRLMP_ERROR_BASE + 3) +#define IRLMP_TIMER_START_FAILED (IRLMP_ERROR_BASE + 4) +#define IRLMP_ALLOC_FAILED (IRLMP_ERROR_BASE + 5) +#define IRLMP_LINK_BAD_STATE (IRLMP_ERROR_BASE + 6) +#define IRLMP_LSAP_SEL_IN_USE (IRLMP_ERROR_BASE + 7) +#define IRLMP_CREDIT_CALC_ERROR (IRLMP_ERROR_BASE + 8) +#define IRLMP_NO_TX_CREDIT (IRLMP_ERROR_BASE + 9) +#define IRLMP_TX_DATA_LEN_EXCEEDED (IRLMP_ERROR_BASE + 10) +#define IRLMP_DATA_IND_BAD_FRAME (IRLMP_ERROR_BASE + 11) +#define IRLMP_SCHEDULE_EVENT_FAILED (IRLMP_ERROR_BASE + 12) +#define IRLMP_LOCAL_BUSY (IRLMP_ERROR_BASE + 13) +#define IRLMP_BAD_PRIM (IRLMP_ERROR_BASE + 14) +#define IRLMP_BAD_ACCESSMODE (IRLMP_ERROR_BASE + 15) +#define IRLMP_LINK_BUSY (IRLMP_ERROR_BASE + 16) +#define IRLMP_IN_MULTIPLEXED_MODE (IRLMP_ERROR_BASE + 17) +#define IRLMP_IN_EXCLUSIVE_MODE (IRLMP_ERROR_BASE + 18) +#define IRLMP_NOT_LSAP_IN_EXCLUSIVE_MODE (IRLMP_ERROR_BASE + 19) +#define IRLMP_INVALID_LSAP_CB (IRLMP_ERROR_BASE + 20) +#define IRLMP_REMOTE_BUSY (IRLMP_ERROR_BASE + 21) +#define IRLMP_TIMER_STOP_FAILED (IRLMP_ERROR_BASE + 22) +#define IRLMP_BAD_IAS_OBJECT_ID (IRLMP_ERROR_BASE + 23) +#define IRLMP_NO_SUCH_IAS_CLASS (IRLMP_ERROR_BASE + 24) +#define IRLMP_NO_SUCH_IAS_ATTRIBUTE (IRLMP_ERROR_BASE + 25) +#define IRLMP_UNSUPPORTED_IAS_OPERATION (IRLMP_ERROR_BASE + 26) +#define IRLMP_BAD_IAS_QUERY_FROM_REMOTE (IRLMP_ERROR_BASE + 27) +#define IRLMP_IAS_QUERY_IN_PROGRESS (IRLMP_ERROR_BASE + 28) +#define IRLMP_UNSOLICITED_IAS_RESPONSE (IRLMP_ERROR_BASE + 29) +#define IRLMP_SHUTDOWN_IN_PROGESS (IRLMP_ERROR_BASE + 30) diff --git a/private/ntos/tdi/irda/inc/irlap.h b/private/ntos/tdi/irda/inc/irlap.h new file mode 100644 index 000000000..dbcc68361 --- /dev/null +++ b/private/ntos/tdi/irda/inc/irlap.h @@ -0,0 +1,66 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: irlap.h +* +* Description: IRLAP Protocol and control block definitions +* +* Author: mbert +* +* Date: 4/15/95 +* +*/ + +// Sequence number modulus +#define IRLAP_MOD 8 +#define PV_TABLE_MAX_BIT 8 + +extern UINT vBaudTable[]; +extern UINT vMaxTATTable[]; +extern UINT vMinTATTable[]; +extern UINT vDataSizeTable[]; +extern UINT vWinSizeTable[]; +extern UINT vBOFSTable[]; +extern UINT vDiscTable[]; +extern UINT vThreshTable[]; +extern UINT vBOFSDivTable[]; + +VOID IrlapOpenLink( + OUT PNTSTATUS Status, + IN PIRDA_LINK_CB pIrdaLinkCb, + IN IRDA_QOS_PARMS *pQos, + IN BYTE *pDscvInfo, + IN int DscvInfoLen, + IN UINT MaxSlot); + +UINT IrlapDown(IN PVOID Context, + IN PIRDA_MSG); + +UINT IrlapUp(IN PVOID Context, + IN PIRDA_MSG); + +UINT IRLAP_Shutdown(); + +UINT IrlapGetQosParmVal(UINT[], UINT, UINT *); + +void IRLAP_PrintState(); + + + +typedef struct +{ + LIST_ENTRY ListHead; + int Len; +} IRDA_MSG_LIST; + +// I've exported these for the tester +UINT DequeMsgList(IRDA_MSG_LIST *, IRDA_MSG **); +UINT EnqueMsgList(IRDA_MSG_LIST *, IRDA_MSG *, int); +void InitMsgList(IRDA_MSG_LIST *); + + + + + + diff --git a/private/ntos/tdi/irda/inc/irlaplog.h b/private/ntos/tdi/irda/inc/irlaplog.h new file mode 100644 index 000000000..71f67866f --- /dev/null +++ b/private/ntos/tdi/irda/inc/irlaplog.h @@ -0,0 +1,44 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: irlaplog.h +* +* Description: IRLAP state machine logging and errors +* +* Author: mbert +* +* Date: 4/15/95 +* +*/ + +#ifdef DEBUG + +extern TCHAR *IRDA_PrimStr[]; +extern TCHAR *IRLAP_StateStr[]; +extern TCHAR *MAC_OpStr[]; +extern TCHAR *IRDA_TimerStr[]; +extern TCHAR *IRDA_StatStr[]; + +#define SPRINT_BUF_LEN 1000 + +#define EXPAND_ADDR(Addr) (Addr[0], Addr[1], Addr[2], Addr[3]) + +void IRLAP_EventLogStart(PIRLAP_CB, TCHAR *pFormat, ...); +void __cdecl IRLAP_LogAction(PIRLAP_CB, TCHAR *pFormat, ...); +void IRLAP_EventLogComplete(PIRLAP_CB); +TCHAR *FrameToStr(IRDA_MSG *); + +#define IRLAP_LOG_START(X) IRLAP_EventLogStart X +#define IRLAP_LOG_ACTION(X) IRLAP_LogAction X +#define IRLAP_LOG_COMPLETE(X) IRLAP_EventLogComplete(X) + +#else + +#define IRLAP_LOG_START(X) (0) +#define IRLAP_LOG_ACTION(X) (0) +#define IRLAP_LOG_COMPLETE(X) (0) + +#endif + + diff --git a/private/ntos/tdi/irda/inc/irlmp.h b/private/ntos/tdi/irda/inc/irlmp.h new file mode 100644 index 000000000..ac46e4107 --- /dev/null +++ b/private/ntos/tdi/irda/inc/irlmp.h @@ -0,0 +1,60 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: irlmp.h +* +* Description: IRLMP Protocol and control block definitions +* +* Author: mbert +* +* Date: 4/15/95 +* +*/ + +#define IRLMP_MAX_USER_DATA_LEN 53 + +// IrLMP Entry Points + +UINT IRLMP_Initialize(int Port, BOOL SetIR, BYTE DscvInfo[], int DscvInfoLen, + IRDA_QOS_PARMS *pQOS, int MaxSlot, CHAR *pDeviceName, + int DeviceNameLen); + +UINT IrlmpDown(PVOID IrlmpContext, PIRDA_MSG pIMsg); +UINT IrlmpUp(PVOID IrlmpContext, PIRDA_MSG pIMsg); + +UINT IRLMP_RegisterLSAPProtocol(int LSAP, BOOL UseTTP); +UINT IRLMP_Shutdown(); + +#ifdef DEBUG +void IRLMP_PrintState(); +#endif + +// IAS + +#define IAS_ASCII_CHAR_SET 0 + +// IAS Attribute value types +#define IAS_ATTRIB_VAL_MISSING 0 +#define IAS_ATTRIB_VAL_INTEGER 1 +#define IAS_ATTRIB_VAL_BINARY 2 +#define IAS_ATTRIB_VAL_STRING 3 + +// IAS Operation codes +#define IAS_OPCODE_GET_VALUE_BY_CLASS 4 // The only one I do + +extern const CHAR IAS_ClassName_Device[]; +extern const CHAR IAS_AttribName_DeviceName[]; +extern const CHAR IAS_AttribName_IrLMPSupport[]; +extern const CHAR IAS_AttribName_TTPLsapSel[]; +extern const CHAR IAS_AttribName_IrLMPLsapSel[]; + +extern const BYTE IAS_ClassNameLen_Device; +extern const BYTE IAS_AttribNameLen_DeviceName; +extern const BYTE IAS_AttribNameLen_IRLMPSupport; +extern const BYTE IAS_AttribNameLen_TTPLsapSel; +extern const BYTE IAS_AttribNameLen_IrLMPLsapSel; + +UINT IAS_AddAttribute(IAS_SET *pIASSet); + +UINT IAS_DeleteObject(CHAR *pClassName); diff --git a/private/ntos/tdi/irda/inc/irmac.h b/private/ntos/tdi/irda/inc/irmac.h new file mode 100644 index 000000000..534e83525 --- /dev/null +++ b/private/ntos/tdi/irda/inc/irmac.h @@ -0,0 +1,32 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: irmac.h +* +* Description: IRLAP MAC definitions and entry point prototypes +* +* Author: mbert +* +* Date: 4/15/95 +* +*/ + +// Entry Points + +UINT IrmacInitialize(); + +UINT IrmacDown( + IN PVOID IrmacContext, + PIRDA_MSG pMsg); + +UINT IRMAC_RxFrame(IRDA_MSG *pMsg); +UINT IRMAC_TimerExpired(IRDA_TIMER Timer); +void IRMAC_PrintState(); + + + + + + + diff --git a/private/ntos/tdi/irda/inc/oscfg.h b/private/ntos/tdi/irda/inc/oscfg.h new file mode 100644 index 000000000..49eab5e00 --- /dev/null +++ b/private/ntos/tdi/irda/inc/oscfg.h @@ -0,0 +1,62 @@ +/***************************************************************************** +* +* Copyright (c) 1995 Microsoft Corporation +* +* File: oscfg.h +* +* Description: OS configuration section +* +* Author: mmiller +* +* Date: 4/25/95 +* +*/ +#ifdef PEG + +// Pegasus specific includes/defines +#include "peg.h" + +#define DbgPrint NKDbgPrintfW + +#else // PEG + +#include <ntos.h> +//#include <nt.h> +//#include <ntrtl.h> +//#include <nturtl.h> + +//#include <zwapi.h> +//#include <ntddk.h> +//#include <windows.h> + +#define RETAILMSG(exp,p) (0) +#define DEBUGMSG(exp,p) (0) + +// NT specific includes/defines +//#include "windows.h" +//#include "stdio.h" + +//#define DbgPrint printf +//typedef char TCHAR; + +//#define RETAILMSG(exp,p) ((exp)?DbgPrint p,1:0) + +//#ifdef DEBUG + +//#define DEBUGMSG(exp,p) ((exp)?DbgPrint p,1:0) +//#undef NDEBUG + +//#define DEBUGZONE(x) 1<<x + +//#else // DEBUG + +//#define DEBUGMSG(exp,p) (0) +//#define NDEBUG + +//#endif // DEBUG + +//#define ASSERT assert +//#include "assert.h" + + +#endif // PEG diff --git a/private/ntos/tdi/irda/inc/tmp.h b/private/ntos/tdi/irda/inc/tmp.h new file mode 100644 index 000000000..85ca9f294 --- /dev/null +++ b/private/ntos/tdi/irda/inc/tmp.h @@ -0,0 +1,31 @@ +extern int irdaDbgSettings; + +#define DBG_NDIS (1 << 1) + +#define DBG_IRMAC (1 << 4) + +#define DBG_IRLAP (1 << 8) +#define DBG_IRLAPLOG (1 << 9) + +#define DBG_IRLMP (1 << 12) +#define DBG_IRLMP_CONN (1 << 13) +#define DBG_IRLMP_CRED (1 << 14) + +#define DBG_DISCOVERY (1 << 16) +#define DBG_PRINT (1 << 17) +#define DBG_ADDR (1 << 18) + +#define DBG_MISC (1 << 27) +#define DBG_ALLOC (1 << 28) +#define DBG_FUNCTION (1 << 29) +#define DBG_WARN (1 << 30) +#define DBG_ERROR (1 << 31) + + +#ifdef DEBUG +#define DEBUGMSG(dbgs,format) ((dbgs & irdaDbgSettings)? DbgPrint format:0) +#else +#define DEBUGMSG(dbgs,format) (0) +#endif + + |