|
|
/*++
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
|