Files
ClassiCube-PPC-for-MacOSX-10.4/third_party/dsiwifi/arm_iop/source/wifi_ndma.h

73 lines
2.1 KiB
C

/*
* Copyright (c) 2021 Max Thomas
* This file is part of DSiWifi and is distributed under the MIT license.
* See dsiwifi_license.txt for terms of use.
*/
#ifndef _DSIWIFI_WIFI_NDMA_H
#define _DSIWIFI_WIFI_NDMA_H
#include <nds.h>
#ifdef ARM11
#define REG_NDMA_BASE ((void*)0x10002000)
#else
#define REG_NDMA_BASE ((void*)0x04004100) // DSi ARM7
#endif
// Regs
#define REG_NDMA_GLOBAL_CNT (*(vu32*)(REG_NDMA_BASE + 0x0000))
#define REG_NDMA_SRC_ADDR(n) (*(vu32*)(REG_NDMA_BASE + 0x0004 + ((n) * 0x1C)))
#define REG_NDMA_DST_ADDR(n) (*(vu32*)(REG_NDMA_BASE + 0x0008 + ((n) * 0x1C)))
#define REG_NDMA_TRANSFER_CNT(n) (*(vu32*)(REG_NDMA_BASE + 0x000C + ((n) * 0x1C)))
#define REG_NDMA_WRITE_CNT(n) (*(vu32*)(REG_NDMA_BASE + 0x0010 + ((n) * 0x1C)))
#define REG_NDMA_BLOCK_CNT(n) (*(vu32*)(REG_NDMA_BASE + 0x0014 + ((n) * 0x1C)))
#define REG_NDMA_FILL_DATA(n) (*(vu32*)(REG_NDMA_BASE + 0x0018 + ((n) * 0x1C)))
#define REG_NDMA_CNT(n) (*(vu32*)(REG_NDMA_BASE + 0x001C + ((n) * 0x1C)))
// NDMA_GLOBAL_CNT bits
#define NDMA_GLOBAL_ENABLE (BIT(0))
#define NDMA_ROUND_ROBIN (1 << 31)
#define NDMA_FIXED_METHOD (0 << 31)
// NDMA_CNT bits
#define NDMA_ENABLE (BIT(31))
#define NDMA_IRQ_ENABLE (BIT(30))
#define NDMA_REPEATING_MODE (BIT(29))
#define NDMA_IMMEDIATE_MODE (BIT(28))
#define NDMA_STARTUP_MODE(n) ((n & 0xF) << 24)
#define NDMA_BLOCK_SIZE(n) ((n & 0xF) << 16)
#define NDMA_SRC_RELOAD (BIT(15))
#define NDMA_SRC_MODE(n) ((n & 3) << 13)
#define NDMA_DST_RELOAD (BIT(12))
#define NDMA_DST_MODE(n) ((n & 3) << 10)
// NDMA_STARTUP_MODE
#define NDMA_STARTUP_WIFI (9)
// SRC/DST_MODE
#define NDMA_MODE_INC (0)
#define NDMA_MODE_DEC (1)
#define NDMA_MODE_FIXED (2)
#define NDMA_MODE_FILL (3)
// End NDMA_CNT
#define NDMA_MAX_CHANNELS (4)
#define WIFI_NDMA_CHAN (3)
//
// Functions
//
void wifi_ndma_init();
void wifi_ndma_read(void* dst, u32 len);
void wifi_ndma_write(void* src, u32 len);
void wifi_ndma_wait();
#endif // _DSIWIFI_WIFI_NDMA_H