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