1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
|
/*******************************************************************************
*
* Program : FARSYNC
*
* File : smcuser.h
*
* Description : This common header file defines constants used throughout FarSync e.g. in
*
* 1) onboard software
* 2) PC driver (farsynct)
* 3) user-mode config apps
* 4) higher-level drivers (e.g. fswan)
*
* Modifications
*
* Version 2.0.0 18Jan01 WEB Created
* Version 2.2.0 18Jul01 WEB Certification candidate
* 22Oct01 MJD Added Transparent Mode Support - moved number and
* size of buffer definitions her from smc.h.
* 19Nov02 MJD Added X.21 Dual clock interface mode X21D - only
* for T1U/T2U/T4U.
* 28Nov02 MJD Added NOCABLE interface mode - only for T1U/T2U/
* T4U/T4P, used only by CDE when stopping a port.
* Version 3.0.0 08Oct03 MJD Added TE1 parameter constants
* Version 3.0.1 10Nov03 MJD Added tx/rxBufferMode constants for TE1.
* Version 3.0.2 03Nov04 MJD Added DSL #define's
* Version 3.0.3 24Feb05 WEB Add FS_CLOCK_SOURCE_xxx and FS_CT_BUS_xxx values
* Version 4.1.0 15Jun05 WEB Update TE1 typedefs
* Version 4.1.1 24Jun05 WEB Add T4E MkII defs
* Version 4.1.2 30Jun05 MJD Add FS_CT_BUS_FEED_FROM_OSCILLATOR define.
* Only define FS_CLOCK_SOURCE_PORT_A/B/C/D when
* T4EMKI defined (not available on T4EMKII).
* Version 4.1.3 07Jul05 MJD Add FS_CONFIG_IN_USE_XXX and FS_INDICATION_CLOCK_XXX
* values for T4E MkII.
* Version 4.1.4 08Jul05 MJD Added define for ANNEX_TYPE_AB (SHDSL)
* Version 4.1.5 14Jul05 WEB Rationalise clock reference defines
* Version 4.1.6 15Jul05 MJD Added FS_CCS_MASK_XXX defines
* Version 4.1.7 02Aug05 MJD Added FS_INDICATION_CLOCK_SWITCH_TO_PRIMARY define
*******************************************************************************/
#ifndef SMCUSER_H
#define SMCUSER_H
#ifndef UINT8
#define UINT8 unsigned char
#define INT8 char
#define INT32 long
#define UINT16 unsigned short
#define UINT32 unsigned long
#endif
#define MAX_PORTS 4 /* maximum ports on T4P - fixed don't change*/
/* Interface Types */
#define AUTO 0
#define V24 1
#define X21 2
#define V35 3
#define X21D 4
#define NOCABLE 5
#define RS530_449 6
/* Clock Sources */
#define INTCLK 1
#define EXTCLK 0
#define FS_CLOCK_REFERENCE_OSCILLATOR 0
#define FS_CLOCK_REFERENCE_PORT_A 1
#define FS_CLOCK_REFERENCE_PORT_B 2
#define FS_CLOCK_REFERENCE_PORT_C 3
#define FS_CLOCK_REFERENCE_PORT_D 4
#define FS_CLOCK_REFERENCE_CTBUS 5 /* note: this value does not differentiate between CTA or CTB */
#define FS_CLOCK_REFERENCE_CT_A 6
#define FS_CLOCK_REFERENCE_CT_B 7
#define FS_CT_BUS_MODE_SLAVE 0 /* FarSync card will act as SLAVE to the CT_BUS */
#define FS_CT_BUS_MODE_MASTER_A 1 /* FarSync card will act as MASTER to the CT_BUS_A */
#define FS_CT_BUS_MODE_MASTER_B 2 /* FarSync card will act as MASTER to the CT_BUS_B */
#define FS_CT_BUS_MODE_DEFAULT FS_CT_BUS_MODE_SLAVE
#define FS_CONFIG_IN_USE_PRIMARY 0 /* Primary clock reference is in use */
#define FS_CONFIG_IN_USE_BACKUP 1 /* Backup clock reference is in use */
#define FS_CONFIG_IN_USE_OSCILLATOR 2 /* Local oscillator clock reference is in use */
#define FS_CONFIG_IN_USE_DEFAULT FS_CONFIG_IN_USE_PRIMARY
// Indications to be signalled via the cardNotifications FIFO
#define FS_INDICATION_CLOCK_RATE_CHANGED 0x0080 /* 2 LSB's denote port A, B, C or D */
#define FS_INDICATION_CLOCK_OUT_OF_TOLERANCE1 0x0084
#define FS_INDICATION_CLOCK_IN_TOLERANCE1 0x0088
#define FS_INDICATION_CLOCK_SWITCH_TO_BACKUP 0x008c
#define FS_INDICATION_CLOCK_OUT_OF_TOLERANCE2 0x0090
#define FS_INDICATION_CLOCK_IN_TOLERANCE2 0x0094
#define FS_INDICATION_CLOCK_SWITCH_TO_OSC 0x0098
#define FS_INDICATION_CLOCK_SWITCH_TO_CTA 0x009c
#define FS_INDICATION_CLOCK_SWITCH_TO_CTB 0x00a0
#define FS_INDICATION_CLOCK_SWITCH_TO_PRIMARY 0x00a4
// Bit masks for isolating fields in uCurrentStatusSummary
#define FS_CSS_MASK_SLAVE_MASTER 0x0100 /* 0 = Slave, 1 = Master */
#define FS_CSS_MASK_CTA_CTB 0x0080 /* 0 = A, 1 = B */
#define FS_CSS_MASK_MASTER_SOURCE 0x0070 /* 000=A, 001=B, 010=C, 011=D, 100=LO */
#define FS_CSS_MASK_PORT_A_SOURCE 0x0008 /* 0 = CT, 1 = LO */
#define FS_CSS_MASK_PORT_B_SOURCE 0x0004 /* 0 = CT, 1 = LO */
#define FS_CSS_MASK_PORT_C_SOURCE 0x0002 /* 0 = CT, 1 = LO */
#define FS_CSS_MASK_PORT_D_SOURCE 0x0001 /* 0 = CT, 1 = LO */
/* Tx/Rx Start Parameters */
#define START_TX 1
#define START_RX 2
#define START_TX_AND_RX (START_TX | START_RX)
#define START_DEFAULT START_TX_AND_RX
// constants for t1/e1 service unit config
// =======================================
//
// dataRate
// rate is in bps: 8k - 1536/2048k (t1/e1), though n*64k is more usual
// e1: 0 - 1984k => framed (fractional), 2048k => unframed
// for e1 framed, bandwidth is allocated from the ninth bit of the frame
// sequentially
// for e1 unframed all 256 bits in the frame are used for data
// t1: 0 - 1536k => framed (fractional), no unframed mode in t1.
//
#define DATARATE_DEFAULT 64000L
// Clocking
//
#define CLOCKING_SLAVE 0
#define CLOCKING_DEFAULT CLOCKING_SLAVE
#define CLOCKING_MASTER 1
// Framing
//
#define FRAMING_E1 0
#define FRAMING_DEFAULT FRAMING_E1
#define FRAMING_J1 1
#define FRAMING_T1 2
// Structure
//
#define STRUCTURE_UNFRAMED 0
#define STRUCTURE_E1_DOUBLE 1
#define STRUCTURE_E1_CRC4 2
#define STRUCTURE_E1_DEFAULT STRUCTURE_E1_CRC4
#define STRUCTURE_DEFAULT STRUCTURE_E1_CRC4
#define STRUCTURE_E1_CRC4M 3
#define STRUCTURE_T1_4 4
#define STRUCTURE_T1_12 5
#define STRUCTURE_T1_24 6
#define STRUCTURE_T1_DEFAULT STRUCTURE_T1_24
#define STRUCTURE_T1_72 7
// Interface
// RJ48C is available for e1 and t1, BNC is only available for e1
//
#define INTERFACE_RJ48C 0
#define INTERFACE_DEFAULT INTERFACE_RJ48C
#define INTERFACE_BNC 1
// Coding
// hdb3 is the normal coding scheme for e1
// b8zs is the normal coding scheme for t1, though ami is sometimes used
//
#define CODING_HDB3 0
#define CODING_E1_DEFAULT CODING_HDB3
#define CODING_DEFAULT CODING_HDB3
#define CODING_NRZ 1
#define CODING_CMI 2
#define CODING_CMI_HDB3 3
#define CODING_CMI_B8ZS 4
#define CODING_AMI 5
#define CODING_AMI_ZCS 6
#define CODING_B8ZS 7
#define CODING_T1_DEFAULT CODING_B8ZS
// Line Build Out - for long haul t1 > 655ft (200m). Use with EQUALIZER_LONG.
// This parameter is ignored in e1 mode and t1/j1 short haul mode.
//
#define LBO_0dB 0
#define LBO_DEFAULT LBO_0dB
#define LBO_7dB5 1
#define LBO_15dB 2
#define LBO_22dB5 3
// Range - for short haul t1 < 655ft (200m). Use with EQUALIZER_SHORT.
// This parameter is ignored in e1 mode and t1/j1 long haul mode.
//
#define RANGE_0_133_FT 0
#define RANGE_DEFAULT RANGE_0_133_FT
#define RANGE_0_40_M RANGE_0_133_FT
#define RANGE_133_266_FT 1
#define RANGE_40_81_M RANGE_133_266_FT
#define RANGE_266_399_FT 2
#define RANGE_81_122_M RANGE_266_399_FT
#define RANGE_399_533_FT 3
#define RANGE_122_162_M RANGE_399_533_FT
#define RANGE_533_655_FT 4
#define RANGE_162_200_M RANGE_533_655_FT
// Receive Equalizer
// short haul -10dB
// long haul -43dB (E1), -36dB (T1)
// only -36dB can be met with 1.2 silicon, requires equalizer parameter RAM
// changes for 2.1 silicon
//
#define EQUALIZER_SHORT 0
#define EQUALIZER_DEFAULT EQUALIZER_SHORT
#define EQUALIZER_LONG 1
// Loop Mode
// Local Loop transmits normally and loops PCM data on the line side of the
// framers.
// Payload Loop receives normally and loops TS0-TS31 or TS1-31 (with TS0
// regenerated by FALC-56) to line on the PCM side of the framers.
// Remote Loop receives normally and loops line data after clock recovery
// the optional Jitter Attenuation is currently not enabled.
#define LOOP_NONE 0
#define LOOP_DEFAULT LOOP_NONE
#define LOOP_LOCAL 1
#define LOOP_PAYLOAD_EXC_TS0 2
#define LOOP_PAYLOAD_INC_TS0 3
#define LOOP_REMOTE 4
// Buffer Mode
// buffer_none bypasses the elastic buffer
//
#define BUFFER_2_FRAME 0
#define BUFFER_DEFAULT BUFFER_2_FRAME
#define BUFFER_1_FRAME 1
#define BUFFER_96_BIT 2
#define BUFFER_NONE 3
//
// Starting Timeslot (for fractional)
// E1 range 1 to 31, T1/J1 range 0 to 23
// Min/max values enforced by card. Actual speed may also be restricted if
// starting timeslot is too late in the frame.
// Parameter ignored in unchannelized mode
//
#define STARTING_DEFAULT 0
//
// LOS detection threshold
// level 0 allows LOS to be detected with larger signal levels
// level 7 allows LOS to be detected with smaller signal levels
// the recommended default setting is level 2 - which is selected
// by the card if LOS_DEFAULT is configured
//
#define LOS_DEFAULT 0
#define LOS_LEVEL_0 1
#define LOS_LEVEL_1 2
#define LOS_LEVEL_2 3
#define LOS_LEVEL_3 4
#define LOS_LEVEL_4 5
#define LOS_LEVEL_5 6
#define LOS_LEVEL_6 7
#define LOS_LEVEL_7 8
#define LOS_SHORT 0x20
#define LOS_LONG 0x70
//
// Idle code for unused timeslots
//
#define IDLE_HDLC_FLAG 0x7e
#define IDLE_CODE_DEFAULT IDLE_HDLC_FLAG
#define TRANSPARENT_MODE_DEFAULT FALSE
#define ENABLE_IDLE_CODE_DEFAULT FALSE
// constants for dsl service unit config
// =======================================
//
// dataRate (G.SHDSL)
// rate is in bps: 192kbps (3B + 0Z) - 2312kbps (36B + 1Z)
// in 8kbps steps, where B is 64kbps and Z is 8kbps
//
//
// Terminal Type
//
#define TERMINAL_TYPE_REMOTE 0
#define TERMINAL_TYPE_CENTRAL 1
//
// Test Mode
//
// For User Diagnostics:
//
// Analog Transparent Loop - loops from transmit line driver output to
// receive AGC input, bypassing the hybrid.
// Analog Non-Transparent Loop - loops transmit DAC back to receive AGC,
// bypassing transmit line driver and the hybrid.
//
// Others test modes are for Compliance Testing only
//
#define TEST_MODE_NONE 0
#define TEST_MODE_DEFAULT TEST_MODE_NONE
#define TEST_MODE_ALTERNATING_SINGLE_PULSE 1
#define TEST_MODE_ANALOG_TRANSPARENT_LOOP 4
#define TEST_MODE_ANALOG_NON_TRANSPARENT_LOOP 8
#define TEST_MODE_TRANSMIT_SC_SR 9
#define TEST_MODE_TRANSMIT_TC_PAM_SCRONE 10
#define TEST_MODE_LINE_DRIVER_NO_SIGNAL 11
#define TEST_MODE_AGC_TO_LINE_DRIVER_LOOP 12
#define TEST_MODE_LOOP_TDM_TO_LINE 16
#define TEST_MODE_LOOP_PAYLOAD_TO_LINE 17
//
// Annex Type A (US) or B (EU)
//
#define ANNEX_TYPE_B 0
#define ANNEX_TYPE_DEFAULT ANNEX_TYPE_B
#define ANNEX_TYPE_A 1
#define ANNEX_TYPE_AB 2
/* Small Buffers are used only for diagnostics */
#define NUM_SMALL_TX_BUFFER 2
#define NUM_SMALL_RX_BUFFER 8
#define LEN_SMALL_TX_BUFFER 256 /* max size is 8192 */
#define LEN_SMALL_RX_BUFFER 256
/* Large Buffers are used for SDMA data */
// MAX_TX/RX_BUFFER determines, at compile time, the maximum number of
// descriptors (hence buffers) per port for transmitter and receiver. Host can
// use any 2**N number of the descriptors between 1 and MAX_TX/RX_BUFFER, so
// some descriptors may be unused. Number of Buffers * Size of Buffers <=
// TX/RX_BUFFER_SPACE. Fewer buffers mean bigger buffers, more buffers mean
// smaller buffers.
#define MAX_TX_BUFFER 128
#define MAX_RX_BUFFER 128
// MAX_TX/RX_BUFFER_SPACE determines, at compile time, how much buffer space is
// available per port for transmitter and receiver. Buffer space is subdivided
// into 2**N buffers by host driver at runtime.
// Host can allocate 1 - MAX_TX/RX_BUFFER buffers.
// 0x10000 => 64KB for transmit, 64KB for receive; 4 ports => 512KB.
// MAX_TX/RX_BUFFER must be a 2**N multiple (for easy logic anlyser trigger).
#define TX_BUFFER_SPACE 0x10000
#define RX_BUFFER_SPACE 0x10000
/* Rx Descriptor bits */
#define FS_RX_DESC_ERR 0x4000
#define FS_RX_DESC_FRAM 0x2000
#define FS_RX_DESC_OFLO 0x1000
#define FS_RX_DESC_CRC 0x0800
#define FS_RX_DESC_HBUF 0x0400
#define FS_RX_DESC_ENP 0x0100
#define FS_RX_DESC_FRAM_ENP 0x2100
#define FS_RX_DESC_CRC_ENP 0x0900
#define NO_OF_DMA_CHANNELS 2
// The following structures require 2-byte packing.
// This file is used in a number of different environments.
// Windows SDCI applications should therefore include this file implicitly by explicitly
// including fscfg.h which enables the packing directive to be used.
#ifdef SMCUSER_PACKING
#if (SMCUSER_PACKING==1)
#pragma pack(push, 2)
#endif
typedef struct SU_CONFIG
{
UINT32 dataRate; // data rate in bps
UINT8 clocking; // master or slave
UINT8 framing; // E1, T1 or J1
UINT8 structure; // E1: unframed, double frame, CRC4; T1: F4, F12, F24 or F72
UINT8 iface; // RJ48C or BNC
UINT8 coding; // HDB3 or B8ZS + some other less used codes
UINT8 lineBuildOut; // 0, -7.5, -15, -22.5dB for t1 long haul only
UINT8 equalizer; // short or long haul settings
UINT8 transparentMode; // FALSE (hdlc) or TRUE transparent data
UINT8 loopMode; // various local, payload and remote loops for test
UINT8 range; // 0-133, 133-266, 266-399, 399-533, 533-655ft for t1 short haul only
UINT8 txBufferMode; // transmit elastic buffer depth: 0 (bypass), 96 bits, 1 frame or 2 frame
UINT8 rxBufferMode; // receive elastic buffer depth: 0 (bypass), 96 bits, 1 frame or 2 frame
UINT8 startingTimeSlot;// startingTimeSlot: E1 1-31, T1/J1 0-23
UINT8 losThreshold; // LOS Threshold: E1/T1/J1 0-7
UINT8 enableIdleCode; // Enable idle code for unused timeslots: TRUE, FALSE
UINT8 idleCode; // Idle code for unused timeslots: 0x00 - 0xff
UINT8 spare[44]; // adjust to keep structure size 64 bytes
} FS_TE1_CONFIG, *PFS_TE1_CONFIG;
typedef struct SU_STATUS
{
UINT32 receiveBufferDelay; // delay through receive bufffer time slots (0-63)
UINT32 framingErrorCounter; // count of framing errors
UINT32 codeViolationCounter; // count of code violations
UINT32 crcErrorCounter1; // count of CRC errors
INT32 lineAttenuation; // receive line attenuation in dB, -ve => unknown
BOOLEAN portStarted; //
BOOLEAN lossOfSignal; // LOS alarm
BOOLEAN receiveRemoteAlarm; // RRA alarm
BOOLEAN alarmIndicationSignal; // AIS alarm
UINT8 spare[40]; // adjust to keep structure size 64 bytes
} FS_TE1_STATUS, *PFS_TE1_STATUS;
#if (SMCUSER_PACKING==1)
#pragma pack(pop)
#endif
#else
#pragma message("!!! *** SMCUSER_PACKING not defined. Note: Windows SDCI apps should *** !!!")
#pragma message("!!! *** not include smcuser.h directly, use fscfg.h instead *** !!!")
#endif
#endif
|