Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / sam / cpus / vonk / bl / lib / ecc / src / BL_CKEcc.h
CommitLineData
920dae64
AT
1/*
2* ========== Copyright Header Begin ==========================================
3*
4* OpenSPARC T2 Processor File: BL_CKEcc.h
5* Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved.
6* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES.
7*
8* The above named program is free software; you can redistribute it and/or
9* modify it under the terms of the GNU General Public
10* License version 2 as published by the Free Software Foundation.
11*
12* The above named program is distributed in the hope that it will be
13* useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
14* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15* General Public License for more details.
16*
17* You should have received a copy of the GNU General Public
18* License along with this work; if not, write to the Free Software
19* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
20*
21* ========== Copyright Header End ============================================
22*/
23/************************************************************************
24 **
25 ** Copyright (C) 2007, Sun Microsystems, Inc.
26 **
27 ** Sun considers its source code as an unpublished, proprietary
28 ** trade secret and it is available only under strict license provisions.
29 ** This copyright notice is placed here only to protect Sun in the event
30 ** the source is deemed a published work. Disassembly, decompilation,
31 ** or other means of reducing the object code to human readable form
32 ** is prohibited by the license agreement under which this code is
33 ** provided to the user or company in possession of this copy.
34 **
35 *************************************************************************/
36#ifndef __BL_CkEccFile_h__
37#define __BL_CkEccFile_h__
38#include <iostream.h>
39
40//This class models the chip-kill ECC algorithim based on
41//Appexdix 6 of the Niagara PRM.
42class BL_CKEccFile
43{
44 public:
45 // the data payload of a Chip-Kill Line (128-bits)
46 class ChipKillLine
47 {
48 public:
49 ChipKillLine() {}
50 virtual ~ChipKillLine() {}
51 uint64_t msdw;
52 uint64_t lsdw;
53 };
54
55 // calculates the ECC for a Chip-Kill line
56 static uint32_t generateChipkillECC(ChipKillLine line);
57
58 private:
59 // Constructor declaration
60 BL_CKEccFile();
61
62 // Destructor declaration
63 ~BL_CKEccFile();
64
65 // Precalculated syndrome [0] - nibble order matches PRM. [1] -
66 // nibble order matches DESR.SYND
67 const static int syndrome[1024][2];
68
69 const static unsigned long long synd_exp_data [1024][2];
70
71 // Galois field multiplication table. Gives a 16 value by 16
72 // value result. This table was created by galois.perl, the
73 // perl script used to calculate tables in the PRM
74 const static uint8_t galois[16][16];
75
76 // Factor table. Gives the nibble to be added in to the result,
77 // and the multiplication to be performed on it.
78 struct mulfact
79 {
80 uint8_t mult; // multipler
81 uint8_t nibble_num; // nibble number to multiply and add
82 };
83
84 // nibble factor tables
85 const static struct mulfact nibbles[];
86};
87#endif //__BL_CkEccFile_h__