1/*
2 * DDK (Driver Development Kit) for Cronyx Tau32-PCI adapter.
3 *
4 * Copyright (C) 2003-2006 Cronyx Engineering, http://www.cronyx.ru
5 * All rights reserved.
6 *
7 * Author: Leo Yuriev <ly@cronyx.ru>, http://leo.yuriev.ru
8 *
9 * $Cronyx: tau32-ddk.h,v 1.2 2006/02/01 09:14:40 ly Exp $
10 * $Rik: tau32-ddk.h,v 1.7 2006/02/28 22:33:29 rik Exp $
11 * $FreeBSD$
12 */
13
14#if defined(__GNUC__) || defined(__TURBOC__)
15#	ifndef __int8
16#		define __int8 char
17#	endif
18#	ifndef __int16
19#		define __int16 short
20#	endif
21#	ifndef __int32
22#		define __int32 long
23#	endif
24#	ifndef __int64
25#		define __int64 long long
26#	endif
27#endif
28
29#if !defined(BOOLEAN) && !defined(_NTDDK_)
30#	define BOOLEAN int
31#endif
32
33#if defined(__GNUC__) && !defined(__stdcall)
34#	define __stdcall __attribute__((stdcall))
35#endif
36
37#if defined(__GNUC__) && !defined(__cdecl)
38#	define __cdecl __attribute__((cdecl))
39#endif
40
41#ifndef TAU32_CALLBACK_TYPE
42#	if defined(__WINDOWS__) || defined(_MSC_VER) || defined(WIN32) || defined(WIN64)
43#		define TAU32_CALLBACK_TYPE __stdcall
44#	else
45#		define TAU32_CALLBACK_TYPE __cdecl
46#	endif
47#endif
48
49#ifndef TAU32_CALL_TYPE
50#	if defined(__WINDOWS__) || defined(_MSC_VER) || defined(WIN32) || defined(WIN64)
51#		define TAU32_CALL_TYPE __stdcall
52#	else
53#		define TAU32_CALL_TYPE __cdecl
54#	endif
55#endif
56
57#ifndef PCI_PHYSICAL_ADDRESS
58#	ifdef PCI64
59#		error PCI64 currently is not supported
60#	else
61#		define PCI_PHYSICAL_ADDRESS  unsigned __int32
62#	endif
63#endif
64
65#define TAU32_PCI_VENDOR_ID	0x110A
66#define TAU32_PCI_DEVICE_ID	0x2101
67#define TAU32_PCI_IO_BAR1_SIZE	0x0100
68#define TAU32_PCI_RESET_ADDRESS	0x004C
69#define TAU32_PCI_RESET_ON	0xF00F0000ul /*0xFFFFFFFFul */
70#define TAU32_PCI_RESET_OFF	0
71#define TAU32_PCI_RESET_LENGTH	4
72
73/* TAU32_MODELS */
74#define TAU32_ERROR	(-1)
75#define TAU32_UNKNOWN	0
76#define TAU32_BASE	1
77#define TAU32_LITE	2
78#define TAU32_ADPCM	3
79
80/* TAU32_INIT_ERRORS */
81#define TAU32_IE_OK		0x0000u
82#define TAU32_IE_FIRMWARE	0x0001u
83#define TAU32_IE_MODEL		0x0002u
84#define TAU32_IE_E1_A		0x0004u
85#define TAU32_IE_E1_B		0x0008u
86#define TAU32_IE_INTERNAL_BUS	0x0010u
87#define TAU32_IE_HDLC		0x0020u
88#define TAU32_IE_ADPCM		0x0040u
89#define TAU32_IE_CLOCK		0x0080u
90#define TAU32_IE_DXC		0x0100u
91#define TAU32_IE_XIRQ		0x0200u
92
93/* TAU32_INTERFACES */
94#define TAU32_E1_ALL			(-1)
95#define TAU32_E1_A			  0
96#define TAU32_E1_B			  1
97
98/* TAU32_LIMITS */
99#define TAU32_CHANNELS		  32
100#define TAU32_TIMESLOTS		 32
101#define TAU32_MAX_INTERFACES	2
102#define TAU32_MTU			   8184
103#define TAU32_FLAT_MTU		  4096
104#define TAU32_IO_QUEUE		  4
105#define TAU32_IO_QUEUE_BYTES	128
106#define TAU32_MAX_REQUESTS	  512
107#define TAU32_MAX_BUFFERS	   256
108#define TAU32_FIFO_SIZE		 256
109
110/* TAU32_REQUEST_COMMANDS */
111#define TAU32_Tx_Start			  0x0001u
112#define TAU32_Tx_Stop			   0x0002u
113/*#define TAU32_Tx_Flush			  0x0004u // yet not implemented */
114#define TAU32_Tx_Data			   0x0008u
115#define TAU32_Rx_Start			  0x0010u
116#define TAU32_Rx_Stop			   0x0020u
117#define TAU32_Rx_Data			   0x0080u
118#define TAU32_Configure_Channel	 0x0100u
119#define TAU32_Timeslots_Complete	0x0200u
120#define TAU32_Timeslots_Map		 0x0400u
121#define TAU32_Timeslots_Channel	 0x0800u
122#define TAU32_ConfigureDigitalLoop  0x1000u
123#define TAU32_Configure_Commit	  0x2000u
124#define TAU32_Tx_FrameEnd		   0x4000u
125#define TAU32_Tx_NoCrc			  0x8000u
126#define TAU32_Configure_E1		  0x0040u
127
128/* TAU32_ERRORS */
129#define TAU32_NOERROR			   0x000000ul
130#define TAU32_SUCCESSFUL			0x000000ul
131#define TAU32_ERROR_ALLOCATION	  0x000001ul	/* not enough tx/rx descriptors */
132#define TAU32_ERROR_BUS			 0x000002ul	/* PEB could not access to host memory by PCI bus for load/store information */
133#define TAU32_ERROR_FAIL			0x000004ul	/* PEB action request failed */
134#define TAU32_ERROR_TIMEOUT		 0x000008ul	/* PEB action request timeout */
135#define TAU32_ERROR_CANCELLED	   0x000010ul
136#define TAU32_ERROR_TX_UNDERFLOW	0x000020ul	/* transmission underflow */
137#define TAU32_ERROR_TX_PROTOCOL	 0x000040ul	/* reserved */
138#define TAU32_ERROR_RX_OVERFLOW	 0x000080ul
139#define TAU32_ERROR_RX_ABORT		0x000100ul
140#define TAU32_ERROR_RX_CRC		  0x000200ul
141#define TAU32_ERROR_RX_SHORT		0x000400ul
142#define TAU32_ERROR_RX_SYNC		 0x000800ul
143#define TAU32_ERROR_RX_FRAME		0x001000ul
144#define TAU32_ERROR_RX_LONG		 0x002000ul
145#define TAU32_ERROR_RX_SPLIT		0x004000ul	/* frame has splitted between two requests due rx-gap allocation */
146#define TAU32_ERROR_RX_UNFIT		0x008000ul	/* frame can't be fit into request buffer */
147#define TAU32_ERROR_TSP			 0x010000ul
148#define TAU32_ERROR_RSP			 0x020000ul
149#define TAU32_ERROR_INT_OVER_TX	 0x040000ul
150#define TAU32_ERROR_INT_OVER_RX	 0x080000ul
151#define TAU32_ERROR_INT_STORM	   0x100000ul
152#define TAU32_ERROR_INT_E1LOST	  0x200000ul
153#define TAU32_WARN_TX_JUMP	0x400000ul
154#define TAU32_WARN_RX_JUMP	0x800000ul
155
156/* TAU32_CHANNEL_MODES */
157#define TAU32_HDLC			  0
158#define TAU32_V110_x30		  1
159#define TAU32_TMA			   2
160#define TAU32_TMB			   3
161#define TAU32_TMR			   4
162
163/* TAU32_SYNC_MODES */
164#define TAU32_SYNC_INTERNAL	 0
165#define TAU32_SYNC_RCV_A		1
166#define TAU32_SYNC_RCV_B		2
167#define TAU32_SYNC_LYGEN		3
168#define TAU32_LYGEN_RESET       0
169
170/* TAU32_CHANNEL_CONFIG_BITS */
171#define TAU32_channel_mode_mask	 0x0000000Ful
172#define TAU32_data_inversion		0x00000010ul
173#define TAU32_fr_rx_splitcheck	  0x00000020ul
174#define TAU32_fr_rx_fitcheck		0x00000040ul
175#define TAU32_fr_tx_auto			0x00000080ul
176#define TAU32_hdlc_crc32			0x00000100ul
177#define TAU32_hdlc_adjustment	   0x00000200ul
178#define TAU32_hdlc_interframe_fill  0x00000400ul
179#define TAU32_hdlc_nocrc			0x00000800ul
180#define TAU32_tma_flag_filtering	0x00001000ul
181#define TAU32_tma_nopack			0x00002000ul
182#define TAU32_tma_flags_mask		0x00FF0000ul
183#define TAU32_tma_flags_shift	   16u
184#define TAU32_v110_x30_tr_mask	  0x03000000ul
185#define TAU32_v110_x30_tr_shift	 24u
186
187typedef struct tag_TAU32_TimeslotAssignment
188{
189	unsigned __int8 TxChannel, RxChannel;
190	unsigned __int8 TxFillmask, RxFillmask;
191} TAU32_TimeslotAssignment;
192
193#define TAU32_CROSS_WIDTH   96
194#define TAU32_CROSS_OFF	 127
195typedef unsigned __int8 TAU32_CrossMatrix[TAU32_CROSS_WIDTH];
196
197/* TAU32_INTERFACE_CONFIG_BITS */
198#define TAU32_LineOff			(0ul << 0)
199#define TAU32_LineLoopInt		(1ul << 0)
200#define TAU32_LineLoopExt		(2ul << 0)
201#define TAU32_LineNormal		(3ul << 0)
202#define TAU32_LineAIS			(4ul << 0)
203#define TAU32_line_mode_mask		0x0000000Ful
204#define TAU32_unframed_64		(0ul << 4)
205#define TAU32_unframed_128		(1ul << 4)
206#define TAU32_unframed_256		(2ul << 4)
207#define TAU32_unframed_512		(3ul << 4)
208#define TAU32_unframed_1024		(4ul << 4)
209#define TAU32_unframed_2048		(5ul << 4)
210#define TAU32_unframed			TAU32_unframed_2048
211#define TAU32_framed_no_cas		(6ul << 4)
212#define TAU32_framed_cas_set		(7ul << 4)
213#define TAU32_framed_cas_pass		(8ul << 4)
214#define TAU32_framed_cas_cross		(9ul << 4)
215#define TAU32_framing_mode_mask		0x000000F0ul
216#define TAU32_monitor			0x00000100ul
217#define TAU32_higain			0x00000200ul
218#define TAU32_sa_bypass			0x00000400ul
219#define TAU32_si_bypass			0x00000800ul
220#define TAU32_cas_fe			0x00001000ul
221#define TAU32_ais_on_loss		0x00002000ul
222#define TAU32_cas_all_ones		0x00004000ul
223#define TAU32_cas_io			0x00008000ul
224#define TAU32_fas_io			0x00010000ul
225#define TAU32_fas8_io			0x00020000ul
226#define TAU32_auto_ais			0x00040000ul
227#define TAU32_not_auto_ra		0x00080000ul
228#define TAU32_not_auto_dmra		0x00100000ul
229#define TAU32_ra			0x00200000ul
230#define TAU32_dmra			0x00400000ul
231#define TAU32_scrambler			0x00800000ul
232#define TAU32_tx_ami			0x01000000ul
233#define TAU32_rx_ami			0x02000000ul
234#define TAU32_ja_tx			0x04000000ul
235#define TAU32_crc4_mf_tx		0x08000000ul
236#define TAU32_crc4_mf_rx		0x10000000ul
237#define TAU32_crc4_mf			(TAU32_crc4_mf_rx | TAU32_crc4_mf_tx)
238
239/* TAU32_SA_CROSS_VALUES */
240#define TAU32_SaDisable	 0u
241#define TAU32_SaSystem	  1u
242#define TAU32_SaIntA		2u
243#define TAU32_SaIntB		3u
244#define TAU32_SaAllZeros	4u
245
246typedef struct tag_TAU32_SaCross
247{
248	unsigned __int8 InterfaceA, InterfaceB;
249	unsigned __int8 SystemEnableTs0;
250} TAU32_SaCross;
251
252/* TAU32_INTERFACE_STATUS_BITS */
253#define TAU32_RCL	   0x0001u /* receive carrier lost */
254#define TAU32_RLOS	  0x0002u /* receive sync lost */
255#define TAU32_RUA1	  0x0004u /* received unframed all ones */
256#define TAU32_RRA	   0x0008u /* receive remote alarm */
257#define TAU32_RSA1	  0x0010u /* receive signaling all ones */
258#define TAU32_RSA0	  0x0020u /* receive signaling all zeros */
259#define TAU32_RDMA	  0x0040u /* receive distant multiframe alarm */
260#define TAU32_LOTC	  0x0080u /* transmit clock lost */
261#define TAU32_RSLIP	 0x0100u /* receiver slip event */
262#define TAU32_TSLIP	 0x0200u /* transmitter slip event */
263#define TAU32_RFAS	  0x0400u /* receiver lost and searching for FAS */
264#define TAU32_RCRC4	 0x0800u /* receiver lost and searching for CRC4 MF */
265#define TAU32_RCAS	  0x1000u /* received lost and searching for CAS MF */
266#define TAU32_JITTER	0x2000u /* jitter attenuator limit */
267#define TAU32_RCRC4LONG 0x4000u /* G.706 400ms limit of searching for CRC4 */
268#define TAU32_E1OFF	 0x8000u /* E1 line power-off */
269#define TAU32_LOS	   TAU32_RLOS
270#define TAU32_AIS	   TAU32_RUA1
271#define TAU32_LOF	   TAU32_RFAS
272#define TAU32_AIS16	 TAU32_RSA1
273#define TAU32_LOFM	  TAU32_RCAS
274#define TAU32_FLOFM	 TAU32_RDMA
275
276/* TAU32_STATUS */
277#define TAU32_FRLOFM		0x0001u /* CAS framer searching for CAS MF */
278#define TAU32_CMWAITING		0x0002u /* Connection memory swap waiting */
279#define TAU32_CMPENDING		0x0004u /* Connection memory swap pending */
280#define TAU32_LED		0x0008u /* Led status (on/off) */
281
282typedef struct tag_TAU32_Controller TAU32_Controller;
283typedef struct tag_TAU32_UserRequest TAU32_UserRequest;
284typedef struct tag_TAU32_UserContext TAU32_UserContext;
285typedef union tag_TAU32_tsc TAU32_tsc;
286typedef struct tag_TAU32_FlatIoContext TAU32_FlatIoContext;
287typedef void(TAU32_CALLBACK_TYPE *TAU32_RequestCallback)(TAU32_UserContext *pContext, TAU32_UserRequest *pUserRequest);
288typedef void(TAU32_CALLBACK_TYPE *TAU32_NotifyCallback)(TAU32_UserContext *pContext, int Item, unsigned NotifyBits);
289typedef void(TAU32_CALLBACK_TYPE *TAU32_FifoTrigger)(TAU32_UserContext *pContext, int Interface, unsigned FifoId, unsigned Level);
290typedef void(TAU32_CALLBACK_TYPE *TAU32_FlatIoCallback)(TAU32_UserContext *pContext, TAU32_FlatIoContext *pFlatIoContext);
291
292union tag_TAU32_tsc
293{
294		unsigned __int32 osc, sync;
295};
296
297struct tag_TAU32_FlatIoContext
298{
299	void *pInternal;
300	PCI_PHYSICAL_ADDRESS PhysicalBufferAddress;
301	unsigned Channel, ItemsCount, EachItemBufferSize;
302	unsigned Received, ActualOffset, Errors;
303#if defined(_NTDDK_)
304	KDPC CallbackDpc;
305	void SetupCallback(PKDEFERRED_ROUTINE DeferredCallbackRoutine, void* pContext)
306	{
307		CallbackDpc.DeferredRoutine = DeferredCallbackRoutine;
308		CallbackDpc.DeferredContext = pContext;
309	}
310	void SetupCallback(TAU32_FlatIoCallback pCallback)
311	{
312		CallbackDpc.DeferredRoutine = (PKDEFERRED_ROUTINE) pCallback;
313		CallbackDpc.DeferredContext = 0;
314	}
315#else
316	TAU32_FlatIoCallback pCallback;
317#endif
318};
319
320/* TAU32_FIFO_ID */
321#define TAU32_FifoId_CasRx 0u
322#define TAU32_FifoId_CasTx 1u
323#define TAU32_FifoId_FasRx 2u
324#define TAU32_FifoId_FasTx 3u
325#define TAU32_FifoId_Max   4u
326
327typedef struct tag_TAU32_E1_State
328{
329	unsigned __int32 TickCounter;
330	unsigned __int32 RxViolations;
331	unsigned __int32 Crc4Errors;
332	unsigned __int32 FarEndBlockErrors;
333	unsigned __int32 FasErrors;
334	unsigned __int32 TransmitSlips;
335	unsigned __int32 ReceiveSlips;
336	unsigned __int32 Status;
337	unsigned __int32 FifoSlip[TAU32_FifoId_Max];
338} TAU32_E1_State;
339
340struct tag_TAU32_UserContext
341{
342	/* fields provided by user for for TAU32_Initiaize() */
343	TAU32_Controller *pControllerObject;
344	PCI_PHYSICAL_ADDRESS ControllerObjectPhysicalAddress;
345	void *PciBar1VirtualAddress;
346	TAU32_NotifyCallback pErrorNotifyCallback;
347	TAU32_NotifyCallback pStatusNotifyCallback;
348#if defined(_NTDDK_)
349	PKINTERRUPT InterruptObject;
350#endif
351	/* TODO: remove from release */
352	#define TAU32_CUSTOM_FIRMWARE
353	#ifdef TAU32_CUSTOM_FIRMWARE
354		void *pCustomFirmware;
355		unsigned CustomFirmwareSize;
356	#endif
357	/* fields filled by TAU32_Initiaize() */
358	int Model;
359	int Interfaces;
360	unsigned InitErrors;
361	unsigned __int32 DeadBits;
362
363	/* fields managed by DDK */
364	unsigned AdapterStatus;
365	unsigned CasIoLofCount;
366	unsigned E1IntLostCount;
367	unsigned CableTypeJumpers;
368	TAU32_E1_State InterfacesInfo[TAU32_MAX_INTERFACES];
369
370	/* fields which are't used by DDK, but nice for user */
371#ifdef TAU32_UserContext_Add
372	TAU32_UserContext_Add
373#endif
374};
375
376struct tag_TAU32_UserRequest
377{
378	/* required fields */
379	void *pInternal;									/* internal */
380	unsigned Command;								   /* in */
381#if defined(_NTDDK_)
382	KDPC CallbackDpc;
383	void SetupCallback(PKDEFERRED_ROUTINE DeferredCallbackRoutine, void* pContext)
384	{
385		CallbackDpc.DeferredRoutine = DeferredCallbackRoutine;
386		CallbackDpc.DeferredContext = pContext;
387	}
388	void SetupCallback(TAU32_RequestCallback pCallback)
389	{
390		CallbackDpc.DeferredRoutine = (PKDEFERRED_ROUTINE) pCallback;
391		CallbackDpc.DeferredContext = 0;
392	}
393#else
394	TAU32_RequestCallback pCallback;					/* in */
395#endif
396	unsigned __int32 ErrorCode;						 /* out */
397
398	union
399	{
400		unsigned ChannelNumber;						 /* just common field */
401
402		struct
403		{
404			unsigned Channel;						   /* in */
405			unsigned __int32 Config;					/* in */
406			unsigned __int32 AssignedTsMask;			/* build channel from timeslots which is selected by mask */
407		} ChannelConfig;
408
409		struct
410		{
411			int Interface;
412			unsigned __int32 Config;					/* in */
413			unsigned __int32 UnframedTsMask;
414		} InterfaceConfig;
415
416		struct
417		{
418			unsigned Channel;						   /* in */
419			PCI_PHYSICAL_ADDRESS PhysicalDataAddress;   /* in */
420			unsigned DataLength;						/* in */
421			unsigned Transmitted;					   /* out */
422		} Tx;
423
424		struct
425		{
426			unsigned Channel;						   /* in */
427			PCI_PHYSICAL_ADDRESS PhysicalDataAddress;   /* in */
428			unsigned BufferLength;					  /* in */
429			unsigned Received;						  /* out */
430			BOOLEAN FrameEnd;						   /* out */
431		} Rx;
432
433		BOOLEAN DigitalLoop;							/* in, loop by PEB */
434
435		union
436		{
437			TAU32_TimeslotAssignment Complete[TAU32_TIMESLOTS];
438			unsigned __int32 Map[TAU32_CHANNELS];
439		} TimeslotsAssignment;
440	} Io;
441
442	/* fields which are't used by DDK, but nice for user */
443#ifdef TAU32_UserRequest_Add
444	TAU32_UserRequest_Add
445#endif
446};
447
448#define TAU32_IS_REQUEST_RUNNING(pUserRequest) ((pUserRequest)->pInternal != NULL)
449#define TAU32_IS_REQUEST_NOT_RUNNING(pUserRequest) ((pUserRequest)->pInternal == NULL)
450
451#ifndef TAU32_DDK_DLL
452#	if defined(_NTDDK_)
453#		ifdef TAU32_DDK_IMP
454#			define TAU32_DDK_DLL __declspec(dllexport)
455#		else
456#			define TAU32_DDK_DLL __declspec(dllimport)
457#		endif
458#	else
459#		define TAU32_DDK_DLL
460#	endif
461#endif
462
463#ifdef __cplusplus
464extern "C"
465{
466#endif
467    void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_BeforeReset(TAU32_UserContext *pUserContext);
468	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_Initialize(TAU32_UserContext *pUserContext, BOOLEAN CronyxDiag);
469	void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_DestructiveHalt(TAU32_Controller *pControllerObject, BOOLEAN CancelRequests);
470	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_IsInterruptPending(TAU32_Controller *pControllerObject);
471	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_HandleInterrupt(TAU32_Controller *pControllerObject);
472	extern unsigned const TAU32_ControllerObjectSize;
473
474	/* LY: ��� ������� ����, ����� �������������� ���������� �� callback-�� */
475	void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_EnableInterrupts(TAU32_Controller *pControllerObject);
476	void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_DisableInterrupts(TAU32_Controller *pControllerObject);
477	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SubmitRequest(TAU32_Controller *pControllerObject, TAU32_UserRequest *pRequest);
478	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_CancelRequest(TAU32_Controller *pControllerObject, TAU32_UserRequest *pRequest, BOOLEAN BreakIfRunning);
479	void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_LedBlink(TAU32_Controller *pControllerObject);
480	void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_LedSet(TAU32_Controller *pControllerObject, BOOLEAN On);
481	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetCasIo(TAU32_Controller *pControllerObject, BOOLEAN Enabled);
482    unsigned __int64 TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_ProbeGeneratorFrequency(unsigned __int64 Frequency);
483    unsigned __int64 TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetGeneratorFrequency(TAU32_Controller *pControllerObject, unsigned __int64 Frequency);
484	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetSyncMode(TAU32_Controller *pControllerObject, unsigned Mode);
485	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetCrossMatrix(TAU32_Controller *pControllerObject, unsigned __int8 *pCrossMatrix, unsigned __int32 ReverseMask);
486	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetIdleCodes(TAU32_Controller *pControllerObject, unsigned __int8 *pIdleCodes);
487	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_UpdateIdleCodes(TAU32_Controller *pControllerObject, int Interface, unsigned __int32 TimeslotMask, unsigned __int8 IdleCode);
488	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetSaCross(TAU32_Controller *pControllerObject, TAU32_SaCross SaCross);
489	int TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_FifoPutCasAppend(TAU32_Controller *pControllerObject, int Interface, unsigned __int8 *pBuffer, unsigned Length);
490	int TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_FifoPutCasAhead(TAU32_Controller *pControllerObject, int Interface, unsigned __int8 *pBuffer, unsigned Length);
491	int TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_FifoGetCas(TAU32_Controller *pControllerObject, int Interface, unsigned __int8 *pBuffer, unsigned Length);
492	int TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_FifoPutFasAppend(TAU32_Controller *pControllerObject, int Interface, unsigned __int8 *pBuffer, unsigned Length);
493	int TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_FifoPutFasAhead(TAU32_Controller *pControllerObject, int Interface, unsigned __int8 *pBuffer, unsigned Length);
494	int TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_FifoGetFas(TAU32_Controller *pControllerObject, int Interface, unsigned __int8 *pBuffer, unsigned Length);
495	BOOLEAN TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_SetFifoTrigger(TAU32_Controller *pControllerObject, int Interface, unsigned FifoId, unsigned Level, TAU32_FifoTrigger Trigger);
496	void TAU32_DDK_DLL TAU32_CALL_TYPE TAU32_ReadTsc(TAU32_Controller *pControllerObject, TAU32_tsc *pResult);
497
498	/* for Cronyx Engineering use only !!! */
499    #define TAU32_CRONYX_P      0
500    #define TAU32_CRONYX_PS     1
501    #define TAU32_CRONYX_PA     2
502    #define TAU32_CRONYX_PB     3
503    #define TAU32_CRONYX_I      4
504    #define TAU32_CRONYX_O      5
505    #define TAU32_CRONYX_U      6
506    #define TAU32_CRONYX_R      7
507    #define TAU32_CRONYX_W      8
508    #define TAU32_CRONYX_RW     9
509    #define TAU32_CRONYX_WR     10
510    #define TAU32_CRONYX_S      11
511    #define TAU32_CRONYX_G      12
512	unsigned __int32 TAU32_CALL_TYPE TAU32_Diag(TAU32_Controller *pControllerObject, unsigned Operation, unsigned __int32 Data);
513
514#ifdef __cplusplus
515}
516#endif
517