0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031 #ifndef _ECHO_DSP_
0032 #define _ECHO_DSP_
0033
0034
0035
0036 #if defined(ECHOGALS_FAMILY)
0037
0038 #define NUM_ASIC_TESTS 5
0039 #define READ_DSP_TIMEOUT 1000000L
0040
0041
0042 #elif defined(ECHO24_FAMILY)
0043
0044 #define DSP_56361
0045 #define READ_DSP_TIMEOUT 100000L
0046
0047
0048 #elif defined(ECHO3G_FAMILY)
0049
0050 #define DSP_56361
0051 #define READ_DSP_TIMEOUT 100000L
0052 #define MIN_MTC_1X_RATE 32000
0053
0054
0055 #elif defined(INDIGO_FAMILY)
0056
0057 #define DSP_56361
0058 #define READ_DSP_TIMEOUT 100000L
0059
0060 #else
0061
0062 #error No family is defined
0063
0064 #endif
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074 #define DSP_MAXAUDIOINPUTS 16
0075 #define DSP_MAXAUDIOOUTPUTS 16
0076 #define DSP_MAXPIPES 32
0077
0078
0079
0080
0081
0082
0083
0084
0085 #define CHI32_CONTROL_REG 4
0086 #define CHI32_STATUS_REG 5
0087 #define CHI32_VECTOR_REG 6
0088 #define CHI32_DATA_REG 7
0089
0090
0091
0092
0093
0094
0095
0096
0097 #define CHI32_VECTOR_BUSY 0x00000001
0098 #define CHI32_STATUS_REG_HF3 0x00000008
0099 #define CHI32_STATUS_REG_HF4 0x00000010
0100 #define CHI32_STATUS_REG_HF5 0x00000020
0101 #define CHI32_STATUS_HOST_READ_FULL 0x00000004
0102 #define CHI32_STATUS_HOST_WRITE_EMPTY 0x00000002
0103 #define CHI32_STATUS_IRQ 0x00000040
0104
0105
0106
0107
0108
0109
0110
0111
0112 #define DSP_FNC_SET_COMMPAGE_ADDR 0x02
0113 #define DSP_FNC_LOAD_LAYLA_ASIC 0xa0
0114 #define DSP_FNC_LOAD_GINA24_ASIC 0xa0
0115 #define DSP_FNC_LOAD_MONA_PCI_CARD_ASIC 0xa0
0116 #define DSP_FNC_LOAD_LAYLA24_PCI_CARD_ASIC 0xa0
0117 #define DSP_FNC_LOAD_MONA_EXTERNAL_ASIC 0xa1
0118 #define DSP_FNC_LOAD_LAYLA24_EXTERNAL_ASIC 0xa1
0119 #define DSP_FNC_LOAD_3G_ASIC 0xa0
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129 #define MIDI_IN_STATE_NORMAL 0
0130 #define MIDI_IN_STATE_TS_HIGH 1
0131 #define MIDI_IN_STATE_TS_LOW 2
0132 #define MIDI_IN_STATE_F1_DATA 3
0133 #define MIDI_IN_SKIP_DATA (-1)
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174
0175
0176
0177 #define LAYLA24_MAGIC_NUMBER 677376000
0178 #define LAYLA24_CONTINUOUS_CLOCK 0x000e
0179
0180
0181
0182
0183
0184
0185
0186
0187 #define DSP_VC_RESET 0x80ff
0188
0189 #ifndef DSP_56361
0190
0191 #define DSP_VC_ACK_INT 0x8073
0192 #define DSP_VC_SET_VMIXER_GAIN 0x0000
0193 #define DSP_VC_START_TRANSFER 0x0075
0194 #define DSP_VC_METERS_ON 0x0079
0195 #define DSP_VC_METERS_OFF 0x007b
0196 #define DSP_VC_UPDATE_OUTVOL 0x007d
0197 #define DSP_VC_UPDATE_INGAIN 0x007f
0198 #define DSP_VC_ADD_AUDIO_BUFFER 0x0081
0199 #define DSP_VC_TEST_ASIC 0x00eb
0200 #define DSP_VC_UPDATE_CLOCKS 0x00ef
0201 #define DSP_VC_SET_LAYLA_SAMPLE_RATE 0x00f1
0202 #define DSP_VC_SET_GD_AUDIO_STATE 0x00f1
0203 #define DSP_VC_WRITE_CONTROL_REG 0x00f1
0204 #define DSP_VC_MIDI_WRITE 0x00f5
0205 #define DSP_VC_STOP_TRANSFER 0x00f7
0206 #define DSP_VC_UPDATE_FLAGS 0x00fd
0207 #define DSP_VC_GO_COMATOSE 0x00f9
0208
0209 #else
0210
0211
0212 #define DSP_VC_ACK_INT 0x80F5
0213 #define DSP_VC_SET_VMIXER_GAIN 0x00DB
0214 #define DSP_VC_START_TRANSFER 0x00DD
0215 #define DSP_VC_METERS_ON 0x00EF
0216 #define DSP_VC_METERS_OFF 0x00F1
0217 #define DSP_VC_UPDATE_OUTVOL 0x00E3
0218 #define DSP_VC_UPDATE_INGAIN 0x00E5
0219 #define DSP_VC_ADD_AUDIO_BUFFER 0x00E1
0220 #define DSP_VC_TEST_ASIC 0x00ED
0221 #define DSP_VC_UPDATE_CLOCKS 0x00E9
0222 #define DSP_VC_SET_LAYLA24_FREQUENCY_REG 0x00E9
0223 #define DSP_VC_SET_LAYLA_SAMPLE_RATE 0x00EB
0224 #define DSP_VC_SET_GD_AUDIO_STATE 0x00EB
0225 #define DSP_VC_WRITE_CONTROL_REG 0x00EB
0226 #define DSP_VC_MIDI_WRITE 0x00E7
0227 #define DSP_VC_STOP_TRANSFER 0x00DF
0228 #define DSP_VC_UPDATE_FLAGS 0x00FB
0229 #define DSP_VC_GO_COMATOSE 0x00d9
0230
0231 #endif
0232
0233
0234
0235
0236
0237
0238
0239
0240 #define HANDSHAKE_TIMEOUT 20000
0241 #define VECTOR_BUSY_TIMEOUT 100000
0242 #define MIDI_OUT_DELAY_USEC 2000
0243
0244
0245
0246
0247
0248
0249
0250
0251 #define DSP_FLAG_MIDI_INPUT 0x0001
0252 #define DSP_FLAG_SPDIF_NONAUDIO 0x0002
0253
0254
0255
0256
0257
0258 #define DSP_FLAG_PROFESSIONAL_SPDIF 0x0008
0259
0260
0261
0262
0263
0264
0265
0266
0267 #define GLDM_CLOCK_DETECT_BIT_WORD 0x0002
0268 #define GLDM_CLOCK_DETECT_BIT_SUPER 0x0004
0269 #define GLDM_CLOCK_DETECT_BIT_SPDIF 0x0008
0270 #define GLDM_CLOCK_DETECT_BIT_ESYNC 0x0010
0271
0272
0273
0274
0275
0276
0277
0278
0279 #define GML_CLOCK_DETECT_BIT_WORD96 0x0002
0280 #define GML_CLOCK_DETECT_BIT_WORD48 0x0004
0281 #define GML_CLOCK_DETECT_BIT_SPDIF48 0x0008
0282 #define GML_CLOCK_DETECT_BIT_SPDIF96 0x0010
0283 #define GML_CLOCK_DETECT_BIT_WORD (GML_CLOCK_DETECT_BIT_WORD96 | GML_CLOCK_DETECT_BIT_WORD48)
0284 #define GML_CLOCK_DETECT_BIT_SPDIF (GML_CLOCK_DETECT_BIT_SPDIF48 | GML_CLOCK_DETECT_BIT_SPDIF96)
0285 #define GML_CLOCK_DETECT_BIT_ESYNC 0x0020
0286 #define GML_CLOCK_DETECT_BIT_ADAT 0x0040
0287
0288
0289
0290
0291
0292
0293
0294
0295 #define LAYLA20_CLOCK_INTERNAL 0
0296 #define LAYLA20_CLOCK_SPDIF 1
0297 #define LAYLA20_CLOCK_WORD 2
0298 #define LAYLA20_CLOCK_SUPER 3
0299
0300
0301
0302
0303
0304
0305
0306
0307 #define GD_CLOCK_NOCHANGE 0
0308 #define GD_CLOCK_44 1
0309 #define GD_CLOCK_48 2
0310 #define GD_CLOCK_SPDIFIN 3
0311 #define GD_CLOCK_UNDEF 0xff
0312
0313
0314
0315
0316
0317
0318
0319
0320 #define GD_SPDIF_STATUS_NOCHANGE 0
0321 #define GD_SPDIF_STATUS_44 1
0322 #define GD_SPDIF_STATUS_48 2
0323 #define GD_SPDIF_STATUS_UNDEF 0xff
0324
0325
0326
0327
0328
0329
0330
0331
0332 #define LAYLA20_OUTPUT_CLOCK_SUPER 0
0333 #define LAYLA20_OUTPUT_CLOCK_WORD 1
0334
0335
0336
0337
0338
0339
0340
0341
0342 #define GD24_96000 0x0
0343 #define GD24_48000 0x1
0344 #define GD24_44100 0x2
0345 #define GD24_32000 0x3
0346 #define GD24_22050 0x4
0347 #define GD24_16000 0x5
0348 #define GD24_11025 0x6
0349 #define GD24_8000 0x7
0350 #define GD24_88200 0x8
0351 #define GD24_EXT_SYNC 0x9
0352
0353
0354
0355
0356
0357
0358
0359
0360 #define ASIC_ALREADY_LOADED 0x1
0361 #define ASIC_NOT_LOADED 0x0
0362
0363
0364
0365
0366
0367
0368
0369
0370
0371
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384
0385
0386
0387
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400
0401
0402
0403
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418
0419 #define DSP_AUDIOFORM_MS_8 0
0420 #define DSP_AUDIOFORM_MS_16LE 1
0421 #define DSP_AUDIOFORM_MS_24LE 2
0422 #define DSP_AUDIOFORM_MS_32LE 3
0423 #define DSP_AUDIOFORM_SS_8 4
0424 #define DSP_AUDIOFORM_SS_16LE 5
0425 #define DSP_AUDIOFORM_SS_24LE 6
0426 #define DSP_AUDIOFORM_SS_32LE 7
0427 #define DSP_AUDIOFORM_MM_32LE 8
0428 #define DSP_AUDIOFORM_MM_32BE 9
0429 #define DSP_AUDIOFORM_SS_32BE 10
0430 #define DSP_AUDIOFORM_INVALID 0xFF
0431
0432
0433
0434
0435
0436
0437
0438
0439
0440
0441
0442
0443
0444
0445
0446
0447
0448 #define DSP_AUDIOFORM_SUPER_INTERLEAVE_16LE 0x40
0449 #define DSP_AUDIOFORM_SUPER_INTERLEAVE_24LE 0xc0
0450 #define DSP_AUDIOFORM_SUPER_INTERLEAVE_32LE 0x80
0451
0452
0453
0454
0455
0456
0457
0458
0459 #define GML_CONVERTER_ENABLE 0x0010
0460 #define GML_SPDIF_PRO_MODE 0x0020
0461
0462 #define GML_SPDIF_SAMPLE_RATE0 0x0040
0463 #define GML_SPDIF_SAMPLE_RATE1 0x0080
0464 #define GML_SPDIF_TWO_CHANNEL 0x0100
0465
0466 #define GML_SPDIF_NOT_AUDIO 0x0200
0467 #define GML_SPDIF_COPY_PERMIT 0x0400
0468 #define GML_SPDIF_24_BIT 0x0800
0469 #define GML_ADAT_MODE 0x1000
0470 #define GML_SPDIF_OPTICAL_MODE 0x2000
0471 #define GML_SPDIF_CDROM_MODE 0x3000
0472
0473 #define GML_DOUBLE_SPEED_MODE 0x4000
0474
0475
0476 #define GML_DIGITAL_IN_AUTO_MUTE 0x800000
0477
0478 #define GML_96KHZ (0x0 | GML_DOUBLE_SPEED_MODE)
0479 #define GML_88KHZ (0x1 | GML_DOUBLE_SPEED_MODE)
0480 #define GML_48KHZ 0x2
0481 #define GML_44KHZ 0x3
0482 #define GML_32KHZ 0x4
0483 #define GML_22KHZ 0x5
0484 #define GML_16KHZ 0x6
0485 #define GML_11KHZ 0x7
0486 #define GML_8KHZ 0x8
0487 #define GML_SPDIF_CLOCK 0x9
0488 #define GML_ADAT_CLOCK 0xA
0489 #define GML_WORD_CLOCK 0xB
0490 #define GML_ESYNC_CLOCK 0xC
0491 #define GML_ESYNCx2_CLOCK 0xD
0492
0493 #define GML_CLOCK_CLEAR_MASK 0xffffbff0
0494 #define GML_SPDIF_RATE_CLEAR_MASK (~(GML_SPDIF_SAMPLE_RATE0|GML_SPDIF_SAMPLE_RATE1))
0495 #define GML_DIGITAL_MODE_CLEAR_MASK 0xffffcfff
0496 #define GML_SPDIF_FORMAT_CLEAR_MASK 0xfffff01f
0497
0498
0499
0500
0501
0502
0503
0504
0505 #define MIA_32000 0x0040
0506 #define MIA_44100 0x0042
0507 #define MIA_48000 0x0041
0508 #define MIA_88200 0x0142
0509 #define MIA_96000 0x0141
0510
0511 #define MIA_SPDIF 0x00000044
0512 #define MIA_SPDIF96 0x00000144
0513
0514 #define MIA_MIDI_REV 1
0515
0516
0517
0518
0519
0520
0521
0522
0523 #define E3G_CONVERTER_ENABLE 0x0010
0524 #define E3G_SPDIF_PRO_MODE 0x0020
0525
0526 #define E3G_SPDIF_SAMPLE_RATE0 0x0040
0527 #define E3G_SPDIF_SAMPLE_RATE1 0x0080
0528 #define E3G_SPDIF_TWO_CHANNEL 0x0100
0529
0530 #define E3G_SPDIF_NOT_AUDIO 0x0200
0531 #define E3G_SPDIF_COPY_PERMIT 0x0400
0532 #define E3G_SPDIF_24_BIT 0x0800
0533 #define E3G_DOUBLE_SPEED_MODE 0x4000
0534
0535 #define E3G_PHANTOM_POWER 0x8000
0536
0537
0538 #define E3G_96KHZ (0x0 | E3G_DOUBLE_SPEED_MODE)
0539 #define E3G_88KHZ (0x1 | E3G_DOUBLE_SPEED_MODE)
0540 #define E3G_48KHZ 0x2
0541 #define E3G_44KHZ 0x3
0542 #define E3G_32KHZ 0x4
0543 #define E3G_22KHZ 0x5
0544 #define E3G_16KHZ 0x6
0545 #define E3G_11KHZ 0x7
0546 #define E3G_8KHZ 0x8
0547 #define E3G_SPDIF_CLOCK 0x9
0548 #define E3G_ADAT_CLOCK 0xA
0549 #define E3G_WORD_CLOCK 0xB
0550 #define E3G_CONTINUOUS_CLOCK 0xE
0551
0552 #define E3G_ADAT_MODE 0x1000
0553 #define E3G_SPDIF_OPTICAL_MODE 0x2000
0554
0555 #define E3G_CLOCK_CLEAR_MASK 0xbfffbff0
0556 #define E3G_DIGITAL_MODE_CLEAR_MASK 0xffffcfff
0557 #define E3G_SPDIF_FORMAT_CLEAR_MASK 0xfffff01f
0558
0559
0560 #define E3G_CLOCK_DETECT_BIT_WORD96 0x0001
0561 #define E3G_CLOCK_DETECT_BIT_WORD48 0x0002
0562 #define E3G_CLOCK_DETECT_BIT_SPDIF48 0x0004
0563 #define E3G_CLOCK_DETECT_BIT_ADAT 0x0004
0564 #define E3G_CLOCK_DETECT_BIT_SPDIF96 0x0008
0565 #define E3G_CLOCK_DETECT_BIT_WORD (E3G_CLOCK_DETECT_BIT_WORD96|E3G_CLOCK_DETECT_BIT_WORD48)
0566 #define E3G_CLOCK_DETECT_BIT_SPDIF (E3G_CLOCK_DETECT_BIT_SPDIF48|E3G_CLOCK_DETECT_BIT_SPDIF96)
0567
0568
0569 #define E3G_MAGIC_NUMBER 677376000
0570 #define E3G_FREQ_REG_DEFAULT (E3G_MAGIC_NUMBER / 48000 - 2)
0571 #define E3G_FREQ_REG_MAX 0xffff
0572
0573
0574 #define E3G_GINA3G_BOX_TYPE 0x00
0575 #define E3G_LAYLA3G_BOX_TYPE 0x10
0576 #define E3G_ASIC_NOT_LOADED 0xffff
0577 #define E3G_BOX_TYPE_MASK 0xf0
0578
0579
0580 #define INDIGO_EXPRESS_32000 0x02
0581 #define INDIGO_EXPRESS_44100 0x01
0582 #define INDIGO_EXPRESS_48000 0x00
0583 #define INDIGO_EXPRESS_DOUBLE_SPEED 0x10
0584 #define INDIGO_EXPRESS_QUAD_SPEED 0x04
0585 #define INDIGO_EXPRESS_CLOCK_MASK 0x17
0586
0587
0588
0589
0590
0591
0592
0593
0594
0595 #define GL20_INPUT_GAIN_MAGIC_NUMBER 0xC8
0596
0597
0598
0599
0600
0601
0602
0603
0604 #define DSP_LOAD_ATTEMPT_PERIOD 1000000L
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615 #define MONITOR_ARRAY_SIZE 0x180
0616 #define VMIXER_ARRAY_SIZE 0x40
0617 #define MIDI_OUT_BUFFER_SIZE 32
0618 #define MIDI_IN_BUFFER_SIZE 256
0619 #define MAX_PLAY_TAPS 168
0620 #define MAX_REC_TAPS 192
0621 #define DSP_MIDI_OUT_FIFO_SIZE 64
0622
0623
0624
0625
0626
0627 #define MAX_SGLIST_ENTRIES 512
0628
0629 struct sg_entry {
0630 __le32 addr;
0631 __le32 size;
0632 };
0633
0634
0635
0636
0637
0638
0639
0640
0641
0642
0643
0644
0645 struct comm_page {
0646 __le32 comm_size;
0647 __le32 flags;
0648 __le32 unused;
0649 __le32 sample_rate;
0650 __le32 handshake;
0651 __le32 cmd_start;
0652 __le32 cmd_stop;
0653 __le32 cmd_reset;
0654 __le16 audio_format[DSP_MAXPIPES];
0655 struct sg_entry sglist_addr[DSP_MAXPIPES];
0656
0657 __le32 position[DSP_MAXPIPES];
0658
0659 s8 vu_meter[DSP_MAXPIPES];
0660
0661 s8 peak_meter[DSP_MAXPIPES];
0662
0663 s8 line_out_level[DSP_MAXAUDIOOUTPUTS];
0664
0665 s8 line_in_level[DSP_MAXAUDIOINPUTS];
0666
0667 s8 monitors[MONITOR_ARRAY_SIZE];
0668
0669 __le32 play_coeff[MAX_PLAY_TAPS];
0670
0671 __le32 rec_coeff[MAX_REC_TAPS];
0672
0673 __le16 midi_input[MIDI_IN_BUFFER_SIZE];
0674
0675 u8 gd_clock_state;
0676 u8 gd_spdif_status;
0677 u8 gd_resampler_state;
0678 u8 filler2;
0679 __le32 nominal_level_mask;
0680 __le16 input_clock;
0681 __le16 output_clock;
0682 __le32 status_clocks;
0683 __le32 ext_box_status;
0684 __le32 cmd_add_buffer;
0685 __le32 midi_out_free_count;
0686
0687 __le32 unused2;
0688 __le32 control_register;
0689
0690 __le32 e3g_frq_register;
0691 u8 filler[24];
0692 s8 vmixer[VMIXER_ARRAY_SIZE];
0693
0694 u8 midi_output[MIDI_OUT_BUFFER_SIZE];
0695
0696 };
0697
0698 #endif