Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

450 lines
15 KiB

  1. /*++
  2. Copyright (c) 1995-1996 Microsoft Corporation
  3. Module Name:
  4. pxtypes.h
  5. Abstract:
  6. Structures for ndproxy.sys
  7. Author:
  8. Tony Bell
  9. Revision History:
  10. Who When What
  11. -------- -------- ----------------------------------------------
  12. TonyBe 03/04/99 Created
  13. --*/
  14. #ifndef _PXTYPES__H
  15. #define _PXTYPES__H
  16. //
  17. // Generic structs...
  18. //
  19. typedef struct _PxBlockStruc{
  20. NDIS_EVENT Event;
  21. NDIS_STATUS Status;
  22. } PxBlockStruc, *PPxBlockStruc;
  23. typedef struct _PX_REQUEST{
  24. NDIS_REQUEST NdisRequest;
  25. ULONG Flags;
  26. #define PX_REQ_ASYNC 0x00000001
  27. PxBlockStruc Block;
  28. } PX_REQUEST, *PPX_REQUEST;
  29. //
  30. // Data structures to help run through the many variable length fields
  31. // defined in the NDIS_TAPI_MAKE_CALL structure.
  32. //
  33. typedef struct _PXTAPI_CALL_PARAM_ENTRY {
  34. ULONG_PTR SizePointer;
  35. ULONG_PTR OffsetPointer;
  36. } PXTAPI_CALL_PARAM_ENTRY, *PPXTAPI_CALL_PARAM_ENTRY;
  37. #define PX_TCP_ENTRY(_SizeName, _OffsetName) \
  38. { \
  39. FIELD_OFFSET(struct _LINE_CALL_PARAMS, _SizeName), \
  40. FIELD_OFFSET(struct _LINE_CALL_PARAMS, _OffsetName) \
  41. }
  42. //
  43. // Data structures to help run through the many variable length fields
  44. // defined in the LINE_CALL_INFO structure.
  45. //
  46. typedef struct _PXTAPI_CALL_INFO_ENTRY {
  47. ULONG_PTR SizePointer;
  48. ULONG_PTR OffsetPointer;
  49. } PXTAPI_CALL_INFO_ENTRY, *PPXTAPI_CALL_INFO_ENTRY;
  50. #define PX_TCI_ENTRY(_SizeName, _OffsetName) \
  51. { \
  52. FIELD_OFFSET(struct _LINE_CALL_INFO, _SizeName), \
  53. FIELD_OFFSET(struct _LINE_CALL_INFO, _OffsetName) \
  54. }
  55. //
  56. //
  57. //
  58. // Start of TAPI stuff
  59. //
  60. //
  61. //
  62. typedef struct _OID_DISPATCH {
  63. ULONG Oid;
  64. UINT SizeofStruct;
  65. NDIS_STATUS (*FuncPtr)();
  66. } OID_DISPATCH;
  67. //
  68. // This table contains all of the tapi addresses on a line.
  69. // One of these is embedded in each tapi_line struct.
  70. //
  71. typedef struct _TAPI_ADDR_TABLE {
  72. ULONG Count; // # of addresses in table
  73. ULONG Size; // size of table (# of possible
  74. // addresses)
  75. LIST_ENTRY List;
  76. struct _PX_TAPI_ADDR **Table;
  77. } TAPI_ADDR_TABLE, *PTAPI_ADDR_TABLE;
  78. //
  79. // This structure contains all of the information that defines
  80. // a tapi line in tapi space. One of these is created for
  81. // each line that a device exposes.
  82. //
  83. typedef struct _PX_TAPI_LINE {
  84. LIST_ENTRY Linkage;
  85. ULONG RefCount;
  86. struct _PX_TAPI_PROVIDER *TapiProvider;
  87. ULONG ulDeviceID; // Id of line in tapi space
  88. // (tapi baseid based)
  89. ULONG Flags;
  90. #define PX_LINE_IN_TABLE 0x00000001
  91. HTAPI_LINE htLine; // tapi's line handle
  92. ULONG hdLine; // our line handle (index into
  93. // provider's line table)
  94. ULONG CmLineID; // call managers index (0 based)
  95. struct _PX_CL_AF *ClAf;
  96. struct _PX_CL_SAP *ClSap;
  97. PLINE_DEV_CAPS DevCaps;
  98. PLINE_DEV_STATUS DevStatus;
  99. TAPI_ADDR_TABLE AddrTable;
  100. NDIS_SPIN_LOCK Lock;
  101. }PX_TAPI_LINE, *PPX_TAPI_LINE;
  102. typedef struct _PX_TAPI_ADDR {
  103. LIST_ENTRY Linkage;
  104. ULONG RefCount;
  105. struct _PX_TAPI_LINE *TapiLine;
  106. ULONG AddrId; // Id of address, same for both
  107. // tapi and adapter (0 based)
  108. ULONG CallCount; // # of active calls on list
  109. PLINE_ADDRESS_CAPS Caps;
  110. PLINE_ADDRESS_STATUS AddrStatus;
  111. }PX_TAPI_ADDR, *PPX_TAPI_ADDR;
  112. typedef struct _TAPI_LINE_TABLE {
  113. ULONG Count; // # of lines in table
  114. ULONG Size; // size of table
  115. // (# of possible lines)
  116. ULONG NextSlot; // next avail index
  117. struct _PX_TAPI_LINE **Table;
  118. NDIS_RW_LOCK Lock;
  119. } TAPI_LINE_TABLE, *PTAPI_LINE_TABLE;
  120. typedef struct _VC_TABLE {
  121. ULONG Count; // # of calls in table
  122. ULONG Size; // size of table (# of possible
  123. // calls)
  124. ULONG NextSlot; // next avail index
  125. LIST_ENTRY List; // list of calls
  126. struct _PX_VC **Table;
  127. NDIS_RW_LOCK Lock;
  128. } VC_TABLE, *PVC_TABLE;
  129. typedef struct _PX_TAPI_PROVIDER {
  130. LIST_ENTRY Linkage; // Linkage into tspcb
  131. PROVIDER_STATUS Status; // provider status
  132. struct _PX_ADAPTER *Adapter; // adapter providing for
  133. struct _PX_CL_AF *ClAf; // address family
  134. LIST_ENTRY LineList; // list of lines
  135. LIST_ENTRY CreateList; // list of lines with
  136. // outstanding line creates
  137. ULONG NumDevices; //
  138. ULONG_PTR TempID;
  139. ULONG CreateCount;
  140. ULONG TapiFlags;
  141. ULONG CoTapiVersion;
  142. BOOLEAN TapiSupported;
  143. GUID Guid;
  144. CO_ADDRESS_FAMILY Af;
  145. NDIS_SPIN_LOCK Lock;
  146. } PX_TAPI_PROVIDER, *PPX_TAPI_PROVIDER;
  147. typedef struct _TAPI_TSP_CB {
  148. NDISTAPI_STATUS Status;
  149. ULONG htCall;
  150. LIST_ENTRY ProviderList;
  151. ULONG NdisTapiNumDevices;
  152. ULONG ulUniqueId; // to generate ID for each TAPI request
  153. ULONG RefCount;
  154. NDIS_SPIN_LOCK Lock; // SpinLock for this structure
  155. } TAPI_TSP_CB, *PTAPI_TSP_CB;
  156. typedef struct _PROVIDER_EVENT {
  157. LIST_ENTRY Linkage; // List linkage
  158. NDIS_TAPI_EVENT Event; // Event structure
  159. }PROVIDER_EVENT, *PPROVIDER_EVENT;
  160. typedef struct _TSP_EVENT_LIST {
  161. LIST_ENTRY List;
  162. ULONG Count;
  163. ULONG MaxCount;
  164. PIRP RequestIrp;
  165. NDIS_SPIN_LOCK Lock;
  166. } TSP_EVENT_LIST, *PTSP_EVENT_LIST;
  167. typedef struct _PX_DEVICE_EXTENSION {
  168. UINT RefCount;
  169. PDRIVER_OBJECT pDriverObject; // passed in DriverEntry
  170. PDEVICE_OBJECT pDeviceObject; // created by IoCreateDevice
  171. NDIS_HANDLE PxProtocolHandle; // Set by NdisRegisterProtocol
  172. LIST_ENTRY AdapterList;
  173. ULONG RegistryFlags;
  174. ULONG ADSLTxRate;
  175. ULONG ADSLRxRate;
  176. NDIS_EVENT NdisEvent; // sync registerprotocol/bindadapter handler
  177. NDIS_SPIN_LOCK Lock;
  178. } PX_DEVICE_EXTENSION, *PPX_DEVICE_EXTENSION;
  179. //
  180. // We allocate one PX_ADAPTER structure for each adapter that
  181. // the Proxy opens. A pointer to this structure is passed to NdisOpenAdapter
  182. // as the ProtocolBindingContext.
  183. // The adapter is referenced for:
  184. // Successful bind
  185. // Client opening an address family on it
  186. // Proxy Cl part opening an address family on it
  187. //
  188. typedef struct _PX_ADAPTER {
  189. LIST_ENTRY Linkage;
  190. ULONG Sig;
  191. #define PX_ADAPTER_SIG ' mC'
  192. PX_ADAPTER_STATE State;
  193. ULONG RefCount;
  194. ULONG Flags;
  195. #define PX_CMAF_REGISTERING 0x00000001
  196. #define PX_CMAF_REGISTERED 0x00000002
  197. //
  198. // Proxy as Client stuff
  199. //
  200. NDIS_HANDLE ClBindingHandle; // set by NdisOpenAdapter
  201. LIST_ENTRY ClAfList;
  202. LIST_ENTRY ClAfClosingList;
  203. //
  204. // Proxy as Call Manager stuff
  205. //
  206. NDIS_HANDLE CmBindingHandle; // set by NdisOpenAdapter
  207. LIST_ENTRY CmAfList;
  208. LIST_ENTRY CmAfClosingList;
  209. NDIS_HANDLE UnbindContext;
  210. NDIS_STATUS ndisStatus;
  211. KEVENT event;
  212. GUID Guid;
  213. NDIS_MEDIUM MediaType;
  214. NDIS_WAN_MEDIUM_SUBTYPE MediumSubType;
  215. NDIS_STRING DeviceName; // Used to check bound adapters
  216. ULONG MediaNameLength;
  217. WCHAR MediaName[128];
  218. PxBlockStruc ClCloseEvent;
  219. PxBlockStruc CmCloseEvent;
  220. PxBlockStruc OpenEvent;
  221. PxBlockStruc BindEvent;
  222. PxBlockStruc AfRegisterEvent;
  223. ULONG AfRegisteringCount; // pending calls to NdisCmRegisterAF
  224. NDIS_SPIN_LOCK Lock;
  225. } PX_ADAPTER, *PPX_ADAPTER;
  226. //
  227. // The CM_AF is created for each AddressFamily that the
  228. // proxy exposes to the CoNDIS clients
  229. //
  230. typedef struct _PX_CM_AF {
  231. LIST_ENTRY Linkage;
  232. PX_AF_STATE State;
  233. ULONG RefCount;
  234. NDIS_HANDLE NdisAfHandle;
  235. struct _PX_ADAPTER *Adapter;
  236. LIST_ENTRY CmSapList;
  237. LIST_ENTRY VcList;
  238. CO_ADDRESS_FAMILY Af;
  239. NDIS_SPIN_LOCK Lock;
  240. } PX_CM_AF, *PPX_CM_AF;
  241. //
  242. // Function Prototypes for function ptrs
  243. //
  244. typedef
  245. NDIS_STATUS
  246. (*AF_SPECIFIC_GET_NDIS_CALL_PARAMS)(
  247. IN struct _PX_VC *pProxyVc,
  248. IN ULONG ulLineID,
  249. IN ULONG ulAddressID,
  250. IN ULONG ulFlags,
  251. IN PNDIS_TAPI_MAKE_CALL TapiBuffer,
  252. OUT PCO_CALL_PARAMETERS *pNdisCallParameters
  253. );
  254. typedef
  255. NDIS_STATUS
  256. (*AF_SPECIFIC_GET_TAPI_CALL_PARAMS)(
  257. IN struct _PX_VC *pProxyVc,
  258. IN PCO_CALL_PARAMETERS pCallParams
  259. );
  260. typedef
  261. struct _PX_CL_SAP*
  262. (*AF_SPECIFIC_GET_NDIS_SAP)(
  263. IN struct _PX_CL_AF *pClAf,
  264. IN struct _PX_TAPI_LINE *TapiLine
  265. );
  266. //
  267. // The CL_AF is created for each address family that the
  268. // proxy opens. There could be multiple address families
  269. // per adapter.
  270. //
  271. typedef struct _PX_CL_AF {
  272. LIST_ENTRY Linkage;
  273. PX_AF_STATE State;
  274. ULONG RefCount;
  275. NDIS_HANDLE NdisAfHandle;
  276. struct _PX_ADAPTER *Adapter;
  277. LIST_ENTRY ClSapList;
  278. LIST_ENTRY ClSapClosingList;
  279. LIST_ENTRY VcList;
  280. LIST_ENTRY VcClosingList;
  281. PPX_TAPI_PROVIDER TapiProvider;
  282. //
  283. // Moves call params from NDIS to TAPI
  284. //
  285. AF_SPECIFIC_GET_NDIS_CALL_PARAMS AfGetNdisCallParams;
  286. AF_SPECIFIC_GET_TAPI_CALL_PARAMS AfGetTapiCallParams;
  287. AF_SPECIFIC_GET_NDIS_SAP AfGetNdisSap;
  288. ULONG NdisCallParamSize;
  289. CO_ADDRESS_FAMILY Af;
  290. PxBlockStruc Block;
  291. NDIS_SPIN_LOCK Lock;
  292. } PX_CL_AF, *PPX_CL_AF;
  293. typedef struct _PX_CL_SAP {
  294. LIST_ENTRY Linkage;
  295. PX_SAP_STATE State;
  296. ULONG Flags;
  297. ULONG RefCount;
  298. struct _PX_CL_AF *ClAf;
  299. struct _PX_TAPI_LINE *TapiLine;
  300. ULONG MediaModes;
  301. NDIS_HANDLE NdisSapHandle;
  302. PCO_SAP CoSap;
  303. } PX_CL_SAP, *PPX_CL_SAP;
  304. typedef struct _PX_CM_SAP {
  305. LIST_ENTRY Linkage;
  306. PX_SAP_STATE State;
  307. ULONG Flags;
  308. ULONG RefCount;
  309. struct _PX_CM_AF *CmAf;
  310. NDIS_HANDLE NdisSapHandle;
  311. PCO_SAP CoSap;
  312. } PX_CM_SAP, *PPX_CM_SAP;
  313. typedef struct _PX_VC {
  314. LIST_ENTRY Linkage; // Vc is linked into global table
  315. PX_VC_STATE State; // Vc's state (with call manager)
  316. PX_VC_STATE PrevState; // Vc's previous state
  317. PX_VC_HANDOFF_STATE HandoffState; // Vc's state (with client)
  318. ULONG RefCount; // Reference Count
  319. ULONG Flags; //
  320. #define PX_VC_OWNER 0x00000001
  321. #define PX_VC_IN_TABLE 0x00000002
  322. #define PX_VC_CALLTIMER_STARTED 0x00000004
  323. #define PX_VC_CLEANUP_CM 0x00000008
  324. #define PX_VC_DROP_PENDING 0x00000010
  325. #define PX_VC_INCALL_ABORTING 0x00000020
  326. #define PX_VC_INCALL_ABORTED 0x00000040
  327. #define PX_VC_OUTCALL_ABORTING 0x00000080
  328. #define PX_VC_OUTCALL_ABORTED 0x00000100
  329. ULONG CloseFlags;
  330. #define PX_VC_INCOMING_CLOSE 0x00000001
  331. #define PX_VC_TAPI_DROP 0x00000002
  332. #define PX_VC_TAPI_CLOSECALL 0x00000004
  333. #define PX_VC_TAPI_CLOSE 0x00000008
  334. #define PX_VC_UNBIND 0x00000010
  335. #define PX_VC_CLOSE_AF 0x00000020
  336. #define PX_VC_INCALL_TIMEOUT 0x00000040
  337. #define PX_VC_CL_CLOSE_CALL 0x00000080
  338. #define PX_VC_CM_CLOSE_REQ 0x00000100
  339. #define PX_VC_CM_CLOSE_COMP 0x00000200
  340. #define PX_VC_CM_CLOSE_FAIL 0x00000400
  341. //
  342. // Proxy as Client stuff
  343. //
  344. NDIS_HANDLE ClVcHandle; // Vc Handle (as Client)
  345. struct _PX_CL_SAP *ClSap; // Sap (incoming only)
  346. struct _PX_CL_AF *ClAf; // Adress family
  347. //
  348. // Proxy as Call Manager stuff
  349. //
  350. NDIS_HANDLE CmVcHandle; // Vc Handle (as cm)
  351. struct _PX_CM_SAP *CmSap; // Sap
  352. struct _PX_CM_AF *CmAf; // Address family
  353. struct _PX_ADAPTER *Adapter; // Adapter
  354. //
  355. // Tapi stuff
  356. //
  357. LIST_ENTRY PendingDropReqs; // list of pended drop requests
  358. struct _NDISTAPI_REQUEST *PendingGatherDigits;
  359. NDIS_TIMER DigitTimer;
  360. ULONG ulMonitorDigitsModes;
  361. struct _PX_TAPI_LINE *TapiLine; // associated line
  362. struct _PX_TAPI_ADDR *TapiAddr; // associated address
  363. HTAPI_CALL htCall; // tapi's call handle
  364. HDRV_CALL hdCall; // our call handle (index into
  365. // the global vc table)
  366. ULONG ulCallInfoFieldsChanged;
  367. ULONG ulCallState;
  368. ULONG ulCallStateMode;
  369. PLINE_CALL_INFO CallInfo;
  370. PCO_CALL_PARAMETERS pCallParameters;
  371. NDIS_TIMER InCallTimer;
  372. PxBlockStruc Block;
  373. LIST_ENTRY ClAfLinkage;
  374. LIST_ENTRY CmAfLinkage;
  375. NDIS_SPIN_LOCK Lock; // Spinlock
  376. } PX_VC, *PPX_VC;
  377. #endif