1 /*---------------------------------------------------------------------------*
2   Project:  TwlSDK - MI
3   File:     mi_dma_hblank.c
4 
5   Copyright 2003-2008 Nintendo.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Date:: 2008-10-16#$
14   $Rev: 8957 $
15   $Author: yada $
16  *---------------------------------------------------------------------------*/
17 
18 #ifdef SDK_ARM9
19 #include <nitro.h>
20 #include "../include/mi_dma.h"
21 
22 /*---------------------------------------------------------------------------*
23   Name:         MI_HBlankDmaCopy32
24 
25   Description:  HBlank DMA copy.
26                 32bit.
27 
28   Arguments:    dmaNo   : DMA channel No.
29                 src     : source address
30                 dest    : destination address
31                 size    : transfer size (byte)
32 
33   Returns:      None
34  *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy32(u32 dmaNo,const void * src,void * dest,u32 size)35 void MI_HBlankDmaCopy32(u32 dmaNo, const void *src, void *dest, u32 size)
36 {
37     MIi_ASSERT_DMANO(dmaNo);
38     MIi_ASSERT_SRC_ALIGN4(src);
39     MIi_ASSERT_DEST_ALIGN4(dest);
40     MIi_WARNING_ADDRINTCM(src, size);
41     MIi_WARNING_ADDRINTCM(dest, size);
42 
43     MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
44     MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
45     if (size == 0)
46     {
47         return;
48     }
49 
50     MI_WaitDma(dmaNo);
51 //    MIi_DmaSetParams(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY32(size));
52     MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY32(size), 0);
53 }
54 
55 /*---------------------------------------------------------------------------*
56   Name:         MI_HBlankDmaCopy16
57 
58   Description:  HBlank DMA copy.
59                 16bit.
60 
61   Arguments:    dmaNo   : DMA channel No.
62                 src     : source address
63                 dest    : destination address
64                 size    : transfer size (byte)
65 
66   Returns:      None
67  *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy16(u32 dmaNo,const void * src,void * dest,u32 size)68 void MI_HBlankDmaCopy16(u32 dmaNo, const void *src, void *dest, u32 size)
69 {
70     MIi_ASSERT_DMANO(dmaNo);
71     MIi_ASSERT_SRC_ALIGN2(src);
72     MIi_ASSERT_DEST_ALIGN2(dest);
73     MIi_WARNING_ADDRINTCM(src, size);
74     MIi_WARNING_ADDRINTCM(dest, size);
75 
76     MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
77     MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
78     if (size == 0)
79     {
80         return;
81     }
82 
83     MI_WaitDma(dmaNo);
84     MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY16(size), 0);
85 }
86 
87 /*---------------------------------------------------------------------------*
88   Name:         MI_HBlankDmaCopy32If
89 
90   Description:  HBlank DMA copy.
91                 32bit.
92                 occur interrupt when finish DMA.
93 
94   Arguments:    dmaNo   : DMA channel No.
95                 src     : source address
96                 dest    : destination address
97                 size    : transfer size (byte)
98 
99   Returns:      None
100  *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy32If(u32 dmaNo,const void * src,void * dest,u32 size)101 void MI_HBlankDmaCopy32If(u32 dmaNo, const void *src, void *dest, u32 size)
102 {
103     MIi_ASSERT_DMANO(dmaNo);
104     MIi_ASSERT_SRC_ALIGN4(src);
105     MIi_ASSERT_DEST_ALIGN4(dest);
106     MIi_WARNING_ADDRINTCM(src, size);
107     MIi_WARNING_ADDRINTCM(dest, size);
108 
109     MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
110     MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
111     if (size == 0)
112     {
113         return;
114     }
115 
116     MI_WaitDma(dmaNo);
117     MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY32_IF(size), 0);
118 }
119 
120 /*---------------------------------------------------------------------------*
121   Name:         MI_HBlankDmaCopy16If
122 
123   Description:  HBlank DMA copy.
124                 16bit.
125                 occur interrupt when finish DMA.
126 
127   Arguments:    dmaNo   : DMA channel No.
128                 src     : source address
129                 dest    : destination address
130                 size    : transfer size (byte)
131 
132   Returns:      None
133  *---------------------------------------------------------------------------*/
MI_HBlankDmaCopy16If(u32 dmaNo,const void * src,void * dest,u32 size)134 void MI_HBlankDmaCopy16If(u32 dmaNo, const void *src, void *dest, u32 size)
135 {
136     MIi_ASSERT_DMANO(dmaNo);
137     MIi_ASSERT_SRC_ALIGN2(src);
138     MIi_ASSERT_DEST_ALIGN2(dest);
139     MIi_WARNING_ADDRINTCM(src, size);
140     MIi_WARNING_ADDRINTCM(dest, size);
141 
142     MIi_CheckAnotherAutoDMA(dmaNo, MI_DMA_TIMING_H_BLANK);
143     MIi_CheckDma0SourceAddress(dmaNo, (u32)src, size, MI_DMA_SRC_INC);
144     if (size == 0)
145     {
146         return;
147     }
148 
149     MI_WaitDma(dmaNo);
150     MIi_DmaSetParameters(dmaNo, (u32)src, (u32)dest, MI_CNT_HBCOPY16_IF(size), 0);
151 }
152 #endif // SDK_ARM9
153