summaryrefslogtreecommitdiff
path: root/usr/src/uts/i86pc/os/startup.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/i86pc/os/startup.c')
-rw-r--r--usr/src/uts/i86pc/os/startup.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/usr/src/uts/i86pc/os/startup.c b/usr/src/uts/i86pc/os/startup.c
index 41478d4116..cad59a9c1c 100644
--- a/usr/src/uts/i86pc/os/startup.c
+++ b/usr/src/uts/i86pc/os/startup.c
@@ -112,6 +112,7 @@
#include <sys/cpu_module.h>
#include <sys/smbios.h>
#include <sys/debug_info.h>
+#include <sys/ddi_timer.h>
#ifdef __xpv
#include <sys/hypervisor.h>
@@ -1909,6 +1910,7 @@ load_tod_module(char *todmod)
static void
startup_end(void)
{
+ int i;
extern void setx86isalist(void);
PRM_POINT("startup_end() starting...");
@@ -1984,6 +1986,17 @@ startup_end(void)
(void) add_avsoftintr((void *)&softlevel1_hdl, 1, softlevel1,
"softlevel1", NULL, NULL); /* XXX to be moved later */
+ /*
+ * Register these software interrupts for ddi timer.
+ * Software interrupts up to the level 10 are supported.
+ */
+ for (i = DDI_IPL_1; i <= DDI_IPL_10; i++) {
+ char name[sizeof ("timer_softintr") + 2];
+ (void) sprintf(name, "timer_softintr%02d", i);
+ (void) add_avsoftintr((void *)&softlevel_hdl[i-1], i,
+ (avfunc)timer_softintr, name, (caddr_t)(uintptr_t)i, NULL);
+ }
+
PRM_POINT("startup_end() done");
}