windows-nt/Source/XPSP1/NT/net/rras/ndis/ndproxy/pxdefs.h
2020-09-26 16:20:57 +08:00

676 lines
19 KiB
C

/*++
Copyright (c) 1995-1996 Microsoft Corporation
Module Name:
pxdefs.h
Abstract:
Defines for ndproxy.sys
Author:
Tony Bell
Revision History:
Who When What
-------- -------- ----------------------------------------------
TonyBe 03/04/99 Created
--*/
#ifndef _PXDEFS__H
#define _PXDEFS__H
///////////////////////////////////////////////////////////////////////////
// Constants
///////////////////////////////////////////////////////////////////////////
#define MODULE_INIT 0x00010000
#define MODULE_NTINIT 0x00020000
#define MODULE_CO 0x00030000
#define MODULE_CL 0x00040000
#define MODULE_DEBUG 0x00050000
#define MODULE_CM 0x00060000
#define MODULE_UTIL 0x00070000
#define MODULE_CFG 0x00080000
#define MODULE_TAPI 0x00100000
//
// Proxy's memory tags
//
#define PX_EVENT_TAG '1XP'
#define PX_VCTABLE_TAG '2XP'
#define PX_ADAPTER_TAG '3XP'
#define PX_CLSAP_TAG '4XP'
#define PX_CMSAP_TAG '5XP'
#define PX_PARTY_TAG '6XP'
#define PX_COCALLPARAMS_TAG '7XP'
#define PX_REQUEST_TAG '8XP'
#define PX_PROVIDER_TAG '9XP'
#define PX_ENUMLINE_TAG 'aXP'
#define PX_TAPILINE_TAG 'bXP'
#define PX_ENUMADDR_TAG 'cXP'
#define PX_TAPIADDR_TAG 'dXP'
#define PX_TAPICALL_TAG 'eXP'
#define PX_LINECALLINFO_TAG 'fXP'
#define PX_CMAF_TAG 'gXP'
#define PX_CLAF_TAG 'hXP'
#define PX_VC_TAG 'iXP'
#define PX_TRANSLATE_CALL 'jXP'
#define PX_TRANSLATE_SAP 'kXP'
#define PX_LINETABLE_TAG 'lXP'
#define NDIS_MAJOR_VERSION 0x05
#define NDIS_MINOR_VERSION 0x00
#define PX_MAJOR_VERSION 0x01
#define PX_MINOR_VERSION 0x00
#define DD_PROXY_DEVICE_NAME L"\\Device\\NDProxy"
#define PX_NAME L"NDProxy"
#define MAX_ADSL_MEDIATYPE_STRING 48
#define MAX_STATUS_COUNT 8
#define MAX_LINE_DEVS 255
#define MAX_NUM_CONCURRENT_CALLS 1000
#define MAX_DEVCLASS_STRINGSIZE 16
#define LINE_TABLE_SIZE 500
#define VC_TABLE_SIZE 500
#define MAX_STRING_PARAM_SIZE 40
#define MAX_OUT_CALL_STATES 4
#define LINE_CALL_INFO_VAR_DATA_SIZE (17*MAX_STRING_PARAM_SIZE)
//
// ADSL flags to indicate overriding registry values
// in device extension
//
#define ADSL_TX_RATE_FROM_REG ((USHORT)0x0001)
#define ADSL_RX_RATE_FROM_REG ((USHORT)0x0002)
#define ADSL_FLAGS_MASK ((USHORT)0x0004)
//
// Status of tapi with ndproxy
//
typedef enum _NDISTAPI_STATUS {
NDISTAPI_STATUS_CONNECTED,
NDISTAPI_STATUS_DISCONNECTED,
NDISTAPI_STATUS_CONNECTING,
NDISTAPI_STATUS_DISCONNECTING
} NDISTAPI_STATUS, *PNDISTAPI_STATUS;
//
// Status of providers with ndproxy
//
typedef enum _PROVIDER_STATUS {
PROVIDER_STATUS_ONLINE,
PROVIDER_STATUS_OFFLINE
} PROVIDER_STATUS, *PPROVIDER_STATUS;
//
// States for PX_ADAPTER
//
typedef enum PX_ADAPTER_STATE {
PX_ADAPTER_CLOSED,
PX_ADAPTER_CLOSING,
PX_ADAPTER_OPENING,
PX_ADAPTER_OPEN
} PX_ADAPTER_STATE;
//
// States for PX_CL_AF, PX_CM_AF
//
typedef enum PX_AF_STATE{
PX_AF_CLOSED,
PX_AF_CLOSING,
PX_AF_OPENING,
PX_AF_OPENED
} PX_AF_STATE;
//
// States for PX_CL_SAP, PX_CM_SAP
//
typedef enum PX_SAP_STATE {
PX_SAP_CLOSED,
PX_SAP_CLOSING,
PX_SAP_OPENING,
PX_SAP_OPENED
} PX_SAP_STATE;
//
// States for PX_VC between ndproxy
// and the underlying call manager
//
typedef enum PX_VC_STATE {
PX_VC_IDLE, // created
PX_VC_PROCEEDING, // outgoing
PX_VC_OFFERING, // incoming
PX_VC_DISCONNECTING,
PX_VC_CONNECTED
} PX_VC_STATE;
//
// States for PX_VC between ndproxy
// and the client
//
typedef enum PX_VC_HANDOFF_STATE {
PX_VC_HANDOFF_IDLE, // created
PX_VC_HANDOFF_OFFERING, // incoming (always)
PX_VC_HANDOFF_DISCONNECTING,
PX_VC_HANDOFF_CONNECTED
} PX_VC_HANDOFF_STATE;
///////////////////////////////////////////////////////////////////////////
// Macros
///////////////////////////////////////////////////////////////////////////
#ifdef ROUND_UP
#undef ROUND_UP
#endif
#define ROUND_UP(_Val) (((_Val) + 3) & ~3)
#ifndef MAX
/*++
OPAQUE
MAX(
IN OPAQUE Fred,
IN OPAQUE Shred
)
--*/
#define MAX(Fred, Shred) (((Fred) > (Shred)) ? (Fred) : (Shred))
#endif // MAX
#ifndef MIN
/*++
OPAQUE
MIN(
IN OPAQUE Fred,
IN OPAQUE Shred
)
--*/
#define MIN(Fred, Shred) (((Fred) < (Shred)) ? (Fred) : (Shred))
#endif // MIN
/*++
PVOID
PxAllocMem(
IN ULONG Size
)
--*/
#if DBG
#define PxAllocMem(_p, _s, _t) \
_p = PxAuditAllocMem((PVOID)(&(_p)), _s, _t, _FILENUMBER, __LINE__);
#else // DBG
#define PxAllocMem(_p, _s, _t) \
_p = ExAllocatePoolWithTag(NonPagedPool, (ULONG)_s, (ULONG)_t)
#endif // DBG
/*++
VOID
PxFreeMem(
IN PVOID Pointer
)
--*/
#if DBG
#define PxFreeMem(Pointer) PxAuditFreeMem((PVOID)Pointer)
#else
#define PxFreeMem(Pointer) ExFreePool((PVOID)(Pointer))
#endif // DBG
/*++
VOID
PxInitBlockStruc(
PxBlockStruc *pBlock
)
--*/
#define PxInitBlockStruc(pBlock) NdisInitializeEvent(&((pBlock)->Event))
/*++
NDIS_STATUS
PxBlock(
PxBlockStruc *pBlock
)
--*/
#define PxBlock(pBlock) \
(NdisWaitEvent(&((pBlock)->Event), 0), (pBlock)->Status)
/*++
VOID
PxSignal(
IN PxBlockStruc *pBlock,
IN UINT Status
)
--*/
#define PxSignal(_pbl, _s) \
{ (_pbl)->Status = _s; NdisSetEvent(&((_pbl)->Event)); }
/*++
VOID
REF_ADAPTER(
IN PPX_ADAPTER _pa
)
--*/
#define REF_ADAPTER(_pa) \
(_pa)->RefCount++
/*++
VOID
DEREF_ADAPTER(
IN PPX_ADAPTER _pa
)
--*/
#define DEREF_ADAPTER(_pa) \
{ \
NdisAcquireSpinLock(&(_pa)->Lock); \
if (--(_pa)->RefCount == 0) { \
NdisReleaseSpinLock(&(_pa)->Lock); \
PxFreeAdapter(_pa); \
} else { \
NdisReleaseSpinLock(&(_pa)->Lock); \
} \
}
/*++
VOID
DEREF_ADAPTER_LOCKED(
IN PPX_ADAPTER _pa
)
--*/
#define DEREF_ADAPTER_LOCKED(_pa) \
{ \
if (--(_pa)->RefCount == 0) { \
NdisReleaseSpinLock(&(_pa)->Lock); \
PxFreeAdapter(_pa); \
} else { \
NdisReleaseSpinLock(&(_pa)->Lock); \
} \
}
/*++
REF_CM_AF(
IN PPX_CM_AF _paf
)
--*/
#define REF_CM_AF(_paf) \
{ \
ASSERT((LONG)(_paf)->RefCount != 0); \
(_paf)->RefCount++; \
}
/*++
VOID
DEREF_CM_AF(
IN PPX_CM_AF _paf
)
--*/
#define DEREF_CM_AF(_paf) \
{ \
NdisAcquireSpinLock(&(_paf)->Lock); \
ASSERT((LONG)(_paf)->RefCount > 0); \
if (--(_paf)->RefCount == 0) { \
DoDerefCmAfWork(_paf); \
} else { \
NdisReleaseSpinLock(&(_paf)->Lock); \
} \
}
/*++
VOID
DEREF_CM_AF_LOCKED(
IN PPX_CM_AF _paf
)
--*/
#define DEREF_CM_AF_LOCKED(_paf) \
{ \
ASSERT((LONG)(_paf)->RefCount > 0); \
if (--(_paf)->RefCount == 0) { \
DoDerefCmAfWork(_paf); \
} else { \
NdisReleaseSpinLock(&(_paf)->Lock); \
} \
}
/*++
REF_CL_AF(
IN PPX_CL_AF _paf
)
--*/
#define REF_CL_AF(_paf) \
{ \
ASSERT((LONG)(_paf)->RefCount != 0); \
(_paf)->RefCount++; \
}
/*++
VOID
DEREF_CL_AF(
IN PPX_CL_AF _paf
)
--*/
#define DEREF_CL_AF(_paf) \
{ \
if ((_paf) != NULL) { \
NdisAcquireSpinLock(&(_paf)->Lock); \
ASSERT((LONG)(_paf)->RefCount > 0); \
if (--(_paf)->RefCount == 0) { \
DoDerefClAfWork(_paf); \
} else { \
NdisReleaseSpinLock(&(_paf)->Lock); \
} \
} \
}
/*++
VOID
DEREF_CL_AF_LOCKED(
IN PPX_CL_AF _paf
)
--*/
#define DEREF_CL_AF_LOCKED(_paf) \
{ \
if ((_paf) != NULL) { \
ASSERT((LONG)(_paf)->RefCount > 0); \
if (--(_paf)->RefCount == 0) { \
DoDerefClAfWork(_paf); \
} else { \
NdisReleaseSpinLock(&(_paf)->Lock); \
} \
} \
}
/*++
REF_VC(
IN PPX_VC _pvc
)
--*/
#define REF_VC(_pvc) \
(_pvc)->RefCount++
#ifdef CODELETEVC_FIXED
/*++
VOID
DEREF_VC(
IN PPX_VC _pvc
)
--*/
#define DEREF_VC(_pvc) \
{ \
if (_pvc != NULL) { \
NdisAcquireSpinLock(&(_pvc)->Lock); \
if (--(_pvc)->RefCount == 0) { \
DoDerefVcWork(_pvc); \
} else { \
NdisReleaseSpinLock(&(_pvc)->Lock); \
} \
} \
}
/*++
VOID
DEREF_VC_LOCKED(
IN PPX_VC _pvc
)
--*/
#define DEREF_VC_LOCKED(_pvc) \
{ \
if (_pvc != NULL) { \
if (--(_pvc)->RefCount == 0) { \
DoDrefVcWork(_pvc); \
} else { \
NdisReleaseSpinLock(&(_pvc)->Lock); \
} \
} \
}
#else
/*++
VOID
DEREF_VC(
IN PPX_VC _pvc
)
--*/
#define DEREF_VC(_pvc) \
{ \
if (_pvc != NULL) { \
NdisAcquireSpinLock(&(_pvc)->Lock); \
if (--(_pvc)->RefCount == 0) { \
DoDerefVcWork(_pvc); \
} else { \
NdisReleaseSpinLock(&(_pvc)->Lock); \
} \
} \
}
/*++
VOID
DEREF_VC_LOCKED(
IN PPX_VC _pvc
)
--*/
#define DEREF_VC_LOCKED(_pvc) \
{ \
if (_pvc != NULL) { \
if (--(_pvc)->RefCount == 0) { \
DoDerefVcWork(_pvc); \
} else { \
NdisReleaseSpinLock(&(_pvc)->Lock); \
} \
} \
}
#endif
/*++
REF_TAPILINE
IN PPX_TAPI_LINE _ptl
)
--*/
#define REF_TAPILINE(_ptl) \
(_ptl)->RefCount++
/*++
VOID
DEREF_TAPILINE(
IN PPX_TAPI_LINE _ptl
)
--*/
#define DEREF_TAPILINE(_ptl) \
{ \
if (_ptl != NULL) { \
NdisAcquireSpinLock(&(_ptl)->Lock); \
if (--(_ptl)->RefCount == 0) { \
NdisReleaseSpinLock(&(_ptl)->Lock); \
FreeTapiLine(_ptl); \
} else { \
NdisReleaseSpinLock(&(_ptl)->Lock); \
} \
} \
}
/*++
VOID
DEREF_TAPILINE_LOCKED(
IN PPX_TAPI_LINE _ptl
)
--*/
#define DEREF_TAPILINE_LOCKED(_ptl) \
{ \
if (_ptl != NULL) { \
if (--(_ptl)->RefCount == 0) { \
NdisReleaseSpinLock(&(_ptl)->Lock); \
FreeTapiLine(_ptl); \
} else { \
NdisReleaseSpinLock(&(_ptl)->Lock); \
} \
} \
}
/*++
VOID
AdapterFromBindContext(
IN NDIS_HANDLE _ctx,
IN PPX_ADAPTER _pa,
IN BOOLENA _bcl
)
--*/
#define AdapterFromBindContext(_ctx, _pa, _bcl) \
{ \
if (*(PULONG)(_ctx) == PX_ADAPTER_SIG) { \
(_pa) = CONTAINING_RECORD((_ctx), PX_ADAPTER, Sig); \
(_bcl) = FALSE; \
} else { \
(_pa) = (PPX_ADAPTER)(_ctx); \
(_bcl) = TRUE; \
} \
}
/*++
VOID
AdapterFromClBindContext(
IN NDIS_HANDLE _ctx,
IN PPX_ADAPTER _pa
)
--*/
#define AdapterFromClBindContext(_ctx, _pa) \
(_pa) = (PPX_ADAPTER)(_ctx)
/*++
VOID
AdapterFromCmBindContext(
IN NDIS_HANDLE _ctx,
IN PPX_ADAPTER _pa
)
--*/
#define AdapterFromCmBindContext(_ctx, _pa) \
{ \
ASSERT(*(PULONG)(_ctx) == PX_ADAPTER_SIG); \
(_pa) = CONTAINING_RECORD((_ctx), PX_ADAPTER, Sig); \
}
/*
VOID
SendTapiCallState(
IN PPX_VC _pvc,
IN ULONG_PTR _p1,
IN ULONG_PTR _p2,
IN ULONG_PTR _p3
)
*/
#define SendTapiCallState(_pvc, _p1, _p2, _p3) \
{ \
NDIS_TAPI_EVENT _le; \
PPX_TAPI_LINE _tl; \
PXDEBUGP (PXD_LOUD, PXM_TAPI, \
("SendTapiCallState: Vc %p, CallState: %x, p2: %x, p3 %x\n",\
_pvc, _p1, _p2, _p3)); \
_tl = (_pvc)->TapiLine; \
_le.htLine = _tl->htLine; \
_le.htCall = _pvc->htCall; \
_le.ulMsg = LINE_CALLSTATE; \
_le.ulParam1 = _p1; \
_le.ulParam2 = _p2; \
_le.ulParam3 = _p3; \
ASSERT((_p1) != (_pvc)->ulCallState); \
(_pvc)->ulCallState = (_p1); \
(_pvc)->ulCallStateMode = (_p2); \
NdisReleaseSpinLock(&(_pvc)->Lock); \
PxIndicateStatus(&(_le), sizeof(NDIS_TAPI_EVENT)); \
NdisAcquireSpinLock(&(_pvc)->Lock); \
}
// if ((_p1) == LINECALLSTATE_DISCONNECTED) { \
// InterlockedDecrement((PLONG)&(_tl)->DevStatus->ulNumActiveCalls);\
// } else if ((_p1) == LINECALLSTATE_OFFERING || (_p1) == LINECALLSTATE_PROCEEDING) {\
// InterlockedIncrement((PLONG)&(_tl)->DevStatus->ulNumActiveCalls);\
// } \
/*
VOID
SendTapiNewCall(
IN PPX_VC _pvc,
IN ULONG_PTR _p1,
IN ULONG_PTR _p2,
IN ULONG_PTR _p3
)
*/
#define SendTapiNewCall(_pvc, _p1, _p2, _p3) \
{ \
NDIS_TAPI_EVENT _le; \
_le.htLine = _pvc->TapiLine->htLine; \
_le.htCall = _pvc->htCall; \
_le.ulMsg = LINE_NEWCALL; \
_le.ulParam1 = _p1; \
_le.ulParam2 = _p2; \
_le.ulParam3 = _p3; \
PXDEBUGP (PXD_LOUD, PXM_TAPI, \
("SendTapiNewCall: Vc %p, p1: %x, p2: %x, p3 %x\n",\
_pvc, _p1, _p2, _p3)); \
NdisReleaseSpinLock(&(_pvc)->Lock); \
PxIndicateStatus(&(_le), sizeof(NDIS_TAPI_EVENT)); \
NdisAcquireSpinLock(&(_pvc)->Lock); \
}
/*
VOID
SendTapiLineClose(
IN PPX_TAPI_LINE _ptl
)
*/
#define SendTapiLineClose(_ptl) \
{ \
NDIS_TAPI_EVENT _le; \
_le.htLine = (_ptl)->htLine; \
_le.htCall = 0; \
_le.ulMsg = LINE_CLOSE; \
_le.ulParam1 = 0; \
_le.ulParam2 = 0; \
_le.ulParam3 = 0; \
PXDEBUGP (PXD_LOUD, PXM_TAPI, \
("SendTapiLineClose: TapiLine %p\n",_ptl)); \
PxIndicateStatus(&(_le), sizeof(NDIS_TAPI_EVENT)); \
}
/*
VOID
SendTapiLineCreate(
IN PPX_TAPI_LINE _ptl
)
*/
#define SendTapiLineCreate(_ptl) \
{ \
NDIS_TAPI_EVENT _le; \
_le.htLine = (_ptl)->htLine; \
_le.htCall = 0; \
_le.ulMsg = LINE_CREATE; \
_le.ulParam1 = 0; \
_le.ulParam2 = (_ptl)->hdLine; \
_le.ulParam3 = 0; \
PXDEBUGP (PXD_LOUD, PXM_TAPI, \
("SendTapiLineCreate: TapiLine %p\n",_ptl)); \
PxIndicateStatus(&(_le), sizeof(NDIS_TAPI_EVENT)); \
}
#endif