Added Dma

This commit is contained in:
plutooo 2018-04-15 20:22:03 +02:00
parent 1e51ea6662
commit 8b5b328a1f
6 changed files with 48 additions and 1 deletions

View File

@ -63,19 +63,22 @@ extern "C" {
#include "switch/nvidia/info.h" #include "switch/nvidia/info.h"
#include "switch/nvidia/fence.h" #include "switch/nvidia/fence.h"
#include "switch/nvidia/rect.h" #include "switch/nvidia/rect.h"
#include "switch/nvidia/gpu/cmd_list.h" #include "switch/nvidia/gpu/cmd_list.h"
#include "switch/nvidia/gpu/gpfifo.h" #include "switch/nvidia/gpu/gpfifo.h"
#include "switch/nvidia/gpu/zcull_ctx.h" #include "switch/nvidia/gpu/zcull_ctx.h"
#include "switch/nvidia/gpu/3d_ctx.h" #include "switch/nvidia/gpu/3d_ctx.h"
#include "switch/nvidia/gpu/error_notifier.h" #include "switch/nvidia/gpu/error_notifier.h"
#include "switch/nvidia/gpu/gpu.h" #include "switch/nvidia/gpu/gpu.h"
#include "switch/nvidia/cmds/vn.h"
#include "switch/nvidia/cmds/common.h" #include "switch/nvidia/cmds/common.h"
#include "switch/nvidia/cmds/3d.h" #include "switch/nvidia/cmds/3d.h"
#include "switch/nvidia/cmds/3d_init.h" #include "switch/nvidia/cmds/3d_init.h"
#include "switch/nvidia/cmds/3d_rendertarget.h" #include "switch/nvidia/cmds/3d_rendertarget.h"
#include "switch/nvidia/cmds/3d_viewport.h" #include "switch/nvidia/cmds/3d_viewport.h"
#include "switch/nvidia/cmds/3d_clear.h" #include "switch/nvidia/cmds/3d_clear.h"
#include "switch/nvidia/cmds/dma.h"
#include "switch/nvidia/cmds/dma_copy.h"
#include "switch/runtime/env.h" #include "switch/runtime/env.h"
#include "switch/runtime/nxlink.h" #include "switch/runtime/nxlink.h"

View File

@ -0,0 +1,13 @@
enum {
NvRegDma_Launch = 0xC0,
NvRegDma_SourceAddr = 0x100,
NvRegDma_DestinationAddr = 0x102,
NvRegDma_SourcePitch = 0x104,
NvRegDma_DestinationPitch = 0x105,
NvRegDma_Count = 0x106,
/*
0x1C0 MemsetValue? 1 uint
0x1C2 MemsetControl? 1 bitfield Seen: 0x34444
0x1C4 MemsetLength? 1 uint In units of 4 bytes.
*/
};

View File

@ -0,0 +1 @@
void vnDmaCopy(Vn* vn, iova_t dst, iova_t src, size_t num);

View File

@ -0,0 +1,30 @@
#include <switch.h>
#include <string.h>
#define DMA_MAXCOPY 0x3FFFFF
void vnDmaCopy(Vn* vn, iova_t dst, iova_t src, size_t num) {
while (num) {
size_t part = num;
if (part >= DMA_MAXCOPY)
part = DMA_MAXCOPY;
vnAddCmd(
vn,
NvIncr(
4, NvRegDma_SourceAddr,
src>>32, src,
dst>>32, dst,
1, 1,
part
),
NvImm(
4, NvRegDma_Launch,
0x186
)
);
num -= part;
}
}

View File