1 /*++
2 
3 Copyright (c) 2004 - 2011, Intel Corporation. All rights reserved.<BR>
4 This program and the accompanying materials
5 are licensed and made available under the terms and conditions of the BSD License
6 which accompanies this distribution.  The full text of the license may be found at
7 http://opensource.org/licenses/bsd-license.php
8 
9 THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
10 WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
11 
12 Module Name:
13 
14   DataHubSubClassCache.h
15 
16 Abstract:
17 
18   Definitions for Cache sub class data records
19 
20 Revision History
21 
22 --*/
23 
24 #ifndef _DATAHUB_SUBCLASS_CACHE_H_
25 #define _DATAHUB_SUBCLASS_CACHE_H_
26 
27 #define EFI_CACHE_SUBCLASS_VERSION    0x00010000
28 
29 #define EFI_CACHE_SUBCLASS_GUID \
30 { 0x7f0013a7, 0xdc79, 0x4b22, {0x80, 0x99, 0x11, 0xf7, 0x5f, 0xdc, 0x82, 0x9d} }
31 
32 typedef EFI_EXP_BASE2_DATA  EFI_CACHE_SIZE_DATA;
33 
34 typedef EFI_EXP_BASE2_DATA  EFI_MAXIMUM_CACHE_SIZE_DATA;
35 
36 typedef EFI_EXP_BASE10_DATA EFI_CACHE_SPEED_DATA;
37 
38 typedef STRING_REF  EFI_CACHE_SOCKET_DATA;
39 
40 typedef struct {
41   UINT32  Other     :1;
42   UINT32  Unknown   :1;
43   UINT32  NonBurst    :1;
44   UINT32  Burst     :1;
45   UINT32  PipelineBurst :1;
46   //
47   // Inconsistent between CacheSubclass 0.9 and SMBIOS specifications here:
48   // In CacheSubclass specification 0.9, the sequence of Asynchronous and Synchronous fileds
49   // are opposite to SMBIOS specification.
50   //
51   UINT32  Asynchronous  :1;
52   UINT32  Synchronous :1;
53   UINT32  Reserved    :25;
54 } EFI_CACHE_SRAM_TYPE_DATA;
55 
56 typedef enum {
57   EfiCacheErrorOther = 1,
58   EfiCacheErrorUnknown = 2,
59   EfiCacheErrorNone = 3,
60   EfiCacheErrorParity = 4,
61   EfiCacheErrorSingleBit = 5,
62   EfiCacheErrorMultiBit = 6
63 } EFI_CACHE_ERROR_TYPE_DATA;
64 
65 typedef enum {
66   EfiCacheTypeOther = 1,
67   EfiCacheTypeUnknown = 2,
68   EfiCacheTypeInstruction = 3,
69   EfiCacheTypeData = 4,
70   EfiCacheTypeUnified = 5
71 } EFI_CACHE_TYPE_DATA;
72 
73 typedef enum {
74   EfiCacheAssociativityOther        = 0x01,
75   EfiCacheAssociativityUnknown      = 0x02,
76   EfiCacheAssociativityDirectMapped = 0x03,
77   EfiCacheAssociativity2Way         = 0x04,
78   EfiCacheAssociativity4Way         = 0x05,
79   EfiCacheAssociativityFully        = 0x06,
80   EfiCacheAssociativity8Way         = 0x07,
81   EfiCacheAssociativity16Way        = 0x08,
82   EfiCacheAssociativity12Way        = 0x09,
83   EfiCacheAssociativity24Way        = 0x0A,
84   EfiCacheAssociativity32Way        = 0x0B,
85   EfiCacheAssociativity48Way        = 0x0C,
86   EfiCacheAssociativity64Way        = 0x0D
87 } EFI_CACHE_ASSOCIATIVITY_DATA;
88 
89 typedef struct {
90   UINT32    Level       :3;
91   UINT32    Socketed    :1;
92   UINT32    Reserved2   :1;
93   UINT32    Location    :2;
94   UINT32    Enable      :1;
95   UINT32    OperationalMode :2;
96   UINT32    Reserved1   :22;
97 } EFI_CACHE_CONFIGURATION_DATA;
98 
99 #define EFI_CACHE_L1      1
100 #define EFI_CACHE_L2      2
101 #define EFI_CACHE_L3      3
102 #define EFI_CACHE_L4      4
103 #define EFI_CACHE_LMAX    EFI_CACHE_L4
104 
105 #define EFI_CACHE_SOCKETED      1
106 #define EFI_CACHE_NOT_SOCKETED  0
107 
108 typedef enum {
109   EfiCacheInternal = 0,
110   EfiCacheExternal = 1,
111   EfiCacheReserved = 2,
112   EfiCacheUnknown  = 3
113 } EFI_CACHE_LOCATION;
114 
115 #define EFI_CACHE_ENABLED    1
116 #define EFI_CACHE_DISABLED   0
117 
118 typedef enum {
119   EfiCacheWriteThrough = 0,
120   EfiCacheWriteBack    = 1,
121   EfiCacheDynamicMode  = 2,
122   EfiCacheUnknownMode  = 3
123 } EFI_CACHE_OPERATIONAL_MODE;
124 
125 
126 
127 typedef enum {
128   CacheSizeRecordType = 1,
129   MaximumSizeCacheRecordType = 2,
130   CacheSpeedRecordType = 3,
131   CacheSocketRecordType = 4,
132   CacheSramTypeRecordType = 5,
133   CacheInstalledSramTypeRecordType = 6,
134   CacheErrorTypeRecordType = 7,
135   CacheTypeRecordType = 8,
136   CacheAssociativityRecordType = 9,
137   CacheConfigRecordType = 10
138 } EFI_CACHE_VARIABLE_RECORD_TYPE;
139 
140 
141 typedef union {
142   EFI_CACHE_SIZE_DATA             CacheSize;
143   EFI_MAXIMUM_CACHE_SIZE_DATA     MaximumCacheSize;
144   EFI_CACHE_SPEED_DATA            CacheSpeed;
145   EFI_CACHE_SOCKET_DATA           CacheSocket;
146   EFI_CACHE_SRAM_TYPE_DATA        CacheSramType;
147   EFI_CACHE_SRAM_TYPE_DATA        CacheInstalledSramType;
148   EFI_CACHE_ERROR_TYPE_DATA       CacheErrorType;
149   EFI_CACHE_TYPE_DATA             CacheType;
150   EFI_CACHE_ASSOCIATIVITY_DATA    CacheAssociativity;
151   EFI_CACHE_CONFIGURATION_DATA    CacheConfig;
152   EFI_CACHE_ASSOCIATION_DATA      CacheAssociation;
153 } EFI_CACHE_VARIABLE_RECORD;
154 
155 typedef struct {
156    EFI_SUBCLASS_TYPE1_HEADER      DataRecordHeader;
157    EFI_CACHE_VARIABLE_RECORD      VariableRecord;
158 } EFI_CACHE_DATA_RECORD;
159 
160 
161 #endif
162