X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Fdma.c;h=dd8e88f7069642ccfd0477a1f97d5cbe272c0eea;hb=c967d91a4794ec9c0ec7dab438c033f4c0b49952;hp=750b180d6f686f4d04b7824a4063152ed3e047bb;hpb=1e25b20fd5d119d3b5673d6a31f60b2da676de98;p=tpg%2Facess2.git diff --git a/Kernel/drv/dma.c b/Kernel/drv/dma.c index 750b180d..dd8e88f7 100644 --- a/Kernel/drv/dma.c +++ b/Kernel/drv/dma.c @@ -20,9 +20,10 @@ typedef struct } t_dmaChannel; // === PROTOTYPES === - int DMA_Install(); + int DMA_Install(char **Arguments); void DMA_SetChannel(int Channel, int length, int read); int DMA_ReadData(int channel, int count, void *buffer); + int DMA_WriteData(int channel, int count, const void *buffer); // === CONSTANTS === const Uint8 cMASKPORT [8] = { 0x0A, 0x0A, 0x0A, 0x0A, 0xD4, 0xD4, 0xD4, 0xD4 }; @@ -39,10 +40,10 @@ t_dmaChannel dma_channels[8]; // === CODE === /** - * \fn int DMA_Install() * \brief Initialise DMA channels + * \param Arguments Arguments passed at boot time */ -int DMA_Install() +int DMA_Install(char **Arguments) { Uint i; for(i=8;i--;) @@ -105,3 +106,19 @@ int DMA_ReadData(int channel, int count, void *buffer) memcpy(buffer, dma_addresses[channel], count); return 0; } + +/** + * \fn void DMA_WriteData(int channel, int count, void *buffer) + * \brief Write data to a DMA buffer + */ +int DMA_WriteData(int channel, int count, const void *buffer) +{ + if(channel < 0 || channel > 7) + return -1; + if(count < 0 || count > DMA_SIZE) + return -2; + + memcpy(dma_addresses[channel], buffer, count); + + return 0; +}