xref: /netbsd-src/sys/dev/pci/eapvar.h (revision df1f0e7940fd57578c815aa062d342fdf2d37e7e)
1 /* $NetBSD: eapvar.h,v 1.6 2020/03/05 15:18:55 riastradh Exp $ */
2 
3 #include <dev/pci/pcivar.h>
4 
5 #include <dev/ic/ac97var.h>
6 
7 struct eap_gameport_args {
8 	bus_space_tag_t gpa_iot;
9 	bus_space_handle_t gpa_ioh;
10 };
11 
12 struct eap_dma {
13 	bus_dmamap_t map;
14 	void *addr;
15 	bus_dma_segment_t segs[1];
16 	int nsegs;
17 	size_t size;
18 	struct eap_dma *next;
19 };
20 
21 #define DMAADDR(p) ((p)->map->dm_segs[0].ds_addr)
22 #define KERNADDR(p) ((void *)((p)->addr))
23 
24 /*
25  * The card has two DACs. Using them is a bit twisted: we use DAC2
26  * as default and DAC1 as the optional secondary DAC.
27  */
28 #define EAP_DAC1 1
29 #define EAP_DAC2 0
30 #define EAP_I1 EAP_DAC2
31 #define EAP_I2 EAP_DAC1
32 struct eap_instance {
33 	device_t parent;
34 	int index;
35 
36 	void	(*ei_pintr)(void *);	/* DMA completion intr handler */
37 	void	*ei_parg;		/* arg for ei_intr() */
38 	device_t ei_audiodev;		/* audio device, for detach */
39 #ifdef DIAGNOSTIC
40 	char	ei_prun;
41 #endif
42 };
43 
44 struct eap_softc {
45 	device_t sc_dev;		/* base device */
46 	void *sc_ih;			/* interrupt vectoring */
47 	bus_space_tag_t iot;
48 	bus_space_handle_t ioh;
49 	bus_size_t iosz;
50 	bus_dma_tag_t sc_dmatag;	/* DMA tag */
51 	kmutex_t sc_intr_lock;
52 	kmutex_t sc_lock;
53 
54 	struct eap_dma *sc_dmas;
55 
56 	void	(*sc_rintr)(void *);	/* DMA completion intr handler */
57 	void	*sc_rarg;		/* arg for sc_intr() */
58 #ifdef DIAGNOSTIC
59 	char	sc_rrun;
60 #endif
61 
62 #if NMIDI > 0
63 	void	(*sc_iintr)(void *, int); /* midi input ready handler */
64 	void	(*sc_ointr)(void *);	/* midi output ready handler */
65 	void	*sc_arg;
66 	device_t sc_mididev;
67 #endif
68 #if NJOY_EAP > 0
69 	device_t sc_gameport;
70 #endif
71 
72 	u_short	sc_port[AK_NPORTS];	/* mirror of the hardware setting */
73 	u_int	sc_record_source;	/* recording source mask */
74 	u_int	sc_input_source;	/* input source mask */
75 	u_int	sc_mic_preamp;
76 	char    sc_1371;		/* Using ES1371/AC97 codec */
77 
78 	struct ac97_codec_if *codec_if;
79 	struct ac97_host_if host_if;
80 
81 	struct eap_instance sc_ei[2];
82 
83 	pci_chipset_tag_t sc_pc;	/* For detach */
84 };
85 
86 
87 device_t eap_joy_attach(device_t, struct eap_gameport_args *);
88 int eap_joy_detach(device_t, struct eap_gameport_args *);
89