git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Decoupling Architectural-specific Code (#35)
[lunaix-os.git]
/
lunaix-os
/
arch
/
i386
/
exceptions
/
interrupts.c
diff --git
a/lunaix-os/arch/i386/exceptions/interrupts.c
b/lunaix-os/arch/i386/exceptions/interrupts.c
index 8e6fa208e0782c61606a903d35f29452ae400e72..d7eced3e6a9aaa33abf2b3fff8457ede47d0f83b 100644
(file)
--- a/
lunaix-os/arch/i386/exceptions/interrupts.c
+++ b/
lunaix-os/arch/i386/exceptions/interrupts.c
@@
-1,11
+1,11
@@
#include <sys/cpu.h>
#include <sys/i386_intr.h>
#include <sys/cpu.h>
#include <sys/i386_intr.h>
-#include <sys/
interrupts
.h>
-#include
<sys/x86_isa.h>
+#include <sys/
hart
.h>
+#include
"sys/x86_isa.h"
-#include
<hal/intc.h>
+#include
"sys/x86_isa.h"
-#include <lunaix/isrm.h>
+#include <lunaix/
generic/
isrm.h>
#include <lunaix/mm/vmm.h>
#include <lunaix/process.h>
#include <lunaix/sched.h>
#include <lunaix/mm/vmm.h>
#include <lunaix/process.h>
#include <lunaix/sched.h>
@@
-14,30
+14,30
@@
LOG_MODULE("INTR")
static inline void
LOG_MODULE("INTR")
static inline void
-update_thread_context(
isr_param* param
)
+update_thread_context(
struct hart_state* state
)
{
if (!current_thread) {
return;
}
{
if (!current_thread) {
return;
}
-
isr_param* ppctx = current_thread->intr_ctx
;
-
param->execp->saved_prev_ctx = ppctx
;
- current_thread->
intr_ctx = param
;
+
struct hart_state* parent = current_thread->hstate
;
+
hart_push_state(parent, state)
;
+ current_thread->
hstate = state
;
- if (p
pctx
) {
-
param->depth = ppctx
->depth + 1;
+ if (p
arent
) {
+
state->depth = parent
->depth + 1;
}
}
void
}
}
void
-intr_handler(
isr_param* param
)
+intr_handler(
struct hart_state* state
)
{
{
- update_thread_context(
param
);
+ update_thread_context(
state
);
- volatile struct exec_param* execp =
param
->execp;
+ volatile struct exec_param* execp =
state
->execp;
if (execp->vector <= 255) {
isr_cb subscriber = isrm_get(execp->vector);
if (execp->vector <= 255) {
isr_cb subscriber = isrm_get(execp->vector);
- subscriber(
param
);
+ subscriber(
state
);
goto done;
}
goto done;
}
@@
-50,7
+50,7
@@
intr_handler(isr_param* param)
done:
if (execp->vector > IV_BASE_END) {
done:
if (execp->vector > IV_BASE_END) {
- i
ntc
_notify_eoi(0, execp->vector);
+ i
srm
_notify_eoi(0, execp->vector);
}
return;
}
return;