Annotation of sys/dev/i2o/ioprbsvar.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: ioprbsvar.h,v 1.2 2005/09/15 05:33:39 krw Exp $ */
2:
3: /*
4: * Copyright (c) 2001 Niklas Hallqvist
5: * All rights reserved.
6: *
7: * Redistribution and use in source and binary forms, with or without
8: * modification, are permitted provided that the following conditions
9: * are met:
10: * 1. Redistributions of source code must retain the above copyright
11: * notice, this list of conditions and the following disclaimer.
12: * 2. Redistributions in binary form must reproduce the above copyright
13: * notice, this list of conditions and the following disclaimer in the
14: * documentation and/or other materials provided with the distribution.
15: *
16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17: * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19: * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20: * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24: * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26: * SUCH DAMAGE.
27: */
28:
29: #ifndef _I2O_IOPRBSVAR_H_
30: #define _I2O_IOPRBSVAR_H_
31:
32: /*
33: * A command contol block, one for each corresponding command index of the
34: * controller.
35: */
36: struct ioprbs_ccb {
37: TAILQ_ENTRY(ioprbs_ccb) ic_chain;
38: struct scsi_xfer *ic_xs;
39: #if 0
40: struct aac_fib *ac_fib; /* FIB associated with this command */
41: bus_addr_t ac_fibphys; /* bus address of the FIB */
42: bus_dmamap_t ac_dmamap_xfer;
43: struct aac_sg_table *ac_sgtable;/* pointer to s/g table in command */
44: #endif
45: int ic_timeout;
46: u_int32_t ic_blockno;
47: u_int32_t ic_blockcnt;
48: u_int8_t ic_flags;
49: #define IOPRBS_ICF_WATCHDOG 0x1
50: #define IOPRBS_ICF_COMPLETED 0x2
51: };
52:
53: /* XXX What is correct? */
54: #define IOPRBS_MAX_CCBS 256
55:
56: struct ioprbs_softc {
57: struct device sc_dv; /* Generic device data */
58: struct scsi_link sc_link; /* Virtual SCSI bus for cache devs */
59: struct iop_initiator sc_ii;
60: struct iop_initiator sc_eventii;
61:
62: int sc_flags;
63: int sc_secperunit; /* # sectors in total */
64: int sc_secsize; /* sector size in bytes */
65: int sc_maxxfer; /* max xfer size in bytes */
66: int sc_maxqueuecnt; /* maximum h/w queue depth */
67: int sc_queuecnt; /* current h/w queue depth */
68:
69: struct ioprbs_ccb sc_ccbs[IOPRBS_MAX_CCBS];
70: TAILQ_HEAD(, ioprbs_ccb) sc_free_ccb, sc_ccbq;
71: /* commands on hold for controller resources */
72: TAILQ_HEAD(, ioprbs_ccb) sc_ready;
73: /* commands which have been returned by the controller */
74: LIST_HEAD(, scsi_xfer) sc_queue;
75: struct scsi_xfer *sc_queuelast;
76: };
77:
78: #define IOPRBS_CLAIMED 0x01
79: #define IOPRBS_NEW_EVTMASK 0x02
80: #define IOPRBS_ENABLED 0x04
81:
82: #define IOPRBS_TIMEOUT (30 * 1000)
83: #define IOPRBS_BLOCK_SIZE 512
84:
85: /*
86: * Wait this long for a lost interrupt to get detected.
87: */
88: #define IOPRBS_WATCH_TIMEOUT 10000 /* 10000 * 1ms = 10s */
89:
90:
91: /* XXX These have to become spinlocks in case of SMP */
92: #define IOPRBS_LOCK(sc) splbio()
93: #define IOPRBS_UNLOCK(sc, lock) splx(lock)
94: typedef int ioprbs_lock_t;
95:
96: #endif /* !_I2O_IOPRMSVAR_H_ */
CVSweb