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