1 /* 2 * $FreeBSD$ 3 */ 4 5 struct mcd_mbx { 6 short retry; 7 short nblk; 8 int sz; 9 u_long skip; 10 struct bio * bp; 11 short count; 12 short mode; 13 }; 14 15 struct mcd_data { 16 short type; 17 char * name; 18 short config; 19 short flags; 20 u_char read_command; 21 short status; 22 int blksize; 23 u_long disksize; 24 int partflags; 25 int openflags; 26 struct mcd_volinfo volinfo; 27 struct mcd_qchninfo toc[MCD_MAXTOCS]; 28 short audio_status; 29 short curr_mode; 30 struct mcd_read2 lastpb; 31 short debug; 32 struct bio_queue_head head; /* head of bio queue */ 33 struct mcd_mbx mbx; 34 }; 35 36 struct mcd_softc { 37 device_t dev; 38 struct cdev *mcd_dev_t; 39 int debug; 40 41 struct resource * port; 42 int port_rid; 43 int port_type; 44 45 struct resource * irq; 46 int irq_rid; 47 int irq_type; 48 void * irq_ih; 49 50 struct resource * drq; 51 int drq_rid; 52 int drq_type; 53 54 struct mtx mtx; 55 56 struct callout timer; 57 int ch_state; 58 struct mcd_mbx * ch_mbxsave; 59 60 struct mcd_data data; 61 }; 62 63 #define MCD_LOCK(_sc) mtx_lock(&_sc->mtx) 64 #define MCD_UNLOCK(_sc) mtx_unlock(&_sc->mtx) 65 #define MCD_ASSERT_LOCKED(_sc) mtx_assert(&_sc->mtx, MA_OWNED) 66 67 #define MCD_READ(_sc, _reg) bus_read_1(_sc->port, _reg) 68 #define MCD_WRITE(_sc, _reg, _val) bus_write_1(_sc->port, _reg, _val) 69 70 int mcd_probe (struct mcd_softc *); 71 int mcd_attach (struct mcd_softc *); 72