2228 #if defined(__amd64) && !defined(__xpv)
2229 /*
2230 * Intel IOMMU has been setup/initialized in ddi_impl.c
2231 * Start it up now.
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 these software interrupts for ddi timer.
2249 * Software interrupts up to the level 10 are supported.
2250 */
2251 for (i = DDI_IPL_1; i <= DDI_IPL_10; i++) {
2252 char name[sizeof ("timer_softintr") + 2];
2253 (void) sprintf(name, "timer_softintr%02d", i);
2254 (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
2255 (avfunc)timer_softintr, name, (caddr_t)(uintptr_t)i, NULL);
2256 }
2257
2258 #if !defined(__xpv)
2259 if (modload("drv", "amd_iommu") < 0) {
2260 PRM_POINT("No AMD IOMMU present\n");
2261 } else if (ddi_hold_installed_driver(ddi_name_to_major(
2262 "amd_iommu")) == NULL) {
2263 prom_printf("ERROR: failed to attach AMD IOMMU\n");
2264 }
2265 #endif
2266 post_startup_cpu_fixups();
2267
2268 PRM_POINT("startup_end() done");
2269 }
2270
2271 /*
2272 * Don't remove the following 2 variables. They are necessary
2273 * for reading the hostid from the legacy file (/kernel/misc/sysinit).
2274 */
2275 char *_hs1107 = hw_serial;
|
2228 #if defined(__amd64) && !defined(__xpv)
2229 /*
2230 * Intel IOMMU has been setup/initialized in ddi_impl.c
2231 * Start it up now.
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
2277 * for reading the hostid from the legacy file (/kernel/misc/sysinit).
2278 */
2279 char *_hs1107 = hw_serial;
|