327 lines
8.3 KiB
C
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);
|