1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - -include - PXI
3 File: pxi_fifo.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-09-17#$
14 $Rev: 8556 $
15 $Author: okubata_ryoma $
16 *---------------------------------------------------------------------------*/
17
18 #ifndef NITRO_PXI_COMMON_FIFO_H_
19 #define NITRO_PXI_COMMON_FIFO_H_
20
21 #include <nitro/types.h>
22 #include <nitro/memorymap.h>
23 #include <nitro/pxi/common/regname.h>
24
25
26 #ifdef __cplusplus
27 extern "C" {
28 #endif
29
30 /* TAG ID definition */
31 typedef enum
32 {
33 PXI_FIFO_TAG_EX = 0, // Extension format
34 PXI_FIFO_TAG_USER_0, // for application programmer, use it in free
35 PXI_FIFO_TAG_USER_1, // for application programmer, use it in free
36 PXI_FIFO_TAG_SYSTEM, // SDK inner usage
37 PXI_FIFO_TAG_NVRAM, // NVRAM
38 PXI_FIFO_TAG_RTC, // RTC
39 PXI_FIFO_TAG_TOUCHPANEL, // Touch Panel
40 PXI_FIFO_TAG_SOUND, // Sound
41 PXI_FIFO_TAG_PM, // Power Management
42 PXI_FIFO_TAG_MIC, // Microphone
43 PXI_FIFO_TAG_WM, // Wireless Manager
44 PXI_FIFO_TAG_FS, // File System
45 PXI_FIFO_TAG_OS, // OS
46 PXI_FIFO_TAG_CTRDG, // Cartridge
47 PXI_FIFO_TAG_CARD, // Card
48 PXI_FIFO_TAG_WVR, // Control driving wireless library
49 PXI_FIFO_TAG_CTRDG_Ex, // Cartridge Ex
50 PXI_FIFO_TAG_CTRDG_PHI, // Cartridge PHI
51 #ifdef SDK_TWL
52 PXI_FIFO_TAG_MI, // MI
53 PXI_FIFO_TAG_AES, // AES
54 PXI_FIFO_TAG_FATFS, // FATFS
55 PXI_FIFO_TAG_CAMERA, // CAMERA
56 PXI_FIFO_TAG_WMW, // WM
57 PXI_FIFO_TAG_SCFG, // SCFG
58 PXI_FIFO_TAG_SNDEX, // SNDEX
59
60 PXI_FIFO_TAG_SEA = 31, // SEA
61 #endif
62
63 PXI_MAX_FIFO_TAG = 32 // MAX FIFO TAG
64 }
65 PXIFifoTag;
66
67
68 /* for Compatibility */
69 #define PXI_FIFO_DEVICE_TEST PXI_FIFO_TAG_USR_0
70 #define PXI_FIFO_DEVICE_FLASH PXI_FIFO_TAG_NVRAM
71 #define PXI_FIFO_DEVICE_RTC PXI_FIFO_TAG_RTC
72 #define PXI_FIFO_DEVICE_TOUCHPANEL PXI_FIFO_TAG_TOUCHPANEL
73 #define PXI_MAX_DEVICES PXI_MAX_FIFO_TAG
74
75
76 /* PXI_FIFO return code */
77 typedef enum
78 {
79 PXI_FIFO_SUCCESS = 0,
80 PXI_FIFO_FAIL_SEND_ERR = -1,
81 PXI_FIFO_FAIL_SEND_FULL = -2,
82 PXI_FIFO_FAIL_RECV_ERR = -3,
83 PXI_FIFO_FAIL_RECV_EMPTY = -4,
84 PXI_FIFO_NO_CALLBACK_ENTRY = -5
85 }
86 PXIFifoStatus;
87
88
89 /* type definition */
90 #define PXI_FIFOMESSAGE_BITSZ_TAG 5
91 #define PXI_FIFOMESSAGE_BITSZ_ERR 1
92 #define PXI_FIFOMESSAGE_BITSZ_DATA 26
93 typedef union
94 {
95 struct
96 {
97 u32 tag:PXI_FIFOMESSAGE_BITSZ_TAG;
98 u32 err:PXI_FIFOMESSAGE_BITSZ_ERR;
99 u32 data:PXI_FIFOMESSAGE_BITSZ_DATA;
100 }
101 e;
102 u32 raw;
103
104 }
105 PXIFifoMessage;
106
107
108 // type definition
109 typedef void (*PXIFifoCallback) (PXIFifoTag tag, u32 data, BOOL err);
110 typedef void (*PXIFifoEmtpyCallback) (void);
111
112
113 /*---------------------------------------------------------------------------*
114 Name: PXI_IsFifoError
115
116 Description: Check if error on fifo?
117
118 Arguments: status Status
119
120 Returns: None.
121 *---------------------------------------------------------------------------*/
PXI_IsFifoError(PXIFifoStatus status)122 static inline BOOL PXI_IsFifoError(PXIFifoStatus status)
123 {
124 return PXI_FIFO_SUCCESS == status;
125 }
126
127
128 /*---------------------------------------------------------------------------*
129 Name: PXI_InitFifo
130
131 Description: initialize FIFO system
132
133 Arguments: None.
134
135 Returns: None.
136 *---------------------------------------------------------------------------*/
137 void PXI_InitFifo(void);
138
139
140 /*---------------------------------------------------------------------------*
141 Name: PXI_SetFifoRecvCallback
142
143 Description: set callback function when data arrive via FIFO
144
145 Arguments: device_no DEVICE NO.
146 callback callback function to be called
147
148 Returns: None.
149 *---------------------------------------------------------------------------*/
150 void PXI_SetFifoRecvCallback(int fifotag, PXIFifoCallback callback);
151
152
153 /*---------------------------------------------------------------------------*
154 Name: PXI_IsCallbackReady
155 PXI_IsArm7CallbackReady
156 PXI_IsArm9CallbackReady
157
158 Description: check if callback is ready
159
160 Arguments: fifotag fifo tag NO (0-31)
161 proc processor name PXI_PROC_ARM9 or PXI_PROC_ARM7
162
163 Returns: TRUE if callback is ready
164 *---------------------------------------------------------------------------*/
165 BOOL PXI_IsCallbackReady(int fifotag, PXIProc proc);
166
PXI_IsArm7CallbackReady(int fifotag)167 static inline BOOL PXI_IsArm7CallbackReady(int fifotag)
168 {
169 return PXI_IsCallbackReady(fifotag, PXI_PROC_ARM7);
170 }
171
PXI_IsArm9CallbackReady(int fifotag)172 static inline BOOL PXI_IsArm9CallbackReady(int fifotag)
173 {
174 return PXI_IsCallbackReady(fifotag, PXI_PROC_ARM9);
175 }
176
177
178 /*---------------------------------------------------------------------------*
179 Name: PXI_SetFifoSendCallback
180
181 Description: set callback function when data is sent via FIFO
182
183 Arguments: callback callback function to be called
184
185 Returns: None.
186 *---------------------------------------------------------------------------*/
187 void PXI_SetFifoSendCallback(PXIFifoEmtpyCallback callback);
188
189
190 /*---------------------------------------------------------------------------*
191 Name: PXI_SendWordByFifo
192
193 Description: Send 32bit-word to anothre CPU via FIFO
194
195 Arguments: device_no DEVICE NO.
196 data data(26-bit) whichi is sent
197
198 Returns: if error occured, returns minus value
199 *---------------------------------------------------------------------------*/
200 int PXI_SendWordByFifo(int fifotag, u32 data, BOOL err);
201
202
203 //======================================================================
204 // Interrupt handler called when RECV FIFO not empty
205 //======================================================================
206 void PXIi_HandlerRecvFifoNotEmpty(void);
207
208 #ifdef __cplusplus
209 } /* extern "C" */
210 #endif
211
212 #endif /* NITRO_PXI_COMMON_FIFO_H_ */
213