ydsvar.h revision 1.3
1/*	$OpenBSD: ydsvar.h,v 1.3 2001/12/20 04:50:06 jcs Exp $	*/
2/*	$NetBSD$	*/
3
4/*
5 * Copyright (c) 2000, 2001 Kazuki Sakamoto and Minoura Makoto.
6 * All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 * 1. Redistributions of source code must retain the above copyright
12 *    notice, this list of conditions and the following disclaimer.
13 * 2. Redistributions in binary form must reproduce the above copyright
14 *    notice, this list of conditions and the following disclaimer in the
15 *    documentation and/or other materials provided with the distribution.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29#ifndef _DEV_PCI_YDSVAR_H_
30#define	_DEV_PCI_YDSVAR_H_
31
32#define N_PLAY_SLOTS		2		/* We use only 2 (R and L) */
33#define	N_PLAY_SLOT_CTRL	2
34#define WORK_SIZE		0x0400
35
36/*
37 * softc
38 */
39struct yds_dma {
40	bus_dmamap_t map;
41	caddr_t addr;			/* VA */
42	bus_dma_segment_t segs[1];
43	int nsegs;
44	size_t size;
45	struct yds_dma *next;
46};
47
48struct yds_codec_softc {
49	struct device sc_dev;		/* base device */
50	struct yds_softc *sc;
51	int id;
52	int status_data;
53	int status_addr;
54	struct ac97_host_if host_if;
55	struct ac97_codec_if *codec_if;
56};
57
58struct yds_softc {
59	struct device		sc_dev;		/* base device */
60	pci_chipset_tag_t	sc_pc;
61	pcitag_t		sc_pcitag;
62	pcireg_t		sc_id;
63	void			*sc_ih;		/* interrupt vectoring */
64	bus_space_tag_t		memt;
65	bus_space_handle_t	memh;
66	bus_dma_tag_t		sc_dmatag;	/* DMA tag */
67	u_int			sc_flags;
68
69	struct yds_codec_softc	sc_codec[2];	/* Primary/Secondary AC97 */
70
71	struct yds_dma		*sc_dmas;	/* List of DMA handles */
72
73	/*
74	 * Play/record status
75	 */
76	struct {
77		void		(*intr)(void *); /* rint/pint */
78		void		*intr_arg;	/* arg for intr */
79		u_int	 	offset;		/* filled up to here */
80		u_int	 	blksize;
81		u_int	 	factor;		/* byte per sample */
82		u_int		length;		/* ring buffer length */
83		struct yds_dma	*dma;		/* DMA handle for ring buf */
84	} sc_play, sc_rec;
85
86	/*
87	 * DSP control data
88	 *
89	 * Work space, play control data table, play slot control data,
90	 * rec slot control data and effect slot control data are
91	 * stored in a single memory segment in this order.
92	 */
93	struct yds_dma			sc_ctrldata;
94	/* KVA and offset in buffer of play ctrl data tbl */
95	u_int32_t			*ptbl;
96	off_t				ptbloff;
97	/* KVA and offset in buffer of rec slot ctrl data */
98	struct rec_slot_ctrl_bank	*rbank;
99	off_t				rbankoff;
100	/* Array of KVA pointers and offset of play slot control data */
101	struct play_slot_ctrl_bank	*pbankp[N_PLAY_SLOT_CTRL_BANK
102					       *N_PLAY_SLOTS];
103	off_t				pbankoff;
104
105	/*
106	 * Legacy support
107	 */
108	bus_space_tag_t		sc_legacy_iot;
109	bus_space_handle_t	sc_opl_ioh;
110	struct device		*sc_mpu;
111	bus_space_handle_t	sc_mpu_ioh;
112
113	/*
114	 * Suspend/resume support
115	 */
116	void			*powerhook;
117	int			suspend;
118};
119#define sc_opl_iot	sc_legacy_iot
120#define sc_mpu_iot	sc_legacy_iot
121
122int ac97_id2;
123
124#endif /* _DEV_PCI_YDSVAR_H_ */
125