1420 #define INTC_MODEL_COMETLAKE_MOBILE 0xa6
1421 #define INTC_MODEL_ROCKETLAKE 0xa7
1422
1423 /*
1424 * Atom Processors
1425 */
1426 #define INTC_MODEL_SILVERTHORNE 0x1c
1427 #define INTC_MODEL_LINCROFT 0x26
1428 #define INTC_MODEL_PENWELL 0x27
1429 #define INTC_MODEL_CLOVERVIEW 0x35
1430 #define INTC_MODEL_CEDARVIEW 0x36
1431 #define INTC_MODEL_BAY_TRAIL 0x37
1432 #define INTC_MODEL_AVATON 0x4d
1433 #define INTC_MODEL_AIRMONT 0x4c
1434 #define INTC_MODEL_GOLDMONT 0x5c
1435 #define INTC_MODEL_DENVERTON 0x5f
1436 #define INTC_MODEL_GEMINI_LAKE 0x7a
1437
1438 /*
1439 * xgetbv/xsetbv support
1440 * See section 13.3 in vol. 1 of the Intel devlopers manual.
1441 */
1442
1443 #define XFEATURE_ENABLED_MASK 0x0
1444 /*
1445 * XFEATURE_ENABLED_MASK values (eax)
1446 * See setup_xfem().
1447 */
1448 #define XFEATURE_LEGACY_FP 0x1
1449 #define XFEATURE_SSE 0x2
1450 #define XFEATURE_AVX 0x4
1451 #define XFEATURE_MPX 0x18 /* 2 bits, both 0 or 1 */
1452 #define XFEATURE_AVX512 0xe0 /* 3 bits, all 0 or 1 */
1453 /* bit 8 unused */
1454 #define XFEATURE_PKRU 0x200
1455 #define XFEATURE_FP_ALL \
1456 (XFEATURE_LEGACY_FP | XFEATURE_SSE | XFEATURE_AVX | XFEATURE_MPX | \
1457 XFEATURE_AVX512 | XFEATURE_PKRU)
1458
1459 /*
1460 * Define the set of xfeature flags that should be considered valid in the xsave
1461 * state vector when we initialize an lwp. This is distinct from the full set so
1462 * that all of the processor's normal logic and tracking of the xsave state is
1463 * usable. This should correspond to the state that's been initialized by the
1464 * ABI to hold meaningful values. Adding additional bits here can have serious
1465 * performance implications and cause performance degradations when using the
1466 * FPU vector (xmm) registers.
1467 */
1468 #define XFEATURE_FP_INITIAL (XFEATURE_LEGACY_FP | XFEATURE_SSE)
1469
1470 #if !defined(_ASM)
1471
1472 #if defined(_KERNEL) || defined(_KMEMUSER)
1473
1474 #define NUM_X86_FEATURES 109
1559 extern const char *cpuid_getvendorstr(struct cpu *);
1560 extern uint_t cpuid_getvendor(struct cpu *);
1561 extern uint_t cpuid_getfamily(struct cpu *);
1562 extern uint_t cpuid_getmodel(struct cpu *);
1563 extern uint_t cpuid_getstep(struct cpu *);
1564 extern uint_t cpuid_getsig(struct cpu *);
1565 extern uint_t cpuid_get_ncpu_per_chip(struct cpu *);
1566 extern uint_t cpuid_get_ncore_per_chip(struct cpu *);
1567 extern uint_t cpuid_get_ncpu_sharing_last_cache(struct cpu *);
1568 extern id_t cpuid_get_last_lvl_cacheid(struct cpu *);
1569 extern int cpuid_get_chipid(struct cpu *);
1570 extern id_t cpuid_get_coreid(struct cpu *);
1571 extern int cpuid_get_pkgcoreid(struct cpu *);
1572 extern int cpuid_get_clogid(struct cpu *);
1573 extern int cpuid_get_cacheid(struct cpu *);
1574 extern uint32_t cpuid_get_apicid(struct cpu *);
1575 extern uint_t cpuid_get_procnodeid(struct cpu *cpu);
1576 extern uint_t cpuid_get_procnodes_per_pkg(struct cpu *cpu);
1577 extern uint_t cpuid_get_compunitid(struct cpu *cpu);
1578 extern uint_t cpuid_get_cores_per_compunit(struct cpu *cpu);
1579 extern size_t cpuid_get_xsave_size();
1580 extern boolean_t cpuid_need_fp_excp_handling();
1581 extern int cpuid_is_cmt(struct cpu *);
1582 extern int cpuid_syscall32_insn(struct cpu *);
1583 extern int getl2cacheinfo(struct cpu *, int *, int *, int *);
1584
1585 extern x86_chiprev_t cpuid_getchiprev(struct cpu *);
1586 extern const char *cpuid_getchiprevstr(struct cpu *);
1587 extern uint32_t cpuid_getsockettype(struct cpu *);
1588 extern const char *cpuid_getsocketstr(struct cpu *);
1589 extern x86_uarchrev_t cpuid_getuarchrev(struct cpu *);
1590
1591 extern int cpuid_opteron_erratum(struct cpu *, uint_t);
1592
1593 struct cpuid_info;
1594
1595 extern void setx86isalist(void);
1596 extern void cpuid_alloc_space(struct cpu *);
1597 extern void cpuid_free_space(struct cpu *);
1598 extern void cpuid_set_cpu_properties(void *, processorid_t,
1599 struct cpuid_info *);
1600 extern void cpuid_post_ucodeadm(void);
|
1420 #define INTC_MODEL_COMETLAKE_MOBILE 0xa6
1421 #define INTC_MODEL_ROCKETLAKE 0xa7
1422
1423 /*
1424 * Atom Processors
1425 */
1426 #define INTC_MODEL_SILVERTHORNE 0x1c
1427 #define INTC_MODEL_LINCROFT 0x26
1428 #define INTC_MODEL_PENWELL 0x27
1429 #define INTC_MODEL_CLOVERVIEW 0x35
1430 #define INTC_MODEL_CEDARVIEW 0x36
1431 #define INTC_MODEL_BAY_TRAIL 0x37
1432 #define INTC_MODEL_AVATON 0x4d
1433 #define INTC_MODEL_AIRMONT 0x4c
1434 #define INTC_MODEL_GOLDMONT 0x5c
1435 #define INTC_MODEL_DENVERTON 0x5f
1436 #define INTC_MODEL_GEMINI_LAKE 0x7a
1437
1438 /*
1439 * xgetbv/xsetbv support
1440 * See section 13.3 in vol. 1 of the Intel Developer's manual.
1441 */
1442
1443 #define XFEATURE_ENABLED_MASK 0x0
1444 /*
1445 * XFEATURE_ENABLED_MASK values (eax)
1446 * See setup_xfem().
1447 */
1448 #define XFEATURE_LEGACY_FP (1 << 0)
1449 #define XFEATURE_SSE (1 << 1)
1450 #define XFEATURE_AVX (1 << 2)
1451 /*
1452 * MPX is meant to be all or nothing, therefore for most of the kernel use the
1453 * following definition.
1454 */
1455 #define XFEATURE_MPX_BNDREGS (1 << 3)
1456 #define XFEATURE_MPX_BNDCSR (1 << 4)
1457 #define XFEATURE_MPX (XFEATURE_MPX_BNDREGS | XFEATURE_MPX_BNDCSR)
1458 /*
1459 * AVX512 is meant to be all or nothing, therefore for most of the kernel use
1460 * the following definition.
1461 */
1462 #define XFEATURE_AVX512_OPMASK (1 << 5)
1463 #define XFEATURE_AVX512_ZMM (1 << 6)
1464 #define XFEATURE_AVX512_HI_ZMM (1 << 7)
1465 #define XFEATURE_AVX512 (XFEATURE_AVX512_OPMASK | \
1466 XFEATURE_AVX512_ZMM | XFEATURE_AVX512_HI_ZMM)
1467 /* bit 8 unused */
1468 #define XFEATURE_PKRU (1 << 9)
1469 #define XFEATURE_FP_ALL \
1470 (XFEATURE_LEGACY_FP | XFEATURE_SSE | XFEATURE_AVX | XFEATURE_MPX | \
1471 XFEATURE_AVX512 | XFEATURE_PKRU)
1472
1473 /*
1474 * Define the set of xfeature flags that should be considered valid in the xsave
1475 * state vector when we initialize an lwp. This is distinct from the full set so
1476 * that all of the processor's normal logic and tracking of the xsave state is
1477 * usable. This should correspond to the state that's been initialized by the
1478 * ABI to hold meaningful values. Adding additional bits here can have serious
1479 * performance implications and cause performance degradations when using the
1480 * FPU vector (xmm) registers.
1481 */
1482 #define XFEATURE_FP_INITIAL (XFEATURE_LEGACY_FP | XFEATURE_SSE)
1483
1484 #if !defined(_ASM)
1485
1486 #if defined(_KERNEL) || defined(_KMEMUSER)
1487
1488 #define NUM_X86_FEATURES 109
1573 extern const char *cpuid_getvendorstr(struct cpu *);
1574 extern uint_t cpuid_getvendor(struct cpu *);
1575 extern uint_t cpuid_getfamily(struct cpu *);
1576 extern uint_t cpuid_getmodel(struct cpu *);
1577 extern uint_t cpuid_getstep(struct cpu *);
1578 extern uint_t cpuid_getsig(struct cpu *);
1579 extern uint_t cpuid_get_ncpu_per_chip(struct cpu *);
1580 extern uint_t cpuid_get_ncore_per_chip(struct cpu *);
1581 extern uint_t cpuid_get_ncpu_sharing_last_cache(struct cpu *);
1582 extern id_t cpuid_get_last_lvl_cacheid(struct cpu *);
1583 extern int cpuid_get_chipid(struct cpu *);
1584 extern id_t cpuid_get_coreid(struct cpu *);
1585 extern int cpuid_get_pkgcoreid(struct cpu *);
1586 extern int cpuid_get_clogid(struct cpu *);
1587 extern int cpuid_get_cacheid(struct cpu *);
1588 extern uint32_t cpuid_get_apicid(struct cpu *);
1589 extern uint_t cpuid_get_procnodeid(struct cpu *cpu);
1590 extern uint_t cpuid_get_procnodes_per_pkg(struct cpu *cpu);
1591 extern uint_t cpuid_get_compunitid(struct cpu *cpu);
1592 extern uint_t cpuid_get_cores_per_compunit(struct cpu *cpu);
1593 extern size_t cpuid_get_xsave_size(void);
1594 extern void cpuid_get_xsave_info(uint64_t, size_t *, size_t *);
1595 extern boolean_t cpuid_need_fp_excp_handling(void);
1596 extern int cpuid_is_cmt(struct cpu *);
1597 extern int cpuid_syscall32_insn(struct cpu *);
1598 extern int getl2cacheinfo(struct cpu *, int *, int *, int *);
1599
1600 extern x86_chiprev_t cpuid_getchiprev(struct cpu *);
1601 extern const char *cpuid_getchiprevstr(struct cpu *);
1602 extern uint32_t cpuid_getsockettype(struct cpu *);
1603 extern const char *cpuid_getsocketstr(struct cpu *);
1604 extern x86_uarchrev_t cpuid_getuarchrev(struct cpu *);
1605
1606 extern int cpuid_opteron_erratum(struct cpu *, uint_t);
1607
1608 struct cpuid_info;
1609
1610 extern void setx86isalist(void);
1611 extern void cpuid_alloc_space(struct cpu *);
1612 extern void cpuid_free_space(struct cpu *);
1613 extern void cpuid_set_cpu_properties(void *, processorid_t,
1614 struct cpuid_info *);
1615 extern void cpuid_post_ucodeadm(void);
|