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:  *	@(#)uba.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/vm.h"
  14: #include "../h/fs.h"
  15: 
  16: #include "../vax/cpu.h"
  17: #include "../vaxuba/ubareg.h"
  18: 
  19: #include "saio.h"
  20: #include "savax.h"
  21: 
  22: /*
  23:  * Note... this routine does not
  24:  * really allocate; unless bdp == 2
  25:  * you always get the same space.
  26:  * When bdp == 2 you get some other space.
  27:  */
  28: ubasetup(io, bdp)
  29:     register struct iob *io;
  30:     int bdp;
  31: {
  32:     int npf;
  33:     unsigned v;
  34:     register struct pte *pte;
  35:     int o, temp, reg;
  36:     static int lastreg = 128+64;
  37: 
  38:     v = btop(io->i_ma);
  39:     o = (int)io->i_ma & PGOFSET;
  40:     npf = btoc(io->i_cc + o) +1;
  41:     if (bdp == 2) {
  42:         reg = lastreg;
  43:         lastreg += npf;
  44:         bdp = 0;
  45:     } else
  46:         reg = 0;
  47:     pte = &ubauba(io->i_unit)->uba_map[reg];
  48:     temp = (bdp << 21) | UBAMR_MRV;
  49:     if (bdp && (o & 01))
  50:         temp |= UBAMR_BO;
  51:     v &= 0x1fffff;          /* drop to physical addr */
  52:     while (--npf != 0)
  53:         *(int *)pte++ = v++ | temp;
  54:     *(int *)pte++ = 0;
  55:     return ((bdp << 28) | (reg << 9) | o);
  56: }
  57: 
  58: ubafree(io, mr)
  59:     struct iob *io;
  60:     int mr;
  61: {
  62:     register int bdp;
  63: 
  64:     bdp = (mr >> 28) & 0x0f;
  65:     if (bdp == 0)
  66:         return;
  67:     switch (cpu) {
  68: 
  69:     case VAX_8600:
  70:     case VAX_780:
  71:         ubauba(io->i_unit)->uba_dpr[bdp] |= UBADPR_BNE;
  72:         break;
  73: 
  74:     case VAX_750:
  75:         ubauba(io->i_unit)->uba_dpr[bdp] |=
  76:              UBADPR_PURGE|UBADPR_NXM|UBADPR_UCE;
  77:         break;
  78:     case VAX_730:
  79:         break;
  80:     }
  81: }
Last modified: 1986-06-05
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 820
Valid CSS Valid XHTML 1.0 Strict