1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     dsp_Types.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: 25972 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_DSP_CTR_DSP_TYPES_H_
17 #define NN_DSP_CTR_DSP_TYPES_H_
18 
19 #ifndef CTR_DSP
20 /*---------------------------------------------------------------------------*
21  * includes
22  *---------------------------------------------------------------------------*/
23 #include <nn/types.h>
24 
25 /*---------------------------------------------------------------------------*
26  * namespaces
27  *---------------------------------------------------------------------------*/
28 namespace nn {
29 namespace dsp {
30 namespace CTR {
31 #else
32 #include <dsp/types.h>
33 #endif // CTR_DSP
34 
35 /*---------------------------------------------------------------------------*/
36 /* declarations */
37 
38 // プロセッサ間通信のデータ共有に使用する型定義。
39 typedef u16 DSPAddr;        // DSP内でアドレスを表現する型 (2バイト1ワード)
40 typedef u16 DSPWord;        // DSP内でサイズを表現する型 (2バイト1ワード)
41 typedef u16 DSPByte;        // DSP内でバイト単位を表現する型 (1バイト1ワード)
42 typedef u32 DSPWord32;      // DSP内でサイズを表現する型 (2バイト1ワード)
43 typedef u32 DSPByte32;      // DSP内でバイト単位を表現する型 (1バイト1ワード)
44 typedef u32 DSPAddrInARM;   // DSP内アドレスをバイト単位に変換した型
45 
46 // 明示的な型変換マクロ。
47 #define NN_DSP_ADDR_TO_ARM(address)    (u32)((address) << 1)
48 #define NN_DSP_ADDR_TO_DSP(address)    (u16)((u32)(address) >> 1)
49 #define NN_DSP_WORD_TO_ARM(word)       (u16)((word) << 1)
50 #define NN_DSP_WORD_TO_DSP(word)       (u16)((word) >> 1)
51 #define NN_DSP_WORD_TO_ARM32(word)     (u32)((word) << 1)
52 #define NN_DSP_WORD_TO_DSP32(word)     (u32)((word) >> 1)
53 #define NN_DSP_32BIT_TO_ARM(value)     (u32)(((u32)(value) >> 16) | ((u32)(value) << 16))
54 #define NN_DSP_32BIT_TO_DSP(value)     (u32)(((u32)(value) >> 16) | ((u32)(value) << 16))
55 #ifdef NN_SYSTEM_PROCESS
56 #define NN_DSP_BYTE_TO_UNIT(byte)      (u16)(byte)
57 #define NN_DSP_UNIT_TO_BYTE(unit)      (u16)(unit)
58 #else
59 #define NN_DSP_BYTE_TO_UNIT(byte)      (u16)((byte) >> 1)
60 #define NN_DSP_UNIT_TO_BYTE(unit)      (u16)((unit) << 1)
61 #endif // #ifdef NN_SYSTEM_PROCESS
62 
63 // ネイティブなsizeof(char)のサイズ。 (DSP側では2, ARM側では1)
64 #define NN_DSP_WORD_UNIT       (3 - sizeof(DSPWord))
65 
66 #ifndef CTR_DSP
67 } // namespace CTR {
68 } // namespace dsp {
69 } // namespace nn  {
70 #endif // CTR_DSP
71 
72 #endif  // ifndef NN_DSP_CTR_DSP_TYPES_H_
73