1 /* 2 * SPDX-License-Identifier: BSD-2-Clause 3 * 4 * Copyright (c) 2026 The FreeBSD Foundation 5 */ 6 7 #ifndef _LINUXKPI_ASM_CPU_DEVICE_ID_H_ 8 #define _LINUXKPI_ASM_CPU_DEVICE_ID_H_ 9 10 #include <linux/bits.h> 11 12 #define VFM_MODEL_BIT 0 13 #define VFM_FAMILY_BIT 8 14 #define VFM_VENDOR_BIT 16 15 #define VFM_RSVD_BIT 24 16 17 #define VFM_MODEL_MASK GENMASK(VFM_FAMILY_BIT - 1, VFM_MODEL_BIT) 18 #define VFM_FAMILY_MASK GENMASK(VFM_VENDOR_BIT - 1, VFM_FAMILY_BIT) 19 #define VFM_VENDOR_MASK GENMASK(VFM_RSVD_BIT - 1, VFM_VENDOR_BIT) 20 21 #define VFM_MODEL(vfm) (((vfm) & VFM_MODEL_MASK) >> VFM_MODEL_BIT) 22 #define VFM_FAMILY(vfm) (((vfm) & VFM_FAMILY_MASK) >> VFM_FAMILY_BIT) 23 #define VFM_VENDOR(vfm) (((vfm) & VFM_VENDOR_MASK) >> VFM_VENDOR_BIT) 24 25 #define VFM_MAKE(_vendor, _family, _model) ( \ 26 ((_model) << VFM_MODEL_BIT) | \ 27 ((_family) << VFM_FAMILY_BIT) | \ 28 ((_vendor) << VFM_VENDOR_BIT) \ 29 ) 30 31 #include <linux/mod_devicetable.h> 32 #include <asm/intel-family.h> 33 #include <asm/processor.h> 34 35 #define X86_CPU_ID_FLAG_ENTRY_VALID BIT(0) 36 37 #define X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ 38 _vendor, _family, _model, _steppings, _feature) { \ 39 .vendor = _vendor, \ 40 .family = _family, \ 41 .model = _model, \ 42 .steppings = _steppings, \ 43 .feature = _feature, \ 44 .flags = X86_CPU_ID_FLAG_ENTRY_VALID, \ 45 } 46 47 #define X86_MATCH_VFM(_vfm, _data) \ 48 X86_MATCH_VENDORID_FAM_MODEL_STEPPINGS_FEATURE( \ 49 VFM_VENDOR(_vfm), \ 50 VFM_FAMILY(_vfm), \ 51 VFM_MODEL(_vfm), \ 52 X86_STEPPING_ANY, \ 53 X86_FEATURE_ANY) 54 55 #if defined(__i386__) || defined(__amd64__) 56 const struct x86_cpu_id *linuxkpi_x86_match_cpu(const struct x86_cpu_id *match_array); 57 #define x86_match_cpu(match_array) linuxkpi_x86_match_cpu(match_array) 58 #endif 59 60 #endif /* _LINUXKPI_ASM_CPU_DEVICE_ID_H_ */ 61