xref: /freebsd/sys/dev/firewire/firewirereg.h (revision 89cad4614f6345078a2092867f1521e0221b24af)
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  */
373c60ba66SKatsushi Kobayashi 
3810d3ed64SHidetoshi Shimokawa #ifdef __DragonFly__
3910d3ed64SHidetoshi Shimokawa typedef	d_thread_t fw_proc;
4010d3ed64SHidetoshi Shimokawa #include <sys/select.h>
4110d3ed64SHidetoshi Shimokawa #elif __FreeBSD_version >= 500000
423c60ba66SKatsushi Kobayashi typedef	struct thread fw_proc;
433c60ba66SKatsushi Kobayashi #include <sys/selinfo.h>
443c60ba66SKatsushi Kobayashi #else
453c60ba66SKatsushi Kobayashi typedef	struct proc fw_proc;
463c60ba66SKatsushi Kobayashi #include <sys/select.h>
473c60ba66SKatsushi Kobayashi #endif
483c60ba66SKatsushi Kobayashi 
4977ee030bSHidetoshi Shimokawa #include <sys/uio.h>
5077ee030bSHidetoshi Shimokawa 
513c60ba66SKatsushi Kobayashi #define	splfw splimp
523c60ba66SKatsushi Kobayashi 
533c60ba66SKatsushi Kobayashi struct fw_device{
5403161bbcSDoug Rabson 	uint16_t dst;
553c60ba66SKatsushi Kobayashi 	struct fw_eui64 eui;
5603161bbcSDoug Rabson 	uint8_t speed;
5703161bbcSDoug Rabson 	uint8_t maxrec;
5803161bbcSDoug Rabson 	uint8_t nport;
5903161bbcSDoug Rabson 	uint8_t power;
603c60ba66SKatsushi Kobayashi #define CSRROMOFF 0x400
613c60ba66SKatsushi Kobayashi #define CSRROMSIZE 0x400
623c60ba66SKatsushi Kobayashi 	int rommax;	/* offset from 0xffff f000 0000 */
6303161bbcSDoug Rabson 	uint32_t csrrom[CSRROMSIZE/4];
643c60ba66SKatsushi Kobayashi 	int rcnt;
65f90ce7b1SHidetoshi Shimokawa 	struct firewire_comm *fc;
6603161bbcSDoug Rabson 	uint32_t status;
673c60ba66SKatsushi Kobayashi #define FWDEVINIT	1
683c60ba66SKatsushi Kobayashi #define FWDEVATTACHED	2
693c60ba66SKatsushi Kobayashi #define FWDEVINVAL	3
700981f5f0SHidetoshi Shimokawa 	STAILQ_ENTRY(fw_device) link;
713c60ba66SKatsushi Kobayashi };
7293001c72SHidetoshi Shimokawa 
733c60ba66SKatsushi Kobayashi struct firewire_softc {
7410d3ed64SHidetoshi Shimokawa #if defined(__FreeBSD__) && __FreeBSD_version >= 500000
7589c9c53dSPoul-Henning Kamp 	struct cdev *dev;
763c60ba66SKatsushi Kobayashi #endif
773c60ba66SKatsushi Kobayashi 	struct firewire_comm *fc;
783c60ba66SKatsushi Kobayashi };
7993001c72SHidetoshi Shimokawa 
803c60ba66SKatsushi Kobayashi #define FW_MAX_DMACH 0x20
813c60ba66SKatsushi Kobayashi #define FW_MAX_DEVCH FW_MAX_DMACH
823c60ba66SKatsushi Kobayashi #define FW_XFERTIMEOUT 1
8393001c72SHidetoshi Shimokawa 
843c60ba66SKatsushi Kobayashi struct firewire_dev_comm {
853c60ba66SKatsushi Kobayashi 	device_t dev;
863c60ba66SKatsushi Kobayashi 	struct firewire_comm *fc;
87d09a5d6fSHidetoshi Shimokawa 	void (*post_busreset) (void *);
88d09a5d6fSHidetoshi Shimokawa 	void (*post_explore) (void *);
893c60ba66SKatsushi Kobayashi };
903c60ba66SKatsushi Kobayashi 
913c60ba66SKatsushi Kobayashi struct tcode_info {
923c60ba66SKatsushi Kobayashi 	u_char hdr_len;	/* IEEE1394 header length */
933c60ba66SKatsushi Kobayashi 	u_char flag;
943c60ba66SKatsushi Kobayashi #define FWTI_REQ	(1 << 0)
953c60ba66SKatsushi Kobayashi #define FWTI_RES	(1 << 1)
963c60ba66SKatsushi Kobayashi #define FWTI_TLABEL	(1 << 2)
973c60ba66SKatsushi Kobayashi #define FWTI_BLOCK_STR	(1 << 3)
983c60ba66SKatsushi Kobayashi #define FWTI_BLOCK_ASY	(1 << 4)
993c60ba66SKatsushi Kobayashi };
1003c60ba66SKatsushi Kobayashi 
1013c60ba66SKatsushi Kobayashi struct firewire_comm{
1023c60ba66SKatsushi Kobayashi 	device_t dev;
1033c60ba66SKatsushi Kobayashi 	device_t bdev;
10403161bbcSDoug Rabson 	uint16_t busid:10,
1053c60ba66SKatsushi Kobayashi 		  nodeid:6;
1063c60ba66SKatsushi Kobayashi 	u_int mode;
1073c60ba66SKatsushi Kobayashi 	u_int nport;
1083c60ba66SKatsushi Kobayashi 	u_int speed;
1093c60ba66SKatsushi Kobayashi 	u_int maxrec;
1103c60ba66SKatsushi Kobayashi 	u_int irm;
1113c60ba66SKatsushi Kobayashi 	u_int max_node;
1123c60ba66SKatsushi Kobayashi 	u_int max_hop;
1133c60ba66SKatsushi Kobayashi #define FWPHYASYST (1 << 0)
11403161bbcSDoug Rabson 	uint32_t ongobus:10,
1153c60ba66SKatsushi Kobayashi 		  ongonode:6,
1163c60ba66SKatsushi Kobayashi 		  ongoaddr:16;
1173c60ba66SKatsushi Kobayashi 	struct fw_device *ongodev;
1183c60ba66SKatsushi Kobayashi 	struct fw_eui64 ongoeui;
1193c60ba66SKatsushi Kobayashi #define	FWMAXCSRDIR     16
1203c60ba66SKatsushi Kobayashi 	SLIST_HEAD(, csrdir) ongocsr;
1213c60ba66SKatsushi Kobayashi 	SLIST_HEAD(, csrdir) csrfree;
12203161bbcSDoug Rabson 	uint32_t status;
123630529adSHidetoshi Shimokawa #define	FWBUSNOTREADY	(-1)
1243c60ba66SKatsushi Kobayashi #define	FWBUSRESET	0
1253c60ba66SKatsushi Kobayashi #define	FWBUSINIT	1
1263c60ba66SKatsushi Kobayashi #define	FWBUSCYMELECT	2
1273c60ba66SKatsushi Kobayashi #define	FWBUSMGRELECT	3
1283c60ba66SKatsushi Kobayashi #define	FWBUSMGRDONE	4
1293c60ba66SKatsushi Kobayashi #define	FWBUSEXPLORE	5
1303c60ba66SKatsushi Kobayashi #define	FWBUSPHYCONF	6
1313c60ba66SKatsushi Kobayashi #define	FWBUSEXPDONE	7
1323c60ba66SKatsushi Kobayashi #define	FWBUSCOMPLETION	10
1333c60ba66SKatsushi Kobayashi 	int nisodma;
134c547b896SHidetoshi Shimokawa 	struct fw_eui64 eui;
13593001c72SHidetoshi Shimokawa 	struct fw_xferq
13693001c72SHidetoshi Shimokawa 		*arq, *atq, *ars, *ats, *it[FW_MAX_DMACH],*ir[FW_MAX_DMACH];
13789cad461SHidetoshi Shimokawa 	STAILQ_HEAD(, fw_xfer) tlabels[0x40];
13893001c72SHidetoshi Shimokawa 	STAILQ_HEAD(, fw_bind) binds;
1390981f5f0SHidetoshi Shimokawa 	STAILQ_HEAD(, fw_device) devices;
14093001c72SHidetoshi Shimokawa 	u_int  sid_cnt;
14193001c72SHidetoshi Shimokawa #define CSRSIZE 0x4000
14203161bbcSDoug Rabson 	uint32_t csr_arc[CSRSIZE/4];
14393001c72SHidetoshi Shimokawa #define CROMSIZE 0x400
14403161bbcSDoug Rabson 	uint32_t *config_rom;
1450bc666e0SHidetoshi Shimokawa 	struct crom_src_buf *crom_src_buf;
1460bc666e0SHidetoshi Shimokawa 	struct crom_src *crom_src;
1470bc666e0SHidetoshi Shimokawa 	struct crom_chunk *crom_root;
14893001c72SHidetoshi Shimokawa 	struct fw_topology_map *topology_map;
14993001c72SHidetoshi Shimokawa 	struct fw_speed_map *speed_map;
15093001c72SHidetoshi Shimokawa 	struct callout busprobe_callout;
1510981f5f0SHidetoshi Shimokawa 	struct callout bmr_callout;
1520981f5f0SHidetoshi Shimokawa 	struct callout timeout_callout;
15303161bbcSDoug Rabson 	uint32_t (*cyctimer) (struct  firewire_comm *);
154d09a5d6fSHidetoshi Shimokawa 	void (*ibr) (struct firewire_comm *);
15503161bbcSDoug Rabson 	uint32_t (*set_bmr) (struct firewire_comm *, uint32_t);
15689c9c53dSPoul-Henning Kamp 	int (*ioctl) (struct cdev *, u_long, caddr_t, int, fw_proc *);
157d09a5d6fSHidetoshi Shimokawa 	int (*irx_enable) (struct firewire_comm *, int);
158d09a5d6fSHidetoshi Shimokawa 	int (*irx_disable) (struct firewire_comm *, int);
159d09a5d6fSHidetoshi Shimokawa 	int (*itx_enable) (struct firewire_comm *, int);
160d09a5d6fSHidetoshi Shimokawa 	int (*itx_disable) (struct firewire_comm *, int);
161d09a5d6fSHidetoshi Shimokawa 	void (*timeout) (void *);
162d09a5d6fSHidetoshi Shimokawa 	void (*poll) (struct firewire_comm *, int, int);
163d09a5d6fSHidetoshi Shimokawa 	void (*set_intr) (struct firewire_comm *, int);
16403161bbcSDoug Rabson 	void (*irx_post) (struct firewire_comm *, uint32_t *);
16503161bbcSDoug Rabson 	void (*itx_post) (struct firewire_comm *, uint32_t *);
16693001c72SHidetoshi Shimokawa 	struct tcode_info *tcode;
16777ee030bSHidetoshi Shimokawa 	bus_dma_tag_t dmat;
16893001c72SHidetoshi Shimokawa };
16993001c72SHidetoshi Shimokawa #define CSRARC(sc, offset) ((sc)->csr_arc[(offset)/4])
17093001c72SHidetoshi Shimokawa 
17193001c72SHidetoshi Shimokawa struct csrdir{
17203161bbcSDoug Rabson 	uint32_t ongoaddr;
17303161bbcSDoug Rabson 	uint32_t off;
17493001c72SHidetoshi Shimokawa 	SLIST_ENTRY(csrdir) link;
17593001c72SHidetoshi Shimokawa };
17693001c72SHidetoshi Shimokawa 
1773c60ba66SKatsushi Kobayashi struct fw_xferq {
1783c60ba66SKatsushi Kobayashi 	int flag;
1793c60ba66SKatsushi Kobayashi #define FWXFERQ_CHTAGMASK 0xff
1803c60ba66SKatsushi Kobayashi #define FWXFERQ_RUNNING (1 << 8)
1813c60ba66SKatsushi Kobayashi #define FWXFERQ_STREAM (1 << 9)
1823c60ba66SKatsushi Kobayashi 
1833c60ba66SKatsushi Kobayashi #define FWXFERQ_BULK (1 << 11)
1843c60ba66SKatsushi Kobayashi #define FWXFERQ_MODEMASK (7 << 10)
1853c60ba66SKatsushi Kobayashi 
1863c60ba66SKatsushi Kobayashi #define FWXFERQ_EXTBUF (1 << 13)
1873c60ba66SKatsushi Kobayashi #define FWXFERQ_OPEN (1 << 14)
1883c60ba66SKatsushi Kobayashi 
1893c60ba66SKatsushi Kobayashi #define FWXFERQ_HANDLER (1 << 16)
1903c60ba66SKatsushi Kobayashi #define FWXFERQ_WAKEUP (1 << 17)
191d09a5d6fSHidetoshi Shimokawa 	void (*start) (struct firewire_comm*);
1926cada79aSHidetoshi Shimokawa 	int dmach;
19377ee030bSHidetoshi Shimokawa 	STAILQ_HEAD(, fw_xfer) q;
1943c60ba66SKatsushi Kobayashi 	u_int queued;
1953c60ba66SKatsushi Kobayashi 	u_int maxq;
1963c60ba66SKatsushi Kobayashi 	u_int psize;
1973c60ba66SKatsushi Kobayashi 	STAILQ_HEAD(, fw_bind) binds;
19877ee030bSHidetoshi Shimokawa 	struct fwdma_alloc_multi *buf;
1993c60ba66SKatsushi Kobayashi 	u_int bnchunk;
2003c60ba66SKatsushi Kobayashi 	u_int bnpacket;
2013c60ba66SKatsushi Kobayashi 	struct fw_bulkxfer *bulkxfer;
2023c60ba66SKatsushi Kobayashi 	STAILQ_HEAD(, fw_bulkxfer) stvalid;
2033c60ba66SKatsushi Kobayashi 	STAILQ_HEAD(, fw_bulkxfer) stfree;
2045a7ba74dSHidetoshi Shimokawa 	STAILQ_HEAD(, fw_bulkxfer) stdma;
2053c60ba66SKatsushi Kobayashi 	struct fw_bulkxfer *stproc;
2063c60ba66SKatsushi Kobayashi 	struct selinfo rsel;
2073c60ba66SKatsushi Kobayashi 	caddr_t sc;
208d09a5d6fSHidetoshi Shimokawa 	void (*hand) (struct fw_xferq *);
2093c60ba66SKatsushi Kobayashi };
21093001c72SHidetoshi Shimokawa 
2113c60ba66SKatsushi Kobayashi struct fw_bulkxfer{
21277ee030bSHidetoshi Shimokawa 	int poffset;
2132b4601d1SHidetoshi Shimokawa 	struct mbuf *mbuf;
2143c60ba66SKatsushi Kobayashi 	STAILQ_ENTRY(fw_bulkxfer) link;
2153c60ba66SKatsushi Kobayashi 	caddr_t start;
2163c60ba66SKatsushi Kobayashi 	caddr_t end;
2172b4601d1SHidetoshi Shimokawa 	int resp;
2183c60ba66SKatsushi Kobayashi };
21993001c72SHidetoshi Shimokawa 
2203c60ba66SKatsushi Kobayashi struct fw_bind{
221c4778b5dSHidetoshi Shimokawa 	u_int64_t start;
222c4778b5dSHidetoshi Shimokawa 	u_int64_t end;
22377ee030bSHidetoshi Shimokawa 	STAILQ_HEAD(, fw_xfer) xferlist;
2243c60ba66SKatsushi Kobayashi 	STAILQ_ENTRY(fw_bind) fclist;
2253c60ba66SKatsushi Kobayashi 	STAILQ_ENTRY(fw_bind) chlist;
22677ee030bSHidetoshi Shimokawa #define FWACT_NULL	0
22777ee030bSHidetoshi Shimokawa #define FWACT_XFER	2
22877ee030bSHidetoshi Shimokawa #define FWACT_CH	3
22903161bbcSDoug Rabson 	uint8_t act_type;
23003161bbcSDoug Rabson 	uint8_t sub;
2313c60ba66SKatsushi Kobayashi };
2323c60ba66SKatsushi Kobayashi 
2333c60ba66SKatsushi Kobayashi struct fw_xfer{
2343c60ba66SKatsushi Kobayashi 	caddr_t sc;
2353c60ba66SKatsushi Kobayashi 	struct firewire_comm *fc;
2363c60ba66SKatsushi Kobayashi 	struct fw_xferq *q;
237864d7e72SHidetoshi Shimokawa 	struct timeval tv;
23877ee030bSHidetoshi Shimokawa 	int8_t resp;
2393c60ba66SKatsushi Kobayashi #define FWXF_INIT 0
2403c60ba66SKatsushi Kobayashi #define FWXF_INQ 1
2413c60ba66SKatsushi Kobayashi #define FWXF_START 2
2423c60ba66SKatsushi Kobayashi #define FWXF_SENT 3
2433c60ba66SKatsushi Kobayashi #define FWXF_SENTERR 4
2443c60ba66SKatsushi Kobayashi #define FWXF_BUSY 8
2453c60ba66SKatsushi Kobayashi #define FWXF_RCVD 10
24603161bbcSDoug Rabson 	uint8_t state;
24789cad461SHidetoshi Shimokawa 	int8_t tl;
248d09a5d6fSHidetoshi Shimokawa 	void (*hand) (struct fw_xfer *);
2493c60ba66SKatsushi Kobayashi 	struct {
250c4778b5dSHidetoshi Shimokawa 		struct fw_pkt hdr;
25103161bbcSDoug Rabson 		uint32_t *payload;
25203161bbcSDoug Rabson 		uint16_t pay_len;
25303161bbcSDoug Rabson 		uint8_t spd;
2543c60ba66SKatsushi Kobayashi 	} send, recv;
2553c60ba66SKatsushi Kobayashi 	struct mbuf *mbuf;
2563c60ba66SKatsushi Kobayashi 	STAILQ_ENTRY(fw_xfer) link;
25789cad461SHidetoshi Shimokawa 	STAILQ_ENTRY(fw_xfer) tlabel;
25848249fe0SHidetoshi Shimokawa 	struct malloc_type *malloc;
2593c60ba66SKatsushi Kobayashi };
260c4778b5dSHidetoshi Shimokawa 
261c4778b5dSHidetoshi Shimokawa struct fw_rcv_buf {
262c4778b5dSHidetoshi Shimokawa 	struct firewire_comm *fc;
263c4778b5dSHidetoshi Shimokawa 	struct fw_xfer *xfer;
264c4778b5dSHidetoshi Shimokawa 	struct iovec *vec;
265c4778b5dSHidetoshi Shimokawa 	u_int nvec;
26603161bbcSDoug Rabson 	uint8_t spd;
267c4778b5dSHidetoshi Shimokawa };
268c4778b5dSHidetoshi Shimokawa 
26903161bbcSDoug Rabson void fw_sidrcv (struct firewire_comm *, uint32_t *, u_int);
270d09a5d6fSHidetoshi Shimokawa void fw_rcv (struct fw_rcv_buf *);
271d09a5d6fSHidetoshi Shimokawa void fw_xfer_unload ( struct fw_xfer*);
272d09a5d6fSHidetoshi Shimokawa void fw_xfer_free_buf ( struct fw_xfer*);
273d09a5d6fSHidetoshi Shimokawa void fw_xfer_free ( struct fw_xfer*);
274d09a5d6fSHidetoshi Shimokawa struct fw_xfer *fw_xfer_alloc (struct malloc_type *);
275d09a5d6fSHidetoshi Shimokawa struct fw_xfer *fw_xfer_alloc_buf (struct malloc_type *, int, int);
276d09a5d6fSHidetoshi Shimokawa void fw_init (struct firewire_comm *);
277d09a5d6fSHidetoshi Shimokawa int fw_tbuf_update (struct firewire_comm *, int, int);
278d09a5d6fSHidetoshi Shimokawa int fw_rbuf_update (struct firewire_comm *, int, int);
279d09a5d6fSHidetoshi Shimokawa void fw_asybusy (struct fw_xfer *);
280d09a5d6fSHidetoshi Shimokawa int fw_bindadd (struct firewire_comm *, struct fw_bind *);
281d09a5d6fSHidetoshi Shimokawa int fw_bindremove (struct firewire_comm *, struct fw_bind *);
282d09a5d6fSHidetoshi Shimokawa int fw_asyreq (struct firewire_comm *, int, struct fw_xfer*);
283ad9cf506SHidetoshi Shimokawa void fw_busreset (struct firewire_comm *, uint32_t);
28403161bbcSDoug Rabson uint16_t fw_crc16 (uint32_t *, uint32_t);
285d09a5d6fSHidetoshi Shimokawa void fw_xfer_timeout (void *);
286d09a5d6fSHidetoshi Shimokawa void fw_xfer_done (struct fw_xfer *);
287d09a5d6fSHidetoshi Shimokawa void fw_asy_callback (struct fw_xfer *);
288d09a5d6fSHidetoshi Shimokawa void fw_asy_callback_free (struct fw_xfer *);
289d09a5d6fSHidetoshi Shimokawa struct fw_device *fw_noderesolve_nodeid (struct firewire_comm *, int);
290d09a5d6fSHidetoshi Shimokawa struct fw_device *fw_noderesolve_eui64 (struct firewire_comm *, struct fw_eui64 *);
29103161bbcSDoug Rabson struct fw_bind *fw_bindlookup (struct firewire_comm *, uint16_t, uint32_t);
292d09a5d6fSHidetoshi Shimokawa void fw_drain_txq (struct firewire_comm *);
293d09a5d6fSHidetoshi Shimokawa int fwdev_makedev (struct firewire_softc *);
294d09a5d6fSHidetoshi Shimokawa int fwdev_destroydev (struct firewire_softc *);
2956a113b3dSRobert Watson void fwdev_clone (void *, struct ucred *, char *, int, struct cdev **);
2963c60ba66SKatsushi Kobayashi 
2973c60ba66SKatsushi Kobayashi extern int firewire_debug;
2983c60ba66SKatsushi Kobayashi extern devclass_t firewire_devclass;
2993c60ba66SKatsushi Kobayashi 
30010d3ed64SHidetoshi Shimokawa #ifdef __DragonFly__
30110d3ed64SHidetoshi Shimokawa #define		FWPRI		PCATCH
30245545499SHidetoshi Shimokawa #else
30310d3ed64SHidetoshi Shimokawa #define		FWPRI		((PZERO+8)|PCATCH)
30445545499SHidetoshi Shimokawa #endif
30545545499SHidetoshi Shimokawa 
30610d3ed64SHidetoshi Shimokawa #if defined(__DragonFly__) || __FreeBSD_version < 500000
30710d3ed64SHidetoshi Shimokawa #define CALLOUT_INIT(x) callout_init(x)
30810d3ed64SHidetoshi Shimokawa #else
30910d3ed64SHidetoshi Shimokawa #define CALLOUT_INIT(x) callout_init(x, 0 /* mpsafe */)
31010d3ed64SHidetoshi Shimokawa #endif
31110d3ed64SHidetoshi Shimokawa 
31210d3ed64SHidetoshi Shimokawa #if defined(__DragonFly__) || __FreeBSD_version < 500000
313c4778b5dSHidetoshi Shimokawa /* compatibility shim for 4.X */
314c4778b5dSHidetoshi Shimokawa #define bio buf
315c4778b5dSHidetoshi Shimokawa #define bio_bcount b_bcount
316c4778b5dSHidetoshi Shimokawa #define bio_cmd b_flags
317c4778b5dSHidetoshi Shimokawa #define bio_count b_count
318c4778b5dSHidetoshi Shimokawa #define bio_data b_data
319c4778b5dSHidetoshi Shimokawa #define bio_dev b_dev
320c4778b5dSHidetoshi Shimokawa #define bio_error b_error
321c4778b5dSHidetoshi Shimokawa #define bio_flags b_flags
322c4778b5dSHidetoshi Shimokawa #define bio_offset b_offset
323c4778b5dSHidetoshi Shimokawa #define bio_resid b_resid
324c4778b5dSHidetoshi Shimokawa #define BIO_ERROR B_ERROR
325c4778b5dSHidetoshi Shimokawa #define BIO_READ B_READ
326c4778b5dSHidetoshi Shimokawa #define BIO_WRITE B_WRITE
327c4778b5dSHidetoshi Shimokawa #define MIN(a,b) (((a)<(b))?(a):(b))
328b2d0deb2SHidetoshi Shimokawa #define MAX(a,b) (((a)>(b))?(a):(b))
329c4778b5dSHidetoshi Shimokawa #endif
330c4778b5dSHidetoshi Shimokawa 
3315166f1dfSHidetoshi Shimokawa MALLOC_DECLARE(M_FW);
33248249fe0SHidetoshi Shimokawa MALLOC_DECLARE(M_FWXFER);
333