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);
  
 |