13c60ba66SKatsushi Kobayashi /* 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 #if __FreeBSD_version >= 500000 3977ee030bSHidetoshi Shimokawa #define FWOHCI_TASKQUEUE 1 4077ee030bSHidetoshi Shimokawa #else 4177ee030bSHidetoshi Shimokawa #define FWOHCI_TASKQUEUE 0 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; 523c60ba66SKatsushi Kobayashi #if __FreeBSD_version < 500000 533c60ba66SKatsushi Kobayashi void *ih_cam; 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; 7477ee030bSHidetoshi Shimokawa u_int32_t *sid_buf; 7577ee030bSHidetoshi Shimokawa struct fwdma_alloc sid_dma; 7677ee030bSHidetoshi Shimokawa struct fwdma_alloc crom_dma; 7777ee030bSHidetoshi Shimokawa struct fwdma_alloc dummy_dma; 7877ee030bSHidetoshi Shimokawa u_int32_t intmask, irstat, itstat; 7977ee030bSHidetoshi Shimokawa #if FWOHCI_TASKQUEUE 8077ee030bSHidetoshi Shimokawa u_int32_t intstat; 8177ee030bSHidetoshi Shimokawa struct task fwohci_task_complete; 8277ee030bSHidetoshi Shimokawa #endif 833c60ba66SKatsushi Kobayashi } fwohci_softc_t; 8477ee030bSHidetoshi Shimokawa 853c60ba66SKatsushi Kobayashi void fwohci_intr __P((void *arg)); 863c60ba66SKatsushi Kobayashi int fwohci_init __P((struct fwohci_softc *, device_t)); 87d0fd7bc6SHidetoshi Shimokawa void fwohci_reset __P((struct fwohci_softc *, device_t)); 881f2361f8SHidetoshi Shimokawa int fwohci_detach __P((struct fwohci_softc *, device_t)); 899339321dSHidetoshi Shimokawa int fwohci_resume __P((struct fwohci_softc *, device_t)); 90ba3129cbSHidetoshi Shimokawa int fwohci_stop __P((struct fwohci_softc *, device_t dev)); 91