1/*
2 * $FreeBSD: releng/11.0/sys/dev/scd/scdvar.h 274679 2014-11-18 22:02:37Z jhb $
3 */
4
5struct scd_mbx {
6	short		retry;
7	short		nblk;
8	int		sz;
9	u_long		skip;
10	struct bio *	bp;
11	short		count;
12};
13
14struct scd_data {
15	char			double_speed;
16	char *			name;
17	short			flags;
18	int			blksize;
19	u_long			disksize;
20	int			openflag;
21	struct {
22		unsigned int	adr :4;
23		unsigned int	ctl :4; /* xcdplayer needs this */
24		unsigned char	start_msf[3];
25	} toc[MAX_TRACKS];
26	short			first_track;
27	short			last_track;
28	struct  ioc_play_msf	last_play;
29
30	short			audio_status;
31	struct bio_queue_head	head;	     /* head of bio queue */
32	struct scd_mbx		mbx;
33};
34
35struct scd_softc {
36	device_t		dev;
37	struct cdev *scd_dev_t;
38	int			debug;
39
40	struct resource *	port;
41	int			port_rid;
42	int			port_type;
43
44	struct mtx		mtx;
45
46	struct callout		timer;
47	int			ch_state;
48	struct scd_mbx *	ch_mbxsave;
49
50	struct scd_data		data;
51};
52
53#define	SCD_LOCK(_sc)		mtx_lock(&_sc->mtx)
54#define	SCD_UNLOCK(_sc)		mtx_unlock(&_sc->mtx)
55#define	SCD_ASSERT_LOCKED(_sc)	mtx_assert(&_sc->mtx, MA_OWNED)
56
57#define	SCD_READ(_sc, _reg) \
58	bus_read_1(_sc->port, _reg)
59#define	SCD_READ_MULTI(_sc, _reg, _addr, _count) \
60	bus_read_multi_1(_sc->port, _reg, _addr, _count)
61#define	SCD_WRITE(_sc, _reg, _val) \
62	bus_write_1(_sc->port, _reg, _val)
63
64int	scd_probe	(struct scd_softc *);
65int	scd_attach	(struct scd_softc *);
66