xref: /freebsd/sys/dev/firewire/fwohcivar.h (revision 9950b741e91ab7a7e26badccc0d82f2e103a1f1e)
1098ca2bdSWarner Losh /*-
277ee030bSHidetoshi Shimokawa  * Copyright (c) 2003 Hidetoshi SHimokawa
33c60ba66SKatsushi Kobayashi  * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi SHimokawa
43c60ba66SKatsushi Kobayashi  * All rights reserved.
53c60ba66SKatsushi Kobayashi  *
63c60ba66SKatsushi Kobayashi  * Redistribution and use in source and binary forms, with or without
73c60ba66SKatsushi Kobayashi  * modification, are permitted provided that the following conditions
83c60ba66SKatsushi Kobayashi  * are met:
93c60ba66SKatsushi Kobayashi  * 1. Redistributions of source code must retain the above copyright
103c60ba66SKatsushi Kobayashi  *    notice, this list of conditions and the following disclaimer.
113c60ba66SKatsushi Kobayashi  * 2. Redistributions in binary form must reproduce the above copyright
123c60ba66SKatsushi Kobayashi  *    notice, this list of conditions and the following disclaimer in the
133c60ba66SKatsushi Kobayashi  *    documentation and/or other materials provided with the distribution.
143c60ba66SKatsushi Kobayashi  * 3. All advertising materials mentioning features or use of this software
153c60ba66SKatsushi Kobayashi  *    must display the acknowledgement as bellow:
163c60ba66SKatsushi Kobayashi  *
173c60ba66SKatsushi Kobayashi  *    This product includes software developed by K. Kobayashi and H. Shimokawa
183c60ba66SKatsushi Kobayashi  *
193c60ba66SKatsushi Kobayashi  * 4. The name of the author may not be used to endorse or promote products
203c60ba66SKatsushi Kobayashi  *    derived from this software without specific prior written permission.
213c60ba66SKatsushi Kobayashi  *
223c60ba66SKatsushi Kobayashi  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
233c60ba66SKatsushi Kobayashi  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
243c60ba66SKatsushi Kobayashi  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
253c60ba66SKatsushi Kobayashi  * DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
263c60ba66SKatsushi Kobayashi  * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
273c60ba66SKatsushi Kobayashi  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
283c60ba66SKatsushi Kobayashi  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
293c60ba66SKatsushi Kobayashi  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
303c60ba66SKatsushi Kobayashi  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
313c60ba66SKatsushi Kobayashi  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
323c60ba66SKatsushi Kobayashi  * POSSIBILITY OF SUCH DAMAGE.
333c60ba66SKatsushi Kobayashi  *
343c60ba66SKatsushi Kobayashi  * $FreeBSD$
353c60ba66SKatsushi Kobayashi  *
363c60ba66SKatsushi Kobayashi  */
3777ee030bSHidetoshi Shimokawa 
3877ee030bSHidetoshi Shimokawa #include <sys/taskqueue.h>
399950b741SHidetoshi Shimokawa 
409950b741SHidetoshi Shimokawa #if defined(__DragonFly__) ||  __FreeBSD_version < 700043
419950b741SHidetoshi Shimokawa #define FWOHCI_INTFILT	0
429950b741SHidetoshi Shimokawa #else
439950b741SHidetoshi Shimokawa #define FWOHCI_INTFILT	1
4477ee030bSHidetoshi Shimokawa #endif
4577ee030bSHidetoshi Shimokawa 
463c60ba66SKatsushi Kobayashi typedef struct fwohci_softc {
473c60ba66SKatsushi Kobayashi 	struct firewire_comm fc;
483c60ba66SKatsushi Kobayashi 	bus_space_tag_t bst;
493c60ba66SKatsushi Kobayashi 	bus_space_handle_t bsh;
503c60ba66SKatsushi Kobayashi 	void *ih;
5110d3ed64SHidetoshi Shimokawa #if defined(__DragonFly__) || __FreeBSD_version < 500000
523c60ba66SKatsushi Kobayashi 	void *ih_cam;
5365290832SHidetoshi Shimokawa 	void *ih_bio;
543c60ba66SKatsushi Kobayashi #endif
553c60ba66SKatsushi Kobayashi 	struct resource *bsr;
563c60ba66SKatsushi Kobayashi 	struct resource *irq_res;
573c60ba66SKatsushi Kobayashi 	struct fwohci_dbch{
583c60ba66SKatsushi Kobayashi 		u_int ndb;
593c60ba66SKatsushi Kobayashi 		u_int ndesc;
603c60ba66SKatsushi Kobayashi 		STAILQ_HEAD(, fwohcidb_tr) db_trq;
613c60ba66SKatsushi Kobayashi 		struct fwohcidb_tr *top, *bottom, *pdb_tr;
623c60ba66SKatsushi Kobayashi 		struct fw_xferq xferq;
633c60ba66SKatsushi Kobayashi 		int flags;
641f2361f8SHidetoshi Shimokawa #define	FWOHCI_DBCH_INIT	(1<<0)
653c60ba66SKatsushi Kobayashi #define	FWOHCI_DBCH_FULL	(1<<1)
6677ee030bSHidetoshi Shimokawa 		/* used only in receive context */
6777ee030bSHidetoshi Shimokawa 		int buf_offset;	/* signed */
68e2ad5d6eSHidetoshi Shimokawa #define FWOHCI_DBCH_MAX_PAGES	32
6977ee030bSHidetoshi Shimokawa 		/* Context programs buffer */
7077ee030bSHidetoshi Shimokawa 		struct fwdma_alloc_multi *am;
7177ee030bSHidetoshi Shimokawa 		bus_dma_tag_t dmat;
72ac9f6692SHidetoshi Shimokawa 	} arrq, arrs, atrq, atrs, it[OHCI_DMA_ITCH], ir[OHCI_DMA_IRCH];
733c60ba66SKatsushi Kobayashi 	u_int maxrec;
7403161bbcSDoug Rabson 	uint32_t *sid_buf;
7577ee030bSHidetoshi Shimokawa 	struct fwdma_alloc sid_dma;
7677ee030bSHidetoshi Shimokawa 	struct fwdma_alloc crom_dma;
7777ee030bSHidetoshi Shimokawa 	struct fwdma_alloc dummy_dma;
7803161bbcSDoug Rabson 	uint32_t intmask, irstat, itstat;
7903161bbcSDoug Rabson 	uint32_t intstat;
809950b741SHidetoshi Shimokawa 	struct task fwohci_task_busreset;
819950b741SHidetoshi Shimokawa 	struct task fwohci_task_sid;
829950b741SHidetoshi Shimokawa 	struct task fwohci_task_dma;
83d0581de8SHidetoshi Shimokawa 	int cycle_lost;
843c60ba66SKatsushi Kobayashi } fwohci_softc_t;
8577ee030bSHidetoshi Shimokawa 
86d09a5d6fSHidetoshi Shimokawa void fwohci_intr (void *arg);
879950b741SHidetoshi Shimokawa int fwohci_filt (void *arg);
88d09a5d6fSHidetoshi Shimokawa int fwohci_init (struct fwohci_softc *, device_t);
89d09a5d6fSHidetoshi Shimokawa void fwohci_poll (struct firewire_comm *, int, int);
90d09a5d6fSHidetoshi Shimokawa void fwohci_reset (struct fwohci_softc *, device_t);
91d09a5d6fSHidetoshi Shimokawa int fwohci_detach (struct fwohci_softc *, device_t);
92d09a5d6fSHidetoshi Shimokawa int fwohci_resume (struct fwohci_softc *, device_t);
93d09a5d6fSHidetoshi Shimokawa int fwohci_stop (struct fwohci_softc *, device_t dev);
94