windows-nt/Source/XPSP1/NT/net/irda/rasirda/rasirdap.h
2020-09-26 16:20:57 +08:00

327 lines
8.3 KiB
C

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
rasirdap.h
Abstract:
Author:
mbert 9-97
--*/
#include <ntddk.h>
#include <tdi.h>
#include <tdikrnl.h>
#include <tdiinfo.h>
#include <ipinfo.h>
#include <ntddtcp.h>
#include <ndis.h>
#include <ndiswan.h>
#include <ndistapi.h>
#include <cxport.h>
#include <dbgmsg.h>
#include <refcnt.h>
#include <af_irda.h>
#include <irdatdi.h>
#include <irtdicl.h>
#include <irmem.h>
extern LIST_ENTRY RasIrAdapterList;
extern NDIS_SPIN_LOCK RasIrSpinLock;
#define NDIS_MajorVersion 5
#define NDIS_MinorVersion 0
#define ADAPTER_SIG 0xAA00AA00AA
#define VC_SIG 0xCC00CC00CC
#define ENDP_SIG 0xEE00EE00EE
#define GOODADAPTER(a) ASSERT(a->Sig == (ULONG)ADAPTER_SIG)
#define GOODVC(vc) ASSERT(vc->Sig == (ULONG)VC_SIG)
#define GOODENDP(endp) ASSERT(endp->Sig == (ULONG)ENDP_SIG)
#define RASIR_SERVICE_NAME_DIRECT "IrNetv1"
#define RASIR_SERVICE_NAME_ASYNC "IrNetAsyncv1" // async frameing for Win CE
#define RASIR_SERVICE_NAME_IRMODEM "IrModem"
#define RASIR_MAX_LINE_NAME 64
#define RASIR_INTERNAL_SEND (PVOID) -1
#define RASIR_MAX_RATE 4000000
#define AF_FLAG_CHAR 0x7E
#define AF_ESC_CHAR 0x7D
#define AF_COMP_BIT 0x20
#define TX_BUF_POOL_SIZE 6
#define CALC_FCS(fcs, chr) ((fcs >> 8)^FcsTable[(fcs ^ chr) & 0xFF])
#define STUFF_BYTE(p,b,am) do { \
if (((b < 0x20) && ((1 << b) & am)) || \
b == AF_FLAG_CHAR || b == AF_ESC_CHAR) \
{ \
*p++ = AF_ESC_CHAR; \
*p++ = b ^ AF_COMP_BIT; \
} \
else \
{ \
*p++ = b;\
} \
} while (0);
#define ASYNC_BUF_SIZE (IRDA_MAX_DATA_SIZE*2) // worst case byte stuffing
typedef struct
{
LIST_ENTRY Linkage;
UCHAR Buf[ASYNC_BUF_SIZE];
int BufLen;
PNDIS_BUFFER pNdisBuf;
} ASYNC_BUFFER, *PASYNC_BUFFER;
typedef struct
{
LIST_ENTRY Linkage;
LIST_ENTRY VcList;
ULONG Sig;
LIST_ENTRY EndpList;
NDIS_HANDLE NdisSapHandle;
NDIS_HANDLE NdisAfHandle;
NDIS_HANDLE MiniportAdapterHandle;
NPAGED_LOOKASIDE_LIST WorkItemsLList;
NPAGED_LOOKASIDE_LIST AsyncBufLList;
NDIS_SPIN_LOCK SpinLock;
NDIS_WAN_CO_INFO Info;
BOOLEAN ModemPort;
WCHAR TapiLineNameBuf[32];
NDIS_STRING TapiLineName;
ULONG Flags;
#define ADF_PENDING_AF_CLOSE 0x00000001
#define ADF_SAP_DEREGISTERED 0x00000002
} RASIR_ADAPTER, *PRASIR_ADAPTER;
typedef struct
{
LIST_ENTRY Linkage;
ULONG Sig;
PRASIR_ADAPTER pAdapter;
PVOID IrdaEndpContext;
ULONG EndpType;
#define EPT_DIRECT 1
#define EPT_ASYNC 2 // using async framing
#if DBG
CHAR ServiceName[IRDA_DEV_SERVICE_LEN];
#endif
} RASIR_IRDA_ENDPOINT, *PRASIR_IRDA_ENDPOINT;
typedef struct
{
LIST_ENTRY Linkage;
ULONG Sig;
PRASIR_ADAPTER pAdapter;
NDIS_HANDLE NdisVcHandle;
PVOID IrdaConnContext;
REF_CNT RefCnt;
PCHAR pInCallParms;
PCO_CALL_PARAMETERS pMakeCall;
PCO_AF_TAPI_MAKE_CALL_PARAMETERS pTmParams;
PCO_AF_TAPI_INCOMING_CALL_PARAMETERS pTiParams;
NDIS_WAN_CO_GET_LINK_INFO LinkInfo;
NDIS_HANDLE RxBufferPool;
NDIS_HANDLE RxPacketPool;
NDIS_HANDLE TxBufferPool;
LONG OutstandingSends;
ULONG Flags;
#define VCF_CREATED_LOCAL 0x00000001
#define VCF_IRDA_OPEN 0x00000002
#define VCF_OPEN 0x00000004
#define VCF_CLOSING 0x00000008
#define VCF_CLOSE_PEND 0x00000010
#define VCF_MAKE_CALL_PEND 0x00000020
ULONG ConnectionSpeed;
BOOLEAN AsyncFraming;
PASYNC_BUFFER pCurrAsyncBuf;
LIST_ENTRY CompletedAsyncBufList;
ULONG AsyncFramingState;
#define RX_READY 0
#define RX_RX 1
#define RX_ESC 2
BOOLEAN IrModemCall;
ULONG ModemState;
#define MS_OFFLINE 0
#define MS_CONNECTING 1
#define MS_ONLINE 2
CHAR OfflineSendBuf[32];
PNDIS_BUFFER pOfflineNdisBuf;
} RASIR_VC, *PRASIR_VC;
typedef struct
{
CO_TAPI_LINE_CAPS caps;
WCHAR LineName[RASIR_MAX_LINE_NAME];
} RASIR_CO_TAPI_LINE_CAPS;
PRASIR_ADAPTER
IrdaEndpointToAdapter(PVOID EndpointContext);
NDIS_STATUS
RasIrInitialize(
OUT PNDIS_STATUS OpenErrorStatus,
OUT PUINT SelectedMediumIndex,
IN PNDIS_MEDIUM MediumArray,
IN UINT MediumArraySize,
IN NDIS_HANDLE MiniportAdapterHandle,
IN NDIS_HANDLE WrapperConfigurationContext);
VOID
RasIrHalt(
IN NDIS_HANDLE MiniportAdapterContext);
NDIS_STATUS
RasIrReset(
OUT PBOOLEAN AddressingReset,
IN NDIS_HANDLE MiniportAdapterContext);
VOID
RasIrReturnPacket(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet);
NDIS_STATUS
RasIrCoActivateVc(
IN NDIS_HANDLE MiniportVcContext,
IN OUT PCO_CALL_PARAMETERS CallParameters);
NDIS_STATUS
RasIrCoDeactivateVc(
IN NDIS_HANDLE MiniportVcContext);
VOID
RasIrCoSendPackets(
IN NDIS_HANDLE MiniportVcContext,
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets);
NDIS_STATUS
RasIrCoRequest(
IN NDIS_HANDLE MiniportAdapterContext,
IN NDIS_HANDLE MiniportVcContext,
IN OUT PNDIS_REQUEST NdisRequest);
VOID
RasIrReturnPacket(
IN NDIS_HANDLE MiniportAdapterContext,
IN PNDIS_PACKET Packet);
// Call Manager handlers
NDIS_STATUS
RasIrCmCreateVc(
IN NDIS_HANDLE ProtocolAfContext,
IN NDIS_HANDLE NdisVcHandle,
OUT PNDIS_HANDLE ProtocolVcContext);
NDIS_STATUS
RasIrCmDeleteVc(
IN NDIS_HANDLE ProtocolVcContext);
NDIS_STATUS
RasIrCmOpenAf(
IN NDIS_HANDLE CallMgrBindingContext,
IN PCO_ADDRESS_FAMILY AddressFamily,
IN NDIS_HANDLE NdisAfHandle,
OUT PNDIS_HANDLE CallMgrAfContext);
NDIS_STATUS
RasIrCmCloseAf(
IN NDIS_HANDLE CallMgrAfContext);
NDIS_STATUS
RasIrCmRegisterSap(
IN NDIS_HANDLE CallMgrAfContext,
IN PCO_SAP Sap,
IN NDIS_HANDLE NdisSapHandle,
OUT PNDIS_HANDLE CallMgrSapContext);
NDIS_STATUS
RasIrCmDeregisterSap(
NDIS_HANDLE CallMgrSapContext);
NDIS_STATUS
RasIrCmMakeCall(
IN NDIS_HANDLE CallMgrVcContext,
IN OUT PCO_CALL_PARAMETERS CallParameters,
IN NDIS_HANDLE NdisPartyHandle,
OUT PNDIS_HANDLE CallMgrPartyContext);
NDIS_STATUS
RasIrCmCloseCall(
IN NDIS_HANDLE CallMgrVcContext,
IN NDIS_HANDLE CallMgrPartyContext,
IN PVOID CloseData,
IN UINT Size);
VOID
RasIrCmIncomingCallComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE CallMgrVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
RasIrCmActivateVcComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE CallMgrVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
VOID
RasIrCmDeactivateVcComplete(
IN NDIS_STATUS Status,
IN NDIS_HANDLE CallMgrVcContext);
NDIS_STATUS
RasIrCmModifyCallQoS(
IN NDIS_HANDLE CallMgrVcContext,
IN PCO_CALL_PARAMETERS CallParameters);
NDIS_STATUS
RasIrCmRequest(
IN NDIS_HANDLE CallMgrAfContext,
IN NDIS_HANDLE CallMgrVcContext,
IN NDIS_HANDLE CallMgrPartyContext,
IN OUT PNDIS_REQUEST NdisRequest);
NDIS_STATUS
ScheduleWork(
IN PRASIR_ADAPTER pAdapter,
IN NDIS_PROC pProc,
IN PVOID pContext);
VOID
AllocCallParms(
IN PRASIR_VC pVc);
VOID
DeleteVc(
IN PRASIR_VC pVc);
VOID
CompleteClose(
IN PRASIR_VC pVc);
VOID
ProcessOfflineRxBuf(
IN PRASIR_VC pVc,
IN PIRDA_RECVBUF pRecvBuf);