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 3810d3ed64SHidetoshi Shimokawa #if defined(__DragonFly__) || __FreeBSD_version < 500000 3977ee030bSHidetoshi Shimokawa #define FWOHCI_TASKQUEUE 0 4010d3ed64SHidetoshi Shimokawa #else 4110d3ed64SHidetoshi Shimokawa #define FWOHCI_TASKQUEUE 1 4277ee030bSHidetoshi Shimokawa #endif 4377ee030bSHidetoshi Shimokawa #if FWOHCI_TASKQUEUE 4477ee030bSHidetoshi Shimokawa #include <sys/taskqueue.h> 4577ee030bSHidetoshi Shimokawa #endif 4677ee030bSHidetoshi Shimokawa 473c60ba66SKatsushi Kobayashi typedef struct fwohci_softc { 483c60ba66SKatsushi Kobayashi struct firewire_comm fc; 493c60ba66SKatsushi Kobayashi bus_space_tag_t bst; 503c60ba66SKatsushi Kobayashi bus_space_handle_t bsh; 513c60ba66SKatsushi Kobayashi void *ih; 5210d3ed64SHidetoshi Shimokawa #if defined(__DragonFly__) || __FreeBSD_version < 500000 533c60ba66SKatsushi Kobayashi void *ih_cam; 5465290832SHidetoshi Shimokawa void *ih_bio; 553c60ba66SKatsushi Kobayashi #endif 563c60ba66SKatsushi Kobayashi struct resource *bsr; 573c60ba66SKatsushi Kobayashi struct resource *irq_res; 583c60ba66SKatsushi Kobayashi struct fwohci_dbch{ 593c60ba66SKatsushi Kobayashi u_int ndb; 603c60ba66SKatsushi Kobayashi u_int ndesc; 613c60ba66SKatsushi Kobayashi STAILQ_HEAD(, fwohcidb_tr) db_trq; 623c60ba66SKatsushi Kobayashi struct fwohcidb_tr *top, *bottom, *pdb_tr; 633c60ba66SKatsushi Kobayashi struct fw_xferq xferq; 643c60ba66SKatsushi Kobayashi int flags; 651f2361f8SHidetoshi Shimokawa #define FWOHCI_DBCH_INIT (1<<0) 663c60ba66SKatsushi Kobayashi #define FWOHCI_DBCH_FULL (1<<1) 6777ee030bSHidetoshi Shimokawa /* used only in receive context */ 6877ee030bSHidetoshi Shimokawa int buf_offset; /* signed */ 69e2ad5d6eSHidetoshi Shimokawa #define FWOHCI_DBCH_MAX_PAGES 32 7077ee030bSHidetoshi Shimokawa /* Context programs buffer */ 7177ee030bSHidetoshi Shimokawa struct fwdma_alloc_multi *am; 7277ee030bSHidetoshi Shimokawa bus_dma_tag_t dmat; 73ac9f6692SHidetoshi Shimokawa } arrq, arrs, atrq, atrs, it[OHCI_DMA_ITCH], ir[OHCI_DMA_IRCH]; 743c60ba66SKatsushi Kobayashi u_int maxrec; 7503161bbcSDoug Rabson uint32_t *sid_buf; 7677ee030bSHidetoshi Shimokawa struct fwdma_alloc sid_dma; 7777ee030bSHidetoshi Shimokawa struct fwdma_alloc crom_dma; 7877ee030bSHidetoshi Shimokawa struct fwdma_alloc dummy_dma; 7903161bbcSDoug Rabson uint32_t intmask, irstat, itstat; 8077ee030bSHidetoshi Shimokawa #if FWOHCI_TASKQUEUE 8103161bbcSDoug Rabson uint32_t intstat; 8277ee030bSHidetoshi Shimokawa struct task fwohci_task_complete; 8377ee030bSHidetoshi Shimokawa #endif 84d0581de8SHidetoshi Shimokawa int cycle_lost; 853c60ba66SKatsushi Kobayashi } fwohci_softc_t; 8677ee030bSHidetoshi Shimokawa 87d09a5d6fSHidetoshi Shimokawa void fwohci_intr (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