676 lines
19 KiB
C
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
|