1 /* 2 * Auvia BeOS Driver for Via VT82xx Southbridge audio 3 * 4 * Copyright (c) 2003, Jerome Duval (jerome.duval@free.fr) 5 6 * This code is derived from software contributed to The NetBSD Foundation 7 * by Tyler C. Sarna 8 * 9 * Redistribution and use in source and binary forms, with or without 10 * modification, are permitted provided that the following conditions 11 * are met: 12 * 1. Redistributions of source code must retain the above copyright 13 * notice, this list of conditions and the following disclaimer. 14 * 2. Redistributions in binary form must reproduce the above copyright 15 * notice, this list of conditions and the following disclaimer in the 16 * documentation and/or other materials provided with the distribution. 17 * 3. All advertising materials mentioning features or use of this software 18 * must display the following acknowledgement: 19 * This product includes software developed by the NetBSD 20 * Foundation, Inc. and its contributors. 21 * 4. Neither the name of The NetBSD Foundation nor the names of its 22 * contributors may be used to endorse or promote products derived 23 * from this software without specific prior written permission. 24 * 25 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 26 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 27 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 28 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 29 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 30 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 31 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 32 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 33 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 34 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 35 * POSSIBILITY OF SUCH DAMAGE. 36 */ 37 38 #ifndef _DEV_PCI_AUVIA_H_ 39 #define _DEV_PCI_AUVIA_H_ 40 41 #include <Drivers.h> 42 #include <SupportDefs.h> 43 #include <OS.h> 44 #include <PCI.h> 45 #include "auviareg.h" 46 #include "config.h" 47 #include "queue.h" 48 #include "hmulti_audio.h" 49 #include "multi.h" 50 51 #define VIATECH_VENDOR_ID 0x1106 /* Via Technologies */ 52 #define VIATECH_82C686_AC97_DEVICE_ID 0x3058 /* Via Technologies VT82C686 AC97 */ 53 #define VIATECH_8233_AC97_DEVICE_ID 0x3059 /* Via Technologies VT8233 AC97 */ 54 55 #define VIATECH_8233_AC97_REV_8233_10 0x10 /* rev 10 */ 56 #define VIATECH_8233_AC97_REV_8233C 0x20 57 #define VIATECH_8233_AC97_REV_8233 0x30 58 #define VIATECH_8233_AC97_REV_8233A 0x40 59 #define VIATECH_8233_AC97_REV_8235 0x50 60 #define VIATECH_8233_AC97_REV_8237 0x60 //this is the 5.1 Card in the new Athlon64 boards 61 62 #define VERSION "Version alpha 2, Copyright (c) 2003 Jérôme Duval, compiled on " __DATE__ " " __TIME__ 63 #define DRIVER_NAME "auvia" 64 #define FRIENDLY_NAME "Auvia" 65 #define FRIENDLY_NAME_686 FRIENDLY_NAME" 82C686" 66 #define FRIENDLY_NAME_8233C FRIENDLY_NAME" 8233C" 67 #define FRIENDLY_NAME_8233 FRIENDLY_NAME" 8233" 68 #define FRIENDLY_NAME_8233A FRIENDLY_NAME" 8233A" 69 #define FRIENDLY_NAME_8235 FRIENDLY_NAME" 8235" 70 #define FRIENDLY_NAME_8237 FRIENDLY_NAME" 8237" 71 #define AUTHOR "Jérôme Duval" 72 73 #define VIA_TABLE_SIZE 255 74 75 #define AUVIA_USE_PLAY (1 << 0) 76 #define AUVIA_USE_RECORD (1 << 1) 77 #define AUVIA_STATE_STARTED (1 << 0) 78 79 /* 80 * Auvia memory managment 81 */ 82 83 typedef struct _auvia_mem { 84 LIST_ENTRY(_auvia_mem) next; 85 void* log_base; 86 phys_addr_t phy_base; 87 area_id area; 88 size_t size; 89 } auvia_mem; 90 91 /* 92 * Streams 93 */ 94 95 typedef struct _auvia_stream { 96 struct _auvia_dev *card; 97 uint8 use; 98 uint8 state; 99 uint8 b16; 100 uint32 sample_rate; 101 uint8 channels; 102 uint32 bufframes; 103 uint8 bufcount; 104 105 uint32 base; 106 107 LIST_ENTRY(_auvia_stream) next; 108 109 void (*inth) (void *); 110 void *inthparam; 111 112 void* dmaops_log_base; 113 phys_addr_t dmaops_phy_base; 114 area_id dmaops_area; 115 116 auvia_mem* buffer; 117 uint16 blksize; /* in samples */ 118 uint16 trigblk; /* blk on which to trigger inth */ 119 uint16 blkmod; /* Modulo value to wrap trigblk */ 120 121 /* multi_audio */ 122 volatile int64 frames_count; // for play or record 123 volatile bigtime_t real_time; // for play or record 124 volatile int32 buffer_cycle; // for play or record 125 int32 first_channel; 126 bool update_needed; 127 } auvia_stream; 128 129 /* 130 * Devices 131 */ 132 133 typedef struct _auvia_dev { 134 char name[DEVNAME]; /* used for resources */ 135 pci_info info; 136 device_config config; 137 138 void *ptb_log_base; 139 void *ptb_phy_base; 140 area_id ptb_area; 141 142 sem_id buffer_ready_sem; 143 144 uint32 interrupt_mask; 145 146 LIST_HEAD(, _auvia_stream) streams; 147 148 LIST_HEAD(, _auvia_mem) mems; 149 150 auvia_stream *pstream; 151 auvia_stream *rstream; 152 153 /* multi_audio */ 154 multi_dev multi; 155 } auvia_dev; 156 157 extern int32 num_cards; 158 extern auvia_dev cards[NUM_CARDS]; 159 160 status_t auvia_stream_set_audioparms(auvia_stream *stream, uint8 channels, 161 uint8 b16, uint32 sample_rate); 162 status_t auvia_stream_commit_parms(auvia_stream *stream); 163 status_t auvia_stream_get_nth_buffer(auvia_stream *stream, uint8 chan, uint8 buf, 164 char** buffer, size_t *stride); 165 void auvia_stream_start(auvia_stream *stream, void (*inth) (void *), void *inthparam); 166 void auvia_stream_halt(auvia_stream *stream); 167 auvia_stream *auvia_stream_new(auvia_dev *card, uint8 use, uint32 bufframes, uint8 bufcount); 168 void auvia_stream_delete(auvia_stream *stream); 169 170 #endif /* _DEV_PCI_AUVIA_H_ */ 171