1 /*---------------------------------------------------------------------------*
2   Project:  RevolutionDWC public include file
3   File:     ./nonport/revolution/dwc_nonport.h
4 
5   Copyright 2005-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  *---------------------------------------------------------------------------*/
14 
15 #include <dwc_version.h>
16 #include <revolution.h>
17 #include <revolution/so.h>
18 #include <revolution/ncd.h>
19 #include <revolution/net.h>
20 #include <revolution/revodefs.h>
21 
22 #include <stdio.h>
23 #include <string.h>
24 
25 #include <nonport/revolution/dwci_np_math.h>
26 #include <nonport/revolution/dwci_np_types.h>
27 
28 #ifndef DWC_NOGS
29 #include <cfriend/dwc_cfriend.h>
30 #endif
31 
32 #include <conntest/dwc_conntest.h>
33 
34 #define DWC_ASSERT		ASSERT
35 #define DWC_ASSERTMSG	ASSERTMSG
36 
37 #define DWC_HALT OSHalt
38 
39 // Time-related
40 #define DWCi_Np_TicksToMilliSeconds OSTicksToMilliseconds
41 #define DWCi_Np_MilliSecondsToTicks(a) OSMillisecondsToTicks((u64)(a))
42 typedef OSTime  DWCTick;
43 DWCUtcTime	DWCi_Np_GetTimeInSeconds( void );
44 DWCTmTime* DWCi_Np_UtcToTm( DWCUtcTime* utc_time );
45 void DWCi_Np_CPUCopyFast(register void* dst, register const void* src, register u32 n);
46 
47 #define OS_PutString OSReport
48 #define OS_TVPrintf OSVReport
49 
50 #define DWC_INLINE inline
51 
52 #define SO_NtoHl                    SONtoHl
53 #define SO_NtoHs                    SONtoHs
54 #define SO_GetHostID                SOGetHostID
55 
56 u64 DWCi_Np_GetConsoleId( void );
57 const char* DWCi_Np_GetConsoleName( void );
58 const char* DWCi_Np_GetAppGameName( void );
59 
DWCi_Np_CpuCopy8(register const void * srcp,register void * dstp,register u32 size)60 static inline void DWCi_Np_CpuCopy8( register const void *srcp, register void *dstp, register u32 size )
61 {
62     DWCi_Np_CPUCopyFast( dstp, srcp, size );
63 }
64 
DWCi_Np_CpuCopy16(register const void * srcp,register void * dstp,register u32 size)65 static inline void DWCi_Np_CpuCopy16( register const void *srcp, register void *dstp, register u32 size )
66 {
67     DWCi_Np_CPUCopyFast( dstp, srcp, size );
68 }
69 
DWCi_Np_CpuCopy32(register const void * srcp,register void * dstp,register u32 size)70 static inline void DWCi_Np_CpuCopy32( register const void *srcp, register void *dstp, register u32 size )
71 {
72     DWCi_Np_CPUCopyFast( dstp, srcp, size );
73 }
74 
75 
76 
DWCi_Np_CpuClear8(void * dest,u32 size)77 static inline void DWCi_Np_CpuClear8(void *dest, u32 size)
78 {
79     memset( dest, 0, size );
80 }
81 
DWCi_Np_CpuClear16(void * dest,u32 size)82 static inline void DWCi_Np_CpuClear16(void *dest, u32 size)
83 {
84     memset( dest, 0, size );
85 }
86 
DWCi_Np_CpuClear32(void * dest,u32 size)87 static inline void DWCi_Np_CpuClear32(void *dest, u32 size)
88 {
89     memset( dest, 0, size );
90 }
91 
92 
DWCi_Np_GetMacAddress(u8 * macAddress)93 static inline void DWCi_Np_GetMacAddress(u8 *macAddress)
94 {
95     NETGetWirelessMacAddress(macAddress);
96 }
97 
DWCi_Np_GetTick(void)98 static inline DWCTick DWCi_Np_GetTick(void)
99 {
100     return OSGetTime();
101 }
102 
103 
104 //
105 // Conversion functions to support little-endian data that passes through the network.
106 //
DWCi_HtoLEs(u16 data)107 static inline u16 DWCi_HtoLEs( u16 data )
108 {
109     return (u16)((data >> 8) | (data << 8));
110 }
111 
DWCi_HtoLEl(u32 data)112 static inline u32 DWCi_HtoLEl( u32 data )
113 {
114     u32 tmp;
115     tmp = ((data >> 8) & 0x00ff00ff) | ((data << 8) & 0xff00ff00);
116     return (tmp >> 16) | (tmp << 16);
117 }
118 
DWCi_LEtoHs(u16 data)119 static inline u16 DWCi_LEtoHs( u16 data )
120 {
121     return DWCi_HtoLEs( data ); // Since we are just flipping back around, do the same thing.
122 }
123 
DWCi_LEtoHl(u32 data)124 static inline u32 DWCi_LEtoHl( u32 data )
125 {
126     return DWCi_HtoLEl( data );
127 }
128