1 /*---------------------------------------------------------------------------*
2   Project:  TwlSDK - MATH - include
3   File:     math/dgt.h
4 
5   Copyright 2003-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::            $
14   $Rev:$
15   $Author:$
16  *---------------------------------------------------------------------------*/
17 
18 #ifndef NITRO_MATH_CHECKSUM_H_
19 #define NITRO_MATH_CHECKSUM_H_
20 
21 #include <nitro/misc.h>
22 #include <nitro/types.h>
23 
24 #ifdef __cplusplus
25 extern "C" {
26 #endif
27 
28 //----------------------------------------------------------------------------
29 // Constant Definitions
30 //----------------------------------------------------------------------------
31 
32 //----------------------------------------------------------------------------
33 // Type Definitions
34 //----------------------------------------------------------------------------
35 
36 typedef u16 MATHChecksum16Context;
37 typedef MATHChecksum16Context MATHChecksum8Context;
38 
39 //----------------------------------------------------------------------------
40 // Function Declarations
41 //----------------------------------------------------------------------------
42 
43 /*****************************************************************************/
44 /* Checksum16                                                                */
45 /*****************************************************************************/
46 
47 /*---------------------------------------------------------------------------*
48   Name:         MATH_Checksum16Init
49 
50   Description:  Used to request the 16bit Checksum value.
51                 Initializes the MATHChecksum16Context structure.
52 
53   Arguments:    context MATHChecksum16Context structure
54                 init:    Initial value of CRC.
55 
56   Returns:      None.
57  *---------------------------------------------------------------------------*/
MATH_Checksum16Init(MATHChecksum16Context * context)58 static inline void MATH_Checksum16Init(MATHChecksum16Context * context)
59 {
60     *context = 0;
61 }
62 
63 /*---------------------------------------------------------------------------*
64   Name:         MATH_Checksum16Update
65 
66   Description:  Updates the 16bit Checksum value with added data.
67 
68   Arguments:    context MATHChecksum16Context structure
69                 input:   Pointer to input data.
70                 length:  Length of input data.
71 
72   Returns:      None.
73  *---------------------------------------------------------------------------*/
74 void    MATH_Checksum16Update(MATHChecksum16Context * context, const void *input, u32 length);
75 
76 /*---------------------------------------------------------------------------*
77   Name:         MATH_Checksum16GetHash
78 
79   Description:  Gets the final Checksum value.
80 
81   Arguments:    context MATHChecksum16Context structure
82 
83   Returns:      Calculation result
84  *---------------------------------------------------------------------------*/
MATH_Checksum16GetHash(MATHChecksum16Context * context)85 static inline u16 MATH_Checksum16GetHash(MATHChecksum16Context * context)
86 {
87     return (u16)(~(*context));
88 }
89 
90 /*---------------------------------------------------------------------------*
91   Name:         MATH_CalcChecksum16
92 
93   Description:  Calculates the 16bit Checksum.
94 
95   Arguments:    data:    Pointer to input data.
96                 dataLength:   Length of input data.
97 
98   Returns:      Checksum value.
99  *---------------------------------------------------------------------------*/
100 u16     MATH_CalcChecksum16(const void *data, u32 dataLength);
101 
102 
103 /*****************************************************************************/
104 /* Checksum8                                                                 */
105 /*****************************************************************************/
106 
107 /*---------------------------------------------------------------------------*
108   Name:         MATH_Checksum8Init
109 
110   Description:  Used to request the 8bit Checksum value.
111                 Initializes the MATHChecksum8Context structure.
112 
113   Arguments:    context MATHChecksum8Context structure
114                 init:    Initial value of CRC.
115 
116   Returns:      None.
117  *---------------------------------------------------------------------------*/
MATH_Checksum8Init(MATHChecksum8Context * context)118 static inline void MATH_Checksum8Init(MATHChecksum8Context * context)
119 {
120     *context = 0;
121 }
122 
123 /*---------------------------------------------------------------------------*
124   Name:         MATH_Checksum8Update
125 
126   Description:  Updates the 8-bit Checksum value with added data.
127 
128   Arguments:    context MATHChecksum8Context structure
129                 input:   Pointer to input data.
130                 length:  Length of input data.
131 
132   Returns:      None.
133  *---------------------------------------------------------------------------*/
134 void    MATH_Checksum8Update(MATHChecksum8Context * context, const void *input, u32 length);
135 
136 /*---------------------------------------------------------------------------*
137   Name:         MATH_Checksum8GetHash
138 
139   Description:  Gets the final Checksum value.
140 
141   Arguments:    context MATHChecksum8Context structure
142 
143   Returns:      Calculation result
144  *---------------------------------------------------------------------------*/
MATH_Checksum8GetHash(MATHChecksum8Context * context)145 static inline u8 MATH_Checksum8GetHash(MATHChecksum8Context * context)
146 {
147     u32     sum = *context;
148     sum = (sum >> 8) + (sum & 0xff);
149     sum += (sum >> 8);
150 
151     return (u8)(~sum);
152 }
153 
154 /*---------------------------------------------------------------------------*
155   Name:         MATH_CalcChecksum8
156 
157   Description:  Calculates the 8-bit Checksum.
158 
159   Arguments:    data:    Pointer to input data.
160                 dataLength:   Length of input data.
161 
162   Returns:      Checksum value
163  *---------------------------------------------------------------------------*/
164 u8      MATH_CalcChecksum8(const void *data, u32 dataLength);
165 
166 
167 
168 #ifdef __cplusplus
169 }/* extern "C" */
170 #endif
171 
172 /* NITRO_MATH_CHECKSUM_H_ */
173 #endif
174