1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     dsp_Common.h
4   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
5   These coded instructions, statements, and computer programs contain
6   proprietary information of Nintendo of America Inc. and/or Nintendo
7   Company Ltd., and are protected by Federal copyright law. They may
8   not be disclosed to third parties or copied or duplicated in any form,
9   in whole or in part, without the prior written consent of Nintendo.
10   $Rev: 28315 $
11  *---------------------------------------------------------------------------
12 
13 
14 */
15 
16 #ifndef NN_DSP_CTR_DSP_COMMON_H_
17 #define NN_DSP_CTR_DSP_COMMON_H_
18 
19 /*---------------------------------------------------------------------------*
20  * constants
21  *---------------------------------------------------------------------------*/
22 
23 // Constants for defining IN and OUT. (Generally defined as 0 : DSP->ARM, 1 : ARM->DSP)
24 #ifdef NN_SYSTEM_PROCESS
25 #define NN_DSP_PIPE_INPUT              0
26 #define NN_DSP_PIPE_OUTPUT             1
27 #else
28 #define NN_DSP_PIPE_INPUT              1
29 #define NN_DSP_PIPE_OUTPUT             0
30 #endif
31 #define NN_DSP_PIPE_PEER_MAX           2
32 
33 // Defined ports
34 #define NN_DSP_PIPE_CONSOLE            0   // DSP->ARM: Debugging console
35 #define NN_DSP_PIPE_DMA                1   // DSP<->ARM: Pseudo-DMA
36 #define NN_DSP_PIPE_AUDIO              2   // DSP<->ARM: General-purpose audio communications
37 #define NN_DSP_PIPE_BINARY             3   // DSP<->ARM: General-purpose binary
38 #define NN_DSP_PIPE_EPHEMERAL          4   // Free region that can be allocated with DSP_CreatePipe function
39 #define NN_DSP_PIPE_DSPSND             NN_DSP_PIPE_AUDIO
40 
41 // System resources
42 #define NN_DSP_PIPE_PORT_MAX               8  // Maximum number of usable ports for pipes
43 #define NN_DSP_PIPE_DEFAULT_BUFFER_LENGTH  64 // Default ring buffer size
44 
45 #define NN_DSP_PIPE_FLAG_INPUT         0x0000  // Input side
46 #define NN_DSP_PIPE_FLAG_OUTPUT        0x0001  // Output side
47 #define NN_DSP_PIPE_FLAG_PORTMASK      0x00FF  // Negative field for port numbers
48 #define NN_DSP_PIPE_FLAG_BOUND         0x0100  // Opened
49 #define NN_DSP_PIPE_FLAG_EOF           0x0200  // EOF
50 
51 #define NN_DSP_PIPE_FLAG_EXIT_OS       0x8000  // Exit processing for the DSP's AHB master
52 
53 #define NN_DSP_PIPE_COMMAND_REGISTER   2
54 
55 // Command structures for DSP file I/O.
56 #define NN_DSP_PIPE_IO_COMMAND_OPEN    0
57 #define NN_DSP_PIPE_IO_COMMAND_CLOSE   1
58 #define NN_DSP_PIPE_IO_COMMAND_SEEK    2
59 #define NN_DSP_PIPE_IO_COMMAND_READ    3
60 #define NN_DSP_PIPE_IO_COMMAND_WRITE   4
61 #define NN_DSP_PIPE_IO_COMMAND_MEMMAP  5
62 
63 #define NN_DSP_PIPE_IO_MODE_R          0x0001
64 #define NN_DSP_PIPE_IO_MODE_W          0x0002
65 #define NN_DSP_PIPE_IO_MODE_RW         0x0004
66 #define NN_DSP_PIPE_IO_MODE_TRUNC      0x0008
67 #define NN_DSP_PIPE_IO_MODE_CREATE     0x0010
68 
69 #define NN_DSP_PIPE_IO_SEEK_SET        0
70 #define NN_DSP_PIPE_IO_SEEK_CUR        1
71 #define NN_DSP_PIPE_IO_SEEK_END        2
72 
73 #ifndef CTR_DSP
74 /*---------------------------------------------------------------------------*
75  * includes
76  *---------------------------------------------------------------------------*/
77 #include <nn/types.h>
78 #include <nn/dsp/CTR/Common/dsp_Types.h>
79 
80 /*---------------------------------------------------------------------------*
81  * namespaces
82  *---------------------------------------------------------------------------*/
83 
84 namespace nn {
85 namespace dsp {
86 namespace CTR {
87 
88 typedef enum
89 {
90     INTERRUPT_TYPE_REPLY0 = 0,
91     INTERRUPT_TYPE_REPLY1 = 1,
92     INTERRUPT_TYPE_PIPE   = 2
93 } InterruptType;
94 
95 #endif // CTR_DSP
96 
97 //----------------------------------------------------------------
98 // Move from dsp_Pipe.h
99 //----------------------------------------------------------------
100 // Pipe structures.
101 // Because there is no method to directly access ARM from the DSP. Accordingly, control the buffer in the DSP from ARM using APBP-FIFO.
102 //
103 // It will be treated as a ring buffer in the absence of a particular specification.
104 typedef struct DSPPipe
105 {
106     DSPAddr address;    // Starting address of the buffer
107     DSPByte length;     // Buffer size
108     DSPByte rpos;       // First unread region
109     DSPByte wpos;       // Last appended region
110     u16     flags;      // Attribute flags
111 }
112 DSPPipe, * pDSPPipe;
113 
114 /*---------------------------------------------------------------------------*/
115 /* Declarations */
116 
117 // Pipe information maintained by the DSP and accessed by an ARM processor.
118 typedef struct DSPPipeMonitor
119 {
120     DSPPipe pipe[NN_DSP_PIPE_PORT_MAX][NN_DSP_PIPE_PEER_MAX];
121 }
122 DSPPipeMonitor;
123 
124 #ifndef CTR_DSP
125 } // namespace nn {
126 } // namespace dsp {
127 } // namespace CTR {
128 #endif // CTR_DSP
129 
130 #endif  // ifndef NN_DSP_CTR_DSP_COMMON_H_
131 
132