13c60ba66SKatsushi Kobayashi /* 23c60ba66SKatsushi Kobayashi * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 33c60ba66SKatsushi Kobayashi * All rights reserved. 43c60ba66SKatsushi Kobayashi * 53c60ba66SKatsushi Kobayashi * Redistribution and use in source and binary forms, with or without 63c60ba66SKatsushi Kobayashi * modification, are permitted provided that the following conditions 73c60ba66SKatsushi Kobayashi * are met: 83c60ba66SKatsushi Kobayashi * 1. Redistributions of source code must retain the above copyright 93c60ba66SKatsushi Kobayashi * notice, this list of conditions and the following disclaimer. 103c60ba66SKatsushi Kobayashi * 2. Redistributions in binary form must reproduce the above copyright 113c60ba66SKatsushi Kobayashi * notice, this list of conditions and the following disclaimer in the 123c60ba66SKatsushi Kobayashi * documentation and/or other materials provided with the distribution. 133c60ba66SKatsushi Kobayashi * 3. All advertising materials mentioning features or use of this software 143c60ba66SKatsushi Kobayashi * must display the acknowledgement as bellow: 153c60ba66SKatsushi Kobayashi * 163c60ba66SKatsushi Kobayashi * This product includes software developed by K. Kobayashi and H. Shimokawa 173c60ba66SKatsushi Kobayashi * 183c60ba66SKatsushi Kobayashi * 4. The name of the author may not be used to endorse or promote products 193c60ba66SKatsushi Kobayashi * derived from this software without specific prior written permission. 203c60ba66SKatsushi Kobayashi * 213c60ba66SKatsushi Kobayashi * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 223c60ba66SKatsushi Kobayashi * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 233c60ba66SKatsushi Kobayashi * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 243c60ba66SKatsushi Kobayashi * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 253c60ba66SKatsushi Kobayashi * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 263c60ba66SKatsushi Kobayashi * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 273c60ba66SKatsushi Kobayashi * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 283c60ba66SKatsushi Kobayashi * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 293c60ba66SKatsushi Kobayashi * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 303c60ba66SKatsushi Kobayashi * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 313c60ba66SKatsushi Kobayashi * POSSIBILITY OF SUCH DAMAGE. 323c60ba66SKatsushi Kobayashi * 333c60ba66SKatsushi Kobayashi * $FreeBSD$ 343c60ba66SKatsushi Kobayashi * 353c60ba66SKatsushi Kobayashi */ 363c60ba66SKatsushi Kobayashi 373c60ba66SKatsushi Kobayashi #if __FreeBSD_version >= 500000 383c60ba66SKatsushi Kobayashi typedef struct thread fw_proc; 393c60ba66SKatsushi Kobayashi #include <sys/selinfo.h> 403c60ba66SKatsushi Kobayashi #else 413c60ba66SKatsushi Kobayashi typedef struct proc fw_proc; 423c60ba66SKatsushi Kobayashi #include <sys/select.h> 433c60ba66SKatsushi Kobayashi #endif 443c60ba66SKatsushi Kobayashi 453c60ba66SKatsushi Kobayashi #define splfw splimp 463c60ba66SKatsushi Kobayashi 473c60ba66SKatsushi Kobayashi struct fw_device{ 483c60ba66SKatsushi Kobayashi u_int16_t dst; 493c60ba66SKatsushi Kobayashi struct fw_eui64 eui; 5094b6f028SHidetoshi Shimokawa #if 0 513c60ba66SKatsushi Kobayashi u_int32_t spec; 523c60ba66SKatsushi Kobayashi u_int32_t ver; 5394b6f028SHidetoshi Shimokawa #endif 543c60ba66SKatsushi Kobayashi u_int8_t speed; 553c60ba66SKatsushi Kobayashi u_int8_t maxrec; 563c60ba66SKatsushi Kobayashi u_int8_t nport; 573c60ba66SKatsushi Kobayashi u_int8_t power; 583c60ba66SKatsushi Kobayashi #define CSRROMOFF 0x400 593c60ba66SKatsushi Kobayashi #define CSRROMSIZE 0x400 603c60ba66SKatsushi Kobayashi int rommax; /* offset from 0xffff f000 0000 */ 613c60ba66SKatsushi Kobayashi u_int32_t csrrom[CSRROMSIZE/4]; 623c60ba66SKatsushi Kobayashi int rcnt; 63f90ce7b1SHidetoshi Shimokawa struct firewire_comm *fc; 643c60ba66SKatsushi Kobayashi u_int32_t status; 653c60ba66SKatsushi Kobayashi #define FWDEVINIT 1 663c60ba66SKatsushi Kobayashi #define FWDEVATTACHED 2 673c60ba66SKatsushi Kobayashi #define FWDEVINVAL 3 683c60ba66SKatsushi Kobayashi TAILQ_ENTRY(fw_device) link; 69f90ce7b1SHidetoshi Shimokawa #if 0 703c60ba66SKatsushi Kobayashi LIST_HEAD(, fw_xfer) txqueue; 713c60ba66SKatsushi Kobayashi LIST_HEAD(, fw_xfer) rxqueue; 72f90ce7b1SHidetoshi Shimokawa #endif 733c60ba66SKatsushi Kobayashi }; 7493001c72SHidetoshi Shimokawa 753c60ba66SKatsushi Kobayashi struct firewire_softc { 763c60ba66SKatsushi Kobayashi #if __FreeBSD_version >= 500000 773c60ba66SKatsushi Kobayashi dev_t dev; 783c60ba66SKatsushi Kobayashi #else 793c60ba66SKatsushi Kobayashi dev_t dev[FWMAXNDMA+1]; 803c60ba66SKatsushi Kobayashi #endif 813c60ba66SKatsushi Kobayashi struct firewire_comm *fc; 823c60ba66SKatsushi Kobayashi }; 8393001c72SHidetoshi Shimokawa 843c60ba66SKatsushi Kobayashi #define FW_MAX_DMACH 0x20 853c60ba66SKatsushi Kobayashi #define FW_MAX_DEVCH FW_MAX_DMACH 863c60ba66SKatsushi Kobayashi #define FW_XFERTIMEOUT 1 8793001c72SHidetoshi Shimokawa 883c60ba66SKatsushi Kobayashi struct firewire_dev_comm { 893c60ba66SKatsushi Kobayashi device_t dev; 903c60ba66SKatsushi Kobayashi struct firewire_comm *fc; 913c60ba66SKatsushi Kobayashi void (*post_explore) __P((void *)); 923c60ba66SKatsushi Kobayashi }; 933c60ba66SKatsushi Kobayashi 943c60ba66SKatsushi Kobayashi struct tcode_info { 953c60ba66SKatsushi Kobayashi u_char hdr_len; /* IEEE1394 header length */ 963c60ba66SKatsushi Kobayashi u_char flag; 973c60ba66SKatsushi Kobayashi #define FWTI_REQ (1 << 0) 983c60ba66SKatsushi Kobayashi #define FWTI_RES (1 << 1) 993c60ba66SKatsushi Kobayashi #define FWTI_TLABEL (1 << 2) 1003c60ba66SKatsushi Kobayashi #define FWTI_BLOCK_STR (1 << 3) 1013c60ba66SKatsushi Kobayashi #define FWTI_BLOCK_ASY (1 << 4) 1023c60ba66SKatsushi Kobayashi }; 1033c60ba66SKatsushi Kobayashi 1043c60ba66SKatsushi Kobayashi struct firewire_comm{ 1053c60ba66SKatsushi Kobayashi device_t dev; 1063c60ba66SKatsushi Kobayashi device_t bdev; 1073c60ba66SKatsushi Kobayashi u_int16_t busid:10, 1083c60ba66SKatsushi Kobayashi nodeid:6; 1093c60ba66SKatsushi Kobayashi u_int mode; 1103c60ba66SKatsushi Kobayashi u_int nport; 1113c60ba66SKatsushi Kobayashi u_int speed; 1123c60ba66SKatsushi Kobayashi u_int maxrec; 1133c60ba66SKatsushi Kobayashi u_int irm; 1143c60ba66SKatsushi Kobayashi u_int max_node; 1153c60ba66SKatsushi Kobayashi u_int max_hop; 1163c60ba66SKatsushi Kobayashi u_int max_asyretry; 1173c60ba66SKatsushi Kobayashi #define FWPHYASYST (1 << 0) 1183c60ba66SKatsushi Kobayashi u_int retry_count; 1193c60ba66SKatsushi Kobayashi u_int32_t ongobus:10, 1203c60ba66SKatsushi Kobayashi ongonode:6, 1213c60ba66SKatsushi Kobayashi ongoaddr:16; 1223c60ba66SKatsushi Kobayashi struct fw_device *ongodev; 1233c60ba66SKatsushi Kobayashi struct fw_eui64 ongoeui; 1243c60ba66SKatsushi Kobayashi #define FWMAXCSRDIR 16 1253c60ba66SKatsushi Kobayashi SLIST_HEAD(, csrdir) ongocsr; 1263c60ba66SKatsushi Kobayashi SLIST_HEAD(, csrdir) csrfree; 1273c60ba66SKatsushi Kobayashi u_int32_t status; 1283c60ba66SKatsushi Kobayashi #define FWBUSRESET 0 1293c60ba66SKatsushi Kobayashi #define FWBUSINIT 1 1303c60ba66SKatsushi Kobayashi #define FWBUSCYMELECT 2 1313c60ba66SKatsushi Kobayashi #define FWBUSMGRELECT 3 1323c60ba66SKatsushi Kobayashi #define FWBUSMGRDONE 4 1333c60ba66SKatsushi Kobayashi #define FWBUSEXPLORE 5 1343c60ba66SKatsushi Kobayashi #define FWBUSPHYCONF 6 1353c60ba66SKatsushi Kobayashi #define FWBUSEXPDONE 7 1363c60ba66SKatsushi Kobayashi #define FWBUSCOMPLETION 10 1373c60ba66SKatsushi Kobayashi int nisodma; 1383c60ba66SKatsushi Kobayashi u_int8_t eui[8]; 1393c60ba66SKatsushi Kobayashi STAILQ_HEAD(fw_queue, fw_xfer); 14093001c72SHidetoshi Shimokawa struct fw_xferq 14193001c72SHidetoshi Shimokawa *arq, *atq, *ars, *ats, *it[FW_MAX_DMACH],*ir[FW_MAX_DMACH]; 14293001c72SHidetoshi Shimokawa STAILQ_HEAD(, tlabel) tlabels[0x40]; 14393001c72SHidetoshi Shimokawa STAILQ_HEAD(, fw_bind) binds; 14493001c72SHidetoshi Shimokawa TAILQ_HEAD(, fw_device) devices; 14593001c72SHidetoshi Shimokawa STAILQ_HEAD(, fw_xfer) pending; 14693001c72SHidetoshi Shimokawa volatile u_int32_t *sid_buf; 14793001c72SHidetoshi Shimokawa u_int sid_cnt; 14893001c72SHidetoshi Shimokawa #define CSRSIZE 0x4000 14993001c72SHidetoshi Shimokawa u_int32_t csr_arc[CSRSIZE/4]; 15093001c72SHidetoshi Shimokawa #define CROMSIZE 0x400 15193001c72SHidetoshi Shimokawa u_int32_t *config_rom; 15293001c72SHidetoshi Shimokawa struct fw_topology_map *topology_map; 15393001c72SHidetoshi Shimokawa struct fw_speed_map *speed_map; 15493001c72SHidetoshi Shimokawa struct callout busprobe_callout; 15593001c72SHidetoshi Shimokawa struct callout_handle bmrhandle; 15693001c72SHidetoshi Shimokawa struct callout_handle timeouthandle; 15793001c72SHidetoshi Shimokawa struct callout_handle retry_probe_handle; 15893001c72SHidetoshi Shimokawa u_int32_t (*cyctimer) __P((struct firewire_comm *)); 15993001c72SHidetoshi Shimokawa void (*ibr) __P((struct firewire_comm *)); 16093001c72SHidetoshi Shimokawa u_int32_t (*set_bmr) __P((struct firewire_comm *, u_int32_t)); 16193001c72SHidetoshi Shimokawa int (*ioctl) __P((dev_t, u_long, caddr_t, int, fw_proc *)); 16293001c72SHidetoshi Shimokawa int (*irx_enable) __P((struct firewire_comm *, int)); 16393001c72SHidetoshi Shimokawa int (*irx_disable) __P((struct firewire_comm *, int)); 16493001c72SHidetoshi Shimokawa int (*itx_enable) __P((struct firewire_comm *, int)); 16593001c72SHidetoshi Shimokawa int (*itx_disable) __P((struct firewire_comm *, int)); 16693001c72SHidetoshi Shimokawa void (*timeout) __P((void *)); 16793001c72SHidetoshi Shimokawa void (*poll) __P((struct firewire_comm *, int, int)); 16893001c72SHidetoshi Shimokawa void (*set_intr) __P((struct firewire_comm *, int)); 16993001c72SHidetoshi Shimokawa void (*irx_post) __P((struct firewire_comm *, u_int32_t *)); 17093001c72SHidetoshi Shimokawa void (*itx_post) __P((struct firewire_comm *, u_int32_t *)); 17193001c72SHidetoshi Shimokawa struct tcode_info *tcode; 17293001c72SHidetoshi Shimokawa }; 17393001c72SHidetoshi Shimokawa #define CSRARC(sc, offset) ((sc)->csr_arc[(offset)/4]) 17493001c72SHidetoshi Shimokawa 17593001c72SHidetoshi Shimokawa struct csrdir{ 17693001c72SHidetoshi Shimokawa u_int32_t ongoaddr; 17793001c72SHidetoshi Shimokawa u_int32_t off; 17893001c72SHidetoshi Shimokawa SLIST_ENTRY(csrdir) link; 17993001c72SHidetoshi Shimokawa }; 18093001c72SHidetoshi Shimokawa 1813c60ba66SKatsushi Kobayashi struct fw_xferq { 1823c60ba66SKatsushi Kobayashi int flag; 1833c60ba66SKatsushi Kobayashi #define FWXFERQ_CHTAGMASK 0xff 1843c60ba66SKatsushi Kobayashi #define FWXFERQ_RUNNING (1 << 8) 1853c60ba66SKatsushi Kobayashi #define FWXFERQ_STREAM (1 << 9) 1863c60ba66SKatsushi Kobayashi 1873c60ba66SKatsushi Kobayashi #define FWXFERQ_PACKET (1 << 10) 1883c60ba66SKatsushi Kobayashi #define FWXFERQ_BULK (1 << 11) 1893c60ba66SKatsushi Kobayashi #define FWXFERQ_DV (1 << 12) 1903c60ba66SKatsushi Kobayashi #define FWXFERQ_MODEMASK (7 << 10) 1913c60ba66SKatsushi Kobayashi 1923c60ba66SKatsushi Kobayashi #define FWXFERQ_EXTBUF (1 << 13) 1933c60ba66SKatsushi Kobayashi #define FWXFERQ_OPEN (1 << 14) 1943c60ba66SKatsushi Kobayashi 1953c60ba66SKatsushi Kobayashi #define FWXFERQ_HANDLER (1 << 16) 1963c60ba66SKatsushi Kobayashi #define FWXFERQ_WAKEUP (1 << 17) 1973c60ba66SKatsushi Kobayashi 1983c60ba66SKatsushi Kobayashi void (*start) __P((struct firewire_comm*)); 1993c60ba66SKatsushi Kobayashi void (*drain) __P((struct firewire_comm*, struct fw_xfer*)); 2003c60ba66SKatsushi Kobayashi struct fw_queue q; 2013c60ba66SKatsushi Kobayashi u_int queued; 2023c60ba66SKatsushi Kobayashi u_int maxq; 2033c60ba66SKatsushi Kobayashi u_int psize; 2043c60ba66SKatsushi Kobayashi u_int packets; 2053c60ba66SKatsushi Kobayashi u_int error; 2063c60ba66SKatsushi Kobayashi STAILQ_HEAD(, fw_bind) binds; 2073c60ba66SKatsushi Kobayashi caddr_t buf; 2083c60ba66SKatsushi Kobayashi u_int bnchunk; 2093c60ba66SKatsushi Kobayashi u_int bnpacket; 2103c60ba66SKatsushi Kobayashi u_int btpacket; 2113c60ba66SKatsushi Kobayashi struct fw_bulkxfer *bulkxfer; 2123c60ba66SKatsushi Kobayashi STAILQ_HEAD(, fw_bulkxfer) stvalid; 2133c60ba66SKatsushi Kobayashi STAILQ_HEAD(, fw_bulkxfer) stfree; 2143c60ba66SKatsushi Kobayashi struct fw_bulkxfer *stdma; 2153c60ba66SKatsushi Kobayashi struct fw_bulkxfer *stdma2; 2163c60ba66SKatsushi Kobayashi struct fw_bulkxfer *stproc; 2173c60ba66SKatsushi Kobayashi u_int procptr; 2180aaa9a23SHidetoshi Shimokawa int dvdbc, dvdiff, dvsync, dvoffset; 2193c60ba66SKatsushi Kobayashi struct fw_dvbuf *dvbuf; 2203c60ba66SKatsushi Kobayashi STAILQ_HEAD(, fw_dvbuf) dvvalid; 2213c60ba66SKatsushi Kobayashi STAILQ_HEAD(, fw_dvbuf) dvfree; 2223c60ba66SKatsushi Kobayashi struct fw_dvbuf *dvdma; 2233c60ba66SKatsushi Kobayashi struct fw_dvbuf *dvproc; 2243c60ba66SKatsushi Kobayashi u_int dvptr; 2253c60ba66SKatsushi Kobayashi u_int dvpacket; 2263c60ba66SKatsushi Kobayashi u_int need_wakeup; 2273c60ba66SKatsushi Kobayashi struct selinfo rsel; 2283c60ba66SKatsushi Kobayashi caddr_t sc; 2293c60ba66SKatsushi Kobayashi void (*hand) __P((struct fw_xferq *)); 2303c60ba66SKatsushi Kobayashi }; 23193001c72SHidetoshi Shimokawa 2323c60ba66SKatsushi Kobayashi struct fw_bulkxfer{ 2333c60ba66SKatsushi Kobayashi u_int32_t flag; 2343c60ba66SKatsushi Kobayashi caddr_t buf; 2353c60ba66SKatsushi Kobayashi STAILQ_ENTRY(fw_bulkxfer) link; 2363c60ba66SKatsushi Kobayashi caddr_t start; 2373c60ba66SKatsushi Kobayashi caddr_t end; 2383c60ba66SKatsushi Kobayashi u_int npacket; 2393c60ba66SKatsushi Kobayashi }; 24093001c72SHidetoshi Shimokawa 2413c60ba66SKatsushi Kobayashi struct fw_dvbuf{ 2423c60ba66SKatsushi Kobayashi caddr_t buf; 2433c60ba66SKatsushi Kobayashi STAILQ_ENTRY(fw_dvbuf) link; 2443c60ba66SKatsushi Kobayashi }; 24593001c72SHidetoshi Shimokawa 2463c60ba66SKatsushi Kobayashi struct tlabel{ 2473c60ba66SKatsushi Kobayashi struct fw_xfer *xfer; 2483c60ba66SKatsushi Kobayashi STAILQ_ENTRY(tlabel) link; 2493c60ba66SKatsushi Kobayashi }; 25093001c72SHidetoshi Shimokawa 2513c60ba66SKatsushi Kobayashi struct fw_bind{ 2523c60ba66SKatsushi Kobayashi u_int32_t start_hi, start_lo, addrlen; 2533c60ba66SKatsushi Kobayashi struct fw_xfer* xfer; 2543c60ba66SKatsushi Kobayashi STAILQ_ENTRY(fw_bind) fclist; 2553c60ba66SKatsushi Kobayashi STAILQ_ENTRY(fw_bind) chlist; 2563c60ba66SKatsushi Kobayashi }; 2573c60ba66SKatsushi Kobayashi 2583c60ba66SKatsushi Kobayashi struct fw_xfer{ 2593c60ba66SKatsushi Kobayashi caddr_t sc; 2603c60ba66SKatsushi Kobayashi struct firewire_comm *fc; 2613c60ba66SKatsushi Kobayashi struct fw_xferq *q; 2623c60ba66SKatsushi Kobayashi struct callout_handle ch; 2633c60ba66SKatsushi Kobayashi time_t time; 2643c60ba66SKatsushi Kobayashi struct fw_tlabel *tlabel; 2653c60ba66SKatsushi Kobayashi u_int8_t spd; 2663c60ba66SKatsushi Kobayashi u_int8_t tcode; 2673c60ba66SKatsushi Kobayashi int resp; 2683c60ba66SKatsushi Kobayashi #define FWXF_INIT 0 2693c60ba66SKatsushi Kobayashi #define FWXF_INQ 1 2703c60ba66SKatsushi Kobayashi #define FWXF_START 2 2713c60ba66SKatsushi Kobayashi #define FWXF_SENT 3 2723c60ba66SKatsushi Kobayashi #define FWXF_SENTERR 4 2733c60ba66SKatsushi Kobayashi #define FWXF_BUSY 8 2743c60ba66SKatsushi Kobayashi #define FWXF_RCVD 10 2753c60ba66SKatsushi Kobayashi int state; 2763c60ba66SKatsushi Kobayashi u_int8_t retry; 2773c60ba66SKatsushi Kobayashi u_int8_t tl; 2783c60ba66SKatsushi Kobayashi int sub; 2793c60ba66SKatsushi Kobayashi int32_t dst; 2803c60ba66SKatsushi Kobayashi u_int8_t act_type; 2813c60ba66SKatsushi Kobayashi #define FWACT_NULL 0 2823c60ba66SKatsushi Kobayashi #define FWACT_XFER 2 2833c60ba66SKatsushi Kobayashi #define FWACT_CH 3 2843c60ba66SKatsushi Kobayashi void (*retry_req) __P((struct fw_xfer *)); 2853c60ba66SKatsushi Kobayashi union{ 2863c60ba66SKatsushi Kobayashi void (*hand) __P((struct fw_xfer *)); 2873c60ba66SKatsushi Kobayashi 2883c60ba66SKatsushi Kobayashi } act; 2893c60ba66SKatsushi Kobayashi union{ 2903c60ba66SKatsushi Kobayashi struct { 2913c60ba66SKatsushi Kobayashi struct fw_device *device; 2923c60ba66SKatsushi Kobayashi } req; 2933c60ba66SKatsushi Kobayashi struct { 2943c60ba66SKatsushi Kobayashi struct stch *channel; 2953c60ba66SKatsushi Kobayashi } stream; 2963c60ba66SKatsushi Kobayashi } mode; 2973c60ba66SKatsushi Kobayashi struct { 2983c60ba66SKatsushi Kobayashi u_int16_t len, off; 2993c60ba66SKatsushi Kobayashi caddr_t buf; 3003c60ba66SKatsushi Kobayashi } send, recv; 3013c60ba66SKatsushi Kobayashi struct mbuf *mbuf; 3023c60ba66SKatsushi Kobayashi STAILQ_ENTRY(fw_xfer) link; 3033c60ba66SKatsushi Kobayashi }; 3043c60ba66SKatsushi Kobayashi void fw_sidrcv __P((struct firewire_comm *, caddr_t, u_int, u_int)); 3053c60ba66SKatsushi Kobayashi void fw_rcv __P((struct firewire_comm *, caddr_t, u_int, u_int, u_int, u_int)); 3063c60ba66SKatsushi Kobayashi void fw_xfer_free __P(( struct fw_xfer*)); 3073c60ba66SKatsushi Kobayashi struct fw_xfer *fw_xfer_alloc __P((void)); 3083c60ba66SKatsushi Kobayashi void fw_init __P((struct firewire_comm *)); 3093c60ba66SKatsushi Kobayashi int fw_tbuf_update __P((struct firewire_comm *, int, int)); 3103c60ba66SKatsushi Kobayashi int fw_rbuf_update __P((struct firewire_comm *, int, int)); 3113c60ba66SKatsushi Kobayashi int fw_readreqq __P((struct firewire_comm *, u_int32_t, u_int32_t, u_int32_t *)); 3123c60ba66SKatsushi Kobayashi int fw_writereqb __P((struct firewire_comm *, u_int32_t, u_int32_t, u_int32_t, u_int32_t *)); 3133c60ba66SKatsushi Kobayashi int fw_readresb __P((struct firewire_comm *, u_int32_t, u_int32_t, u_int32_t, u_int32_t*)); 3143c60ba66SKatsushi Kobayashi int fw_writeres __P((struct firewire_comm *, u_int32_t, u_int32_t)); 3153c60ba66SKatsushi Kobayashi u_int32_t getcsrdata __P((struct fw_device *, u_int8_t)); 3163c60ba66SKatsushi Kobayashi void fw_asybusy __P((struct fw_xfer *)); 3173c60ba66SKatsushi Kobayashi int fw_bindadd __P((struct firewire_comm *, struct fw_bind *)); 3183c60ba66SKatsushi Kobayashi int fw_bindremove __P((struct firewire_comm *, struct fw_bind *)); 3193c60ba66SKatsushi Kobayashi int fw_asyreq __P((struct firewire_comm *, int, struct fw_xfer*)); 3203c60ba66SKatsushi Kobayashi void fw_busreset __P((struct firewire_comm *)); 3213c60ba66SKatsushi Kobayashi u_int16_t fw_crc16 __P((u_int32_t *, u_int32_t)); 3223c60ba66SKatsushi Kobayashi void fw_xfer_timeout __P((void *)); 3233c60ba66SKatsushi Kobayashi void fw_xfer_done __P((struct fw_xfer *)); 3243c60ba66SKatsushi Kobayashi void fw_asy_callback __P((struct fw_xfer *)); 325f90ce7b1SHidetoshi Shimokawa struct fw_device *fw_noderesolve __P((struct firewire_comm *, struct fw_eui64)); 32617821895SHidetoshi Shimokawa struct fw_bind *fw_bindlookup __P((struct firewire_comm *, u_int32_t, u_int32_t)); 32717821895SHidetoshi Shimokawa 3283c60ba66SKatsushi Kobayashi 3293c60ba66SKatsushi Kobayashi extern int firewire_debug; 3303c60ba66SKatsushi Kobayashi extern devclass_t firewire_devclass; 3313c60ba66SKatsushi Kobayashi 3323c60ba66SKatsushi Kobayashi #define DV_BROADCAST_ON (1<<30) 3333c60ba66SKatsushi Kobayashi #define IP_CHANNELS 0x0234 3343c60ba66SKatsushi Kobayashi 3353c60ba66SKatsushi Kobayashi #define STATE_CLEAR 0x0000 3363c60ba66SKatsushi Kobayashi #define STATE_SET 0x0004 3373c60ba66SKatsushi Kobayashi #define NODE_IDS 0x0008 3383c60ba66SKatsushi Kobayashi #define RESET_START 0x000c 3393c60ba66SKatsushi Kobayashi #define SPLIT_TIMEOUT_HI 0x0018 3403c60ba66SKatsushi Kobayashi #define SPLIT_TIMEOUT_LO 0x001c 3413c60ba66SKatsushi Kobayashi #define CYCLE_TIME 0x0200 3423c60ba66SKatsushi Kobayashi #define BUS_TIME 0x0210 3433c60ba66SKatsushi Kobayashi #define BUS_MGR_ID 0x021c 3443c60ba66SKatsushi Kobayashi #define BANDWIDTH_AV 0x0220 3453c60ba66SKatsushi Kobayashi #define CHANNELS_AV_HI 0x0224 3463c60ba66SKatsushi Kobayashi #define CHANNELS_AV_LO 0x0228 3473c60ba66SKatsushi Kobayashi 3483c60ba66SKatsushi Kobayashi #define CONF_ROM 0x0400 3493c60ba66SKatsushi Kobayashi 3503c60ba66SKatsushi Kobayashi #define TOPO_MAP 0x1000 3513c60ba66SKatsushi Kobayashi #define SPED_MAP 0x2000 3523c60ba66SKatsushi Kobayashi 3533c60ba66SKatsushi Kobayashi #define oMPR 0x900 3543c60ba66SKatsushi Kobayashi #define oPCR 0x904 3553c60ba66SKatsushi Kobayashi 3563c60ba66SKatsushi Kobayashi #define iMPR 0x980 3573c60ba66SKatsushi Kobayashi #define iPCR 0x984 3583c60ba66SKatsushi Kobayashi 3593c60ba66SKatsushi Kobayashi #define FWPRI ((PZERO+8)|PCATCH) 3603c60ba66SKatsushi Kobayashi 3613c60ba66SKatsushi Kobayashi #ifdef __alpha__ 3623c60ba66SKatsushi Kobayashi #undef vtophys 3633c60ba66SKatsushi Kobayashi #define vtophys(va) alpha_XXX_dmamap((vm_offset_t)(va)) 3643c60ba66SKatsushi Kobayashi #endif /* __alpha__ */ 365