1 1.15 isaki /* $NetBSD: am7930var.h,v 1.15 2020/09/12 05:19:16 isaki Exp $ */ 2 1.5 jonathan 3 1.7 augustss struct am7930_softc; 4 1.5 jonathan 5 1.7 augustss struct am7930_glue { 6 1.15 isaki uint8_t (*codec_dread)(struct am7930_softc *sc, int); 7 1.15 isaki void (*codec_dwrite)(struct am7930_softc *sc, int, uint8_t); 8 1.15 isaki }; 9 1.15 isaki 10 1.15 isaki struct am7930_buf { 11 1.15 isaki uint8_t *start; 12 1.15 isaki uint8_t *end; 13 1.15 isaki uint8_t *data; 14 1.15 isaki uint8_t *blkend; 15 1.15 isaki uint blksize; 16 1.15 isaki 17 1.15 isaki void (*intr)(void *); 18 1.15 isaki void *arg; 19 1.15 isaki uint intr_pending; 20 1.6 jonathan }; 21 1.5 jonathan 22 1.5 jonathan struct am7930_softc { 23 1.12 tsutsui device_t sc_dev; /* base device */ 24 1.5 jonathan 25 1.10 kent uint8_t sc_rlevel; /* record level */ 26 1.10 kent uint8_t sc_plevel; /* play level */ 27 1.10 kent uint8_t sc_mlevel; /* monitor level */ 28 1.10 kent uint8_t sc_out_port; /* output port */ 29 1.10 kent uint8_t sc_mic_mute; 30 1.7 augustss 31 1.7 augustss struct am7930_glue *sc_glue; 32 1.15 isaki struct am7930_buf sc_p; /* for play */ 33 1.15 isaki struct am7930_buf sc_r; /* for rec */ 34 1.13 jmcneill 35 1.13 jmcneill kmutex_t sc_lock; 36 1.13 jmcneill kmutex_t sc_intr_lock; 37 1.15 isaki void *sc_sicookie; /* softint(9) cookie */ 38 1.15 isaki struct evcnt sc_intrcnt; /* statistics */ 39 1.5 jonathan }; 40 1.5 jonathan 41 1.5 jonathan extern int am7930debug; 42 1.7 augustss 43 1.10 kent void am7930_init(struct am7930_softc *, int); 44 1.15 isaki int am7930_hwintr(void *); 45 1.15 isaki void am7930_swintr(void *); 46 1.15 isaki 47 1.15 isaki /* direct access functions */ 48 1.15 isaki #define AM7930_DWRITE(x,y,z) (*(x)->sc_glue->codec_dwrite)((x),(y),(z)) 49 1.15 isaki #define AM7930_DREAD(x,y) (*(x)->sc_glue->codec_dread)((x),(y)) 50 1.7 augustss 51 1.7 augustss 52 1.7 augustss #define AUDIOAMD_POLL_MODE 0 53 1.7 augustss #define AUDIOAMD_DMA_MODE 1 54 1.5 jonathan 55 1.5 jonathan /* 56 1.7 augustss * audio channel definitions. 57 1.5 jonathan */ 58 1.5 jonathan 59 1.7 augustss #define AUDIOAMD_SPEAKER_VOL 0 /* speaker volume */ 60 1.7 augustss #define AUDIOAMD_HEADPHONES_VOL 1 /* headphones volume */ 61 1.10 kent #define AUDIOAMD_OUTPUT_CLASS 2 62 1.5 jonathan 63 1.7 augustss #define AUDIOAMD_MONITOR_VOL 3 /* monitor input volume */ 64 1.7 augustss #define AUDIOAMD_MONITOR_OUTPUT 4 /* output selector */ 65 1.10 kent #define AUDIOAMD_MONITOR_CLASS 5 66 1.5 jonathan 67 1.7 augustss #define AUDIOAMD_MIC_VOL 6 /* microphone volume */ 68 1.7 augustss #define AUDIOAMD_MIC_MUTE 7 69 1.10 kent #define AUDIOAMD_INPUT_CLASS 8 70 1.7 augustss 71 1.7 augustss #define AUDIOAMD_RECORD_SOURCE 9 /* source selector */ 72 1.10 kent #define AUDIOAMD_RECORD_CLASS 10 73 1.5 jonathan 74 1.5 jonathan /* 75 1.5 jonathan * audio(9) MI callbacks from upper-level audio layer. 76 1.5 jonathan */ 77 1.7 augustss 78 1.14 isaki int am7930_query_format(void *, audio_format_query_t *); 79 1.14 isaki int am7930_set_format(void *, int, 80 1.14 isaki const audio_params_t *, const audio_params_t *, 81 1.14 isaki audio_filter_reg_t *, audio_filter_reg_t *); 82 1.10 kent int am7930_commit_settings(void *); 83 1.15 isaki int am7930_trigger_output(void *, void *, void *, int, void (*)(void *), 84 1.15 isaki void *, const audio_params_t *); 85 1.15 isaki int am7930_trigger_input(void *, void *, void *, int, void (*)(void *), 86 1.15 isaki void *, const audio_params_t *); 87 1.10 kent int am7930_halt_output(void *); 88 1.10 kent int am7930_halt_input(void *); 89 1.10 kent int am7930_getdev(void *, struct audio_device *); 90 1.10 kent int am7930_get_props(void *); 91 1.10 kent int am7930_set_port(void *, mixer_ctrl_t *); 92 1.10 kent int am7930_get_port(void *, mixer_ctrl_t *); 93 1.10 kent int am7930_query_devinfo(void *, mixer_devinfo_t *); 94 1.15 isaki void am7930_get_locks(void *, kmutex_t **, kmutex_t **); 95