1 /*---------------------------------------------------------------------------* 2 Project: TwlSDK - CP - include 3 File: sqrt.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:: 2008-09-18#$ 14 $Rev: 8573 $ 15 $Author: okubata_ryoma $ 16 *---------------------------------------------------------------------------*/ 17 18 #ifndef NITRO_CP_SQRT_H_ 19 #define NITRO_CP_SQRT_H_ 20 21 #ifdef __cplusplus 22 extern "C" { 23 #endif 24 25 #include <nitro/cp/context.h> 26 27 //---- sqrt calculation mode 28 #define CP_SQRT_32BIT_MODE (0UL << REG_CP_SQRTCNT_MODE_SHIFT) // 32bit mode 29 #define CP_SQRT_64BIT_MODE (1UL << REG_CP_SQRTCNT_MODE_SHIFT) // 64bit mode 30 31 32 //================================================================================ 33 // sqrt control register setting 34 //================================================================================ 35 /*---------------------------------------------------------------------------* 36 Name: CP_SetSqrtControl 37 38 Description: set value to sqrt control register 39 40 Arguments: param : value to set 41 42 Returns: None 43 *---------------------------------------------------------------------------*/ CP_SetSqrtControl(u16 param)44static inline void CP_SetSqrtControl(u16 param) 45 { 46 reg_CP_SQRTCNT = param; 47 } 48 49 50 //================================================================================ 51 // sqrt parameter setting 52 //================================================================================ 53 /*---------------------------------------------------------------------------* 54 Name: CP_SetSqrtImm64_NS_ 55 CP_SetSqrtImm32_NS_ 56 57 Description: set value to sqrt parameter. 58 not set bit-mode. 59 not thread safe. 60 61 Arguments: param : parameter to set 62 63 Returns: None 64 *---------------------------------------------------------------------------*/ CP_SetSqrtImm64_NS_(u64 param)65static inline void CP_SetSqrtImm64_NS_(u64 param) 66 { 67 *((REGType64 *)REG_SQRT_PARAM_ADDR) = param; 68 } CP_SetSqrtImm32_NS_(u32 param)69static inline void CP_SetSqrtImm32_NS_(u32 param) 70 { 71 *((REGType32 *)REG_SQRT_PARAM_ADDR) = param; 72 } 73 74 /*---------------------------------------------------------------------------* 75 Name: CP_SetSqrtImm64 76 CP_SetSqrtImm32 77 78 Description: set value to sqrt parameter. 79 not set bit-mode. 80 81 Arguments: param : parameter to set 82 83 Returns: None 84 *---------------------------------------------------------------------------*/ CP_SetSqrtImm64(u64 param)85static inline void CP_SetSqrtImm64(u64 param) 86 { 87 *((REGType64 *)REG_SQRT_PARAM_ADDR) = param; 88 } 89 CP_SetSqrtImm32(u32 param)90static inline void CP_SetSqrtImm32(u32 param) 91 { 92 *((REGType32 *)REG_SQRT_PARAM_ADDR) = param; 93 } 94 95 /*---------------------------------------------------------------------------* 96 Name: CP_SetSqrt64 97 CP_SetSqrt32 98 99 Description: set value to sqrt parameter. 100 set bit-mode. 101 102 Arguments: param : parameter to set 103 104 Returns: None 105 *---------------------------------------------------------------------------*/ CP_SetSqrt64(u64 param)106static inline void CP_SetSqrt64(u64 param) 107 { 108 reg_CP_SQRTCNT = CP_SQRT_64BIT_MODE; 109 CP_SetSqrtImm64_NS_(param); 110 } 111 CP_SetSqrt32(u32 param)112static inline void CP_SetSqrt32(u32 param) 113 { 114 reg_CP_SQRTCNT = CP_SQRT_32BIT_MODE; 115 CP_SetSqrtImm32_NS_(param); 116 } 117 118 119 //================================================================================ 120 // wait to finish 121 //================================================================================ 122 /*---------------------------------------------------------------------------* 123 Name: CP_IsSqrtBusy 124 125 Description: check sqrt calculation finished 126 127 Arguments: None. 128 129 Returns: non-0 if busy, 0 if finish 130 *---------------------------------------------------------------------------*/ CP_IsSqrtBusy(void)131static inline s32 CP_IsSqrtBusy(void) 132 { 133 return (reg_CP_SQRTCNT & REG_CP_SQRTCNT_BUSY_MASK); 134 } 135 136 /*---------------------------------------------------------------------------* 137 Name: CP_WaitSqrt 138 139 Description: wait till sqrt calculation finish 140 141 Arguments: None. 142 143 Returns: None. 144 *---------------------------------------------------------------------------*/ CP_WaitSqrt(void)145static inline void CP_WaitSqrt(void) 146 { 147 while (CP_IsSqrtBusy()) 148 { 149 } 150 } 151 152 //================================================================================ 153 // getting result 154 //================================================================================ 155 /*---------------------------------------------------------------------------* 156 Name: CP_GetSqrtResultImm8 / 16 / 32 157 158 Description: read result. 159 not make sure to finish. 160 161 Arguments: None. 162 163 Returns: result 164 *---------------------------------------------------------------------------*/ CP_GetSqrtResultImm32(void)165static inline u32 CP_GetSqrtResultImm32(void) 166 { 167 return (u32)(*((REGType32 *)REG_SQRT_RESULT_ADDR)); 168 } CP_GetSqrtResultImm16(void)169static inline u16 CP_GetSqrtResultImm16(void) 170 { 171 return (u16)(*((REGType16 *)REG_SQRT_RESULT_ADDR)); 172 } CP_GetSqrtResultImm8(void)173static inline u8 CP_GetSqrtResultImm8(void) 174 { 175 return (u8)(*((REGType8 *)REG_SQRT_RESULT_ADDR)); 176 } 177 178 /*---------------------------------------------------------------------------* 179 Name: CP_GetSqrtResult8 / 16 / 32 180 181 Description: wait till finish, and read result. 182 183 Arguments: None. 184 185 Returns: result 186 *---------------------------------------------------------------------------*/ CP_GetSqrtResult32(void)187static inline u32 CP_GetSqrtResult32(void) 188 { 189 CP_WaitSqrt(); 190 return CP_GetSqrtResultImm32(); 191 } CP_GetSqrtResult16(void)192static inline u16 CP_GetSqrtResult16(void) 193 { 194 CP_WaitSqrt(); 195 return CP_GetSqrtResultImm16(); 196 } CP_GetSqrtResult8(void)197static inline u8 CP_GetSqrtResult8(void) 198 { 199 CP_WaitSqrt(); 200 return CP_GetSqrtResultImm8(); 201 } 202 203 #ifdef __cplusplus 204 } /* extern "C" */ 205 #endif 206 207 208 /* NITRO_CP_SQRT_H_ */ 209 #endif 210