Annotation of sys/dev/ic/aic79xx_inline.h, Revision 1.1.1.1
1.1 nbrk 1: /* $OpenBSD: aic79xx_inline.h,v 1.4 2004/08/23 20:16:01 marco Exp $ */
2:
3: /*
4: * Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom
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 AUTHORS 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 AUTHORS OR CONTRIBUTORS BE LIABLE FOR
20: * 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:
30: /*
31: * Inline routines shareable across OS platforms.
32: *
33: * Copyright (c) 1994-2001 Justin T. Gibbs.
34: * Copyright (c) 2000-2003 Adaptec Inc.
35: * All rights reserved.
36: *
37: * Redistribution and use in source and binary forms, with or without
38: * modification, are permitted provided that the following conditions
39: * are met:
40: * 1. Redistributions of source code must retain the above copyright
41: * notice, this list of conditions, and the following disclaimer,
42: * without modification.
43: * 2. Redistributions in binary form must reproduce at minimum a disclaimer
44: * substantially similar to the "NO WARRANTY" disclaimer below
45: * ("Disclaimer") and any redistribution must be conditioned upon
46: * including a substantially similar Disclaimer requirement for further
47: * binary redistribution.
48: * 3. Neither the names of the above-listed copyright holders nor the names
49: * of any contributors may be used to endorse or promote products derived
50: * from this software without specific prior written permission.
51: *
52: * Alternatively, this software may be distributed under the terms of the
53: * GNU General Public License ("GPL") version 2 as published by the Free
54: * Software Foundation.
55: *
56: * NO WARRANTY
57: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
58: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
59: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
60: * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
61: * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
62: * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
63: * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
64: * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
65: * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
66: * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
67: * POSSIBILITY OF SUCH DAMAGES.
68: *
69: * $FreeBSD: src/sys/dev/aic7xxx/aic79xx_inline.h,v 1.14 2004/02/04 16:38:38 gibbs Exp $
70: *
71: */
72:
73: #ifndef _AIC79XX_INLINE_H_
74: #define _AIC79XX_INLINE_H_
75:
76: /******************************** Debugging ***********************************/
77: char *ahd_name(struct ahd_softc *ahd);
78:
79: /************************ Sequencer Execution Control *************************/
80: void ahd_known_modes(struct ahd_softc *, ahd_mode, ahd_mode);
81: ahd_mode_state ahd_build_mode_state(struct ahd_softc *,
82: ahd_mode , ahd_mode );
83: void ahd_extract_mode_state(struct ahd_softc *, ahd_mode_state,
84: ahd_mode *, ahd_mode *);
85: void ahd_set_modes(struct ahd_softc *, ahd_mode, ahd_mode );
86: void ahd_update_modes(struct ahd_softc *);
87: void ahd_assert_modes(struct ahd_softc *, ahd_mode,
88: ahd_mode, const char *, int);
89: ahd_mode_state ahd_save_modes(struct ahd_softc *);
90: void ahd_restore_modes(struct ahd_softc *, ahd_mode_state);
91: int ahd_is_paused(struct ahd_softc *);
92: void ahd_pause(struct ahd_softc *);
93:
94: void ahd_unpause(struct ahd_softc *);
95:
96: /*********************** Scatter Gather List Handling *************************/
97: void *ahd_sg_setup(struct ahd_softc *ahd, struct scb *scb,
98: void *sgptr, bus_addr_t addr,
99: bus_size_t len, int last);
100: void ahd_setup_scb_common(struct ahd_softc *ahd,
101: struct scb *scb);
102: void ahd_setup_data_scb(struct ahd_softc *ahd,
103: struct scb *scb);
104: void ahd_setup_noxfer_scb(struct ahd_softc *ahd,
105: struct scb *scb);
106:
107: /************************** Memory mapping routines ***************************/
108: size_t ahd_sg_size(struct ahd_softc *);
109: void *
110: ahd_sg_bus_to_virt(struct ahd_softc *, struct scb *,
111: uint32_t);
112: uint32_t
113: ahd_sg_virt_to_bus(struct ahd_softc *, struct scb *,
114: void *);
115: void ahd_sync_scb(struct ahd_softc *, struct scb *, int);
116: void ahd_sync_sglist(struct ahd_softc *, struct scb *, int);
117: void ahd_sync_sense(struct ahd_softc *, struct scb *, int);
118: uint32_t
119: ahd_targetcmd_offset(struct ahd_softc *, u_int);
120:
121: /*********************** Miscelaneous Support Functions ***********************/
122: void ahd_complete_scb(struct ahd_softc *, struct scb *);
123: void ahd_update_residual(struct ahd_softc *, struct scb *);
124: struct ahd_initiator_tinfo *
125: ahd_fetch_transinfo(struct ahd_softc *, char , u_int,
126: u_int, struct ahd_tmode_tstate **);
127: uint16_t
128: ahd_inw(struct ahd_softc *, u_int);
129: void ahd_outw(struct ahd_softc *, u_int, u_int);
130: uint32_t
131: ahd_inl(struct ahd_softc *, u_int);
132: void ahd_outl(struct ahd_softc *, u_int, uint32_t);
133: uint64_t ahd_inq(struct ahd_softc *, u_int);
134: void ahd_outq(struct ahd_softc *, u_int, uint64_t);
135: u_int ahd_get_scbptr(struct ahd_softc *ahd);
136: void ahd_set_scbptr(struct ahd_softc *ahd, u_int scbptr);
137: u_int ahd_get_hnscb_qoff(struct ahd_softc *ahd);
138: void ahd_set_hnscb_qoff(struct ahd_softc *ahd, u_int value);
139: u_int ahd_get_hescb_qoff(struct ahd_softc *ahd);
140: void ahd_set_hescb_qoff(struct ahd_softc *ahd, u_int value);
141: u_int ahd_get_snscb_qoff(struct ahd_softc *ahd);
142: void ahd_set_snscb_qoff(struct ahd_softc *ahd, u_int value);
143: u_int ahd_get_sescb_qoff(struct ahd_softc *ahd);
144: void ahd_set_sescb_qoff(struct ahd_softc *ahd, u_int value);
145: u_int ahd_get_sdscb_qoff(struct ahd_softc *ahd);
146: void ahd_set_sdscb_qoff(struct ahd_softc *ahd, u_int value);
147: u_int ahd_inb_scbram(struct ahd_softc *ahd, u_int offset);
148: u_int ahd_inw_scbram(struct ahd_softc *ahd, u_int offset);
149: uint32_t ahd_inl_scbram(struct ahd_softc *ahd, u_int offset);
150: uint64_t ahd_inq_scbram(struct ahd_softc *ahd, u_int offset);
151: struct scb *ahd_lookup_scb(struct ahd_softc *, u_int);
152: void ahd_swap_with_next_hscb(struct ahd_softc *ahd, struct scb *scb);
153: void ahd_queue_scb(struct ahd_softc *ahd, struct scb *scb);
154: uint8_t *ahd_get_sense_buf(struct ahd_softc *ahd, struct scb *scb);
155: uint32_t ahd_get_sense_bufaddr(struct ahd_softc *ahd, struct scb *scb);
156:
157: /************************** Interrupt Processing ******************************/
158: void ahd_sync_qoutfifo(struct ahd_softc *ahd, int op);
159: void ahd_sync_tqinfifo(struct ahd_softc *ahd, int op);
160: u_int ahd_check_cmdcmpltqueues(struct ahd_softc *ahd);
161: int ahd_intr(struct ahd_softc *ahd);
162:
163: #define AHD_ASSERT_MODES(ahd, source, dest) \
164: ahd_assert_modes(ahd, source, dest, __FILE__, __LINE__);
165:
166: #endif /* _AIC79XX_INLINE_H_ */
CVSweb