101 #include <sys/thread.h>
102 #include <sys/sysconf.h>
103 #include <sys/vm_machparam.h>
104 #include <sys/archsystm.h>
105 #include <sys/machsystm.h>
106 #include <vm/hat.h>
107 #include <vm/hat_i86.h>
108 #include <sys/pmem.h>
109 #include <sys/smp_impldefs.h>
110 #include <sys/x86_archext.h>
111 #include <sys/cpuvar.h>
112 #include <sys/segments.h>
113 #include <sys/clconf.h>
114 #include <sys/kobj.h>
115 #include <sys/kobj_lex.h>
116 #include <sys/cpc_impl.h>
117 #include <sys/cpu_module.h>
118 #include <sys/smbios.h>
119 #include <sys/debug_info.h>
120 #include <sys/bootinfo.h>
121 #include <sys/ddi_timer.h>
122 #include <sys/systeminfo.h>
123 #include <sys/multiboot.h>
124
125 #ifdef __xpv
126
127 #include <sys/hypervisor.h>
128 #include <sys/xen_mmu.h>
129 #include <sys/evtchn_impl.h>
130 #include <sys/gnttab.h>
131 #include <sys/xpv_panic.h>
132 #include <xen/sys/xenbus_comms.h>
133 #include <xen/public/physdev.h>
134
135 extern void xen_late_startup(void);
136
137 struct xen_evt_data cpu0_evt_data;
138
139 #else /* __xpv */
140 #include <sys/memlist_impl.h>
141
2232 */
2233 immu_startup();
2234 #endif
2235
2236 PRM_POINT("Enabling interrupts");
2237 (*picinitf)();
2238 sti();
2239 #if defined(__xpv)
2240 ASSERT(CPU->cpu_m.mcpu_vcpu_info->evtchn_upcall_mask == 0);
2241 xen_late_startup();
2242 #endif
2243
2244 (void) add_avsoftintr((void *)&softlevel1_hdl, 1, softlevel1,
2245 "softlevel1", NULL, NULL); /* XXX to be moved later */
2246
2247 /*
2248 * Register software interrupt handlers for ddi_periodic_add(9F).
2249 * Software interrupts up to the level 10 are supported.
2250 */
2251 for (i = DDI_IPL_1; i <= DDI_IPL_10; i++) {
2252 /*
2253 * The constant string "ddi_periodic", below, is only used to
2254 * print debugging information. Generating a dynamic string
2255 * for each soft level is a waste of kernel memory.
2256 */
2257 (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
2258 (avfunc)ddi_periodic_softintr, "ddi_periodic",
2259 (caddr_t)(uintptr_t)i, NULL);
2260 }
2261
2262 #if !defined(__xpv)
2263 if (modload("drv", "amd_iommu") < 0) {
2264 PRM_POINT("No AMD IOMMU present\n");
2265 } else if (ddi_hold_installed_driver(ddi_name_to_major(
2266 "amd_iommu")) == NULL) {
2267 prom_printf("ERROR: failed to attach AMD IOMMU\n");
2268 }
2269 #endif
2270 post_startup_cpu_fixups();
2271
2272 PRM_POINT("startup_end() done");
2273 }
2274
2275 /*
2276 * Don't remove the following 2 variables. They are necessary
|
101 #include <sys/thread.h>
102 #include <sys/sysconf.h>
103 #include <sys/vm_machparam.h>
104 #include <sys/archsystm.h>
105 #include <sys/machsystm.h>
106 #include <vm/hat.h>
107 #include <vm/hat_i86.h>
108 #include <sys/pmem.h>
109 #include <sys/smp_impldefs.h>
110 #include <sys/x86_archext.h>
111 #include <sys/cpuvar.h>
112 #include <sys/segments.h>
113 #include <sys/clconf.h>
114 #include <sys/kobj.h>
115 #include <sys/kobj_lex.h>
116 #include <sys/cpc_impl.h>
117 #include <sys/cpu_module.h>
118 #include <sys/smbios.h>
119 #include <sys/debug_info.h>
120 #include <sys/bootinfo.h>
121 #include <sys/ddi_periodic.h>
122 #include <sys/systeminfo.h>
123 #include <sys/multiboot.h>
124
125 #ifdef __xpv
126
127 #include <sys/hypervisor.h>
128 #include <sys/xen_mmu.h>
129 #include <sys/evtchn_impl.h>
130 #include <sys/gnttab.h>
131 #include <sys/xpv_panic.h>
132 #include <xen/sys/xenbus_comms.h>
133 #include <xen/public/physdev.h>
134
135 extern void xen_late_startup(void);
136
137 struct xen_evt_data cpu0_evt_data;
138
139 #else /* __xpv */
140 #include <sys/memlist_impl.h>
141
2232 */
2233 immu_startup();
2234 #endif
2235
2236 PRM_POINT("Enabling interrupts");
2237 (*picinitf)();
2238 sti();
2239 #if defined(__xpv)
2240 ASSERT(CPU->cpu_m.mcpu_vcpu_info->evtchn_upcall_mask == 0);
2241 xen_late_startup();
2242 #endif
2243
2244 (void) add_avsoftintr((void *)&softlevel1_hdl, 1, softlevel1,
2245 "softlevel1", NULL, NULL); /* XXX to be moved later */
2246
2247 /*
2248 * Register software interrupt handlers for ddi_periodic_add(9F).
2249 * Software interrupts up to the level 10 are supported.
2250 */
2251 for (i = DDI_IPL_1; i <= DDI_IPL_10; i++) {
2252 (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
2253 (avfunc)ddi_periodic_softintr, "ddi_periodic",
2254 (caddr_t)(uintptr_t)i, NULL);
2255 }
2256
2257 #if !defined(__xpv)
2258 if (modload("drv", "amd_iommu") < 0) {
2259 PRM_POINT("No AMD IOMMU present\n");
2260 } else if (ddi_hold_installed_driver(ddi_name_to_major(
2261 "amd_iommu")) == NULL) {
2262 prom_printf("ERROR: failed to attach AMD IOMMU\n");
2263 }
2264 #endif
2265 post_startup_cpu_fixups();
2266
2267 PRM_POINT("startup_end() done");
2268 }
2269
2270 /*
2271 * Don't remove the following 2 variables. They are necessary
|