📄 transfer.c
字号:
/*
* COPYRIGHT (c) 1995,2000 TriMedia Technologies Inc.
*
* +-----------------------------------------------------------------+
* | THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY ONLY BE USED |
* | AND COPIED IN ACCORDANCE WITH THE TERMS AND CONDITIONS OF SUCH |
* | A LICENSE AND WITH THE INCLUSION OF THE THIS COPY RIGHT NOTICE. |
* | THIS SOFTWARE OR ANY OTHER COPIES OF THIS SOFTWARE MAY NOT BE |
* | PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHER PERSON. THE |
* | OWNERSHIP AND TITLE OF THIS SOFTWARE IS NOT TRANSFERRED. |
* +-----------------------------------------------------------------+
*
* Module name : transfer.c 1.2
*
* Module type : IMPLEMENTATION
*
* Title : Interprocessor data streaming
*
* Author : Juul van der Spek
*
* Last update : 13:45:59 - 00/06/19
*
* Description :
*
* This module contains a function which
* copies data from a PCI address to a local
* buffer in SDRAM using DMA.
*
* Because cache invalidations of the local
* buffer are required, it is required to
* be allocated using function _cache_malloc.
*/
/* ------------------------------------------------------ */
#include "tm1/tmDMA.h"
/* ------------------------------------------------------ */
static Int dma_instance;
static Bool dma_opened= False;
void transfer( Char *local, Char *remote, Int size )
{
dmaRequest_t request;
if (!dma_opened) {
dmaOpen(&dma_instance);
dma_opened= True;
}
request.slack_function = Null;
request.completion_function = Null;
request.nr_of_descriptions = 1;
request.mode = dmaSynchronous;
request.done = False;
request.descriptions->direction = dmaPCI_TO_SDRAM;
request.descriptions->source = remote;
request.descriptions->destination = local;
request.descriptions->length = size;
request.descriptions->nr_of_transfers = 1;
dmaDispatch(dma_instance, &request);
_cache_invalidate(local,size);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -