Home | History | Annotate | Line # | Download | only in ic
      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