| 185 |
|
|
| 186 |
/* protected mode interrupt */ |
/* protected mode interrupt */ |
| 187 |
static void do_interrupt_protected(int intno, int is_int, int error_code, |
static void do_interrupt_protected(int intno, int is_int, int error_code, |
| 188 |
unsigned int next_eip) |
unsigned int next_eip, int is_hw) |
| 189 |
{ |
{ |
| 190 |
SegmentCache *dt; |
SegmentCache *dt; |
| 191 |
uint8_t *ptr, *ssp; |
uint8_t *ptr, *ssp; |
| 265 |
|
|
| 266 |
shift = type >> 3; |
shift = type >> 3; |
| 267 |
has_error_code = 0; |
has_error_code = 0; |
| 268 |
if (!is_int) { |
if (!is_int && !is_hw) { |
| 269 |
switch(intno) { |
switch(intno) { |
| 270 |
case 8: |
case 8: |
| 271 |
case 10: |
case 10: |
| 427 |
* instruction. It is only relevant if is_int is TRUE. |
* instruction. It is only relevant if is_int is TRUE. |
| 428 |
*/ |
*/ |
| 429 |
void do_interrupt(int intno, int is_int, int error_code, |
void do_interrupt(int intno, int is_int, int error_code, |
| 430 |
unsigned int next_eip) |
unsigned int next_eip, int is_hw) |
| 431 |
{ |
{ |
| 432 |
if (env->cr[0] & CR0_PE_MASK) { |
if (env->cr[0] & CR0_PE_MASK) { |
| 433 |
do_interrupt_protected(intno, is_int, error_code, next_eip); |
do_interrupt_protected(intno, is_int, error_code, next_eip, is_hw); |
| 434 |
} else { |
} else { |
| 435 |
do_interrupt_real(intno, is_int, error_code, next_eip); |
do_interrupt_real(intno, is_int, error_code, next_eip); |
| 436 |
} |
} |