TwlIPL/include/sysmenu/settings/common/TWLHWInfo.h
yosiokat 75a9423d25 ・生産工程でNANDに書き込んで、以降はReadOnlyとなるHW情報を追加。
・HW情報や本体設定データを共通のTSFフォーマットにするため、TSF
 フォーマットのコードを追加。(現状はHW情報のみ対応)
・HW情報用のRSA鍵ペアを追加。
・acsignライブラリにRSA暗号化関数を追加。
・acsignライブラリのRSAでコード関数の値チェックを修正。
・HW情報をライトするHWInfoWriterを追加。
・NANDフラッシュマップ&フォルダツリーのフォルダ構成における各ファイルに
 ついて、RSA署名の有無と使用する鍵による色分けを行う。
・TWL_SystemMenuメモリマップにNANDファーム用バッファを記載。
 (ランチャーとメモリが重ならないように)

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@312 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2007-12-05 12:19:30 +00:00

199 lines
5.9 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*---------------------------------------------------------------------------*
Project: TwlIPL
File: HWInfo.h
Copyright 2007 Nintendo. All rights reserved.
These coded instructions, statements, and computer programs contain
proprietary information of Nintendo of America Inc. and/or Nintendo
Company Ltd., and are protected by Federal copyright law. They may
not be disclosed to third parties or copied or duplicated in any form,
in whole or in part, without the prior written consent of Nintendo.
$Date:: $
$Rev$
$Author$
*---------------------------------------------------------------------------*/
#ifndef TWL_HW_INFO_H_
#define TWL_HW_INFO_H_
#define HW_SECURE_INFO_WRITE_ENABLE_ // HWセキュア情報のライト許可コンパイルスイッチ
#include <twl.h>
#include <sysmenu/settings/common/TWLStoreFile.h>
#ifdef HW_SECURE_INFO_WRITE_ENABLE_
#include <sysmenu/acsign.h>
#endif // HW_SECURE_INFO_WRITE_ENABLE_
#ifdef __cplusplus
extern "C" {
#endif
// define data ------------------------------------
#define TWL_HWINFO_FILE_LENGTH ( 16 * 1024 )
#define TWL_HWINFO_NORMAL_PATH "nand:/sys/HWINFO_N.dat"
#define TWL_HWINFO_SECURE_PATH "nand:/sys/HWINFO_S.dat"
#define TWL_HWINFO_NORMAL_VERSION 1 // HW情報フォーマットバージョン(開始No.:1)
#define TWL_HWINFO_SECURE_VERSION 1 // HW情報フォーマットバージョン(開始No.:1)
#define TWL_HWINFO_SERIALNO_LEN_AMERICA 11 // 本体シリアルNo.長Max北米向けは11桁
#define TWL_HWINFO_SERIALNO_LEN_OTHERS 12 // 本体シリアルNo.長Max
#define TWL_HWINFO_SERIALNO_LEN_MAX 16 // 本体シリアルNo.長Max
#define TWL_HWINFO_CAMERA_LEN 1024 // カメラ情報 [TODO]サイズ未定
// リージョンコード(販社別になる見込み)
typedef enum TWLRegionCode {
TWL_REGION_JAPAN = 0, // NCL
TWL_REGION_AMERICA = 1, // NOA
TWL_REGION_EUROPE = 2, // NOE
TWL_REGION_AUSTRALIA = 3, // NAL
TWL_REGION_CHINA = 4, // IQue
TWL_REGION_KOREA = 5, // NOK
TWL_REGION_MAX
}TWLRegion;
// 本体シリアルNo.
typedef struct TWLSerialNo {
u8 length; // シリアルNo.長
u8 no[ TWL_HWINFO_SERIALNO_LEN_MAX ]; // シリアルNo.ASCII文字列
}TWLSerialNo;
// TWL_HWセキュア情報設定データ署名で改ざん保護する必要があるもの
// ※基本、過去ver互換を考慮して、追加しかしない方針で。
typedef struct TWLHWSecureInfo{
u8 region; // リージョン
TWLSerialNo serialNo; // 本体シリアルNo.
}TWLHWSecureInfo; // 18bytes
// TWL_HWーマル情報設定データ署名で改ざん保護する必要がないもの
// ※基本、過去ver互換を考慮して、追加しかしない方針で。
typedef struct TWLHWNormalInfo{
u8 rtcAdjust; // RTC調整値
u8 camera[ TWL_HWINFO_CAMERA_LEN ]; // カメラ情報
}TWLHWNormalInfo; // 1025byte
#ifdef SDK_ARM9
//=========================================================
// HW情報リードライト関数
//=========================================================
// Normal情報
// 内部変数へのリードfs
extern TSFReadResult THW_ReadNormalInfo( void );
// 内部変数の値のライト
extern BOOL THW_WriteNormalInfo( void );
// 直接値を指定してのライト(開発用)
extern BOOL THW_WriteNormalInfoDirect( const TWLHWNormalInfo *pSrcInfo );
// ファイルリカバリー
extern BOOL THW_RecoveryNormalInfo( TSFReadResult err );
// 上記Read,Write関数で使用されるデフォルト値のセット開発用
extern void TWH_SetNormalDefaultValue( const TWLHWNormalInfo *pSrcInfo );
// Secure情報
// リード
extern TSFReadResult THW_ReadSecureInfo( void );
// 下記コンパイルスイッチ定義時のみ有効
#ifdef HW_SECURE_INFO_WRITE_ENABLE_
// ライト
extern BOOL THW_WriteSecureInfo( const u8 *pPrivKeyDER );
// 直接値を指定してのライト(開発用)
extern BOOL THW_WriteSecureInfoDirect( const TWLHWSecureInfo *pSrcInfo, const u8 *pPrivKeyDER );
// ファイルリカバリー
extern BOOL THW_RecoverySecureInfo( TSFReadResult err );
#endif // HW_SECURE_INFO_WRITE_ENABLE_
// 上記Read,Write関数で使用されるデフォルト値のセット開発用
extern void TWH_SetSecureDefaultValue( const TWLHWSecureInfo *pSrcInfo );
//=========================================================
// 下記アクセス関数が使用するstatic変数
//=========================================================
extern TWLHWNormalInfo s_hwInfoN;
extern TWLHWSecureInfo s_hwInfoS;
#define GetHWN() ( &s_hwInfoN )
#define GetHWS() ( &s_hwInfoS )
//=========================================================
// データ取得THW_ReadNormalInfo, THW_ReadSecureInfoで内部ワークに読み出した情報の取得
//=========================================================
// RTCオフセット値の取得
static inline u8 THW_GetRTCAdjust( void )
{
return GetHWN()->rtcAdjust;
}
// カメラ情報の取得
static inline void THW_GetCameraInfo( u8 *pDst )
{
MI_CpuCopy8( GetHWN()->camera, pDst, TWL_HWINFO_CAMERA_LEN );
}
// リージョンの取得。
static inline u8 THW_GetRegion( void )
{
return (u8)GetHWS()->region;
}
// 本体シリアルNo.の取得
static inline void THW_GetSerialNo( TWLSerialNo *pDst )
{
MI_CpuCopy8( &GetHWS()->serialNo, pDst, sizeof(TWLSerialNo) );
}
//=========================================================
// データセットTSD_ReadSettingsで内部ワークに読み出した情報への値セット
//=========================================================
// RTCオフセット値のセット
static inline void THW_SetRTCAdjust( u8 adjust )
{
GetHWN()->rtcAdjust = adjust;
}
// カメラ情報のセット
static inline void THW_SetCameraInfo( u8 *pCamera )
{
MI_CpuCopy8( pCamera, GetHWN()->camera, TWL_HWINFO_CAMERA_LEN );
}
// リージョンのセット。
static inline void THW_SetRegion( u8 region )
{
GetHWS()->region = region;
}
// 本体シリアルNo.のセット
static inline void THW_SetSerialNo( TWLSerialNo *pSrc )
{
MI_CpuCopy8( pSrc, &GetHWS()->serialNo, sizeof(TWLSerialNo) );
}
#endif // SDK_ARM9
#ifdef __cplusplus
}
#endif
#endif // TWL_HWINFO_H_