1 /*---------------------------------------------------------------------------*
2 Project: TwlSDK - OS
3 File: os_pxit.c
4
5 Copyright 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-05-15#$
14 $Rev: 6002 $
15 $Author: naksima $
16 *---------------------------------------------------------------------------*/
17 #include <nitro.h>
18
19
20 //---------------- local variables
21 static vu16 OSi_IsResetOccurred = FALSE;
22 static vu16 OSi_IsTerminateOccurred = FALSE;
23
24
25 //================================================================================
26 /*---------------------------------------------------------------------------*
27 Name: OS_IsResetOccurred
28
29 Description: get status whethre reset event occurred
30
31 Arguments: None.
32
33 Returns: TRUE : if reset event occurred
34 FALSE : if not
35 *---------------------------------------------------------------------------*/
OS_IsResetOccurred(void)36 BOOL OS_IsResetOccurred(void)
37 {
38 return OSi_IsResetOccurred;
39 }
40
41 #ifdef SDK_TWL
42
43 /*---------------------------------------------------------------------------*
44 Name: OSi_IsTerminatePxiOccurred
45
46 Description: get status whethre terminate event occurred
47
48 Arguments: None.
49
50 Returns: TRUE : if terminate event occurred
51 FALSE : if not
52 *---------------------------------------------------------------------------*/
OSi_IsTerminatePxiOccurred(void)53 BOOL OSi_IsTerminatePxiOccurred(void)
54 {
55 return OSi_IsTerminateOccurred;
56 }
57
58 /*---------------------------------------------------------------------------*
59 Name: OSi_SetTerminatePxiOccurred
60
61 Description: set status of terminate event occurred
62
63 Arguments: None.
64
65 Returns: None.
66 *---------------------------------------------------------------------------*/
OSi_SetTerminatePxiOccurred(void)67 void OSi_SetTerminatePxiOccurred(void)
68 {
69 OSi_IsTerminateOccurred = TRUE;
70 }
71
72 #endif // SDK_TWL
73
74 /*---------------------------------------------------------------------------*
75 Name: OSi_CommonCallback
76
77 Description: PXI callback for OS tag
78
79 Arguments: tag : not used
80 data : data sent from another processor
81 err : not used
82
83 Returns: None.
84 *---------------------------------------------------------------------------*/
OSi_CommonCallback(PXIFifoTag tag,u32 data,BOOL err)85 void OSi_CommonCallback(PXIFifoTag tag, u32 data, BOOL err)
86 {
87 #pragma unused( tag, err )
88 u16 command;
89 u16 commandArg;
90
91 command = (u16)((data & OS_PXI_COMMAND_MASK) >> OS_PXI_COMMAND_SHIFT);
92 commandArg = (u16)((data & OS_PXI_DATA_MASK) >> OS_PXI_DATA_SHIFT);
93
94 //---------------- ARM9
95 #ifdef SDK_ARM9
96 //---- reveice reset command (mean ARM7 is prepared to do reset)
97 if (command == OS_PXI_COMMAND_RESET)
98 {
99 OSi_IsResetOccurred = TRUE;
100 }
101 #ifdef SDK_TWL
102 //---- reveice terminate command
103 else if (command == OS_PXI_COMMAND_TERMINATE)
104 {
105 OS_TPrintf("[ARM9] received terminate command\n");
106 OSi_IsTerminateOccurred = TRUE;
107 OS_Terminate();
108 }
109 #endif // SDK_TWL
110 //---- unknown command
111 else
112 {
113 OS_TPanic("[ARM9] unknown command");
114 }
115
116 //---------------- ARM7
117 #else
118 //---- reveice reset command (mean ARM9 request for ARM7 to do reset)
119 if (command == OS_PXI_COMMAND_RESET)
120 {
121 OSi_IsResetOccurred = TRUE;
122 }
123 #ifdef SDK_TWL
124 //---- reveice terminate command
125 else if (command == OS_PXI_COMMAND_TERMINATE)
126 {
127 OSi_IsTerminateOccurred = TRUE;
128 OS_Terminate();
129 }
130 #endif // SDK_TWL
131 //---- unknown command
132 else
133 {
134 OS_TPanic("[ARM7] unknown command");
135 }
136 #endif
137 }
138
139 /*---------------------------------------------------------------------------*
140 Name: OSi_SendToPxi
141
142 Description: send data to PXI interface
143
144 Arguments: data : data to be sent
145
146 Returns: None.
147 *---------------------------------------------------------------------------*/
OSi_SendToPxi(u16 data)148 void OSi_SendToPxi(u16 data)
149 {
150 u32 pxi_send_data;
151
152 pxi_send_data = ((u32)data) << OS_PXI_COMMAND_SHIFT;
153 while (PXI_SendWordByFifo(PXI_FIFO_TAG_OS, pxi_send_data, FALSE) != PXI_FIFO_SUCCESS)
154 {
155 }
156 }
157
158