summaryrefslogtreecommitdiffstats
path: root/lib/farsync/windows/smcuser.h
blob: 063c775cf29c060f3ba6f788523936979fabe671 (plain)
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