summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/arm/lpc176x/misc/dma-copy.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/arm/lpc176x/misc/dma-copy.c')
-rw-r--r--c/src/lib/libbsp/arm/lpc176x/misc/dma-copy.c220
1 files changed, 0 insertions, 220 deletions
diff --git a/c/src/lib/libbsp/arm/lpc176x/misc/dma-copy.c b/c/src/lib/libbsp/arm/lpc176x/misc/dma-copy.c
deleted file mode 100644
index 0e0b37dbd3..0000000000
--- a/c/src/lib/libbsp/arm/lpc176x/misc/dma-copy.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/**
- * @file
- *
- * @ingroup lpc176x_dma
- *
- * @brief Direct memory access (DMA) support.
- */
-
-/*
- * Copyright (c) 2008, 2009
- * embedded brains GmbH
- * Obere Lagerstr. 30
- * D-82178 Puchheim
- * Germany
- * <rtems@embedded-brains.de>
- *
- * The license and distribution terms for this file may be
- * found in the file LICENSE in this distribution or at
- * http://www.rtems.org/license/LICENSE.
- */
-
-#include <bsp/lpc176x.h>
-#include <bsp/dma.h>
-#include <bsp/irq.h>
-
-static rtems_id lpc176x_dma_sema_table[ GPDMA_CH_NUMBER ];
-static bool lpc176x_dma_status_table[ GPDMA_CH_NUMBER ];
-
-static void lpc176x_dma_copy_handler( void *arg )
-{
- /* Get interrupt status */
- uint32_t tc = GPDMA_INT_TCSTAT;
- uint32_t err = GPDMA_INT_ERR_STAT;
-
- /* Clear interrupt status */
- GPDMA_INT_TCCLR = tc;
- GPDMA_INT_ERR_CLR = err;
-
- if ( ( tc & GPDMA_STATUS_CH_0 ) != 0 ) {
- rtems_semaphore_release( lpc176x_dma_sema_table[ 0 ] );
- }
-
- /* else implies that the channel is not the 0. Also,
- there is nothing to do. */
-
- lpc176x_dma_status_table[ 0 ] = ( err & GPDMA_STATUS_CH_0 ) == 0;
-
- if ( ( tc & GPDMA_STATUS_CH_1 ) != 0 ) {
- rtems_semaphore_release( lpc176x_dma_sema_table[ 1 ] );
- }
-
- /* else implies that the channel is not the 1. Also,
- there is nothing to do. */
-
- lpc176x_dma_status_table[ 1 ] = ( err & GPDMA_STATUS_CH_1 ) == 0;
-}
-
-rtems_status_code lpc176x_dma_copy_initialize( void )
-{
- rtems_status_code status_code = RTEMS_SUCCESSFUL;
- rtems_id id0 = RTEMS_ID_NONE;
- rtems_id id1 = RTEMS_ID_NONE;
-
- /* Create semaphore for channel 0 */
- status_code = rtems_semaphore_create( rtems_build_name( 'D', 'M', 'A', '0' ),
- 0,
- RTEMS_LOCAL | RTEMS_FIFO | RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &id0 );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- return status_code;
- }
-
- /* else implies that the semaphore to the channel 0 was created succefully.
- Also, there is nothing to do. */
-
- /* Create semaphore for channel 1 */
- status_code = rtems_semaphore_create( rtems_build_name( 'D', 'M', 'A', '1' ),
- 0,
- RTEMS_LOCAL | RTEMS_FIFO | RTEMS_SIMPLE_BINARY_SEMAPHORE,
- 0,
- &id1 );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- rtems_semaphore_delete( id0 );
-
- return status_code;
- }
-
- /* else implies that the semaphore to the channel 1 was created succefully.
- Also, there is nothing to do. */
-
- /* Install DMA interrupt handler */
- status_code = rtems_interrupt_handler_install( LPC176X_IRQ_DMA,
- "DMA copy",
- RTEMS_INTERRUPT_UNIQUE,
- lpc176x_dma_copy_handler,
- NULL );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- rtems_semaphore_delete( id0 );
- rtems_semaphore_delete( id1 );
-
- return status_code;
- }
-
- /* else implies that the interrupt handler was installed succefully. Also,
- there is nothing to do. */
-
- /* Initialize global data */
- lpc176x_dma_sema_table[ 0 ] = id0;
- lpc176x_dma_sema_table[ 1 ] = id1;
-
- return RTEMS_SUCCESSFUL;
-}
-
-rtems_status_code lpc176x_dma_copy_release( void )
-{
- rtems_status_code status_code = RTEMS_SUCCESSFUL;
- rtems_status_code status_code_aux = RTEMS_SUCCESSFUL;
-
- status_code = rtems_interrupt_handler_remove( LPC176X_IRQ_DMA,
- lpc176x_dma_copy_handler,
- NULL );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- status_code_aux = status_code;
- }
-
- /* else implies that the interrupt handler was removed succefully. Also,
- there is nothing to do. */
-
- status_code = rtems_semaphore_delete( lpc176x_dma_sema_table[ 0 ] );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- status_code_aux = status_code;
- }
-
- /* else implies that the semaphore to the channel 0 was deleted succefully.
- Also, there is nothing to do. */
-
- status_code = rtems_semaphore_delete( lpc176x_dma_sema_table[ 1 ] );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- status_code_aux = status_code;
- }
-
- /* else implies that the semaphore to the channel 1 was deleted succefully.
- Also, there is nothing to do. */
-
- return status_code_aux;
-}
-
-rtems_status_code lpc176x_dma_copy(
- unsigned channel,
- const void *const dest,
- const void *const src,
- size_t n,
- const size_t width
-)
-{
- rtems_status_code status_code = RTEMS_SUCCESSFUL;
- volatile lpc176x_dma_channel *e = GPDMA_CH_BASE_ADDR( channel );
- uint32_t w = GPDMA_CH_CTRL_W_8;
-
- switch ( width ) {
- case 4:
- w = GPDMA_CH_CTRL_W_32;
- break;
- case 2:
- w = GPDMA_CH_CTRL_W_16;
- break;
- }
-
- n = n >> w;
-
- if ( n > 0 && n < 4096 ) {
- e->desc.src = (uint32_t) src;
- e->desc.dest = (uint32_t) dest;
- e->desc.lli = 0;
- e->desc.ctrl = SET_GPDMA_CH_CTRL_TSZ( 0, n ) |
- SET_GPDMA_CH_CTRL_SBSZ( 0, GPDMA_CH_CTRL_BSZ_1 ) |
- SET_GPDMA_CH_CTRL_DBSZ( 0, GPDMA_CH_CTRL_BSZ_1 ) |
- SET_GPDMA_CH_CTRL_SW( 0, w ) |
- SET_GPDMA_CH_CTRL_DW( 0, w ) |
- GPDMA_CH_CTRL_ITC |
- GPDMA_CH_CTRL_SI |
- GPDMA_CH_CTRL_DI;
- e->cfg = SET_GPDMA_CH_CFG_FLOW( 0, GPDMA_CH_CFG_FLOW_MEM_TO_MEM_DMA ) |
- GPDMA_CH_CFG_IE |
- GPDMA_CH_CFG_ITC |
- GPDMA_CH_CFG_EN;
- } else {
- status_code = RTEMS_INVALID_SIZE;
- }
-
- return status_code;
-}
-
-rtems_status_code lpc176x_dma_copy_wait( const unsigned channel )
-{
- rtems_status_code status_code = RTEMS_SUCCESSFUL;
-
- status_code = rtems_semaphore_obtain( lpc176x_dma_sema_table[ channel ],
- RTEMS_WAIT,
- RTEMS_NO_TIMEOUT );
-
- if ( status_code != RTEMS_SUCCESSFUL ) {
- return status_code;
- }
-
- /* else implies that the semaphore was obtained succefully. Also,
- there is nothing to do. */
-
- status_code = lpc176x_dma_status_table[ channel ]
- ? RTEMS_SUCCESSFUL : RTEMS_IO_ERROR;
-
- return status_code;
-}