kos_sys/dc/
dmac.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// Rust for KallistiOS/Dreamcast
// Copyright (C) 2024 Eric Fradella
// https://dreamcast.rs/

use crate::prelude::*;
use core::ptr::write_volatile;

pub const DMAC_BASE: c_uintptr_t        = 0xffa00000;

#[inline]
pub fn DMAC_SAR0(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x00) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_SAR1(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x10) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_SAR2(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x20) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_SAR3(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x30) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DAR0(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x04) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DAR1(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x14) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DAR2(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x24) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DAR3(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x34) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DMATCR0(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x08) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DMATCR1(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x18) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DMATCR2(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x28) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DMATCR3(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x38) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_CHCR0(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x0c) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_CHCR1(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x1c) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_CHCR2(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x2c) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_CHCR3(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x3c) as *mut u32, value);
    }
}

#[inline]
pub fn DMAC_DMAOR(value: u32) {
    unsafe {
        write_volatile((DMAC_BASE + 0x40) as *mut u32, value);
    }
}

pub const DMAOR_STATUS_MASK: u32        = 0x8007;
pub const DMAOR_NORMAL_OPERATION: u32   = 0x8001;