summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--import/chips/common/utils/imageProcs/common_ringId.H171
1 files changed, 171 insertions, 0 deletions
diff --git a/import/chips/common/utils/imageProcs/common_ringId.H b/import/chips/common/utils/imageProcs/common_ringId.H
new file mode 100644
index 00000000..5e0a0806
--- /dev/null
+++ b/import/chips/common/utils/imageProcs/common_ringId.H
@@ -0,0 +1,171 @@
+/* IBM_PROLOG_BEGIN_TAG */
+/* This is an automatically generated prolog. */
+/* */
+/* $Source: import/chips/common/utils/imageProcs/common_ringId.H $ */
+/* */
+/* OpenPOWER HCODE Project */
+/* */
+/* COPYRIGHT 2016,2017 */
+/* [+] International Business Machines Corp. */
+/* */
+/* */
+/* Licensed under the Apache License, Version 2.0 (the "License"); */
+/* you may not use this file except in compliance with the License. */
+/* You may obtain a copy of the License at */
+/* */
+/* http://www.apache.org/licenses/LICENSE-2.0 */
+/* */
+/* Unless required by applicable law or agreed to in writing, software */
+/* distributed under the License is distributed on an "AS IS" BASIS, */
+/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or */
+/* implied. See the License for the specific language governing */
+/* permissions and limitations under the License. */
+/* */
+/* IBM_PROLOG_END_TAG */
+
+#ifndef _COMMON_RINGID_H_
+#define _COMMON_RINGID_H_
+
+#include <stdint.h>
+#include <stddef.h>
+
+//
+// Various data typedefs for enums. Serves following purposes:
+// - Reduces space since enum defaults to an int type.
+// - Enables using these types without the scope operator for
+// those enums that are namespaced, e.g. RingID.
+// NB! DO NOT CHANGE THESE DEFS W/O EXPLICIT CONSENT FROM
+// INFRASTRUCT TEAM. (These defs affect packing assumptions
+// of ring structures that go into the image ringSections.)
+typedef uint16_t RingId_t; // Type for RingID enum
+typedef uint8_t ChipletType_t; // Type for CHIPLET_TYPE enum
+typedef uint8_t PpeType_t; // Type for PpeType
+typedef uint8_t ChipType_t; // Type for ChipType enum
+typedef uint8_t RingType_t; // Type for RingType enum
+typedef uint8_t RingVariant_t; // Type for RingVariant enum
+
+#define INVALID_RING_ID (RingId_t)0xffff
+#define INVALID_RING_TYPE (RingType_t)0xff
+#define INVALID_CHIP_TYPE (ChipType_t)0xff
+#define INVALID_CHIPLET_TYPE (ChipletType_t)0xff
+
+//
+// Chip types and List to represent p9n, p9c, cen (centaur)
+// NB! There's a matching CHIP_TYPE_LIST definition in common_ringId.C
+//
+enum ChipType
+{
+ CT_P9N, // ==P9 for now
+ CT_P9C, // ==P9 for now
+ CT_CEN,
+ NUM_CHIP_TYPES
+};
+
+typedef struct
+{
+ const char* name;
+ ChipType_t type;
+} ChipTypeList_t;
+
+static const ChipTypeList_t CHIP_TYPE_LIST[] =
+{
+ {"p9n", CT_P9N},
+ {"p9c", CT_P9C},
+ {"cen", CT_CEN},
+};
+
+
+//
+// Ring related data structs and types
+//
+typedef enum RingClass
+{
+ EKB_RING,
+ EKB_FSM_RING,
+ EKB_STUMPED_RING,
+ EKB_CMSK_RING,
+ VPD_RING,
+ CEN_RING,
+ NUM_RING_CLASSES
+} RingClass_t;
+
+//
+// General Ring ID list structure
+//
+typedef struct
+{
+ const char* ringName;
+ RingId_t ringId;
+ uint8_t instanceIdMin;
+ uint8_t instanceIdMax;
+ RingClass_t ringClass;
+ uint32_t scanScomAddress;
+} GenRingIdList;
+
+enum RingVariant
+{
+ BASE = 0x00,
+ CC = 0x01,
+ RL = 0x02,
+ OVERRIDE = 0x03, //@FIXME We should remove this. Its own image now.
+ OVERLAY = 0x04, //@FIXME Not supported.
+ NUM_RING_VARIANTS = 0x05,
+ NOT_VALID = 0xff
+};
+
+typedef struct
+{
+ RingVariant_t variant[3];
+} RingVariantOrder;
+
+
+enum RingType
+{
+ COMMON_RING = 0,
+ INSTANCE_RING = 1,
+ ALLRING = 2
+};
+
+struct CHIPLET_DATA
+{
+ // This is the chiplet-ID of the first instance of the Chiplet
+ uint8_t iv_base_chiplet_number;
+
+ // The no.of common rings for the Chiplet
+ uint8_t iv_num_common_rings;
+
+ // The no.of instance rings for the Chiplet (w/different ringId values)
+ uint8_t iv_num_instance_rings;
+
+ // The no.of instance rings for the Chiplet (w/different ringId values
+ // AND different scanAddress values)
+ uint8_t iv_num_instance_rings_scan_addrs;
+};
+
+// This is used to Set (Mark) the left-most bit
+#define INSTANCE_RING_MARK (uint8_t)0x80
+//
+// This is used to Set (Mark) the left-most bit
+#define INSTANCE_RING_MASK (uint8_t)0x7F
+
+// This is used to mark an invalid ring in the ring properties list
+#define INVALID_RING_OFFSET (uint8_t)0xFF
+
+// This structure is needed for mapping a RingID to it's corresponding name.
+// The names will be used by the build scripts when generating the TOR.
+#ifndef __PPE__
+struct ringProperties_t
+{
+ uint8_t iv_torOffSet;
+ char iv_name[50];
+ ChipletType_t iv_type;
+};
+#else
+struct ringProperties_t
+{
+ uint8_t iv_torOffSet;
+ ChipletType_t iv_type;
+};
+#endif
+
+#endif // _COMMON_RINGID_H_
OpenPOWER on IntegriCloud