// #pragma comment(exestr, "@(#) esmnvram.h 1.1 95/09/28 15:32:22 nec") /**************************************************************** ******* Copyright (C) 1994 NEC Corporation ******* ****************************************************************/ /******* File Name: envram.h Abstract: This module contains the definitions for the extended NVRAM. Author: Takehiro Ueda (tueda@oa2.kb.nec.co.jp) 12/22/1994 Modification History: - M000 12/22/94 - created. *******/ /******************************************************************************* ******** NVRAM(8Kバイト)の論理フォーマットを以下に記述する。 ******** ******************************************************************************* * * S001 11/22/94 * レコードの有効/無効フラグ、Check未/済フラグを各レコードの先頭におくか * まとめてレコードリージョンの先頭におくかで、レコードの処理方法が変わって * くる。後者はランダムアクセス、前者はシーケンシャルアクセスにむく。 * 今回は前者を採用。 * * 行の先頭にある数字は割り当てるバイト数をあらわす。 * * 本仕様にしたがって構造体を作成予定。 * * S002 11/26/94 * 各領域(ECC関連、パニック情報関連、クリティカルエラーログ関連、etc.) * の先頭のヘッダ部を全てNVRAMの先頭に移す。NVRAMの先頭にあるヘッダ内に * 各領域のレコードを直接アクセスするためのオフセットをもつようにする。 * * NVRAMのアクセス時には256バイト単位でバンク切り換えがおこなわれるため * 各データ(256バイト長以下のもの)が256バイトバウンダリをまたがらないよう * に配慮。各領域(ECC関連、パニック情報関連、etc.)の先頭が必ず256バイト * バウンダリから開始されるようにする。 * * ECCエラーログ内のSIMM特定化情報を2バイトから1バイトへ変更。 * * ”オフセット ”はすべてNVRAMの先頭からのオフセット。 * * S003 12/13/94 * NWエージェントとメモリエラーエリアを共通化するため先頭512バイトを * メモリエラーエリアとし、フォーマットをNWエージェントと統一する。 * * STEP1ではメモリ縮退を行わないため本エリアは使用しない。 * 本メモリエラーエリアはNWエージェントとの共通化のために新たに設ける * ものであり、以前からのECCエラー情報領域はそのまま残る。 * * 512バイトのエリアを先頭に設けるため、以前からのその他全ての情報領域は * 512バイトオフセットが大きくなることになる。 * * システム情報エリアへのオフセット2バイトを追加。 * * オフセットの再計算。 * * S004 12/14/94 * 構造体作成。 * * ’パニック ’を’ストップエラー ’に変更。 * * S005 12/23/94 * 4byte alignmentにそなえてパディングを一部変更。 * * ストップエラーのフラグの2ビットに新たに定義追加。 * * システム情報エリアをNVRAMヘッダにとりこむ。 * これにともないシステム情報エリアへのオフセットは不要となるため * 2バイト分未使用とする。 * * システム情報エリアにマジックナンバーを追加。論理フォーマットの有無を * マジックナンバーとフラグでチェックするようにする。マジックナンバーは * 0xFF651026とする。 * * ’ストップエラー ’を’システムエラー ’に変更。 * * S006 12/27/94 * #pragma pack() を追加 * * char reserved[49] を char reserved[49] に修正。本変更はharmlessである * と信じる... (^_^; * * unsigned short offset_ecc2err を offset_2biterrに修正。本変更は * harmlessであると信じる... (^_^; * ****************************************************************************** ################### # NVRAMヘッダ部 # ################### ###################################################### # F/W用メモリーエラーエリア (NWエージェントと共通) # ###################################################### 512 メモリエラー情報レコード(2バイト) × 256 #################### # レコードの内容 # ####################   1 ステータス 0:正常 1:異常(2bitエラー有無) 1 1bitエラーカウント    ###################### # 全体に関するもの # ###################### 1 NVRAMの状態をあらわすフラグ ################## # フラグの内容 # ##################   0 NVRAM全体有効/無効 0:無効 1:有効  1 論理フォーマットの有無 0:無 1:有   2 READ-ONLY 0:NO 1:YES   3 LOCK 0:NO 1:YES   4 [reserved]   5   ↑   6   ↑   7   ↑ 14 NVRAMがフォーマットされたタイムスタンプ 3 [ reserved ]    ############################### # ALIVE情報領域に関するもの # ############################### 2 ALIVE情報領域へのオフセット    ####################################### # ECC1bitエラー情報領域に関するもの # ####################################### 2 ECC 1bitエラーログ部の先頭へのオフセット   2 ECC 1bitエラーログ1レコードサイズ 2 ECC 1bitエラーログレコード数 2 ECC 1bitエラーログを一番最後に登録したレコードへのオフセット 4 一番最後のECC1bitエラー時のリードデータ   8 ECC 1bitエラーカウント × メモリグループ数8    ####################################### # ECC2bitエラー情報領域に関するもの # ####################################### 2 ECC 2bitエラーログ部の先頭へのオフセット   2 ECC 2bitエラーログ1レコードサイズ 2 ECC 2bitエラーログレコード数 2 ECC 2bitエラーログを一番最後に登録したレコードへのオフセット 4 一番最後のECC複数bitエラー時のリードデータ 4 SIMM交換フラグ × メモリグループ数4 ################## # フラグの内容 # ##################   0 グループN内SIMM #0 (N=1〜4) 0:OK 1:NG(要交換)   1 グループN内SIMM #1 ↑   2 グループN内SIMM #2   ↑   3 グループN内SIMM #3   ↑   4 [reserved]   5 ↑   6 ↑   7   ↑ 4 [reserved]    ########################################   # システムエラー情報領域に関するもの #   ######################################## 2 システムエラー情報部の先頭へのオフセット   2 システムエラー情報1レコードサイズ 2 システムエラー情報レコード数 2 システムエラー情報を一番最後に登録したレコードへのオフセット    ############################################   # クリティカルエラーログ領域に関するもの # ############################################ 2 クリティカルエラーログ部の先頭へのオフセット   2 クリティカルエラーログ1レコードサイズ 2 クリティカルエラーログレコード数 2 クリティカルエラーログを一番最後に登録したレコードへのオフセット    ##################################   # しきい値情報領域に関するもの # ################################## 2 しきい値情報部の先頭へのオフセット    ##############################   # リザーブ領域に関するもの # ############################## 2 リザーブ領域の先頭へのオフセット ######################## # システム情報エリア # ########################      1 システムの状態をあらわすフラグ ################## # フラグの内容 # ################## 0 [reserved]   1   ↑   2   ↑   3   ↑   4   ↑   5   ↑   6   ↑   7   ↑ 3 [reserved] 32 システムの情報(システム名) 4 マシンシリアルナンバー 4 マジックナンバー 4 [reserved] ----------------------------------------------------------------------------- TOTAL 640 バイト ####################################### # ALIVE, ページャーコール情報エリア # ####################################### 1 現在の通報レベル 16 ALIVE一次通報先 16 ALIVE二次通報先 47 [reserved for pager call] ----------------------------------------------------------------------------- TOTAL 80 バイト ############################################################################## # ↑ここまで720バイト。次の領域の先頭が256バイトバウンダリから始まるように # # 48バイトを[reserved]としてパディングする。 # ############################################################################## 48 [reserved] ####################### # メモリエラーログ部 # ####################### 400 1bitエラー情報レコード(25バイト) × 16 #################### # レコードの内容 # #################### 1  フラグ    ################## # フラグの内容 # ##################   0 有効/無効 0:無効 1:有効   1 check済/未 0:未 1:済   2 [reserved]   3   ↑   4   ↑   5   ↑   6   ↑   7    ↑   4 エラーアドレス 14 発生タイムスタンプ 4 シンドローム   1 メモリグループ 1 SIMM特定情報 100 2bitエラー情報レコード(25バイト) × 4 #################### # レコードの内容 # #################### 1 フラグ ################## # フラグの内容 # ##################   0 有効/無効 0:無効 1:有効   1 check済/未 0:未 1:済   2 [reserved]   3   ↑   4   ↑   5    ↑   6   ↑   7   ↑   4 エラーアドレス 14 発生タイムスタンプ 4 シンドローム   1 メモリグループ 1 SIMM特定情報 ----------------------------------------------------------------------------- TOTAL 500 バイト ############################################################################### # ↑ここまで1268バイト。次の領域の先頭が256バイトバウンダリから始まるように # # 12バイトを[reserved]としてパディングする。 # ############################################################################### 12 [reserved] ########################## # システムエラー情報部 # ########################## 2048 システムエラー情報部 (1レコード512バイト × 4 = 2K) #################### # レコードの内容 # #################### 1 フラグ ################## # フラグの内容 # ##################   0 有効/無効 0:無効 1:有効   1 check済/未 0:未 1:済   2 Dump/Dump SW 0:D 1:D SW   3 通報の有無 0:未 1:済   4 boot結果 0:正常 1:異常   5   ↑   6   ↑   7   ↑ 14 発生タイムスタンプ 496 システムエラー情報 1 [reserved] ----------------------------------------------------------------------------- TOTAL 2048 バイト ####################################################### # ↑ここまで3328バイト。ちょうど256バイトバウンダリ # ####################################################### ############################################################### # クリティカルエラーログ部 (1レコード128バイト × 32 = 4K) # ############################################################### 4096 クリティカルエラーログ部 (1レコード128バイト × 32 = 4K) #################### # レコードの内容 # #################### 1 フラグ ################## # フラグの内容 # ##################   0 有効/無効 0:無効 1:有効   1 check済/未 0:未 1:済   2 Panic/Shutdown 0:P 1:S   3 [reserved]   4   ↑   5   ↑   6   ↑   7   ↑ 14 発生タイムスタンプ 20 ソース名 80 クリティカルエラー情報 13 [reserved] ----------------------------------------------------------------------------- TOTAL 4096 バイト ####################################################### # ↑ここまで7424バイト。ちょうど256バイトバウンダリ # ####################################################### ############################## # しきい値判定用データ領域 # ##############################   256 [reserved] ----------------------------------------------------------------------------- TOTAL 256 バイト ############################################################### # ↑ここまで7680(7K+512)バイト。ちょうど256バイトバウンダリ # ############################################################### ############################## # リザーブ領域 (512バイト) # ############################## 512 PAiNTS用? ----------------------------------------------------------------------------- TOTAL 512 バイト ############################################# # ↑ここまで8192(8K)バイト。NVRAMのしっぽ # ############################################# ******************************************************************************/ #pragma pack(1) /******************** * * *  構造体定義 * * * ********************/ /* * WAS & PS共通FW用メモリエラー情報領域 */ typedef struct _MEM_ERR_REC { unsigned char mem_status; /* ステータス */ unsigned char err_count; /* 1bitエラーカウント */ } MEM_ERR_REC, *pMEM_ERR_REC; /* * ALIVE情報領域に関するもの */ typedef struct _ALIVE_AREA_INFO { unsigned short offset_alive; /* ALIVE情報エリアオフセット */ } ALIVE_AREA_INFO, *pALIVE_AREA_INFO; /* * ECC1bitエラー情報領域に関するもの */ typedef struct _ECC1_ERR_AREA_INFO { unsigned short offset_1biterr; /* エリアの先頭へのオフセット */ unsigned short size_rec; /* 1レコードサイズ */ unsigned short num_rec; /* 総レコード数 */ unsigned short offset_latest; /* 最新レコードオフセット */ unsigned long read_data_latest; /* 最新リードエラーデータ */ unsigned char err_count_group0; /* メモリG#0 エラーカウント */ unsigned char err_count_group1; /* メモリG#1 エラーカウント */ unsigned char err_count_group2; /* メモリG#2 エラーカウント */ unsigned char err_count_group3; /* メモリG#3 エラーカウント */ unsigned char err_count_group4; /* メモリG#4 エラーカウント */ unsigned char err_count_group5; /* メモリG#5 エラーカウント */ unsigned char err_count_group6; /* メモリG#6 エラーカウント */ unsigned char err_count_group7; /* メモリG#7 エラーカウント */ } ECC1_ERR_AREA_INFO, *pECC1_ERR_AREA_INFO; /* * ECC2bitエラー情報領域に関するもの */ typedef struct _ECC2_ERR_AREA_INFO { unsigned short offset_2biterr; /* エリアの先頭へのオフセット */ unsigned short size_rec; /* 1レコードサイズ */ unsigned short num_rec; /* 総レコード数 */ unsigned short offset_latest; /* 最新レコードオフセット */ unsigned long read_data_latest; /* 最新リードエラーデータ */ unsigned char simm_flag_group1; /* メモリG#1内SIMMフラグ */ unsigned char simm_flag_group2; /* メモリG#2内SIMMフラグ */ unsigned char simm_flag_group3; /* メモリG#3内SIMMフラグ */ unsigned char simm_flag_group4; /* メモリG#4内SIMMフラグ */ char reserved[4]; /* reserved */ } ECC2_ERR_AREA_INFO, *pECC2_ERR_AREA_INFO; /* * システムエラー情報領域に関するもの */ typedef struct _SYSTEM_ERR_AREA_INFO { unsigned short offset_systemerr;/* エリアの先頭へのオフセット */ unsigned short size_rec; /* 1レコードサイズ */ unsigned short num_rec; /* 総レコード数 */ unsigned short offset_latest; /* 最新レコードオフセット */ } SYSTEM_ERR_AREA_INFO, *pSYSTEM_ERR_AREA_INFO; /* * クリティカルエラー情報領域に関するもの */ typedef struct _CRITICAL_ERR_AREA_INFO { unsigned short offset_critical; /* エリアの先頭へのオフセット */ unsigned short size_rec; /* 1レコードサイズ */ unsigned short num_rec; /* 総レコード数 */ unsigned short offset_latest; /* 最新レコードオフセット */ } CRITICAL_ERR_AREA_INFO, *pCRITICAL_ERR_AREA_INFO; /* * しきい値等その他の情報領域に関するもの */ typedef struct _MISC_AREA_INFO { unsigned short offset_misc; /* しきいち等の情報エリア先頭オフセット */ } MISC_AREA_INFO, *pMISC_AREA_INFO; /* * リザーブ領域に関するもの */ typedef struct _RESERVE_AREA_INFO { unsigned short offset_reserve; /* リザーブエリア先頭オフセット */ } RESERVE_AREA_INFO, *pRESERVE_AREA_INFO; /* * システム情報エリア * 49バイト */ typedef struct _SYS_INFO { unsigned char system_flag; /* システム状態フラグ */ char reserved1[3]; /* 4byte alignmentにそなえて */ char sys_description[32]; /* システムの情報 */ unsigned long serical_num; /* マシンシリアルナンバー */ unsigned long magic; /* マジックナンバー */ char reserved2[4]; /* reserved */ } SYS_INFO, *pSYS_INFO; /* * NVRAMヘッダ部 * 640バイト */ typedef struct _NVRAM_HEADER { MEM_ERR_REC mem_err_map[256]; /* メモリエラー情報NT&NW共通エリア */ unsigned char nvram_flag; /* nvramの状態フラグ */ char when_formatted[14]; /* フォーマットタイムスタンプ */ char reserved[3]; /* 4byte alignment にそなえて */ ALIVE_AREA_INFO alive; /* ALIVE情報エリア */ ECC1_ERR_AREA_INFO ecc1bit_err; /* ECC1bitエラー情報エリア */ ECC2_ERR_AREA_INFO ecc2bit_err; /* ECC2bitエラー情報エリア */ SYSTEM_ERR_AREA_INFO system_err;/* システムエラー情報エリア */ CRITICAL_ERR_AREA_INFO critical_err_log; /* クリティカルエラーログエリア */ MISC_AREA_INFO misc; /* しきいち情報エリア */ RESERVE_AREA_INFO reserve; /* リザーブエリアオフセット */ SYS_INFO system; /* システム情報 */ } NVRAM_HEADER, *pNVRAM_HEADER; /* * ALIVE, ページャーコール情報エリア * 80バイト */ typedef struct _ALIVE_INFO { unsigned char alert_level; /* 通報レベルグ */ char primary_destination[16]; /* 一次通報先電話番号 */ char secondary_destinaiton[16]; /* 二次通報先電話番号 */ char reserved[47]; /* reserved for pager call */ } ALIVE_INFO, *pALIVE_INFO; /* * ↑ここまで720バイト。次の領域の先頭が256バイトバウンダリから始まるように * 48バイトを[reserved]としてパディングする。 */ char reserved[48]; typedef struct _ECC1_ERR_REC { unsigned char record_flag; /* レコードフラグ */ unsigned long err_address; /* エラーアドレス */ char when_happened[14]; /* 発生タイムスタンプ */ unsigned long syndrome; /* シンドローム */ unsigned char specified_group; /* メモリグループ */ unsigned char specified_simm; /* SIMM特定情報 */ } ECC1_ERR_REC, *pECC1_ERR_REC; typedef struct _ECC2_ERR_REC { unsigned char record_flag; /* レコードフラグ */ unsigned long err_address; /* エラーアドレス */ char when_happened[14]; /* 発生タイムスタンプ */ unsigned long syndrome; /* シンドローム */ unsigned char specified_group; /* メモリグループ */ unsigned char specified_simm; /* SIMM特定情報 */ } ECC2_ERR_REC, *pECC2_ERR_REC; /* * メモリエラーログ部 * 500 バイト */ ECC1_ERR_REC ecc1_err_rec_log[16]; ECC2_ERR_REC ecc2_err_rec_log[4]; /* * ↑ここまで1268バイト。次の領域の先頭が256バイトバウンダリから始まるように * 12バイトを[reserved]としてパディングする。 */ char reserved2[12]; typedef struct _STOP_ERR_REC { unsigned char record_flag; /* レコードフラグ */ char when_happened[14]; /* 発生タイムスタンプ */ char err_description[496]; /* システムエラー情報 */ char reserved[1]; /* reserved */ } STOP_ERR_REC, *pSTOP_ERR_REC; /* * スットプエラー情報部 * 2048 バイト */ STOP_ERR_REC stop_err_rec_log[4]; typedef struct _CRITICAL_ERR_REC { unsigned char record_flag; /* レコードフラグ */ char when_happened[14]; /* 発生タイムスタンプ */ char source[14]; /* ソース名 */ char err_description[496]; /* クリティカルエラー情報 */ char reserved[13]; /* reserved */ } CRITICAL_ERR_REC, *pCRITICAL; /*   * クリティカルエラーログ部 (1レコード128バイト × 32 = 4K) * 4096バイト */ CRITICAL_ERR_REC critical_err_rec_log[32]; /* * しきい値判定用等データ領域. * 256バイト */ char reserved3[256]; /* reserved */ /* * リザーブ領域(PAiNTS用?) * 512バイト */ char reserved4[512]; /* reserved for paints ? */ #pragma pack(4)