1 /* $NetBSD: fwohcivar.h,v 1.7 2000/12/13 11:30:15 enami Exp $ */ 2 3 /*- 4 * Copyright (c) 2000 The NetBSD Foundation, Inc. 5 * All rights reserved. 6 * 7 * This code is derived from software contributed to The NetBSD Foundation 8 * by Matt Thomas of the 3am Software Foundry. 9 * 10 * Redistribution and use in source and binary forms, with or without 11 * modification, are permitted provided that the following conditions 12 * are met: 13 * 1. Redistributions of source code must retain the above copyright 14 * notice, this list of conditions and the following disclaimer. 15 * 2. Redistributions in binary form must reproduce the above copyright 16 * notice, this list of conditions and the following disclaimer in the 17 * documentation and/or other materials provided with the distribution. 18 * 3. All advertising materials mentioning features or use of this software 19 * must display the following acknowledgement: 20 * This product includes software developed by the NetBSD 21 * Foundation, Inc. and its contributors. 22 * 4. Neither the name of The NetBSD Foundation nor the names of its 23 * contributors may be used to endorse or promote products derived 24 * from this software without specific prior written permission. 25 * 26 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 27 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 28 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 29 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 30 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 31 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 32 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 33 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 34 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 35 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 36 * POSSIBILITY OF SUCH DAMAGE. 37 */ 38 39 #ifndef _DEV_IEEE1394_FWOHCIVAR_H_ 40 #define _DEV_IEEE1394_FWOHCIVAR_H_ 41 42 #include <sys/mbuf.h> 43 #include <sys/callout.h> 44 #include <sys/queue.h> 45 46 #include <machine/bus.h> 47 48 #define OHCI_PAGE_SIZE 0x0800 49 #define OHCI_BUF_ARRQ_CNT 16 50 #define OHCI_BUF_ARRS_CNT 8 51 #define OHCI_BUF_ATRQ_CNT (8*8) 52 #define OHCI_BUF_ATRS_CNT (8*8) 53 #define OHCI_BUF_IR_CNT 16 54 #define OHCI_BUF_CNT (OHCI_BUF_ARRQ_CNT + OHCI_BUF_ARRS_CNT + OHCI_BUF_ATRQ_CNT + OHCI_BUF_ATRS_CNT + OHCI_BUF_IR_CNT + 1 + 1) 55 56 #define OHCI_LOOP 1000 57 #define OHCI_SELFID_TIMEOUT (hz * 3) 58 59 struct fwohci_softc; 60 61 struct fwohci_buf { 62 TAILQ_ENTRY(fwohci_buf) fb_list; 63 bus_dma_segment_t fb_seg; 64 int fb_nseg; 65 bus_dmamap_t fb_dmamap; 66 caddr_t fb_buf; 67 struct fwohci_desc *fb_desc; 68 bus_addr_t fb_daddr; 69 int fb_off; 70 struct mbuf *fb_m; 71 void (*fb_callback)(struct device *, struct mbuf *); 72 }; 73 74 struct fwohci_pkt { 75 int fp_tcode; 76 int fp_hlen; 77 int fp_dlen; 78 u_int32_t fp_hdr[4]; 79 struct uio fp_uio; 80 struct iovec fp_iov[6]; 81 u_int32_t *fp_trail; 82 struct mbuf *fp_m; 83 void (*fp_callback)(struct device *, struct mbuf *); 84 }; 85 86 struct fwohci_handler { 87 LIST_ENTRY(fwohci_handler) fh_list; 88 u_int32_t fh_tcode; /* ARRQ / ARRS / IR */ 89 u_int32_t fh_key1; /* addrhi / srcid / chan */ 90 u_int32_t fh_key2; /* addrlo / tlabel / tag */ 91 int (*fh_handler)(struct fwohci_softc *, void *, 92 struct fwohci_pkt *); 93 void *fh_handarg; 94 }; 95 96 struct fwohci_ctx { 97 int fc_ctx; 98 int fc_isoch; 99 int fc_bufcnt; 100 u_int32_t *fc_branch; 101 TAILQ_HEAD(fwohci_buf_s, fwohci_buf) fc_buf; 102 LIST_HEAD(, fwohci_handler) fc_handler; 103 }; 104 105 struct fwohci_uidtbl { 106 int fu_valid; 107 u_int8_t fu_uid[8]; 108 }; 109 110 struct fwohci_softc { 111 struct ieee1394_softc sc_sc1394; 112 struct evcnt sc_intrcnt; 113 114 bus_space_tag_t sc_memt; 115 bus_space_handle_t sc_memh; 116 bus_dma_tag_t sc_dmat; 117 bus_size_t sc_memsize; 118 #if 0 119 120 /* Mandatory structures to get the link enabled 121 */ 122 bus_dmamap_t sc_configrom_map; 123 bus_dmamap_t sc_selfid_map; 124 u_int32_t *sc_selfid_buf; 125 u_int32_t *sc_configrom; 126 #endif 127 128 bus_dma_segment_t sc_dseg; 129 int sc_dnseg; 130 bus_dmamap_t sc_ddmamap; 131 struct fwohci_desc *sc_desc; 132 u_int8_t *sc_descmap; 133 int sc_descsize; 134 int sc_isoctx; 135 136 void *sc_shutdownhook; 137 void *sc_powerhook; 138 struct callout sc_selfid_callout; 139 int sc_selfid_fail; 140 141 struct fwohci_ctx *sc_ctx_arrq; 142 struct fwohci_ctx *sc_ctx_arrs; 143 struct fwohci_ctx *sc_ctx_atrq; 144 struct fwohci_ctx *sc_ctx_atrs; 145 struct fwohci_ctx **sc_ctx_ir; 146 struct fwohci_buf sc_buf_cnfrom; 147 struct fwohci_buf sc_buf_selfid; 148 149 u_int8_t sc_csr[CSR_SB_END]; 150 151 struct fwohci_uidtbl *sc_uidtbl; 152 u_int16_t sc_nodeid; /* Full Node ID of this node */ 153 u_int8_t sc_rootid; /* Phy ID of Root */ 154 u_int8_t sc_irmid; /* Phy ID of IRM */ 155 u_int8_t sc_tlabel; /* Transaction Label */ 156 }; 157 158 int fwohci_init (struct fwohci_softc *, const struct evcnt *); 159 int fwohci_intr (void *); 160 int fwohci_print (void *, const char *); 161 162 /* Macros to read and write the OHCI registers 163 */ 164 #define OHCI_CSR_WRITE(sc, reg, val) bus_space_write_4((sc)->sc_memt, (sc)->sc_memh, reg, val) 165 #define OHCI_CSR_READ(sc, reg) bus_space_read_4((sc)->sc_memt, (sc)->sc_memh, reg) 166 167 #endif /* _DEV_IEEE1394_FWOHCIVAR_H_ */ 168