rockbox/firmware/target/arm/tms320dm320/dma-dm320.c

79 lines
2.3 KiB
C
Raw Normal View History

/***************************************************************************
* __________ __ ___.
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
* \/ \/ \/ \/ \/
* $Id: $
*
* Copyright (C) 2011 by Tomasz Moń
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
* KIND, either express or implied.
*
****************************************************************************/
#include "config.h"
#include "kernel.h"
#include "thread.h"
#include "system.h"
#include "dma-target.h"
#include "dm320.h"
#include <stdbool.h>
void dma_init(void)
{
/* TODO */
}
/*
Requests channel for peripheral.
Returns channel assigned for caller which must be released after
transfer complete using dma_release_channel().
*/
int dma_request_channel(int peripheral, int mode)
{
/* TODO: proper checking if channel is already taken
currently only SDMMC and DSP uses DMA on this target */
int channel = -1;
if (peripheral == DMA_PERIPHERAL_MMCSD)
{
/* Set first DMA channel */
IO_SDRAM_SDDMASEL = (IO_SDRAM_SDDMASEL & 0xFFE0) | peripheral |
(mode << 3);
channel = 1;
}
else if (peripheral == DMA_PERIPHERAL_DSP)
{
/* Set second DMA channel */
IO_SDRAM_SDDMASEL = (IO_SDRAM_SDDMASEL & 0xFC1F) |
(peripheral << 5) |
(mode << 8);
channel = 2;
}
else if (peripheral == DMA_PERIPHERAL_SIF)
{
IO_SDRAM_SDDMASEL = (IO_SDRAM_SDDMASEL & 0x83FF) |
(peripheral << 10) |
(mode << 13);
channel = 3;
}
return channel;
}
void dma_release_channel(int channel)
{
(void)channel;
/* TODO */
}