diff options
Diffstat (limited to 'firmware/target')
-rw-r--r-- | firmware/target/arm/as3525/pcm-as3525.c | 13 | ||||
-rw-r--r-- | firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c | 27 | ||||
-rw-r--r-- | firmware/target/arm/pcm-pp.c | 22 | ||||
-rw-r--r-- | firmware/target/arm/pcm-telechips.c | 7 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/pcm-s5l8700.c | 6 | ||||
-rw-r--r-- | firmware/target/coldfire/pcm-coldfire.c | 34 | ||||
-rw-r--r-- | firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c | 5 |
7 files changed, 22 insertions, 92 deletions
diff --git a/firmware/target/arm/as3525/pcm-as3525.c b/firmware/target/arm/as3525/pcm-as3525.c index 53a3f0c9a3..4d78899398 100644 --- a/firmware/target/arm/as3525/pcm-as3525.c +++ b/firmware/target/arm/as3525/pcm-as3525.c | |||
@@ -202,7 +202,7 @@ void pcm_rec_unlock(void) | |||
202 | } | 202 | } |
203 | 203 | ||
204 | 204 | ||
205 | void pcm_record_more(void *start, size_t size) | 205 | void pcm_rec_dma_record_more(void *start, size_t size) |
206 | { | 206 | { |
207 | rec_start_addr = start; | 207 | rec_start_addr = start; |
208 | rec_size = size; | 208 | rec_size = size; |
@@ -331,16 +331,9 @@ void pcm_rec_dma_init(void) | |||
331 | } | 331 | } |
332 | 332 | ||
333 | 333 | ||
334 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 334 | const void * pcm_rec_dma_get_peak_buffer(void) |
335 | { | 335 | { |
336 | const void *peak_buffer; | 336 | return (const void*)rec_start_addr; |
337 | |||
338 | pcm_rec_lock(); | ||
339 | *count = rec_size >> 2; | ||
340 | peak_buffer = (const void*)rec_start_addr; | ||
341 | pcm_rec_unlock(); | ||
342 | |||
343 | return peak_buffer; | ||
344 | } | 337 | } |
345 | 338 | ||
346 | #endif /* HAVE_RECORDING */ | 339 | #endif /* HAVE_RECORDING */ |
diff --git a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c index c0651caf51..02051fad90 100644 --- a/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c +++ b/firmware/target/arm/imx31/gigabeat-s/pcm-gigabeat-s.c | |||
@@ -432,17 +432,13 @@ void pcm_rec_unlock(void) | |||
432 | } | 432 | } |
433 | } | 433 | } |
434 | 434 | ||
435 | void pcm_record_more(void *start, size_t size) | 435 | void pcm_rec_dma_record_more(void *start, size_t size) |
436 | { | 436 | { |
437 | start = (void *)(((unsigned long)start + 3) & ~3); | ||
438 | size &= ~3; | ||
439 | |||
440 | /* Invalidate - buffer must be coherent */ | 437 | /* Invalidate - buffer must be coherent */ |
441 | dump_dcache_range(start, size); | 438 | dump_dcache_range(start, size); |
442 | 439 | ||
443 | start = (void *)addr_virt_to_phys((unsigned long)start); | 440 | start = (void *)addr_virt_to_phys((unsigned long)start); |
444 | 441 | ||
445 | pcm_rec_peak_addr = start; | ||
446 | dma_rec_bd.buf_addr = start; | 442 | dma_rec_bd.buf_addr = start; |
447 | dma_rec_bd.mode.count = size; | 443 | dma_rec_bd.mode.count = size; |
448 | dma_rec_bd.mode.command = TRANSFER_16BIT; | 444 | dma_rec_bd.mode.command = TRANSFER_16BIT; |
@@ -469,12 +465,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
469 | { | 465 | { |
470 | pcm_rec_dma_stop(); | 466 | pcm_rec_dma_stop(); |
471 | 467 | ||
472 | addr = (void *)(((unsigned long)addr + 3) & ~3); | ||
473 | size &= ~3; | ||
474 | |||
475 | if (size <= 0) | ||
476 | return; | ||
477 | |||
478 | if (!sdma_channel_reset(DMA_REC_CH_NUM)) | 468 | if (!sdma_channel_reset(DMA_REC_CH_NUM)) |
479 | return; | 469 | return; |
480 | 470 | ||
@@ -482,7 +472,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
482 | dump_dcache_range(addr, size); | 472 | dump_dcache_range(addr, size); |
483 | 473 | ||
484 | addr = (void *)addr_virt_to_phys((unsigned long)addr); | 474 | addr = (void *)addr_virt_to_phys((unsigned long)addr); |
485 | pcm_rec_peak_addr = addr; | ||
486 | dma_rec_bd.buf_addr = addr; | 475 | dma_rec_bd.buf_addr = addr; |
487 | dma_rec_bd.mode.count = size; | 476 | dma_rec_bd.mode.count = size; |
488 | dma_rec_bd.mode.command = TRANSFER_16BIT; | 477 | dma_rec_bd.mode.command = TRANSFER_16BIT; |
@@ -524,10 +513,10 @@ void pcm_rec_dma_init(void) | |||
524 | sdma_channel_set_priority(DMA_REC_CH_NUM, DMA_REC_CH_PRIORITY); | 513 | sdma_channel_set_priority(DMA_REC_CH_NUM, DMA_REC_CH_PRIORITY); |
525 | } | 514 | } |
526 | 515 | ||
527 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 516 | const void * pcm_rec_dma_get_peak_buffer(void) |
528 | { | 517 | { |
529 | static unsigned long pda NOCACHEBSS_ATTR; | 518 | static unsigned long pda NOCACHEBSS_ATTR; |
530 | unsigned long buf, addr, end, bufend; | 519 | unsigned long buf, end, bufend; |
531 | int oldstatus; | 520 | int oldstatus; |
532 | 521 | ||
533 | /* read burst dma destination address register in channel context */ | 522 | /* read burst dma destination address register in channel context */ |
@@ -536,19 +525,13 @@ const void * pcm_rec_dma_get_peak_buffer(int *count) | |||
536 | oldstatus = disable_irq_save(); | 525 | oldstatus = disable_irq_save(); |
537 | end = pda; | 526 | end = pda; |
538 | buf = (unsigned long)dma_rec_bd.buf_addr; | 527 | buf = (unsigned long)dma_rec_bd.buf_addr; |
539 | addr = (unsigned long)pcm_rec_peak_addr; | ||
540 | bufend = buf + dma_rec_bd.mode.count; | 528 | bufend = buf + dma_rec_bd.mode.count; |
541 | restore_irq(oldstatus); | 529 | restore_irq(oldstatus); |
542 | 530 | ||
543 | /* Be addresses are coherent (no buffer change during read) */ | 531 | /* Be addresses are coherent (no buffer change during read) */ |
544 | if (addr >= buf && addr < bufend && | 532 | if (end >= buf && end < bufend) |
545 | end >= buf && end < bufend) | 533 | return (void *)(end & ~3); |
546 | { | ||
547 | *count = (end >> 2) - (addr >> 2); | ||
548 | return (void *)(addr & ~3); | ||
549 | } | ||
550 | 534 | ||
551 | *count = 0; | ||
552 | return NULL; | 535 | return NULL; |
553 | } | 536 | } |
554 | 537 | ||
diff --git a/firmware/target/arm/pcm-pp.c b/firmware/target/arm/pcm-pp.c index bd12b13032..bad3f593fe 100644 --- a/firmware/target/arm/pcm-pp.c +++ b/firmware/target/arm/pcm-pp.c | |||
@@ -431,9 +431,6 @@ static void play_stop_pcm(void) | |||
431 | 431 | ||
432 | void pcm_play_dma_start(const void *addr, size_t size) | 432 | void pcm_play_dma_start(const void *addr, size_t size) |
433 | { | 433 | { |
434 | addr = (void *)(((long)addr + 2) & ~3); | ||
435 | size &= ~3; | ||
436 | |||
437 | #if NUM_CORES > 1 | 434 | #if NUM_CORES > 1 |
438 | /* This will become more important later - and different ! */ | 435 | /* This will become more important later - and different ! */ |
439 | dma_play_data.core = processor_id(); /* save initiating core */ | 436 | dma_play_data.core = processor_id(); /* save initiating core */ |
@@ -441,9 +438,6 @@ void pcm_play_dma_start(const void *addr, size_t size) | |||
441 | 438 | ||
442 | pcm_play_dma_stop(); | 439 | pcm_play_dma_stop(); |
443 | 440 | ||
444 | if (size == 0) | ||
445 | return; | ||
446 | |||
447 | #ifdef CPU_PP502x | 441 | #ifdef CPU_PP502x |
448 | if ((unsigned long)addr < UNCACHED_BASE_ADDR) { | 442 | if ((unsigned long)addr < UNCACHED_BASE_ADDR) { |
449 | /* Flush any pending cache writes */ | 443 | /* Flush any pending cache writes */ |
@@ -691,9 +685,8 @@ void fiq_record(void) | |||
691 | #endif /* SANSA_E200 */ | 685 | #endif /* SANSA_E200 */ |
692 | 686 | ||
693 | /* Continue transferring data in */ | 687 | /* Continue transferring data in */ |
694 | void pcm_record_more(void *start, size_t size) | 688 | void pcm_rec_dma_record_more(void *start, size_t size) |
695 | { | 689 | { |
696 | pcm_rec_peak_addr = start; /* Start peaking at dest */ | ||
697 | dma_rec_data.addr = (unsigned long)start; /* Start of RX buffer */ | 690 | dma_rec_data.addr = (unsigned long)start; /* Start of RX buffer */ |
698 | dma_rec_data.size = size; /* Bytes to transfer */ | 691 | dma_rec_data.size = size; /* Bytes to transfer */ |
699 | } | 692 | } |
@@ -718,7 +711,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
718 | { | 711 | { |
719 | pcm_rec_dma_stop(); | 712 | pcm_rec_dma_stop(); |
720 | 713 | ||
721 | pcm_rec_peak_addr = addr; | ||
722 | dma_rec_data.addr = (unsigned long)addr; | 714 | dma_rec_data.addr = (unsigned long)addr; |
723 | dma_rec_data.size = size; | 715 | dma_rec_data.size = size; |
724 | #if NUM_CORES > 1 | 716 | #if NUM_CORES > 1 |
@@ -749,17 +741,9 @@ void pcm_rec_dma_init(void) | |||
749 | pcm_rec_dma_stop(); | 741 | pcm_rec_dma_stop(); |
750 | } /* pcm_init */ | 742 | } /* pcm_init */ |
751 | 743 | ||
752 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 744 | const void * pcm_rec_dma_get_peak_buffer(void) |
753 | { | 745 | { |
754 | unsigned long addr, end; | 746 | return (void *)((unsigned long)dma_rec_data.addr & ~3); |
755 | |||
756 | int status = disable_fiq_save(); | ||
757 | addr = (unsigned long)pcm_rec_peak_addr; | ||
758 | end = dma_rec_data.addr; | ||
759 | restore_fiq(status); | ||
760 | |||
761 | *count = (end >> 2) - (addr >> 2); | ||
762 | return (void *)(addr & ~3); | ||
763 | } /* pcm_rec_dma_get_peak_buffer */ | 747 | } /* pcm_rec_dma_get_peak_buffer */ |
764 | 748 | ||
765 | #endif /* HAVE_RECORDING */ | 749 | #endif /* HAVE_RECORDING */ |
diff --git a/firmware/target/arm/pcm-telechips.c b/firmware/target/arm/pcm-telechips.c index f0ef667d4f..9d14fa5ed5 100644 --- a/firmware/target/arm/pcm-telechips.c +++ b/firmware/target/arm/pcm-telechips.c | |||
@@ -141,8 +141,8 @@ static void play_stop_pcm(void) | |||
141 | 141 | ||
142 | void pcm_play_dma_start(const void *addr, size_t size) | 142 | void pcm_play_dma_start(const void *addr, size_t size) |
143 | { | 143 | { |
144 | dma_play_data.p = (void *)(((uintptr_t)addr + 2) & ~3); | 144 | dma_play_data.p = addr; |
145 | dma_play_data.size = (size & ~3); | 145 | dma_play_data.size = size; |
146 | 146 | ||
147 | #if NUM_CORES > 1 | 147 | #if NUM_CORES > 1 |
148 | /* This will become more important later - and different ! */ | 148 | /* This will become more important later - and different ! */ |
@@ -229,9 +229,8 @@ void pcm_rec_unlock(void) | |||
229 | { | 229 | { |
230 | } | 230 | } |
231 | 231 | ||
232 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 232 | const void * pcm_rec_dma_get_peak_buffer(void) |
233 | { | 233 | { |
234 | *count = 0; | ||
235 | return NULL; | 234 | return NULL; |
236 | } | 235 | } |
237 | 236 | ||
diff --git a/firmware/target/arm/s5l8700/pcm-s5l8700.c b/firmware/target/arm/s5l8700/pcm-s5l8700.c index 1edb05fd15..7798f41d11 100644 --- a/firmware/target/arm/s5l8700/pcm-s5l8700.c +++ b/firmware/target/arm/s5l8700/pcm-s5l8700.c | |||
@@ -367,7 +367,7 @@ void pcm_rec_unlock(void) | |||
367 | { | 367 | { |
368 | } | 368 | } |
369 | 369 | ||
370 | void pcm_record_more(void *start, size_t size) | 370 | void pcm_rec_dma_record_more(void *start, size_t size) |
371 | { | 371 | { |
372 | (void)start; | 372 | (void)start; |
373 | (void)size; | 373 | (void)size; |
@@ -393,9 +393,9 @@ void pcm_rec_dma_init(void) | |||
393 | } | 393 | } |
394 | 394 | ||
395 | 395 | ||
396 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 396 | const void * pcm_rec_dma_get_peak_buffer(void) |
397 | { | 397 | { |
398 | (void)count; | 398 | return NULL; |
399 | } | 399 | } |
400 | 400 | ||
401 | #endif /* HAVE_RECORDING */ | 401 | #endif /* HAVE_RECORDING */ |
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c index 209d227187..f9c0764d64 100644 --- a/firmware/target/coldfire/pcm-coldfire.c +++ b/firmware/target/coldfire/pcm-coldfire.c | |||
@@ -235,12 +235,6 @@ void pcm_play_dma_start(const void *addr, size_t size) | |||
235 | /* Stop any DMA in progress */ | 235 | /* Stop any DMA in progress */ |
236 | pcm_play_dma_stop(); | 236 | pcm_play_dma_stop(); |
237 | 237 | ||
238 | addr = (void *)(((long)addr + 3) & ~3); | ||
239 | size &= ~3; | ||
240 | |||
241 | if (size <= 0) | ||
242 | return; | ||
243 | |||
244 | /* Set up DMA transfer */ | 238 | /* Set up DMA transfer */ |
245 | SAR0 = (unsigned long)addr; /* Source address */ | 239 | SAR0 = (unsigned long)addr; /* Source address */ |
246 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ | 240 | DAR0 = (unsigned long)&PDOR3; /* Destination address */ |
@@ -382,12 +376,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
382 | /* stop any DMA in progress */ | 376 | /* stop any DMA in progress */ |
383 | pcm_rec_dma_stop(); | 377 | pcm_rec_dma_stop(); |
384 | 378 | ||
385 | addr = (void *)(((long)addr + 3) & ~3); | ||
386 | size &= ~3; | ||
387 | |||
388 | if (size <= 0) | ||
389 | return; | ||
390 | |||
391 | and_l(~PDIR2_FIFO_RESET, &DATAINCONTROL); | 379 | and_l(~PDIR2_FIFO_RESET, &DATAINCONTROL); |
392 | 380 | ||
393 | /* Start the DMA transfer.. */ | 381 | /* Start the DMA transfer.. */ |
@@ -396,7 +384,6 @@ void pcm_rec_dma_start(void *addr, size_t size) | |||
396 | INTERRUPTCLEAR = (1 << 25) | (1 << 24) | (1 << 23) | (1 << 22); | 384 | INTERRUPTCLEAR = (1 << 25) | (1 << 24) | (1 << 23) | (1 << 22); |
397 | #endif | 385 | #endif |
398 | 386 | ||
399 | pcm_rec_peak_addr = (unsigned long *)addr; /* Start peaking at dest */ | ||
400 | SAR1 = (unsigned long)&PDIR2; /* Source address */ | 387 | SAR1 = (unsigned long)&PDIR2; /* Source address */ |
401 | DAR1 = (unsigned long)addr; /* Destination address */ | 388 | DAR1 = (unsigned long)addr; /* Destination address */ |
402 | BCR1 = (unsigned long)size; /* Bytes to transfer */ | 389 | BCR1 = (unsigned long)size; /* Bytes to transfer */ |
@@ -490,30 +477,15 @@ void DMA1(void) | |||
490 | } /* DMA1 */ | 477 | } /* DMA1 */ |
491 | 478 | ||
492 | /* Continue transferring data in - call from interrupt callback */ | 479 | /* Continue transferring data in - call from interrupt callback */ |
493 | void pcm_record_more(void *start, size_t size) | 480 | void pcm_rec_dma_record_more(void *start, size_t size) |
494 | { | 481 | { |
495 | start = (void *)(((long)start + 3) & ~3); | ||
496 | size &= ~3; | ||
497 | |||
498 | pcm_rec_peak_addr = (unsigned long *)start; /* Start peaking at dest */ | ||
499 | DAR1 = (unsigned long)start; /* Destination address */ | 482 | DAR1 = (unsigned long)start; /* Destination address */ |
500 | BCR1 = (unsigned long)size; /* Bytes to transfer */ | 483 | BCR1 = (unsigned long)size; /* Bytes to transfer */ |
501 | or_l(DMA_EEXT | DMA_INT, &DCR1); /* per request and int ON */ | 484 | or_l(DMA_EEXT | DMA_INT, &DCR1); /* per request and int ON */ |
502 | } /* pcm_record_more */ | 485 | } /* pcm_record_more */ |
503 | 486 | ||
504 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 487 | const void * pcm_rec_dma_get_peak_buffer(void) |
505 | { | 488 | { |
506 | unsigned long addr, end; | 489 | return (void *)(DAR1 & ~3); |
507 | |||
508 | /* Make sure interrupt doesn't change the second value after we read the | ||
509 | * first value. */ | ||
510 | int level = set_irq_level(DMA_IRQ_LEVEL); | ||
511 | addr = (unsigned long)pcm_rec_peak_addr; | ||
512 | end = DAR1; | ||
513 | restore_irq(level); | ||
514 | |||
515 | addr >>= 2; | ||
516 | *count = (end >> 2) - addr; | ||
517 | return (void *)(addr << 2); | ||
518 | } /* pcm_rec_dma_get_peak_buffer */ | 490 | } /* pcm_rec_dma_get_peak_buffer */ |
519 | #endif | 491 | #endif |
diff --git a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c index a4ecd0b786..993f70bad8 100644 --- a/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c +++ b/firmware/target/mips/ingenic_jz47xx/pcm-jz4740.c | |||
@@ -288,13 +288,12 @@ void pcm_rec_unlock(void) | |||
288 | { | 288 | { |
289 | } | 289 | } |
290 | 290 | ||
291 | const void * pcm_rec_dma_get_peak_buffer(int *count) | 291 | const void * pcm_rec_dma_get_peak_buffer(void) |
292 | { | 292 | { |
293 | *count = 0; | ||
294 | return NULL; | 293 | return NULL; |
295 | } | 294 | } |
296 | 295 | ||
297 | void pcm_record_more(void *start, size_t size) | 296 | void pcm_rec_dma_record_more(void *start, size_t size) |
298 | { | 297 | { |
299 | (void) start; | 298 | (void) start; |
300 | (void) size; | 299 | (void) size; |