Ignore:
Timestamp:
Oct 27, 1999, 4:03:01 AM (26 years ago)
Author:
bird
Message:

Corrections to make win32k work.
(And now it does work, at least at my test machine...)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/win32k/dev16/d16strat.c

    r847 r1467  
    1 /* $Id: d16strat.c,v 1.1 1999-09-06 02:19:55 bird Exp $
     1/* $Id: d16strat.c,v 1.2 1999-10-27 02:02:53 bird Exp $
    22 *
    33 * d16strat.c - 16-bit strategy routine, device headers, device_helper (ptr)
     
    3636{
    3737    {
    38         (unsigned long)(void _far *)(&aDevHdrs[1]),    /* NextHeader */
     38        (unsigned long)(void _far *)(&aDevHdrs[1]), /* NextHeader */
    3939        DEVLEV_3 | DEV_30 | DEV_CHAR_DEV,           /* SDevAtt */
    4040        (unsigned short)(void _near *)strategyAsm0, /* StrategyEP */
    4141        0,                                          /* InterruptEP */
    42         "win32i$ ", /* Later: elf ?*/               /* DevName */
     42        "elf$    ",                                 /* DevName */
    4343        0,                                          /* SDevProtCS */
    4444        0,                                          /* SDevProtDS */
     
    6767USHORT  R0FlatCS16  = 0;
    6868USHORT  R0FlatDS16  = 0;
     69BOOL    fInitTime   = TRUE;
    6970
    7071
     
    7980 * Strategy routine.
    8081 * @returns   Status word.
    81  * @param     pRpH   Pointer to request packed header.
     82 * @param     pRpH   Pointer to request packed header. (Do not change the pointer!)
    8283 * @parma     usDev  Device number.
    8384 * @remark    This function is called from the entrypoint in dev1st.asm
     
    8586USHORT NEAR strategy(PRPH pRpH, unsigned short usDev)
    8687{
     88
    8789    switch (pRpH->Cmd)
    8890    {
    8991        case CMDInit:                   /* INIT command */
    90             if (usDev == 0)
    91                 return dev0Init((PRPINITIN)pRpH, (PRPINITOUT)pRpH);
    92             else
    93                 return dev1Init((PRPINITIN)pRpH, (PRPINITOUT)pRpH);
     92            if (fInitTime)
     93            {
     94                if (usDev == 0)
     95                    return dev0Init((PRPINITIN)pRpH, (PRPINITOUT)pRpH);
     96                else
     97                    return dev1Init((PRPINITIN)pRpH, (PRPINITOUT)pRpH);
     98            }
     99            break;
    94100
    95101        case CMDGenIOCTL:               /* Generic IOCTL */
     
    104110        case CMDShutdown:
    105111            return STATUS_DONE;
     112    }
    106113
    107         default:
    108             return STATUS_DONE | STATUS_ERR_UNKCMD;
    109     }
     114    return STATUS_DONE | STATUS_ERR_UNKCMD;
    110115}
    111116
     
    121126USHORT dev0GenIOCtl(PRP_GENIOCTL pRp)
    122127{
    123 /*    _asm int 3;*/
    124     if (pRp->Category == D16_IOCTL_CAT && pRp->Function == D16_IOCTL_RING0INIT)
    125         return R0Init16(pRp);
     128    USHORT rc;
     129    if (pRp->Category == D16_IOCTL_CAT)
     130    {
     131        switch (pRp->Function)
     132        {
     133            case D16_IOCTL_RING0INIT:
     134                if (fInitTime)
     135                {
     136                    rc = R0Init16(pRp);
     137                    fInitTime = FALSE;
     138                    return rc;
     139                }
     140                break;
     141
     142            case D16_IOCTL_GETKRNLOTES:
     143            {
     144                ULONG ulLin;
     145                if (DevHelp_VirtToLin(SELECTOROF(pRp->DataPacket), OFFSETOF(pRp->DataPacket), &ulLin) != NO_ERROR)
     146                    return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
     147                return CallGetOTEs32(ulLin);
     148            }
     149
     150            case D16_IOCTL_VERIFYPROCTAB:
     151                if (fInitTime)
     152                    return CallVerifyProcTab32();
     153                break;
     154        }
     155    }
    126156
    127157    return STATUS_DONE | STERR | ERROR_I24_INVALID_PARAMETER;
Note: See TracChangeset for help on using the changeset viewer.