Changeset 141 for trunk


Ignore:
Timestamp:
Oct 2, 2012, 9:56:32 AM (13 years ago)
Author:
Markus Thielen
Message:

fixed #13 (kernel exit call for trap dumps)

Location:
trunk/src/os2ahci
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/os2ahci/init.asm

    r133 r141  
    1414                PUBLIC  _asm_strat           ; low-level strategy routine
    1515                PUBLIC  _asm_idc_entry       ; low-level IDC entry point
     16                PUBLIC  _asm_krnl_exit       ; low-level kernel exit routine
    1617                PUBLIC  _readl               ; MMIO read (32 bits)
    1718                PUBLIC  _writel              ; MMIO write (32 bits)
     
    9192                EXTRN   _reset_ctxhook : NEAR     ; C reset context hook
    9293                EXTRN   _engine_ctxhook : NEAR    ; C engine context hook
     94                EXTRN   _apm_suspend : NEAR       ; C routine for INT13 IO enable
    9395_TEXT           ENDS
    9496
     
    152154                RET
    153155_asm_idc_entry  ENDP
     156
     157;  Kernel exit routine to enable INT13 I/O (called before a trap dump occurrs)
     158_asm_krnl_exit  PROC    FAR
     159
     160                PUSH    ES
     161                PUSH    DS
     162                MOV     AX,DGROUP
     163                MOV     DS,AX
     164                CLD
     165
     166                ;  call C routine
     167                CALL    _apm_suspend
     168
     169                POP     DS
     170                POP     ES
     171
     172                RET
     173_asm_krnl_exit  ENDP       
     174       
    154175
    155176                .386
  • trunk/src/os2ahci/os2ahci.c

    r133 r141  
    5959  }
    6060
     61/* constants for undefined kernel exit routine;
     62 * see register_krnl_exit() func */
     63#define DevHlp_RegisterKrnlExit   0x006f
     64
     65#define FLAG_KRNL_EXIT_ADD        0x1000
     66#define FLAG_KRNL_EXIT_REMOVE     0x2000
     67
     68#define TYPE_KRNL_EXIT_NMI        0x0000  /* non masked interrupts */
     69#define TYPE_KRNL_EXIT_SFF        0x0001  /* system fatal faults */
     70#define TYPE_KRNL_EXIT_PROCDUMP   0x0002
     71#define TYPE_KRNL_EXIT_DYN        0x0003
     72#define TYPE_KRNL_EXIT_INT13      0x0004  /* enable int13 IO */
     73
    6174/* ------------------------ typedefs and structures ------------------------ */
    6275
    6376/* -------------------------- function prototypes -------------------------- */
    6477
    65 void _cdecl  small_code_      (void);
    66 
    67 static int   add_unit_info    (IORB_CONFIGURATION _far *iorb_conf, int dt_ai,
    68                                int a, int p, int d, int scsi_id);
     78void _cdecl  small_code_        (void);
     79
     80static int   add_unit_info      (IORB_CONFIGURATION _far *iorb_conf, int dt_ai,
     81                                 int a, int p, int d, int scsi_id);
     82
     83static void  register_krnl_exit (void);
    6984
    7085/* ------------------------ global/static variables ------------------------ */
     
    381396    rsp->CodeEnd = (u16) end_of_code;
    382397    rsp->DataEnd = (u16) &end_of_data;
     398
     399    /* register kernel exit routine for trap dumps */
     400    register_krnl_exit();
     401
    383402    return(STDON);
    384403
     
    14941513}
    14951514
     1515/*******************************************************************************
     1516 * Register kernel exit handler for trap dumps. Our exit handler will be called
     1517 * right before the kernel starts a dump; that's where we reset the controller
     1518 * so it supports BIOS int13 I/O calls.
     1519 */
     1520static void register_krnl_exit(void)
     1521{
     1522  _asm {
     1523
     1524    push ds
     1525    push es
     1526    push bx
     1527    push si
     1528    push di
     1529
     1530    mov ax, FLAG_KRNL_EXIT_ADD
     1531    mov cx, TYPE_KRNL_EXIT_INT13
     1532    mov bx, SEG asm_krnl_exit
     1533    mov si, OFFSET asm_krnl_exit
     1534    mov dl, DevHlp_RegisterKrnlExit
     1535    call Device_Help
     1536
     1537    pop  di
     1538    pop  si
     1539    pop  bx
     1540    pop  es
     1541    pop  ds
     1542  }
     1543
     1544  dprintf("Registered kernel exit routine for INT13 mode\n");
     1545}
  • trunk/src/os2ahci/os2ahci.h

    r133 r141  
    392392extern void _cdecl _far reset_hook    (void);
    393393extern void _cdecl _far engine_hook   (void);
     394extern void _cdecl _far asm_krnl_exit (void);
    394395
    395396/* os2ahci.c */
  • trunk/src/os2ahci/version.h

    r138 r141  
    1414
    1515
    16 #define VERSION            124       /* driver version (2 implied decimals) */
     16#define VERSION            125       /* driver version (2 implied decimals) */
    1717
Note: See TracChangeset for help on using the changeset viewer.