Annotation of sys/arch/mvme88k/dev/vsvar.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: vsvar.h,v 1.18 2005/12/27 21:38:13 miod Exp $ */
! 2: /*
! 3: * Copyright (c) 2004, Miodrag Vallat.
! 4: * Copyright (c) 1999 Steve Murphree, Jr.
! 5: * Copyright (c) 1990 The Regents of the University of California.
! 6: * All rights reserved.
! 7: *
! 8: * This code is derived from software contributed to Berkeley by
! 9: * Van Jacobson of Lawrence Berkeley Laboratory.
! 10: *
! 11: * Redistribution and use in source and binary forms, with or without
! 12: * modification, are permitted provided that the following conditions
! 13: * are met:
! 14: * 1. Redistributions of source code must retain the above copyright
! 15: * notice, this list of conditions and the following disclaimer.
! 16: * 2. Redistributions in binary form must reproduce the above copyright
! 17: * notice, this list of conditions and the following disclaimer in the
! 18: * documentation and/or other materials provided with the distribution.
! 19: * 3. Neither the name of the University nor the names of its contributors
! 20: * may be used to endorse or promote products derived from this software
! 21: * without specific prior written permission.
! 22: *
! 23: * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
! 24: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
! 25: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
! 26: * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
! 27: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
! 28: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
! 29: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
! 30: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
! 31: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 32: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 33: * SUCH DAMAGE.
! 34: */
! 35: #ifndef _VSVAR_H_
! 36: #define _VSVAR_H_
! 37:
! 38: /*
! 39: * The largest single request will be MAXPHYS bytes which will require
! 40: * at most MAXPHYS/NBPG+1 chain elements to describe, i.e. if none of
! 41: * the buffer pages are physically contiguous (MAXPHYS/NBPG) and the
! 42: * buffer is not page aligned (+1).
! 43: */
! 44: #define DMAMAXIO (MAXPHYS/NBPG+1)
! 45: #define OFF(x) (u_int16_t)(x)
! 46:
! 47: /*
! 48: * scatter/gather structures
! 49: */
! 50:
! 51: typedef struct {
! 52: union {
! 53: unsigned short bytes :16;
! 54: #define MAX_SG_BLOCK_SIZE (1<<16)
! 55: struct {
! 56: unsigned short :8;
! 57: unsigned short gather:8;
! 58: } scatter;
! 59: } count;
! 60: u_int16_t addrhi, addrlo; /* split due to alignment */
! 61: unsigned short link:1;
! 62: unsigned short :3;
! 63: unsigned short transfer_type:2;
! 64: #define SHORT_TRANSFER 0x1
! 65: #define LONG_TRANSFER 0x2
! 66: #define SCATTER_GATTER_LIST_IN_SHORT_IO 0x3
! 67: unsigned short memory_type:2;
! 68: #define NORMAL_TYPE 0x0
! 69: #define BLOCK_MODE 0x1
! 70: unsigned short address_modifier:8;
! 71: } sg_list_element_t;
! 72:
! 73: typedef sg_list_element_t * scatter_gather_list_t;
! 74:
! 75: #define MAX_SG_ELEMENTS 64
! 76:
! 77: struct m328_sg {
! 78: struct m328_sg *up;
! 79: int elements;
! 80: int level;
! 81: struct m328_sg *down[MAX_SG_ELEMENTS];
! 82: sg_list_element_t list[MAX_SG_ELEMENTS];
! 83: };
! 84:
! 85: typedef struct m328_sg *M328_SG;
! 86:
! 87: struct vs_cb {
! 88: struct scsi_xfer *cb_xs;
! 89: u_int cb_q;
! 90: M328_SG cb_sg;
! 91: };
! 92:
! 93: struct vs_softc {
! 94: struct device sc_dev;
! 95: paddr_t sc_paddr;
! 96: bus_space_tag_t sc_iot;
! 97: bus_space_handle_t sc_ioh;
! 98: struct intrhand sc_ih_e, sc_ih_n;
! 99: char sc_intrname_e[16 + 4];
! 100: int sc_ipl;
! 101: int sc_evec, sc_nvec;
! 102: int sc_id[2];
! 103: struct scsi_link sc_link[2];
! 104: struct vs_cb sc_cb[NUM_WQ];
! 105: };
! 106:
! 107: /* Access macros */
! 108:
! 109: #define vs_read(w,o) \
! 110: bus_space_read_##w (sc->sc_iot, sc->sc_ioh, (o))
! 111: #define vs_write(w,o,v) \
! 112: bus_space_write_##w (sc->sc_iot, sc->sc_ioh, (o), (v))
! 113: #define vs_bzero(o,s) \
! 114: bus_space_set_region_2(sc->sc_iot, sc->sc_ioh, (o), 0, (s) / 2)
! 115:
! 116: #define cib_read(w,o) vs_read(w, sh_CIB + (o))
! 117: #define cib_write(w,o,v) vs_write(w, sh_CIB + (o), (v))
! 118: #define crb_read(w,o) vs_read(w, sh_CRB + (o))
! 119: #define crb_write(w,o,v) vs_write(w, sh_CRB + (o), (v))
! 120: #define csb_read(w,o) vs_read(w, sh_CSS + (o))
! 121: #define mce_read(w,o) vs_read(w, sh_MCE + (o))
! 122: #define mce_write(w,o,v) vs_write(w, sh_MCE + (o), (v))
! 123: #define mce_iopb_read(w,o) vs_read(w, sh_MCE_IOPB + (o))
! 124: #define mce_iopb_write(w,o,v) vs_write(w, sh_MCE_IOPB + (o), (v))
! 125: #define mcsb_read(w,o) vs_read(w, sh_MCSB + (o))
! 126: #define mcsb_write(w,o,v) vs_write(w, sh_MCSB + (o), (v))
! 127:
! 128: #define CRSW crb_read(2, CRB_CRSW)
! 129: #define CRB_CLR_DONE crb_write(2, CRB_CRSW, 0)
! 130: #define CRB_CLR_ER crb_write(2, CRB_CRSW, CRSW & ~M_CRSW_ER)
! 131:
! 132: #define THAW_REG mcsb_read(2, MCSB_THAW)
! 133: #define THAW(x) \
! 134: do { \
! 135: mcsb_write(1, MCSB_THAW, (x)); \
! 136: mcsb_write(1, MCSB_THAW + 1, M_THAW_TWQE); \
! 137: } while (0)
! 138:
! 139: #endif /* _M328VAR_H */
CVSweb