summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/i386/shared/smp/smp-imps.c')
-rw-r--r--c/src/lib/libbsp/i386/shared/smp/smp-imps.c30
1 files changed, 14 insertions, 16 deletions
diff --git a/c/src/lib/libbsp/i386/shared/smp/smp-imps.c b/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
index 806cfb93f4..57ec5db3e8 100644
--- a/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
+++ b/c/src/lib/libbsp/i386/shared/smp/smp-imps.c
@@ -79,6 +79,7 @@
#include <rtems/bspsmp.h>
#include <rtems/bspIo.h>
#include <libcpu/cpu.h>
+#include <assert.h>
extern void _pc386_delay(void);
@@ -120,14 +121,14 @@ static void UDELAY(int x)
while ( _i-- )
_pc386_delay();
}
-
+
#define READ_MSR_LO(_x) \
(unsigned int)(read_msr(_x) & 0xffffffff)
static inline unsigned long long read_msr(unsigned int msr)
{
unsigned long long value;
-
+
asm volatile("rdmsr" : "=A" (value) : "c" (msr));
return value;
}
@@ -385,7 +386,7 @@ imps_read_config_table(unsigned start, int count)
case IMPS_BCT_PROCESSOR:
if ( imps_num_cpus < rtems_configuration_get_maximum_processors() ) {
add_processor((imps_processor *)start);
- } else
+ } else
imps_num_cpus++;
start += 12; /* 20 total */
break;
@@ -751,22 +752,19 @@ rtems_isr ap_ipi_isr(
#include <rtems/irq.h>
-static rtems_irq_connect_data apIPIIrqData = {
- 16,
- (void *)ap_ipi_isr,
- 0,
- NULL, /* On */
- NULL, /* Off */
- NULL, /* IsOn */
-};
-
extern void bsp_reset(void);
void ipi_install_irq(void)
{
- if (!BSP_install_rtems_irq_handler (&apIPIIrqData)) {
- printk("Unable to initialize IPI\n");
- bsp_reset();
- }
+ rtems_status_code status;
+
+ status = rtems_interrupt_handler_install(
+ 16,
+ "smp-imps",
+ RTEMS_INTERRUPT_UNIQUE,
+ ap_ipi_isr,
+ NULL
+ );
+ assert(status == RTEMS_SUCCESSFUL);
}
#ifdef __SSE__