xref: /freebsd/sys/xen/features.c (revision 3a6d1fcf9c8ed864c98e449a0b7696be6c838aea)
1178c2c79SKip Macy #include <sys/cdefs.h>
2178c2c79SKip Macy __FBSDID("$FreeBSD$");
3178c2c79SKip Macy 
4178c2c79SKip Macy #include <sys/types.h>
5178c2c79SKip Macy #include <machine/xen/xen-os.h>
63a6d1fcfSKip Macy #include <xen/hypervisor.h>
7178c2c79SKip Macy #include <machine/xen/features.h>
8178c2c79SKip Macy 
9178c2c79SKip Macy uint8_t xen_features[XENFEAT_NR_SUBMAPS * 32] /* __read_mostly */;
10178c2c79SKip Macy 
11178c2c79SKip Macy void
12178c2c79SKip Macy setup_xen_features(void)
13178c2c79SKip Macy {
14178c2c79SKip Macy         xen_feature_info_t fi;
15178c2c79SKip Macy         int i, j;
16178c2c79SKip Macy 
17178c2c79SKip Macy         for (i = 0; i < XENFEAT_NR_SUBMAPS; i++) {
18178c2c79SKip Macy                 fi.submap_idx = i;
19178c2c79SKip Macy                 if (HYPERVISOR_xen_version(XENVER_get_features, &fi) < 0)
20178c2c79SKip Macy                         break;
21178c2c79SKip Macy                 for (j = 0; j < 32; j++)
22178c2c79SKip Macy                         xen_features[i*32 + j] = !!(fi.submap & 1<<j);
23178c2c79SKip Macy         }
24178c2c79SKip Macy }
25