1/* $NetBSD$ */ 2 3#include <dev/pci/pcivar.h> 4 5#include <dev/ic/ac97var.h> 6 7struct eap_gameport_args { 8 bus_space_tag_t gpa_iot; 9 bus_space_handle_t gpa_ioh; 10}; 11 12struct 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 32struct 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 44struct 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 87device_t eap_joy_attach(device_t, struct eap_gameport_args *); 88int eap_joy_detach(device_t, struct eap_gameport_args *); 89