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