xref: /freebsd/sys/xen/features.c (revision 685dc743dc3b5645e34836464128e1c0558b404b)
1178c2c79SKip Macy #include <sys/cdefs.h>
212678024SDoug Rabson #include <sys/param.h>
312678024SDoug Rabson #include <sys/systm.h>
412678024SDoug Rabson 
5*76acc41fSJustin T. Gibbs #include <xen/xen-os.h>
63a6d1fcfSKip Macy #include <xen/hypervisor.h>
712678024SDoug Rabson #include <xen/features.h>
8178c2c79SKip Macy 
9178c2c79SKip Macy uint8_t xen_features[XENFEAT_NR_SUBMAPS * 32] /* __read_mostly */;
10178c2c79SKip Macy 
11178c2c79SKip Macy void
setup_xen_features(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