Merge branch 'linus' into x86/mm
[pandora-kernel.git] / sound / pci / echoaudio / echoaudio_dsp.c
1 /****************************************************************************
2
3    Copyright Echo Digital Audio Corporation (c) 1998 - 2004
4    All rights reserved
5    www.echoaudio.com
6
7    This file is part of Echo Digital Audio's generic driver library.
8
9    Echo Digital Audio's generic driver library is free software;
10    you can redistribute it and/or modify it under the terms of
11    the GNU General Public License as published by the Free Software
12    Foundation.
13
14    This program is distributed in the hope that it will be useful,
15    but WITHOUT ANY WARRANTY; without even the implied warranty of
16    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17    GNU General Public License for more details.
18
19    You should have received a copy of the GNU General Public License
20    along with this program; if not, write to the Free Software
21    Foundation, Inc., 59 Temple Place - Suite 330, Boston,
22    MA  02111-1307, USA.
23
24    *************************************************************************
25
26  Translation from C++ and adaptation for use in ALSA-Driver
27  were made by Giuliano Pochini <pochini@shiny.it>
28
29 ****************************************************************************/
30
31 #if PAGE_SIZE < 4096
32 #error PAGE_SIZE is < 4k
33 #endif
34
35 static int restore_dsp_rettings(struct echoaudio *chip);
36
37
38 /* Some vector commands involve the DSP reading or writing data to and from the
39 comm page; if you send one of these commands to the DSP, it will complete the
40 command and then write a non-zero value to the Handshake field in the
41 comm page.  This function waits for the handshake to show up. */
42 static int wait_handshake(struct echoaudio *chip)
43 {
44         int i;
45
46         /* Wait up to 20ms for the handshake from the DSP */
47         for (i = 0; i < HANDSHAKE_TIMEOUT; i++) {
48                 /* Look for the handshake value */
49                 barrier();
50                 if (chip->comm_page->handshake) {
51                         return 0;
52                 }
53                 udelay(1);
54         }
55
56         snd_printk(KERN_ERR "wait_handshake(): Timeout waiting for DSP\n");
57         return -EBUSY;
58 }
59
60
61
62 /* Much of the interaction between the DSP and the driver is done via vector
63 commands; send_vector writes a vector command to the DSP.  Typically, this
64 causes the DSP to read or write fields in the comm page.
65 PCI posting is not required thanks to the handshake logic. */
66 static int send_vector(struct echoaudio *chip, u32 command)
67 {
68         int i;
69
70         wmb();  /* Flush all pending writes before sending the command */
71
72         /* Wait up to 100ms for the "vector busy" bit to be off */
73         for (i = 0; i < VECTOR_BUSY_TIMEOUT; i++) {
74                 if (!(get_dsp_register(chip, CHI32_VECTOR_REG) &
75                       CHI32_VECTOR_BUSY)) {
76                         set_dsp_register(chip, CHI32_VECTOR_REG, command);
77                         /*if (i)  DE_ACT(("send_vector time: %d\n", i));*/
78                         return 0;
79                 }
80                 udelay(1);
81         }
82
83         DE_ACT((KERN_ERR "timeout on send_vector\n"));
84         return -EBUSY;
85 }
86
87
88
89 /* write_dsp writes a 32-bit value to the DSP; this is used almost
90 exclusively for loading the DSP. */
91 static int write_dsp(struct echoaudio *chip, u32 data)
92 {
93         u32 status, i;
94
95         for (i = 0; i < 10000000; i++) {        /* timeout = 10s */
96                 status = get_dsp_register(chip, CHI32_STATUS_REG);
97                 if ((status & CHI32_STATUS_HOST_WRITE_EMPTY) != 0) {
98                         set_dsp_register(chip, CHI32_DATA_REG, data);
99                         wmb();                  /* write it immediately */
100                         return 0;
101                 }
102                 udelay(1);
103                 cond_resched();
104         }
105
106         chip->bad_board = TRUE;         /* Set TRUE until DSP re-loaded */
107         DE_ACT((KERN_ERR "write_dsp: Set bad_board to TRUE\n"));
108         return -EIO;
109 }
110
111
112
113 /* read_dsp reads a 32-bit value from the DSP; this is used almost
114 exclusively for loading the DSP and checking the status of the ASIC. */
115 static int read_dsp(struct echoaudio *chip, u32 *data)
116 {
117         u32 status, i;
118
119         for (i = 0; i < READ_DSP_TIMEOUT; i++) {
120                 status = get_dsp_register(chip, CHI32_STATUS_REG);
121                 if ((status & CHI32_STATUS_HOST_READ_FULL) != 0) {
122                         *data = get_dsp_register(chip, CHI32_DATA_REG);
123                         return 0;
124                 }
125                 udelay(1);
126                 cond_resched();
127         }
128
129         chip->bad_board = TRUE;         /* Set TRUE until DSP re-loaded */
130         DE_INIT((KERN_ERR "read_dsp: Set bad_board to TRUE\n"));
131         return -EIO;
132 }
133
134
135
136 /****************************************************************************
137         Firmware loading functions
138  ****************************************************************************/
139
140 /* This function is used to read back the serial number from the DSP;
141 this is triggered by the SET_COMMPAGE_ADDR command.
142 Only some early Echogals products have serial numbers in the ROM;
143 the serial number is not used, but you still need to do this as
144 part of the DSP load process. */
145 static int read_sn(struct echoaudio *chip)
146 {
147         int i;
148         u32 sn[6];
149
150         for (i = 0; i < 5; i++) {
151                 if (read_dsp(chip, &sn[i])) {
152                         snd_printk(KERN_ERR "Failed to read serial number\n");
153                         return -EIO;
154                 }
155         }
156         DE_INIT(("Read serial number %08x %08x %08x %08x %08x\n",
157                  sn[0], sn[1], sn[2], sn[3], sn[4]));
158         return 0;
159 }
160
161
162
163 #ifndef ECHOCARD_HAS_ASIC
164 /* This card has no ASIC, just return ok */
165 static inline int check_asic_status(struct echoaudio *chip)
166 {
167         chip->asic_loaded = TRUE;
168         return 0;
169 }
170
171 #endif /* !ECHOCARD_HAS_ASIC */
172
173
174
175 #ifdef ECHOCARD_HAS_ASIC
176
177 /* Load ASIC code - done after the DSP is loaded */
178 static int load_asic_generic(struct echoaudio *chip, u32 cmd,
179                              const struct firmware *asic)
180 {
181         const struct firmware *fw;
182         int err;
183         u32 i, size;
184         u8 *code;
185
186         if ((err = get_firmware(&fw, asic, chip)) < 0) {
187                 snd_printk(KERN_WARNING "Firmware not found !\n");
188                 return err;
189         }
190
191         code = (u8 *)fw->data;
192         size = fw->size;
193
194         /* Send the "Here comes the ASIC" command */
195         if (write_dsp(chip, cmd) < 0)
196                 goto la_error;
197
198         /* Write length of ASIC file in bytes */
199         if (write_dsp(chip, size) < 0)
200                 goto la_error;
201
202         for (i = 0; i < size; i++) {
203                 if (write_dsp(chip, code[i]) < 0)
204                         goto la_error;
205         }
206
207         DE_INIT(("ASIC loaded\n"));
208         free_firmware(fw);
209         return 0;
210
211 la_error:
212         DE_INIT(("failed on write_dsp\n"));
213         free_firmware(fw);
214         return -EIO;
215 }
216
217 #endif /* ECHOCARD_HAS_ASIC */
218
219
220
221 #ifdef DSP_56361
222
223 /* Install the resident loader for 56361 DSPs;  The resident loader is on
224 the EPROM on the board for 56301 DSP. The resident loader is a tiny little
225 program that is used to load the real DSP code. */
226 static int install_resident_loader(struct echoaudio *chip)
227 {
228         u32 address;
229         int index, words, i;
230         u16 *code;
231         u32 status;
232         const struct firmware *fw;
233
234         /* 56361 cards only!  This check is required by the old 56301-based
235         Mona and Gina24 */
236         if (chip->device_id != DEVICE_ID_56361)
237                 return 0;
238
239         /* Look to see if the resident loader is present.  If the resident
240         loader is already installed, host flag 5 will be on. */
241         status = get_dsp_register(chip, CHI32_STATUS_REG);
242         if (status & CHI32_STATUS_REG_HF5) {
243                 DE_INIT(("Resident loader already installed; status is 0x%x\n",
244                          status));
245                 return 0;
246         }
247
248         if ((i = get_firmware(&fw, &card_fw[FW_361_LOADER], chip)) < 0) {
249                 snd_printk(KERN_WARNING "Firmware not found !\n");
250                 return i;
251         }
252
253         /* The DSP code is an array of 16 bit words.  The array is divided up
254         into sections.  The first word of each section is the size in words,
255         followed by the section type.
256         Since DSP addresses and data are 24 bits wide, they each take up two
257         16 bit words in the array.
258         This is a lot like the other loader loop, but it's not a loop, you
259         don't write the memory type, and you don't write a zero at the end. */
260
261         /* Set DSP format bits for 24 bit mode */
262         set_dsp_register(chip, CHI32_CONTROL_REG,
263                          get_dsp_register(chip, CHI32_CONTROL_REG) | 0x900);
264
265         code = (u16 *)fw->data;
266
267         /* Skip the header section; the first word in the array is the size
268         of the first section, so the first real section of code is pointed
269         to by Code[0]. */
270         index = code[0];
271
272         /* Skip the section size, LRS block type, and DSP memory type */
273         index += 3;
274
275         /* Get the number of DSP words to write */
276         words = code[index++];
277
278         /* Get the DSP address for this block; 24 bits, so build from two words */
279         address = ((u32)code[index] << 16) + code[index + 1];
280         index += 2;
281
282         /* Write the count to the DSP */
283         if (write_dsp(chip, words)) {
284                 DE_INIT(("install_resident_loader: Failed to write word count!\n"));
285                 goto irl_error;
286         }
287         /* Write the DSP address */
288         if (write_dsp(chip, address)) {
289                 DE_INIT(("install_resident_loader: Failed to write DSP address!\n"));
290                 goto irl_error;
291         }
292         /* Write out this block of code to the DSP */
293         for (i = 0; i < words; i++) {
294                 u32 data;
295
296                 data = ((u32)code[index] << 16) + code[index + 1];
297                 if (write_dsp(chip, data)) {
298                         DE_INIT(("install_resident_loader: Failed to write DSP code\n"));
299                         goto irl_error;
300                 }
301                 index += 2;
302         }
303
304         /* Wait for flag 5 to come up */
305         for (i = 0; i < 200; i++) {     /* Timeout is 50us * 200 = 10ms */
306                 udelay(50);
307                 status = get_dsp_register(chip, CHI32_STATUS_REG);
308                 if (status & CHI32_STATUS_REG_HF5)
309                         break;
310         }
311
312         if (i == 200) {
313                 DE_INIT(("Resident loader failed to set HF5\n"));
314                 goto irl_error;
315         }
316
317         DE_INIT(("Resident loader successfully installed\n"));
318         free_firmware(fw);
319         return 0;
320
321 irl_error:
322         free_firmware(fw);
323         return -EIO;
324 }
325
326 #endif /* DSP_56361 */
327
328
329 static int load_dsp(struct echoaudio *chip, u16 *code)
330 {
331         u32 address, data;
332         int index, words, i;
333
334         if (chip->dsp_code == code) {
335                 DE_INIT(("DSP is already loaded!\n"));
336                 return 0;
337         }
338         chip->bad_board = TRUE;         /* Set TRUE until DSP loaded */
339         chip->dsp_code = NULL;          /* Current DSP code not loaded */
340         chip->asic_loaded = FALSE;      /* Loading the DSP code will reset the ASIC */
341
342         DE_INIT(("load_dsp: Set bad_board to TRUE\n"));
343
344         /* If this board requires a resident loader, install it. */
345 #ifdef DSP_56361
346         if ((i = install_resident_loader(chip)) < 0)
347                 return i;
348 #endif
349
350         /* Send software reset command */
351         if (send_vector(chip, DSP_VC_RESET) < 0) {
352                 DE_INIT(("LoadDsp: send_vector DSP_VC_RESET failed, Critical Failure\n"));
353                 return -EIO;
354         }
355         /* Delay 10us */
356         udelay(10);
357
358         /* Wait 10ms for HF3 to indicate that software reset is complete */
359         for (i = 0; i < 1000; i++) {    /* Timeout is 10us * 1000 = 10ms */
360                 if (get_dsp_register(chip, CHI32_STATUS_REG) &
361                     CHI32_STATUS_REG_HF3)
362                         break;
363                 udelay(10);
364         }
365
366         if (i == 1000) {
367                 DE_INIT(("load_dsp: Timeout waiting for CHI32_STATUS_REG_HF3\n"));
368                 return -EIO;
369         }
370
371         /* Set DSP format bits for 24 bit mode now that soft reset is done */
372         set_dsp_register(chip, CHI32_CONTROL_REG,
373                          get_dsp_register(chip, CHI32_CONTROL_REG) | 0x900);
374
375         /* Main loader loop */
376
377         index = code[0];
378         for (;;) {
379                 int block_type, mem_type;
380
381                 /* Total Block Size */
382                 index++;
383
384                 /* Block Type */
385                 block_type = code[index];
386                 if (block_type == 4)    /* We're finished */
387                         break;
388
389                 index++;
390
391                 /* Memory Type  P=0,X=1,Y=2 */
392                 mem_type = code[index++];
393
394                 /* Block Code Size */
395                 words = code[index++];
396                 if (words == 0)         /* We're finished */
397                         break;
398
399                 /* Start Address */
400                 address = ((u32)code[index] << 16) + code[index + 1];
401                 index += 2;
402
403                 if (write_dsp(chip, words) < 0) {
404                         DE_INIT(("load_dsp: failed to write number of DSP words\n"));
405                         return -EIO;
406                 }
407                 if (write_dsp(chip, address) < 0) {
408                         DE_INIT(("load_dsp: failed to write DSP address\n"));
409                         return -EIO;
410                 }
411                 if (write_dsp(chip, mem_type) < 0) {
412                         DE_INIT(("load_dsp: failed to write DSP memory type\n"));
413                         return -EIO;
414                 }
415                 /* Code */
416                 for (i = 0; i < words; i++, index+=2) {
417                         data = ((u32)code[index] << 16) + code[index + 1];
418                         if (write_dsp(chip, data) < 0) {
419                                 DE_INIT(("load_dsp: failed to write DSP data\n"));
420                                 return -EIO;
421                         }
422                 }
423         }
424
425         if (write_dsp(chip, 0) < 0) {   /* We're done!!! */
426                 DE_INIT(("load_dsp: Failed to write final zero\n"));
427                 return -EIO;
428         }
429         udelay(10);
430
431         for (i = 0; i < 5000; i++) {    /* Timeout is 100us * 5000 = 500ms */
432                 /* Wait for flag 4 - indicates that the DSP loaded OK */
433                 if (get_dsp_register(chip, CHI32_STATUS_REG) &
434                     CHI32_STATUS_REG_HF4) {
435                         set_dsp_register(chip, CHI32_CONTROL_REG,
436                                          get_dsp_register(chip, CHI32_CONTROL_REG) & ~0x1b00);
437
438                         if (write_dsp(chip, DSP_FNC_SET_COMMPAGE_ADDR) < 0) {
439                                 DE_INIT(("load_dsp: Failed to write DSP_FNC_SET_COMMPAGE_ADDR\n"));
440                                 return -EIO;
441                         }
442
443                         if (write_dsp(chip, chip->comm_page_phys) < 0) {
444                                 DE_INIT(("load_dsp: Failed to write comm page address\n"));
445                                 return -EIO;
446                         }
447
448                         /* Get the serial number via slave mode.
449                         This is triggered by the SET_COMMPAGE_ADDR command.
450                         We don't actually use the serial number but we have to
451                         get it as part of the DSP init voodoo. */
452                         if (read_sn(chip) < 0) {
453                                 DE_INIT(("load_dsp: Failed to read serial number\n"));
454                                 return -EIO;
455                         }
456
457                         chip->dsp_code = code;          /* Show which DSP code loaded */
458                         chip->bad_board = FALSE;        /* DSP OK */
459                         DE_INIT(("load_dsp: OK!\n"));
460                         return 0;
461                 }
462                 udelay(100);
463         }
464
465         DE_INIT(("load_dsp: DSP load timed out waiting for HF4\n"));
466         return -EIO;
467 }
468
469
470
471 /* load_firmware takes care of loading the DSP and any ASIC code. */
472 static int load_firmware(struct echoaudio *chip)
473 {
474         const struct firmware *fw;
475         int box_type, err;
476
477         if (snd_BUG_ON(!chip->dsp_code_to_load || !chip->comm_page))
478                 return -EPERM;
479
480         /* See if the ASIC is present and working - only if the DSP is already loaded */
481         if (chip->dsp_code) {
482                 if ((box_type = check_asic_status(chip)) >= 0)
483                         return box_type;
484                 /* ASIC check failed; force the DSP to reload */
485                 chip->dsp_code = NULL;
486         }
487
488         if ((err = get_firmware(&fw, chip->dsp_code_to_load, chip)) < 0)
489                 return err;
490         err = load_dsp(chip, (u16 *)fw->data);
491         free_firmware(fw);
492         if (err < 0)
493                 return err;
494
495         if ((box_type = load_asic(chip)) < 0)
496                 return box_type;        /* error */
497
498         if ((err = restore_dsp_rettings(chip)) < 0)
499                 return err;
500
501         return box_type;
502 }
503
504
505
506 /****************************************************************************
507         Mixer functions
508  ****************************************************************************/
509
510 #if defined(ECHOCARD_HAS_INPUT_NOMINAL_LEVEL) || \
511         defined(ECHOCARD_HAS_OUTPUT_NOMINAL_LEVEL)
512
513 /* Set the nominal level for an input or output bus (true = -10dBV, false = +4dBu) */
514 static int set_nominal_level(struct echoaudio *chip, u16 index, char consumer)
515 {
516         if (snd_BUG_ON(index >= num_busses_out(chip) + num_busses_in(chip)))
517                 return -EINVAL;
518
519         /* Wait for the handshake (OK even if ASIC is not loaded) */
520         if (wait_handshake(chip))
521                 return -EIO;
522
523         chip->nominal_level[index] = consumer;
524
525         if (consumer)
526                 chip->comm_page->nominal_level_mask |= cpu_to_le32(1 << index);
527         else
528                 chip->comm_page->nominal_level_mask &= ~cpu_to_le32(1 << index);
529
530         return 0;
531 }
532
533 #endif /* ECHOCARD_HAS_*_NOMINAL_LEVEL */
534
535
536
537 /* Set the gain for a single physical output channel (dB). */
538 static int set_output_gain(struct echoaudio *chip, u16 channel, s8 gain)
539 {
540         if (snd_BUG_ON(channel >= num_busses_out(chip)))
541                 return -EINVAL;
542
543         if (wait_handshake(chip))
544                 return -EIO;
545
546         /* Save the new value */
547         chip->output_gain[channel] = gain;
548         chip->comm_page->line_out_level[channel] = gain;
549         return 0;
550 }
551
552
553
554 #ifdef ECHOCARD_HAS_MONITOR
555 /* Set the monitor level from an input bus to an output bus. */
556 static int set_monitor_gain(struct echoaudio *chip, u16 output, u16 input,
557                             s8 gain)
558 {
559         if (snd_BUG_ON(output >= num_busses_out(chip) ||
560                     input >= num_busses_in(chip)))
561                 return -EINVAL;
562
563         if (wait_handshake(chip))
564                 return -EIO;
565
566         chip->monitor_gain[output][input] = gain;
567         chip->comm_page->monitors[monitor_index(chip, output, input)] = gain;
568         return 0;
569 }
570 #endif /* ECHOCARD_HAS_MONITOR */
571
572
573 /* Tell the DSP to read and update output, nominal & monitor levels in comm page. */
574 static int update_output_line_level(struct echoaudio *chip)
575 {
576         if (wait_handshake(chip))
577                 return -EIO;
578         clear_handshake(chip);
579         return send_vector(chip, DSP_VC_UPDATE_OUTVOL);
580 }
581
582
583
584 /* Tell the DSP to read and update input levels in comm page */
585 static int update_input_line_level(struct echoaudio *chip)
586 {
587         if (wait_handshake(chip))
588                 return -EIO;
589         clear_handshake(chip);
590         return send_vector(chip, DSP_VC_UPDATE_INGAIN);
591 }
592
593
594
595 /* set_meters_on turns the meters on or off.  If meters are turned on, the DSP
596 will write the meter and clock detect values to the comm page at about 30Hz */
597 static void set_meters_on(struct echoaudio *chip, char on)
598 {
599         if (on && !chip->meters_enabled) {
600                 send_vector(chip, DSP_VC_METERS_ON);
601                 chip->meters_enabled = 1;
602         } else if (!on && chip->meters_enabled) {
603                 send_vector(chip, DSP_VC_METERS_OFF);
604                 chip->meters_enabled = 0;
605                 memset((s8 *)chip->comm_page->vu_meter, ECHOGAIN_MUTED,
606                        DSP_MAXPIPES);
607                 memset((s8 *)chip->comm_page->peak_meter, ECHOGAIN_MUTED,
608                        DSP_MAXPIPES);
609         }
610 }
611
612
613
614 /* Fill out an the given array using the current values in the comm page.
615 Meters are written in the comm page by the DSP in this order:
616  Output busses
617  Input busses
618  Output pipes (vmixer cards only)
619
620 This function assumes there are no more than 16 in/out busses or pipes
621 Meters is an array [3][16][2] of long. */
622 static void get_audio_meters(struct echoaudio *chip, long *meters)
623 {
624         int i, m, n;
625
626         m = 0;
627         n = 0;
628         for (i = 0; i < num_busses_out(chip); i++, m++) {
629                 meters[n++] = chip->comm_page->vu_meter[m];
630                 meters[n++] = chip->comm_page->peak_meter[m];
631         }
632         for (; n < 32; n++)
633                 meters[n] = 0;
634
635 #ifdef ECHOCARD_ECHO3G
636         m = E3G_MAX_OUTPUTS;    /* Skip unused meters */
637 #endif
638
639         for (i = 0; i < num_busses_in(chip); i++, m++) {
640                 meters[n++] = chip->comm_page->vu_meter[m];
641                 meters[n++] = chip->comm_page->peak_meter[m];
642         }
643         for (; n < 64; n++)
644                 meters[n] = 0;
645
646 #ifdef ECHOCARD_HAS_VMIXER
647         for (i = 0; i < num_pipes_out(chip); i++, m++) {
648                 meters[n++] = chip->comm_page->vu_meter[m];
649                 meters[n++] = chip->comm_page->peak_meter[m];
650         }
651 #endif
652         for (; n < 96; n++)
653                 meters[n] = 0;
654 }
655
656
657
658 static int restore_dsp_rettings(struct echoaudio *chip)
659 {
660         int err;
661         DE_INIT(("restore_dsp_settings\n"));
662
663         if ((err = check_asic_status(chip)) < 0)
664                 return err;
665
666         /* @ Gina20/Darla20 only. Should be harmless for other cards. */
667         chip->comm_page->gd_clock_state = GD_CLOCK_UNDEF;
668         chip->comm_page->gd_spdif_status = GD_SPDIF_STATUS_UNDEF;
669         chip->comm_page->handshake = 0xffffffff;
670
671         if ((err = set_sample_rate(chip, chip->sample_rate)) < 0)
672                 return err;
673
674         if (chip->meters_enabled)
675                 if (send_vector(chip, DSP_VC_METERS_ON) < 0)
676                         return -EIO;
677
678 #ifdef ECHOCARD_HAS_EXTERNAL_CLOCK
679         if (set_input_clock(chip, chip->input_clock) < 0)
680                 return -EIO;
681 #endif
682
683 #ifdef ECHOCARD_HAS_OUTPUT_CLOCK_SWITCH
684         if (set_output_clock(chip, chip->output_clock) < 0)
685                 return -EIO;
686 #endif
687
688         if (update_output_line_level(chip) < 0)
689                 return -EIO;
690
691         if (update_input_line_level(chip) < 0)
692                 return -EIO;
693
694 #ifdef ECHOCARD_HAS_VMIXER
695         if (update_vmixer_level(chip) < 0)
696                 return -EIO;
697 #endif
698
699         if (wait_handshake(chip) < 0)
700                 return -EIO;
701         clear_handshake(chip);
702
703         DE_INIT(("restore_dsp_rettings done\n"));
704         return send_vector(chip, DSP_VC_UPDATE_FLAGS);
705 }
706
707
708
709 /****************************************************************************
710         Transport functions
711  ****************************************************************************/
712
713 /* set_audio_format() sets the format of the audio data in host memory for
714 this pipe.  Note that _MS_ (mono-to-stereo) playback modes are not used by ALSA
715 but they are here because they are just mono while capturing */
716 static void set_audio_format(struct echoaudio *chip, u16 pipe_index,
717                              const struct audioformat *format)
718 {
719         u16 dsp_format;
720
721         dsp_format = DSP_AUDIOFORM_SS_16LE;
722
723         /* Look for super-interleave (no big-endian and 8 bits) */
724         if (format->interleave > 2) {
725                 switch (format->bits_per_sample) {
726                 case 16:
727                         dsp_format = DSP_AUDIOFORM_SUPER_INTERLEAVE_16LE;
728                         break;
729                 case 24:
730                         dsp_format = DSP_AUDIOFORM_SUPER_INTERLEAVE_24LE;
731                         break;
732                 case 32:
733                         dsp_format = DSP_AUDIOFORM_SUPER_INTERLEAVE_32LE;
734                         break;
735                 }
736                 dsp_format |= format->interleave;
737         } else if (format->data_are_bigendian) {
738                 /* For big-endian data, only 32 bit samples are supported */
739                 switch (format->interleave) {
740                 case 1:
741                         dsp_format = DSP_AUDIOFORM_MM_32BE;
742                         break;
743 #ifdef ECHOCARD_HAS_STEREO_BIG_ENDIAN32
744                 case 2:
745                         dsp_format = DSP_AUDIOFORM_SS_32BE;
746                         break;
747 #endif
748                 }
749         } else if (format->interleave == 1 &&
750                    format->bits_per_sample == 32 && !format->mono_to_stereo) {
751                 /* 32 bit little-endian mono->mono case */
752                 dsp_format = DSP_AUDIOFORM_MM_32LE;
753         } else {
754                 /* Handle the other little-endian formats */
755                 switch (format->bits_per_sample) {
756                 case 8:
757                         if (format->interleave == 2)
758                                 dsp_format = DSP_AUDIOFORM_SS_8;
759                         else
760                                 dsp_format = DSP_AUDIOFORM_MS_8;
761                         break;
762                 default:
763                 case 16:
764                         if (format->interleave == 2)
765                                 dsp_format = DSP_AUDIOFORM_SS_16LE;
766                         else
767                                 dsp_format = DSP_AUDIOFORM_MS_16LE;
768                         break;
769                 case 24:
770                         if (format->interleave == 2)
771                                 dsp_format = DSP_AUDIOFORM_SS_24LE;
772                         else
773                                 dsp_format = DSP_AUDIOFORM_MS_24LE;
774                         break;
775                 case 32:
776                         if (format->interleave == 2)
777                                 dsp_format = DSP_AUDIOFORM_SS_32LE;
778                         else
779                                 dsp_format = DSP_AUDIOFORM_MS_32LE;
780                         break;
781                 }
782         }
783         DE_ACT(("set_audio_format[%d] = %x\n", pipe_index, dsp_format));
784         chip->comm_page->audio_format[pipe_index] = cpu_to_le16(dsp_format);
785 }
786
787
788
789 /* start_transport starts transport for a set of pipes.
790 The bits 1 in channel_mask specify what pipes to start. Only the bit of the
791 first channel must be set, regardless its interleave.
792 Same thing for pause_ and stop_ -trasport below. */
793 static int start_transport(struct echoaudio *chip, u32 channel_mask,
794                            u32 cyclic_mask)
795 {
796         DE_ACT(("start_transport %x\n", channel_mask));
797
798         if (wait_handshake(chip))
799                 return -EIO;
800
801         chip->comm_page->cmd_start |= cpu_to_le32(channel_mask);
802
803         if (chip->comm_page->cmd_start) {
804                 clear_handshake(chip);
805                 send_vector(chip, DSP_VC_START_TRANSFER);
806                 if (wait_handshake(chip))
807                         return -EIO;
808                 /* Keep track of which pipes are transporting */
809                 chip->active_mask |= channel_mask;
810                 chip->comm_page->cmd_start = 0;
811                 return 0;
812         }
813
814         DE_ACT(("start_transport: No pipes to start!\n"));
815         return -EINVAL;
816 }
817
818
819
820 static int pause_transport(struct echoaudio *chip, u32 channel_mask)
821 {
822         DE_ACT(("pause_transport %x\n", channel_mask));
823
824         if (wait_handshake(chip))
825                 return -EIO;
826
827         chip->comm_page->cmd_stop |= cpu_to_le32(channel_mask);
828         chip->comm_page->cmd_reset = 0;
829         if (chip->comm_page->cmd_stop) {
830                 clear_handshake(chip);
831                 send_vector(chip, DSP_VC_STOP_TRANSFER);
832                 if (wait_handshake(chip))
833                         return -EIO;
834                 /* Keep track of which pipes are transporting */
835                 chip->active_mask &= ~channel_mask;
836                 chip->comm_page->cmd_stop = 0;
837                 chip->comm_page->cmd_reset = 0;
838                 return 0;
839         }
840
841         DE_ACT(("pause_transport: No pipes to stop!\n"));
842         return 0;
843 }
844
845
846
847 static int stop_transport(struct echoaudio *chip, u32 channel_mask)
848 {
849         DE_ACT(("stop_transport %x\n", channel_mask));
850
851         if (wait_handshake(chip))
852                 return -EIO;
853
854         chip->comm_page->cmd_stop |= cpu_to_le32(channel_mask);
855         chip->comm_page->cmd_reset |= cpu_to_le32(channel_mask);
856         if (chip->comm_page->cmd_reset) {
857                 clear_handshake(chip);
858                 send_vector(chip, DSP_VC_STOP_TRANSFER);
859                 if (wait_handshake(chip))
860                         return -EIO;
861                 /* Keep track of which pipes are transporting */
862                 chip->active_mask &= ~channel_mask;
863                 chip->comm_page->cmd_stop = 0;
864                 chip->comm_page->cmd_reset = 0;
865                 return 0;
866         }
867
868         DE_ACT(("stop_transport: No pipes to stop!\n"));
869         return 0;
870 }
871
872
873
874 static inline int is_pipe_allocated(struct echoaudio *chip, u16 pipe_index)
875 {
876         return (chip->pipe_alloc_mask & (1 << pipe_index));
877 }
878
879
880
881 /* Stops everything and turns off the DSP. All pipes should be already
882 stopped and unallocated. */
883 static int rest_in_peace(struct echoaudio *chip)
884 {
885         DE_ACT(("rest_in_peace() open=%x\n", chip->pipe_alloc_mask));
886
887         /* Stops all active pipes (just to be sure) */
888         stop_transport(chip, chip->active_mask);
889
890         set_meters_on(chip, FALSE);
891
892 #ifdef ECHOCARD_HAS_MIDI
893         enable_midi_input(chip, FALSE);
894 #endif
895
896         /* Go to sleep */
897         if (chip->dsp_code) {
898                 /* Make load_firmware do a complete reload */
899                 chip->dsp_code = NULL;
900                 /* Put the DSP to sleep */
901                 return send_vector(chip, DSP_VC_GO_COMATOSE);
902         }
903         return 0;
904 }
905
906
907
908 /* Fills the comm page with default values */
909 static int init_dsp_comm_page(struct echoaudio *chip)
910 {
911         /* Check if the compiler added extra padding inside the structure */
912         if (offsetof(struct comm_page, midi_output) != 0xbe0) {
913                 DE_INIT(("init_dsp_comm_page() - Invalid struct comm_page structure\n"));
914                 return -EPERM;
915         }
916
917         /* Init all the basic stuff */
918         chip->card_name = ECHOCARD_NAME;
919         chip->bad_board = TRUE; /* Set TRUE until DSP loaded */
920         chip->dsp_code = NULL;  /* Current DSP code not loaded */
921         chip->digital_mode = DIGITAL_MODE_NONE;
922         chip->input_clock = ECHO_CLOCK_INTERNAL;
923         chip->output_clock = ECHO_CLOCK_WORD;
924         chip->asic_loaded = FALSE;
925         memset(chip->comm_page, 0, sizeof(struct comm_page));
926
927         /* Init the comm page */
928         chip->comm_page->comm_size =
929                 cpu_to_le32(sizeof(struct comm_page));
930         chip->comm_page->handshake = 0xffffffff;
931         chip->comm_page->midi_out_free_count =
932                 cpu_to_le32(DSP_MIDI_OUT_FIFO_SIZE);
933         chip->comm_page->sample_rate = cpu_to_le32(44100);
934         chip->sample_rate = 44100;
935
936         /* Set line levels so we don't blast any inputs on startup */
937         memset(chip->comm_page->monitors, ECHOGAIN_MUTED, MONITOR_ARRAY_SIZE);
938         memset(chip->comm_page->vmixer, ECHOGAIN_MUTED, VMIXER_ARRAY_SIZE);
939
940         return 0;
941 }
942
943
944
945 /* This function initializes the several volume controls for busses and pipes.
946 This MUST be called after the DSP is up and running ! */
947 static int init_line_levels(struct echoaudio *chip)
948 {
949         int st, i, o;
950
951         DE_INIT(("init_line_levels\n"));
952
953         /* Mute output busses */
954         for (i = 0; i < num_busses_out(chip); i++)
955                 if ((st = set_output_gain(chip, i, ECHOGAIN_MUTED)))
956                         return st;
957         if ((st = update_output_line_level(chip)))
958                 return st;
959
960 #ifdef ECHOCARD_HAS_VMIXER
961         /* Mute the Vmixer */
962         for (i = 0; i < num_pipes_out(chip); i++)
963                 for (o = 0; o < num_busses_out(chip); o++)
964                         if ((st = set_vmixer_gain(chip, o, i, ECHOGAIN_MUTED)))
965                                 return st;
966         if ((st = update_vmixer_level(chip)))
967                 return st;
968 #endif /* ECHOCARD_HAS_VMIXER */
969
970 #ifdef ECHOCARD_HAS_MONITOR
971         /* Mute the monitor mixer */
972         for (o = 0; o < num_busses_out(chip); o++)
973                 for (i = 0; i < num_busses_in(chip); i++)
974                         if ((st = set_monitor_gain(chip, o, i, ECHOGAIN_MUTED)))
975                                 return st;
976         if ((st = update_output_line_level(chip)))
977                 return st;
978 #endif /* ECHOCARD_HAS_MONITOR */
979
980 #ifdef ECHOCARD_HAS_INPUT_GAIN
981         for (i = 0; i < num_busses_in(chip); i++)
982                 if ((st = set_input_gain(chip, i, ECHOGAIN_MUTED)))
983                         return st;
984         if ((st = update_input_line_level(chip)))
985                 return st;
986 #endif /* ECHOCARD_HAS_INPUT_GAIN */
987
988         return 0;
989 }
990
991
992
993 /* This is low level part of the interrupt handler.
994 It returns -1 if the IRQ is not ours, or N>=0 if it is, where N is the number
995 of midi data in the input queue. */
996 static int service_irq(struct echoaudio *chip)
997 {
998         int st;
999
1000         /* Read the DSP status register and see if this DSP generated this interrupt */
1001         if (get_dsp_register(chip, CHI32_STATUS_REG) & CHI32_STATUS_IRQ) {
1002                 st = 0;
1003 #ifdef ECHOCARD_HAS_MIDI
1004                 /* Get and parse midi data if present */
1005                 if (chip->comm_page->midi_input[0])     /* The count is at index 0 */
1006                         st = midi_service_irq(chip);    /* Returns how many midi bytes we received */
1007 #endif
1008                 /* Clear the hardware interrupt */
1009                 chip->comm_page->midi_input[0] = 0;
1010                 send_vector(chip, DSP_VC_ACK_INT);
1011                 return st;
1012         }
1013         return -1;
1014 }
1015
1016
1017
1018
1019 /******************************************************************************
1020         Functions for opening and closing pipes
1021  ******************************************************************************/
1022
1023 /* allocate_pipes is used to reserve audio pipes for your exclusive use.
1024 The call will fail if some pipes are already allocated. */
1025 static int allocate_pipes(struct echoaudio *chip, struct audiopipe *pipe,
1026                           int pipe_index, int interleave)
1027 {
1028         int i;
1029         u32 channel_mask;
1030         char is_cyclic;
1031
1032         DE_ACT(("allocate_pipes: ch=%d int=%d\n", pipe_index, interleave));
1033
1034         if (chip->bad_board)
1035                 return -EIO;
1036
1037         is_cyclic = 1;  /* This driver uses cyclic buffers only */
1038
1039         for (channel_mask = i = 0; i < interleave; i++)
1040                 channel_mask |= 1 << (pipe_index + i);
1041         if (chip->pipe_alloc_mask & channel_mask) {
1042                 DE_ACT(("allocate_pipes: channel already open\n"));
1043                 return -EAGAIN;
1044         }
1045
1046         chip->comm_page->position[pipe_index] = 0;
1047         chip->pipe_alloc_mask |= channel_mask;
1048         if (is_cyclic)
1049                 chip->pipe_cyclic_mask |= channel_mask;
1050         pipe->index = pipe_index;
1051         pipe->interleave = interleave;
1052         pipe->state = PIPE_STATE_STOPPED;
1053
1054         /* The counter register is where the DSP writes the 32 bit DMA
1055         position for a pipe.  The DSP is constantly updating this value as
1056         it moves data. The DMA counter is in units of bytes, not samples. */
1057         pipe->dma_counter = &chip->comm_page->position[pipe_index];
1058         *pipe->dma_counter = 0;
1059         DE_ACT(("allocate_pipes: ok\n"));
1060         return pipe_index;
1061 }
1062
1063
1064
1065 static int free_pipes(struct echoaudio *chip, struct audiopipe *pipe)
1066 {
1067         u32 channel_mask;
1068         int i;
1069
1070         DE_ACT(("free_pipes: Pipe %d\n", pipe->index));
1071         if (snd_BUG_ON(!is_pipe_allocated(chip, pipe->index)))
1072                 return -EINVAL;
1073         if (snd_BUG_ON(pipe->state != PIPE_STATE_STOPPED))
1074                 return -EINVAL;
1075
1076         for (channel_mask = i = 0; i < pipe->interleave; i++)
1077                 channel_mask |= 1 << (pipe->index + i);
1078
1079         chip->pipe_alloc_mask &= ~channel_mask;
1080         chip->pipe_cyclic_mask &= ~channel_mask;
1081         return 0;
1082 }
1083
1084
1085
1086 /******************************************************************************
1087         Functions for managing the scatter-gather list
1088 ******************************************************************************/
1089
1090 static int sglist_init(struct echoaudio *chip, struct audiopipe *pipe)
1091 {
1092         pipe->sglist_head = 0;
1093         memset(pipe->sgpage.area, 0, PAGE_SIZE);
1094         chip->comm_page->sglist_addr[pipe->index].addr =
1095                 cpu_to_le32(pipe->sgpage.addr);
1096         return 0;
1097 }
1098
1099
1100
1101 static int sglist_add_mapping(struct echoaudio *chip, struct audiopipe *pipe,
1102                                 dma_addr_t address, size_t length)
1103 {
1104         int head = pipe->sglist_head;
1105         struct sg_entry *list = (struct sg_entry *)pipe->sgpage.area;
1106
1107         if (head < MAX_SGLIST_ENTRIES - 1) {
1108                 list[head].addr = cpu_to_le32(address);
1109                 list[head].size = cpu_to_le32(length);
1110                 pipe->sglist_head++;
1111         } else {
1112                 DE_ACT(("SGlist: too many fragments\n"));
1113                 return -ENOMEM;
1114         }
1115         return 0;
1116 }
1117
1118
1119
1120 static inline int sglist_add_irq(struct echoaudio *chip, struct audiopipe *pipe)
1121 {
1122         return sglist_add_mapping(chip, pipe, 0, 0);
1123 }
1124
1125
1126
1127 static inline int sglist_wrap(struct echoaudio *chip, struct audiopipe *pipe)
1128 {
1129         return sglist_add_mapping(chip, pipe, pipe->sgpage.addr, 0);
1130 }