/*DDK*************************************************************************/
/*                                                                           */
/* COPYRIGHT    Copyright (C) 1995 IBM Corporation                           */
/*                                                                           */
/*    The following IBM OS/2 WARP source code is provided to you solely for  */
/*    the purpose of assisting you in your development of OS/2 WARP device   */
/*    drivers. You may use this code in accordance with the IBM License      */
/*    Agreement provided in the IBM Device Driver Source Kit for OS/2. This  */
/*    Copyright statement may not be removed.                                */
/*                                                                           */
/*****************************************************************************/
/*static char *SCCSID = "src/dev/dasd/os2scsi/scstrat1.c, scsy, ddk_subset, b_bdd.032 93/03/19";*/
/**************************************************************************
 *
 * SOURCE FILE NAME =  SCSTRAT1.C
 *
 * DESCRIPTIVE NAME = OS2SCSI.DMD - OS/2 SCSI.SYS Emulation
 *
 *
 *
 * VERSION = V2.0
 *
 * DATE
 *
 * DESCRIPTION : Strategy 1 entry point and request router
 *
 *
 *
*/

#define INCL_NOBASEAPI
#define INCL_NOPMAPI
#include "os2.h"
#include "devcmd.h"
#include "error.h"
#include "strat2.h"
#include "reqpkt.h"
#include "scb.h"
#include "iorb.h"
#include "scsi.h"
#include "scscsi.h"
#include "scgen.h"
#include "scproto.h"


void near IDCEntry()
{
  PRPH          pRPH;

  _asm { mov word ptr pRPH[0], bx };
  _asm { mov word ptr pRPH[2], es };

  DDRoute(pRPH, IDC_ENTRY);

  _asm {LEAVE};
  _asm {retf};
}

void near DDStrat1Entry()
{
  PRPH          pRPH;

  _asm { mov word ptr pRPH[0], bx };
  _asm { mov word ptr pRPH[2], es };

  DDRoute(pRPH, STRAT1_ENTRY);

  _asm {LEAVE};
  _asm {retf};
}


void near DDRoute(pRPH, EntryType)
PRPH          pRPH;
USHORT        EntryType;
{
  USHORT        Cmd, status;

  Cmd = pRPH->Cmd;

  /*----------------------------*/
  /* Filter out invaid requests */
  /*----------------------------*/

  switch (Cmd)
  {
     case CMDGenIOCTL:
        status = f_DriveGenIOCtl(EntryType, pRPH);
        break;

     case CMDInitBase:
        status = f_DriveInit( (PRPINITIN) pRPH );
        break;

     default:
        status = STDON + STERR + ERROR_I24_BAD_COMMAND;
  }
  pRPH->Status = status;
}

