Annotation of sys/dev/pci/esavar.h, Revision 1.1
1.1 ! nbrk 1: /* $OpenBSD: esavar.h,v 1.1 2002/04/08 01:47:33 frantzen Exp $ */
! 2: /* $NetBSD: esavar.h,v 1.4 2002/03/16 14:34:01 jmcneill Exp $ */
! 3:
! 4: /*
! 5: * Copyright (c) 2001, 2002 Jared D. McNeill <jmcneill@invisible.yi.org>
! 6: * All rights reserved.
! 7: *
! 8: * Redistribution and use in source and binary forms, with or without
! 9: * modification, are permitted provided that the following conditions
! 10: * are met:
! 11: * 1. Redistributions of source code must retain the above copyright
! 12: * notice, this list of conditions and the following disclaimer.
! 13: * 2. The name of the author may not be used to endorse or promote products
! 14: * derived from this software without specific prior written permission.
! 15: *
! 16: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
! 17: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
! 18: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
! 19: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
! 20: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
! 21: * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
! 22: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
! 23: * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
! 24: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
! 25: * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
! 26: * SUCH DAMAGE.
! 27: */
! 28:
! 29: /*
! 30: * ESS Allegro-1 / Maestro3 Audio Driver
! 31: *
! 32: * Based on the FreeBSD maestro3 driver
! 33: *
! 34: */
! 35:
! 36: /*
! 37: * Number of simultaneous voices
! 38: *
! 39: * NOTE: The current code attaches audio0 thru audioESA_NUM_VOICES-1
! 40: * to this driver, and a lot of people probably don't want that.
! 41: * So, we'll default to 1 but we'll allow for the possibility of
! 42: * more.
! 43: *
! 44: * The current MINISRC image limits us to a maximum of 4 simultaneous voices.
! 45: */
! 46: #ifndef ESA_NUM_VOICES
! 47: #define ESA_NUM_VOICES 1
! 48: #endif
! 49:
! 50: #define KERNADDR(p) ((void *)((p)->addr))
! 51: #define DMAADDR(p) ((p)->map->dm_segs[0].ds_addr)
! 52:
! 53: #define ESA_MINRATE 8000
! 54: #define ESA_MAXRATE 48000
! 55:
! 56: struct esa_list {
! 57: int currlen;
! 58: int mem_addr;
! 59: int max;
! 60: int indexmap[ESA_NUM_VOICES * 2];
! 61: };
! 62:
! 63: struct esa_dma {
! 64: bus_dmamap_t map;
! 65: caddr_t addr;
! 66: bus_dma_segment_t segs[1];
! 67: int nsegs;
! 68: size_t size;
! 69: struct esa_dma *next;
! 70: };
! 71:
! 72: struct esa_channel {
! 73: int active;
! 74: int data_offset;
! 75: int index;
! 76: size_t bufsize;
! 77: int blksize;
! 78: int pos;
! 79: void *buf;
! 80: u_int32_t start;
! 81: u_int32_t count;
! 82:
! 83: /* mode settings */
! 84: struct audio_params mode;
! 85:
! 86: void (*intr)(void *);
! 87: void *arg;
! 88: };
! 89:
! 90: struct esa_voice {
! 91: struct device *parent; /* pointer to our parent */
! 92: struct esa_channel play;
! 93: struct esa_channel rec;
! 94: struct esa_dma *dma;
! 95: int inlist;
! 96: int index; /* 0: play, 1: record */
! 97: };
! 98:
! 99: struct esa_softc
! 100: {
! 101: struct device sc_dev;
! 102: bus_space_tag_t sc_iot;
! 103: bus_space_handle_t sc_ioh;
! 104: bus_addr_t sc_iob;
! 105: bus_size_t sc_ios;
! 106:
! 107: pcitag_t sc_tag;
! 108: pci_chipset_tag_t sc_pct;
! 109: bus_dma_tag_t sc_dmat;
! 110: pcireg_t sc_pcireg;
! 111:
! 112: void *sc_ih;
! 113:
! 114: struct ac97_codec_if *codec_if;
! 115: struct ac97_host_if host_if;
! 116: enum ac97_host_flags codec_flags;
! 117:
! 118: struct device *sc_audiodev[ESA_NUM_VOICES];
! 119:
! 120: struct esa_voice voice[ESA_NUM_VOICES];
! 121: struct esa_dma *sc_dmas;
! 122: int count;
! 123:
! 124: /* timer management */
! 125: int sc_ntimers;
! 126:
! 127: /* packed list structures */
! 128: struct esa_list mixer_list;
! 129: struct esa_list adc1_list;
! 130: struct esa_list dma_list;
! 131: struct esa_list msrc_list;
! 132:
! 133: int type; /* Allegro-1 or Maestro 3? */
! 134: int delay1, delay2;
! 135:
! 136: void *powerhook;
! 137: u_int16_t *savemem;
! 138: };
CVSweb