1: /*
   2:  * Copyright (c) 1982, 1986 Regents of the University of California.
   3:  * All rights reserved.  The Berkeley software License Agreement
   4:  * specifies the terms and conditions for redistribution.
   5:  *
   6:  *	@(#)mba.c	7.1 (Berkeley) 6/5/86
   7:  */
   8: 
   9: #include "../machine/pte.h"
  10: 
  11: #include "../h/param.h"
  12: #include "../h/inode.h"
  13: #include "../h/fs.h"
  14: #include "../h/vm.h"
  15: 
  16: #include "../vax/mtpr.h"
  17: #include "../vaxmba/mbareg.h"
  18: #include "../vaxmba/hpreg.h"
  19: 
  20: #include "saio.h"
  21: #include "savax.h"
  22: 
  23: mbastart(io, func)
  24:     register struct iob *io;
  25:     int func;
  26: {
  27:     struct mba_regs *mba = mbamba(io->i_unit);
  28:     struct mba_drv *drv = mbadrv(io->i_unit);
  29:     register struct pte *pte = mba->mba_map;
  30:     int npf;
  31:     unsigned v;
  32:     int o;
  33:     int vaddr;
  34: 
  35:     v = btop(io->i_ma);
  36:     o = (int)io->i_ma & PGOFSET;
  37:     npf = btoc(io->i_cc + o);
  38:     vaddr = o;
  39:     while (--npf >= 0)
  40:         *(int *)pte++ = v++ | PG_V;
  41:     mba->mba_sr = -1;
  42:     mba->mba_bcr = -io->i_cc;
  43:     mba->mba_var = vaddr;
  44:     if (io->i_flgs&F_SSI)
  45:         drv->mbd_of |= HPOF_SSEI;
  46:     switch (io->i_flgs & F_TYPEMASK) {
  47: 
  48:     case F_RDDATA:          /* standard read */
  49:         drv->mbd_cs1 = MB_RCOM|MB_GO;
  50:         mbawait(io);
  51:         return(0);
  52: 
  53:     case F_WRDATA:          /* standard write */
  54:         drv->mbd_cs1 = MB_WCOM|MB_GO;
  55:         mbawait(io);
  56:         return(0);
  57: 
  58:     /* the following commands apply to disks only */
  59: 
  60:     case F_HDR|F_RDDATA:
  61:         drv->mbd_cs1 = HP_RHDR|HP_GO;
  62:         break;
  63: 
  64:     case F_HDR|F_WRDATA:
  65:         drv->mbd_cs1 = HP_WHDR|HP_GO;
  66:         break;
  67: 
  68:     case F_CHECK|F_WRDATA:
  69:     case F_CHECK|F_RDDATA:
  70:         drv->mbd_cs1 = HP_WCDATA|HP_GO;
  71:         break;
  72: 
  73:     case F_HCHECK|F_WRDATA:
  74:     case F_HCHECK|F_RDDATA:
  75:         drv->mbd_cs1 = HP_WCHDR|HP_GO;
  76:         break;
  77: 
  78:     default:
  79:         goto error;
  80:     }
  81:     mbawait(io);
  82:     if ((drv->mbd_dt & MBDT_TAP) == 0)
  83:         return (0);
  84: error:
  85:     io->i_error = ECMD;
  86:     io->i_flgs &= ~F_TYPEMASK;
  87:     return (1);
  88: }
  89: 
  90: mbawait(io)
  91:     register struct iob *io;
  92: {
  93:     struct mba_regs *mba = mbamba(io->i_unit);
  94:     struct mba_drv *drv = mbadrv(io->i_unit);
  95: 
  96:     while (mba->mba_sr & MBSR_DTBUSY)
  97:         DELAY(100);
  98: }
  99: 
 100: mbainit(mbanum)
 101:     int mbanum;
 102: {
 103:     register struct mba_regs *mba = mbaddr[mbanum];
 104: 
 105:     /* SHOULD BADADDR IT */
 106:     if (mbaact & (1<<mbanum))
 107:         return;
 108:     mba->mba_cr = MBCR_INIT;
 109:     mbaact |= 1<<mbanum;
 110: }

Defined functions

mbawait defined in line 90; used 3 times
Last modified: 1986-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 881
Valid CSS Valid XHTML 1.0 Strict