1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     dsp_Common.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  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   $Rev: 20614 $
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 // IN/OUT定義用の定数。(原則的に 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 // 定義済みポート
34 #define NN_DSP_PIPE_CONSOLE            0   // DSP->ARM: デバッグコンソール
35 #define NN_DSP_PIPE_DMA                1   // DSP<->ARM: 擬似DMA
36 #define NN_DSP_PIPE_AUDIO              2   // DSP<->ARM: オーディオ汎用通信
37 #define NN_DSP_PIPE_BINARY             3   // DSP<->ARM: 汎用バイナリ
38 #define NN_DSP_PIPE_EPHEMERAL          4   // DSP_CreatePipe()で確保可能な空き領域
39 #define NN_DSP_PIPE_DSPSND             NN_DSP_PIPE_AUDIO
40 
41 // システムリソース
42 #define NN_DSP_PIPE_PORT_MAX               8  // 使用可能なパイプの最大ポート数
43 #define NN_DSP_PIPE_DEFAULT_BUFFER_LENGTH  64 // デフォルトのリングバッファサイズ
44 
45 #define NN_DSP_PIPE_FLAG_INPUT         0x0000  // 入力側
46 #define NN_DSP_PIPE_FLAG_OUTPUT        0x0001  // 出力側
47 #define NN_DSP_PIPE_FLAG_PORTMASK      0x00FF  // ポート番号負フィールド
48 #define NN_DSP_PIPE_FLAG_BOUND         0x0100  // Openされている
49 #define NN_DSP_PIPE_FLAG_EOF           0x0200  // EOF
50 
51 #define NN_DSP_PIPE_FLAG_EXIT_OS       0x8000  // DSPのAHBマスタ終了処理
52 
53 #define NN_DSP_PIPE_COMMAND_REGISTER   2
54 
55 // DSPファイルIO用のコマンド構造体。
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,
91     INTERRUPT_TYPE_REPLY1,
92     INTERRUPT_TYPE_PIPE
93 } InterruptType;
94 
95 #endif // CTR_DSP
96 
97 //----------------------------------------------------------------
98 // dsp_Pipe.h から移動.
99 //----------------------------------------------------------------
100 // パイプ構造体。
101 // DSPからARMへの直接アクセス手段が存在しないため
102 // 基本的にARMからAPBP-FIFOでDSP内のバッファを制御する。
103 // 特に指定が無ければリングバッファとして使用する。
104 typedef struct DSPPipe
105 {
106     DSPAddr address;    // バッファの先頭アドレス
107     DSPByte length;     // バッファサイズ
108     DSPByte rpos;       // 未読先頭領域
109     DSPByte wpos;       // 追記終端領域
110     u16     flags;      // 属性フラグ
111 }
112 DSPPipe, * pDSPPipe;
113 
114 /*---------------------------------------------------------------------------*/
115 /* declarations */
116 
117 // DSPが保持してARMが参照するパイプ情報。
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