Subversion Repositories HelenOS

Rev

Rev 1787 | Rev 1888 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 1787 Rev 1882
Line 155... Line 155...
155
void general_exception(uint64_t vector, istate_t *istate)
155
void general_exception(uint64_t vector, istate_t *istate)
156
{
156
{
157
    char *desc = "";
157
    char *desc = "";
158
 
158
 
159
    switch (istate->cr_isr.ge_code) {
159
    switch (istate->cr_isr.ge_code) {
160
        case GE_ILLEGALOP:
160
    case GE_ILLEGALOP:
161
        desc = "Illegal Operation fault";
161
        desc = "Illegal Operation fault";
162
        break;
162
        break;
163
        case GE_PRIVOP:
163
    case GE_PRIVOP:
164
        desc = "Privileged Operation fault";
164
        desc = "Privileged Operation fault";
165
        break;
165
        break;
166
        case GE_PRIVREG:
166
    case GE_PRIVREG:
167
        desc = "Privileged Register fault";
167
        desc = "Privileged Register fault";
168
        break;
168
        break;
169
        case GE_RESREGFLD:
169
    case GE_RESREGFLD:
170
        desc = "Reserved Register/Field fault";
170
        desc = "Reserved Register/Field fault";
171
        break;
171
        break;
172
        case GE_DISBLDISTRAN:
172
    case GE_DISBLDISTRAN:
173
        desc = "Disabled Instruction Set Transition fault";
173
        desc = "Disabled Instruction Set Transition fault";
174
        break;
174
        break;
175
        case GE_ILLEGALDEP:
175
    case GE_ILLEGALDEP:
176
        desc = "Illegal Dependency fault";
176
        desc = "Illegal Dependency fault";
177
        break;
177
        break;
178
        default:
178
    default:
179
            desc = "unknown";
179
        desc = "unknown";
180
        break;
180
        break;
181
    }
181
    }
182
 
182
 
183
    fault_if_from_uspace(istate, "General Exception (%s)", desc);
183
    fault_if_from_uspace(istate, "General Exception (%s)", desc);
184
 
184
 
185
    dump_interrupted_context(istate);
185
    dump_interrupted_context(istate);
186
    panic("General Exception (%s)\n", desc);
186
    panic("General Exception (%s)\n", desc);
187
}
187
}
188
 
188
 
189
void fpu_enable(void);
-
 
190
 
-
 
191
void disabled_fp_register(uint64_t vector, istate_t *istate)
189
void disabled_fp_register(uint64_t vector, istate_t *istate)
192
{
190
{
193
#ifdef CONFIG_FPU_LAZY 
191
#ifdef CONFIG_FPU_LAZY 
194
    scheduler_fpu_lazy_request();  
192
    scheduler_fpu_lazy_request();  
195
#else
193
#else
Line 203... Line 201...
203
void nop_handler(uint64_t vector, istate_t *istate)
201
void nop_handler(uint64_t vector, istate_t *istate)
204
{
202
{
205
}
203
}
206
 
204
 
207
 
205
 
208
 
-
 
209
/** Handle syscall. */
206
/** Handle syscall. */
210
int break_instruction(uint64_t vector, istate_t *istate)
207
int break_instruction(uint64_t vector, istate_t *istate)
211
{
208
{
212
    /*
209
    /*
213
     * Move to next instruction after BREAK.
210
     * Move to next instruction after BREAK.
Line 240... Line 237...
240
   
237
   
241
    ivr.value = ivr_read();
238
    ivr.value = ivr_read();
242
    srlz_d();
239
    srlz_d();
243
 
240
 
244
    switch(ivr.vector) {
241
    switch(ivr.vector) {
245
        case INTERRUPT_TIMER:
242
    case INTERRUPT_TIMER:
246
        it_interrupt();
243
        it_interrupt();
247
            break;
244
        break;
248
        case INTERRUPT_SPURIOUS:
245
    case INTERRUPT_SPURIOUS:
249
            printf("cpu%d: spurious interrupt\n", CPU->id);
246
            printf("cpu%d: spurious interrupt\n", CPU->id);
250
        break;
247
        break;
251
        default:
248
    default:
252
        panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector);
249
        panic("\nUnhandled External Interrupt Vector %d\n", ivr.vector);
253
        break;
250
        break;
254
    }
251
    }
255
}
252
}
256
 
253
 
257
void virtual_interrupt(uint64_t irq,void *param)
254
void virtual_interrupt(uint64_t irq, void *param)
258
{
255
{
259
    switch(irq) {
256
    switch(irq) {
260
        case IRQ_KBD:
257
    case IRQ_KBD:
-
 
258
        if (kbd_uspace)
261
            if(kbd_uspace) ipc_irq_send_notif(irq);
259
            ipc_irq_send_notif(irq);
262
            break;
260
        break;
263
        default:
261
    default:
264
            panic("\nUnhandled Virtual Interrupt request %d\n", irq);
262
        panic("\nUnhandled Virtual Interrupt request %d\n", irq);
265
        break;
263
        break;
266
    }
264
    }
267
}
265
}
268
 
266
 
269
/* Reregister irq to be IPC-ready */
267
/* Reregister irq to be IPC-ready */
270
void irq_ipc_bind_arch(unative_t irq)
268
void irq_ipc_bind_arch(unative_t irq)
271
{
269
{
272
    if(irq==IRQ_KBD) {
270
    if(irq == IRQ_KBD) {
273
        kbd_uspace=1;
271
        kbd_uspace = 1;
274
        return;
272
        return;
275
    }
273
    }
276
    return;
274
    return;
277
    panic("not implemented\n");
275
    panic("not implemented\n");
278
    /* TODO */
276
    /* TODO */
279
}
277
}
280
 
278
 
281
/** @}
279
/** @}
282
 */
280
 */
283
 
-