Files
mckernel/kernel/copy.c
Tomoki Shirasawa e112aa8b06 remove DMA call
2014-03-30 16:14:19 +09:00

53 lines
1.0 KiB
C

/**
* \file copy.c
* License details are found in the file LICENSE.
* \brief
* Memory copy using DMA controller
* \author Taku Shimosawa <shimosawa@is.s.u-tokyo.ac.jp> \par
* Copyright (C) 2011 - 2012 Taku Shimosawa
*/
/*
* HISTORY:
*/
#ifdef USE_DMA
#include <ihk/dma.h>
#include <amemcpy.h>
int memcpy_async(unsigned long dest, unsigned long src,
unsigned long len, int wait, unsigned long *notify)
{
struct ihk_dma_request req;
unsigned long fin = 0;
if (notify)
*notify = 0;
memset(&req, 0, sizeof(req));
/* Physical */
req.src_os = (ihk_os_t)IHK_THIS_OS;
req.src_phys = src;
req.dest_os = (ihk_os_t)IHK_THIS_OS;
req.dest_phys = dest;
req.size = len;
if (notify) {
req.notify_os = (ihk_os_t)IHK_THIS_OS;
req.notify = (void *)virt_to_phys(notify);
req.priv = (void *)1;
} else if (wait) {
req.notify_os = (ihk_os_t)IHK_THIS_OS;
req.notify = (void *)virt_to_phys(&fin);
req.priv = (void *)1;
}
ihk_mc_dma_request(0, &req);
if (wait) {
while (!fin) {
barrier();
}
}
return 0;
}
#endif