|
74 | 74 | * into another macro at the usage site for good reasons, then please
|
75 | 75 | * start this local macro with X86_MATCH to allow easy grepping.
|
76 | 76 | */
|
77 |
| -#define X86_MATCH_CPU(_vendor, _family, _model, _steppings, _feature, _data) { \ |
| 77 | +#define X86_MATCH_CPU(_vendor, _family, _model, _steppings, _feature, _type, _data) { \ |
78 | 78 | .vendor = _vendor, \
|
79 | 79 | .family = _family, \
|
80 | 80 | .model = _model, \
|
81 | 81 | .steppings = _steppings, \
|
82 | 82 | .feature = _feature, \
|
83 | 83 | .flags = X86_CPU_ID_FLAG_ENTRY_VALID, \
|
| 84 | + .type = _type, \ |
84 | 85 | .driver_data = (unsigned long) _data \
|
85 | 86 | }
|
86 | 87 |
|
|
96 | 97 | */
|
97 | 98 | #define X86_MATCH_VENDOR_FAM_FEATURE(vendor, family, feature, data) \
|
98 | 99 | X86_MATCH_CPU(X86_VENDOR_##vendor, family, X86_MODEL_ANY, \
|
99 |
| - X86_STEPPING_ANY, feature, data) |
| 100 | + X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data) |
100 | 101 |
|
101 | 102 | /**
|
102 | 103 | * X86_MATCH_VENDOR_FEATURE - Macro for matching vendor and CPU feature
|
|
109 | 110 | */
|
110 | 111 | #define X86_MATCH_VENDOR_FEATURE(vendor, feature, data) \
|
111 | 112 | X86_MATCH_CPU(X86_VENDOR_##vendor, X86_FAMILY_ANY, X86_MODEL_ANY, \
|
112 |
| - X86_STEPPING_ANY, feature, data) |
| 113 | + X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data) |
113 | 114 |
|
114 | 115 | /**
|
115 | 116 | * X86_MATCH_FEATURE - Macro for matching a CPU feature
|
|
120 | 121 | */
|
121 | 122 | #define X86_MATCH_FEATURE(feature, data) \
|
122 | 123 | X86_MATCH_CPU(X86_VENDOR_ANY, X86_FAMILY_ANY, X86_MODEL_ANY, \
|
123 |
| - X86_STEPPING_ANY, feature, data) |
| 124 | + X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data) |
124 | 125 |
|
125 | 126 | /**
|
126 | 127 | * X86_MATCH_VENDOR_FAM_MODEL - Match vendor, family and model
|
|
134 | 135 | */
|
135 | 136 | #define X86_MATCH_VENDOR_FAM_MODEL(vendor, family, model, data) \
|
136 | 137 | X86_MATCH_CPU(X86_VENDOR_##vendor, family, model, X86_STEPPING_ANY, \
|
137 |
| - X86_FEATURE_ANY, data) |
| 138 | + X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data) |
138 | 139 |
|
139 | 140 | /**
|
140 | 141 | * X86_MATCH_VENDOR_FAM - Match vendor and family
|
|
147 | 148 | */
|
148 | 149 | #define X86_MATCH_VENDOR_FAM(vendor, family, data) \
|
149 | 150 | X86_MATCH_CPU(X86_VENDOR_##vendor, family, X86_MODEL_ANY, \
|
150 |
| - X86_STEPPING_ANY, X86_FEATURE_ANY, data) |
| 151 | + X86_STEPPING_ANY, X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data) |
151 | 152 |
|
152 | 153 | /**
|
153 | 154 | * X86_MATCH_VFM - Match encoded vendor/family/model
|
|
158 | 159 | */
|
159 | 160 | #define X86_MATCH_VFM(vfm, data) \
|
160 | 161 | X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
|
161 |
| - X86_STEPPING_ANY, X86_FEATURE_ANY, data) |
| 162 | + X86_STEPPING_ANY, X86_FEATURE_ANY, X86_CPU_TYPE_ANY, data) |
162 | 163 |
|
163 | 164 | #define __X86_STEPPINGS(mins, maxs) GENMASK(maxs, mins)
|
164 | 165 | /**
|
|
173 | 174 | */
|
174 | 175 | #define X86_MATCH_VFM_STEPS(vfm, min_step, max_step, data) \
|
175 | 176 | X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
|
176 |
| - __X86_STEPPINGS(min_step, max_step), X86_FEATURE_ANY, data) |
| 177 | + __X86_STEPPINGS(min_step, max_step), X86_FEATURE_ANY, \ |
| 178 | + X86_CPU_TYPE_ANY, data) |
177 | 179 |
|
178 | 180 | /**
|
179 | 181 | * X86_MATCH_VFM_FEATURE - Match encoded vendor/family/model/feature
|
|
185 | 187 | */
|
186 | 188 | #define X86_MATCH_VFM_FEATURE(vfm, feature, data) \
|
187 | 189 | X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \
|
188 |
| - X86_STEPPING_ANY, feature, data) |
| 190 | + X86_STEPPING_ANY, feature, X86_CPU_TYPE_ANY, data) |
| 191 | + |
| 192 | +/** |
| 193 | + * X86_MATCH_VFM_CPU_TYPE - Match encoded vendor/family/model/type |
| 194 | + * @vfm: Encoded 8-bits each for vendor, family, model |
| 195 | + * @type: CPU type e.g. P-core, E-core |
| 196 | + * @data: Driver specific data or NULL. The internal storage |
| 197 | + * format is unsigned long. The supplied value, pointer |
| 198 | + * etc. is cast to unsigned long internally. |
| 199 | + */ |
| 200 | +#define X86_MATCH_VFM_CPU_TYPE(vfm, type, data) \ |
| 201 | + X86_MATCH_CPU(VFM_VENDOR(vfm), VFM_FAMILY(vfm), VFM_MODEL(vfm), \ |
| 202 | + X86_STEPPING_ANY, X86_FEATURE_ANY, type, data) |
189 | 203 |
|
190 | 204 | extern const struct x86_cpu_id *x86_match_cpu(const struct x86_cpu_id *match);
|
191 | 205 | extern bool x86_match_min_microcode_rev(const struct x86_cpu_id *table);
|
|
0 commit comments