1 | /*␊ |
2 | *␉HDA injector / Audio Enabler␊ |
3 | *␊ |
4 | *␉Copyright (C) 2012␉Chameleon Team␊ |
5 | *␉Edit by Fabio (ErmaC)␊ |
6 | *␊ |
7 | *␉HDA injector is free software: you can redistribute it and/or modify␊ |
8 | *␉it under the terms of the GNU General Public License as published by␊ |
9 | *␉the Free Software Foundation, either version 3 of the License, or␊ |
10 | *␉(at your option) any later version.␊ |
11 | *␊ |
12 | *␉HDA injector is distributed in the hope that it will be useful,␊ |
13 | *␉but WITHOUT ANY WARRANTY; without even the implied warranty of␊ |
14 | *␉MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the␊ |
15 | *␉GNU General Public License for more details.␊ |
16 | *␊ |
17 | *␉Alternatively you can choose to comply with APSL␊ |
18 | *␊ |
19 | *␉Permission is hereby granted, free of charge, to any person obtaining a␊ |
20 | *␉copy of this software and associated documentation files (the "Software"),␊ |
21 | *␉to deal in the Software without restriction, including without limitation␊ |
22 | *␉the rights to use, copy, modify, merge, publish, distribute, sublicense,␊ |
23 | *␉and/or sell copies of the Software, and to permit persons to whom the␊ |
24 | *␉Software is furnished to do so, subject to the following conditions:␊ |
25 | *␊ |
26 | *␉The above copyright notice and this permission notice shall be included in␊ |
27 | *␉all copies or substantial portions of the Software.␊ |
28 | *␊ |
29 | ******************************************************************************␊ |
30 | * http://www.leidinger.net/FreeBSD/dox/dev_sound/html/df/d54/hdac_8c_source.html␊ |
31 | *␊ |
32 | * Copyright (c) 2006 Stephane E. Potvin <sepotvin@videotron.ca>␊ |
33 | * Copyright (c) 2006 Ariff Abdullah <ariff@FreeBSD.org>␊ |
34 | * Copyright (c) 2008-2012 Alexander Motin <mav@FreeBSD.org>␊ |
35 | * All rights reserved.␊ |
36 | *␊ |
37 | * Redistribution and use in source and binary forms, with or without␊ |
38 | * modification, are permitted provided that the following conditions␊ |
39 | * are met:␊ |
40 | * 1. Redistributions of source code must retain the above copyright␊ |
41 | * notice, this list of conditions and the following disclaimer.␊ |
42 | * 2. Redistributions in binary form must reproduce the above copyright␊ |
43 | * notice, this list of conditions and the following disclaimer in the␊ |
44 | * documentation and/or other materials provided with the distribution.␊ |
45 | *␊ |
46 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND␊ |
47 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE␊ |
48 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE␊ |
49 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE␊ |
50 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL␊ |
51 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS␊ |
52 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)␊ |
53 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT␊ |
54 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY␊ |
55 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF␊ |
56 | * SUCH DAMAGE.␊ |
57 | *␊ |
58 | * Intel High Definition Audio (Controller) driver for FreeBSD.␊ |
59 | *␊ |
60 | ******************************************************************************/␊ |
61 | ␊ |
62 | #include "boot.h"␊ |
63 | #include "bootstruct.h"␊ |
64 | #include "pci.h"␊ |
65 | #include "pci_root.h"␊ |
66 | #include "platform.h"␊ |
67 | #include "device_inject.h"␊ |
68 | #include "hda.h"␊ |
69 | #include "aml_generator.h"␊ |
70 | ␊ |
71 | #ifndef DEBUG_HDA␊ |
72 | #define DEBUG_HDA 0␊ |
73 | #endif␊ |
74 | ␊ |
75 | #if DEBUG_HDA␊ |
76 | #define DBG(x...) verbose(x)␊ |
77 | #else␊ |
78 | #define DBG(x...)␊ |
79 | #endif␊ |
80 | ␊ |
81 | extern uint32_t devices_number;␊ |
82 | ␊ |
83 | const char *hda_slot_name[]␉␉=␉{ "AAPL,slot-name", "Built In" };␊ |
84 | ␊ |
85 | uint8_t default_HDEF_layout_id[]␉␉=␉{0x0C, 0x00, 0x00, 0x00};␊ |
86 | #define HDEF_LEN ( sizeof(default_HDEF_layout_id) / sizeof(uint8_t) )␊ |
87 | uint8_t default_HDAU_layout_id[]␉␉=␉{0x01, 0x00, 0x00, 0x00};␊ |
88 | #define HDAU_LEN ( sizeof(default_HDAU_layout_id) / sizeof(uint8_t) )␊ |
89 | uint8_t connector_type_value[] =␉{0x00, 0x08, 0x00, 0x00};␊ |
90 | ␊ |
91 | /* Structures */␊ |
92 | ␊ |
93 | static hda_controller_devices know_hda_controller[] = {␊ |
94 | ␉//8086 Intel Corporation␊ |
95 | ␉{ HDA_INTEL_HASWELL, "Haswell" },␊ |
96 | ␉{ HDA_INTEL_CRYSTAL, "Crystal Well" },␊ |
97 | ␉{ HDA_INTEL_CPT, "6 Series/C200 Series Chipset Family" },␊ |
98 | ␉{ HDA_INTEL_PATSBURG,"C600/X79 series chipset" },␊ |
99 | ␉{ HDA_INTEL_PPT1, "7 Series/C210 Series Chipset Family" },␊ |
100 | ␉{ HDA_INTEL_82801F, "82801FB/FBM/FR/FW/FRW (ICH6 Family)" },␊ |
101 | ␉{ HDA_INTEL_63XXESB, "631x/631xESB/632xESB" },␊ |
102 | ␉{ HDA_INTEL_82801G, "NM10/ICH7 Family" },␊ |
103 | ␉{ HDA_INTEL_82801H, "82801H (ICH8 Family)" },␊ |
104 | ␉{ HDA_INTEL_82801I, "82801I (ICH9 Family)" },␊ |
105 | ␉{ HDA_INTEL_82801JI, "82801JI (ICH10 Family)" },␊ |
106 | ␉{ HDA_INTEL_82801JD, "82801JD/DO (ICH10 Family) " },␊ |
107 | ␉{ HDA_INTEL_PCH, "5 Series/3400 Series" },␊ |
108 | ␉{ HDA_INTEL_PCH2, "5 Series/3400 Series" },␊ |
109 | ␉{ HDA_INTEL_SCH, "System Controller Hub (SCH Poulsbo)" },␊ |
110 | ␉{ HDA_INTEL_LPT1, "Lynx Point" },␊ |
111 | ␉{ HDA_INTEL_LPT2, "Lynx Point" },␊ |
112 | ␉{ HDA_INTEL_LYNX, "Lynx Point-LP" },␊ |
113 | ␉{ HDA_INTEL_LYNX2, "Lynx Point-LP" },␊ |
114 | ␉//10de NVIDIA Corporation␊ |
115 | ␉{ HDA_NVIDIA_MCP51, "MCP51" },␊ |
116 | ␉{ HDA_NVIDIA_MCP55, "MCP55" },␊ |
117 | ␉{ HDA_NVIDIA_MCP61_1, "MCP61" },␊ |
118 | ␉{ HDA_NVIDIA_MCP61_2, "MCP61" },␊ |
119 | ␉{ HDA_NVIDIA_MCP65_1, "MCP65" },␊ |
120 | ␉{ HDA_NVIDIA_MCP65_2, "MCP65" },␊ |
121 | ␉{ HDA_NVIDIA_MCP67_1, "MCP67" },␊ |
122 | ␉{ HDA_NVIDIA_MCP67_2, "MCP67" },␊ |
123 | ␉{ HDA_NVIDIA_MCP73_1, "MCP73" },␊ |
124 | ␉{ HDA_NVIDIA_MCP73_2, "MCP73" },␊ |
125 | ␉{ HDA_NVIDIA_MCP78_1, "MCP78" },␊ |
126 | ␉{ HDA_NVIDIA_MCP78_2, "MCP78" },␊ |
127 | ␉{ HDA_NVIDIA_MCP78_3, "MCP78" },␊ |
128 | ␉{ HDA_NVIDIA_MCP78_4, "MCP78" },␊ |
129 | ␉{ HDA_NVIDIA_MCP79_1, "MCP79" },␊ |
130 | ␉{ HDA_NVIDIA_MCP79_2, "MCP79" },␊ |
131 | ␉{ HDA_NVIDIA_MCP79_3, "MCP79" },␊ |
132 | ␉{ HDA_NVIDIA_MCP79_4, "MCP79" },␊ |
133 | ␉{ HDA_NVIDIA_MCP89_1, "MCP89" },␊ |
134 | ␉{ HDA_NVIDIA_MCP89_2, "MCP89" },␊ |
135 | ␉{ HDA_NVIDIA_MCP89_3, "MCP89" },␊ |
136 | ␉{ HDA_NVIDIA_MCP89_4, "MCP89" },␊ |
137 | ␉{ HDA_NVIDIA_0BE2, "(0x0be2)" },␊ |
138 | ␉{ HDA_NVIDIA_0BE3, "(0x0be3)" },␊ |
139 | ␉{ HDA_NVIDIA_0BE4, "(0x0be4)" },␊ |
140 | ␉{ HDA_NVIDIA_GT100, "GT100" },␊ |
141 | ␉{ HDA_NVIDIA_GT104, "GT104" },␊ |
142 | ␉{ HDA_NVIDIA_GT106, "GT106" },␊ |
143 | ␉{ HDA_NVIDIA_GT108, "GT108" },␊ |
144 | ␉{ HDA_NVIDIA_GT116, "GT116" },␊ |
145 | ␉{ HDA_NVIDIA_GF119, "GF119" },␊ |
146 | ␉{ HDA_NVIDIA_GF110, "GF110" },␊ |
147 | ␉{ HDA_NVIDIA_GF114, "GF114" }, // HDMi␊ |
148 | ␉{ HDA_NVIDIA_GK110, "GK110" },␊ |
149 | ␉{ HDA_NVIDIA_GK106, "GK106" },␊ |
150 | ␉{ HDA_NVIDIA_GK107, "GK107" },␊ |
151 | ␉{ HDA_NVIDIA_GK104, "GK104" },␊ |
152 | ␉//1002 Advanced Micro Devices [AMD] nee ATI Technologies Inc␊ |
153 | ␉{ HDA_ATI_SB450, "IXP SB4x0" },␊ |
154 | ␉{ HDA_ATI_SB600, "SB600" },␊ |
155 | ␉{ HDA_ATI_RS600, "RS600" },␊ |
156 | ␉{ HDA_ATI_RS690, "RS690" },␊ |
157 | ␉{ HDA_ATI_RS780, "RS780" },␊ |
158 | ␉{ HDA_ATI_RS880, "RS880" },␊ |
159 | ␉{ HDA_ATI_TRINITY, "Trinity" },␊ |
160 | ␉{ HDA_ATI_R600, "R600" },␊ |
161 | ␉{ HDA_ATI_RV610, "RV610" },␊ |
162 | ␉{ HDA_ATI_RV620, "RV620" },␊ |
163 | ␉{ HDA_ATI_RV630, "RV630" },␊ |
164 | ␉{ HDA_ATI_RV635, "RV635" },␊ |
165 | ␉{ HDA_ATI_RV710, "RV710" },␊ |
166 | ␉{ HDA_ATI_RV730, "RV730" },␊ |
167 | ␉{ HDA_ATI_RV740, "RV740" },␊ |
168 | ␉{ HDA_ATI_RV770, "RV770" },␊ |
169 | ␉{ HDA_ATI_RV810, "RV810" },␊ |
170 | ␉{ HDA_ATI_RV830, "RV830" },␊ |
171 | ␉{ HDA_ATI_RV840, "RV840" },␊ |
172 | ␉{ HDA_ATI_RV870, "RV870" },␊ |
173 | ␉{ HDA_ATI_RV910, "Caicos" },␊ |
174 | ␉{ HDA_ATI_RV930, "RV930" },␊ |
175 | ␉{ HDA_ATI_RV940, "RV940" },␊ |
176 | ␉{ HDA_ATI_RV970, "RV970" },␊ |
177 | ␉{ HDA_ATI_R1000, "Tahiti XT" }, // HDMi␊ |
178 | ␉{ HDA_ATI_VERDE, "Cape Verde" }, // HDMi␊ |
179 | ␉//17f3 RDC Semiconductor, Inc.␊ |
180 | ␉{ HDA_RDC_M3010, "M3010" },␊ |
181 | ␉//1106 VIA Technologies, Inc.␊ |
182 | ␉{ HDA_VIA_VT82XX, "VT8251/8237A" },␊ |
183 | ␉//1039 Silicon Integrated Systems [SiS]␊ |
184 | ␉{ HDA_SIS_966, "966" },␊ |
185 | ␉//10b9 ULi Electronics Inc.(Split off ALi Corporation in 2003)␊ |
186 | ␉{ HDA_ULI_M5461, "M5461" },␊ |
187 | ␉/* Unknown */␊ |
188 | ␉{ HDA_INTEL_ALL, "Unknown Intel device" },␊ |
189 | ␉{ HDA_NVIDIA_ALL, "Unknown NVIDIA device" },␊ |
190 | ␉{ HDA_ATI_ALL, "Unknown ATI device" },␊ |
191 | ␉{ HDA_VIA_ALL, "Unknown VIA device" },␊ |
192 | ␉{ HDA_SIS_ALL, "Unknown SiS device" },␊ |
193 | ␉{ HDA_ULI_ALL, "Unknown ULI device" },␊ |
194 | };␊ |
195 | #define HDAC_DEVICES_LEN (sizeof(know_hda_controller) / sizeof(know_hda_controller[0]))␊ |
196 | ␊ |
197 | /* CODECs */␊ |
198 | ␊ |
199 | // ErmaC: TODO build function to probe the codecID␊ |
200 | /*␊ |
201 | static hdacc_codecs know_codecs[] = {␊ |
202 | { HDA_CODEC_CS4206, 0, "Cirrus Logic CS4206" },␊ |
203 | { HDA_CODEC_CS4207, 0, "Cirrus Logic CS4207" },␊ |
204 | { HDA_CODEC_CS4210, 0, "Cirrus Logic CS4210" },␊ |
205 | { HDA_CODEC_ALC221, 0, "Realtek ALC221" },␊ |
206 | { HDA_CODEC_ALC260, 0, "Realtek ALC260" },␊ |
207 | { HDA_CODEC_ALC262, 0, "Realtek ALC262" },␊ |
208 | { HDA_CODEC_ALC267, 0, "Realtek ALC267" },␊ |
209 | { HDA_CODEC_ALC268, 0, "Realtek ALC268" },␊ |
210 | { HDA_CODEC_ALC269, 0, "Realtek ALC269" },␊ |
211 | { HDA_CODEC_ALC270, 0, "Realtek ALC270" },␊ |
212 | { HDA_CODEC_ALC272, 0, "Realtek ALC272" },␊ |
213 | { HDA_CODEC_ALC273, 0, "Realtek ALC273" },␊ |
214 | { HDA_CODEC_ALC275, 0, "Realtek ALC275" },␊ |
215 | { HDA_CODEC_ALC276, 0, "Realtek ALC276" },␊ |
216 | { HDA_CODEC_ALC660, 0, "Realtek ALC660-VD" },␊ |
217 | { HDA_CODEC_ALC662, 0x0002, "Realtek ALC662 rev2" },␊ |
218 | { HDA_CODEC_ALC662, 0, "Realtek ALC662" },␊ |
219 | { HDA_CODEC_ALC663, 0, "Realtek ALC663" },␊ |
220 | { HDA_CODEC_ALC665, 0, "Realtek ALC665" },␊ |
221 | { HDA_CODEC_ALC670, 0, "Realtek ALC670" },␊ |
222 | { HDA_CODEC_ALC680, 0, "Realtek ALC680" },␊ |
223 | { HDA_CODEC_ALC861, 0x0340, "Realtek ALC660" },␊ |
224 | { HDA_CODEC_ALC861, 0, "Realtek ALC861" },␊ |
225 | { HDA_CODEC_ALC861VD, 0, "Realtek ALC861-VD" },␊ |
226 | { HDA_CODEC_ALC880, 0, "Realtek ALC880" },␊ |
227 | { HDA_CODEC_ALC882, 0, "Realtek ALC882" },␊ |
228 | { HDA_CODEC_ALC883, 0, "Realtek ALC883" },␊ |
229 | { HDA_CODEC_ALC885, 0x0101, "Realtek ALC889A" },␊ |
230 | { HDA_CODEC_ALC885, 0x0103, "Realtek ALC889A" },␊ |
231 | { HDA_CODEC_ALC885, 0, "Realtek ALC885" },␊ |
232 | { HDA_CODEC_ALC887, 0, "Realtek ALC887" },␊ |
233 | { HDA_CODEC_ALC888, 0x0101, "Realtek ALC1200" },␊ |
234 | { HDA_CODEC_ALC888, 0, "Realtek ALC888" },␊ |
235 | { HDA_CODEC_ALC889, 0, "Realtek ALC889" },␊ |
236 | { HDA_CODEC_ALC892, 0, "Realtek ALC892" },␊ |
237 | { HDA_CODEC_ALC898, 0, "Realtek ALC898" },␊ |
238 | { HDA_CODEC_ALC899, 0, "Realtek ALC899" },␊ |
239 | { HDA_CODEC_AD1882, 0, "Analog Devices AD1882" },␊ |
240 | { HDA_CODEC_AD1882A, 0, "Analog Devices AD1882A" },␊ |
241 | { HDA_CODEC_AD1883, 0, "Analog Devices AD1883" },␊ |
242 | { HDA_CODEC_AD1884, 0, "Analog Devices AD1884" },␊ |
243 | { HDA_CODEC_AD1884A, 0, "Analog Devices AD1884A" },␊ |
244 | { HDA_CODEC_AD1981HD, 0, "Analog Devices AD1981HD" },␊ |
245 | { HDA_CODEC_AD1983, 0, "Analog Devices AD1983" },␊ |
246 | { HDA_CODEC_AD1984, 0, "Analog Devices AD1984" },␊ |
247 | { HDA_CODEC_AD1984A, 0, "Analog Devices AD1984A" },␊ |
248 | { HDA_CODEC_AD1984B, 0, "Analog Devices AD1984B" },␊ |
249 | { HDA_CODEC_AD1986A, 0, "Analog Devices AD1986A" },␊ |
250 | { HDA_CODEC_AD1987, 0, "Analog Devices AD1987" },␊ |
251 | { HDA_CODEC_AD1988, 0, "Analog Devices AD1988A" },␊ |
252 | { HDA_CODEC_AD1988B, 0, "Analog Devices AD1988B" },␊ |
253 | { HDA_CODEC_AD1989A, 0, "Analog Devices AD1989A" },␊ |
254 | { HDA_CODEC_AD1989B, 0, "Analog Devices AD1989B" },␊ |
255 | { HDA_CODEC_CA0110, 0, "Creative CA0110-IBG" },␊ |
256 | { HDA_CODEC_CA0110_2, 0, "Creative CA0110-IBG" },␊ |
257 | { HDA_CODEC_CA0132, 0, "Creative CA0132" },␊ |
258 | { HDA_CODEC_SB0880, 0, "Creative SB0880 X-Fi" },␊ |
259 | { HDA_CODEC_CMI9880, 0, "CMedia CMI9880" },␊ |
260 | { HDA_CODEC_CMI98802, 0, "CMedia CMI9880" },␊ |
261 | { HDA_CODEC_CXD9872RDK, 0, "Sigmatel CXD9872RD/K" },␊ |
262 | { HDA_CODEC_CXD9872AKD, 0, "Sigmatel CXD9872AKD" },␊ |
263 | { HDA_CODEC_STAC9200D, 0, "Sigmatel STAC9200D" },␊ |
264 | { HDA_CODEC_STAC9204X, 0, "Sigmatel STAC9204X" },␊ |
265 | { HDA_CODEC_STAC9204D, 0, "Sigmatel STAC9204D" },␊ |
266 | { HDA_CODEC_STAC9205X, 0, "Sigmatel STAC9205X" },␊ |
267 | { HDA_CODEC_STAC9205D, 0, "Sigmatel STAC9205D" },␊ |
268 | { HDA_CODEC_STAC9220, 0, "Sigmatel STAC9220" },␊ |
269 | { HDA_CODEC_STAC9220_A1, 0, "Sigmatel STAC9220_A1" },␊ |
270 | { HDA_CODEC_STAC9220_A2, 0, "Sigmatel STAC9220_A2" },␊ |
271 | { HDA_CODEC_STAC9221, 0, "Sigmatel STAC9221" },␊ |
272 | { HDA_CODEC_STAC9221_A2, 0, "Sigmatel STAC9221_A2" },␊ |
273 | { HDA_CODEC_STAC9221D, 0, "Sigmatel STAC9221D" },␊ |
274 | { HDA_CODEC_STAC922XD, 0, "Sigmatel STAC9220D/9223D" },␊ |
275 | { HDA_CODEC_STAC9227X, 0, "Sigmatel STAC9227X" },␊ |
276 | { HDA_CODEC_STAC9227D, 0, "Sigmatel STAC9227D" },␊ |
277 | { HDA_CODEC_STAC9228X, 0, "Sigmatel STAC9228X" },␊ |
278 | { HDA_CODEC_STAC9228D, 0, "Sigmatel STAC9228D" },␊ |
279 | { HDA_CODEC_STAC9229X, 0, "Sigmatel STAC9229X" },␊ |
280 | { HDA_CODEC_STAC9229D, 0, "Sigmatel STAC9229D" },␊ |
281 | { HDA_CODEC_STAC9230X, 0, "Sigmatel STAC9230X" },␊ |
282 | { HDA_CODEC_STAC9230D, 0, "Sigmatel STAC9230D" },␊ |
283 | { HDA_CODEC_STAC9250, 0, "Sigmatel STAC9250" },␊ |
284 | { HDA_CODEC_STAC9251, 0, "Sigmatel STAC9251" },␊ |
285 | { HDA_CODEC_STAC9255, 0, "Sigmatel STAC9255" },␊ |
286 | { HDA_CODEC_STAC9255D, 0, "Sigmatel STAC9255D" },␊ |
287 | { HDA_CODEC_STAC9254, 0, "Sigmatel STAC9254" },␊ |
288 | { HDA_CODEC_STAC9254D, 0, "Sigmatel STAC9254D" },␊ |
289 | { HDA_CODEC_STAC9271X, 0, "Sigmatel STAC9271X" },␊ |
290 | { HDA_CODEC_STAC9271D, 0, "Sigmatel STAC9271D" },␊ |
291 | { HDA_CODEC_STAC9272X, 0, "Sigmatel STAC9272X" },␊ |
292 | { HDA_CODEC_STAC9272D, 0, "Sigmatel STAC9272D" },␊ |
293 | { HDA_CODEC_STAC9273X, 0, "Sigmatel STAC9273X" },␊ |
294 | { HDA_CODEC_STAC9273D, 0, "Sigmatel STAC9273D" },␊ |
295 | { HDA_CODEC_STAC9274, 0, "Sigmatel STAC9274" },␊ |
296 | { HDA_CODEC_STAC9274D, 0, "Sigmatel STAC9274D" },␊ |
297 | { HDA_CODEC_STAC9274X5NH, 0, "Sigmatel STAC9274X5NH" },␊ |
298 | { HDA_CODEC_STAC9274D5NH, 0, "Sigmatel STAC9274D5NH" },␊ |
299 | { HDA_CODEC_STAC9872AK, 0, "Sigmatel STAC9872AK" },␊ |
300 | { HDA_CODEC_IDT92HD005, 0, "IDT 92HD005" },␊ |
301 | { HDA_CODEC_IDT92HD005D, 0, "IDT 92HD005D" },␊ |
302 | { HDA_CODEC_IDT92HD206X, 0, "IDT 92HD206X" },␊ |
303 | { HDA_CODEC_IDT92HD206D, 0, "IDT 92HD206D" },␊ |
304 | { HDA_CODEC_IDT92HD66B1X5, 0, "IDT 92HD66B1X5" },␊ |
305 | { HDA_CODEC_IDT92HD66B2X5, 0, "IDT 92HD66B2X5" },␊ |
306 | { HDA_CODEC_IDT92HD66B3X5, 0, "IDT 92HD66B3X5" },␊ |
307 | { HDA_CODEC_IDT92HD66C1X5, 0, "IDT 92HD66C1X5" },␊ |
308 | { HDA_CODEC_IDT92HD66C2X5, 0, "IDT 92HD66C2X5" },␊ |
309 | { HDA_CODEC_IDT92HD66C3X5, 0, "IDT 92HD66C3X5" },␊ |
310 | { HDA_CODEC_IDT92HD66B1X3, 0, "IDT 92HD66B1X3" },␊ |
311 | { HDA_CODEC_IDT92HD66B2X3, 0, "IDT 92HD66B2X3" },␊ |
312 | { HDA_CODEC_IDT92HD66B3X3, 0, "IDT 92HD66B3X3" },␊ |
313 | { HDA_CODEC_IDT92HD66C1X3, 0, "IDT 92HD66C1X3" },␊ |
314 | { HDA_CODEC_IDT92HD66C2X3, 0, "IDT 92HD66C2X3" },␊ |
315 | { HDA_CODEC_IDT92HD66C3_65, 0, "IDT 92HD66C3_65" },␊ |
316 | { HDA_CODEC_IDT92HD700X, 0, "IDT 92HD700X" },␊ |
317 | { HDA_CODEC_IDT92HD700D, 0, "IDT 92HD700D" },␊ |
318 | { HDA_CODEC_IDT92HD71B5, 0, "IDT 92HD71B5" },␊ |
319 | { HDA_CODEC_IDT92HD71B5_2, 0, "IDT 92HD71B5" },␊ |
320 | { HDA_CODEC_IDT92HD71B6, 0, "IDT 92HD71B6" },␊ |
321 | { HDA_CODEC_IDT92HD71B6_2, 0, "IDT 92HD71B6" },␊ |
322 | { HDA_CODEC_IDT92HD71B7, 0, "IDT 92HD71B7" },␊ |
323 | { HDA_CODEC_IDT92HD71B7_2, 0, "IDT 92HD71B7" },␊ |
324 | { HDA_CODEC_IDT92HD71B8, 0, "IDT 92HD71B8" },␊ |
325 | { HDA_CODEC_IDT92HD71B8_2, 0, "IDT 92HD71B8" },␊ |
326 | { HDA_CODEC_IDT92HD73C1, 0, "IDT 92HD73C1" },␊ |
327 | { HDA_CODEC_IDT92HD73D1, 0, "IDT 92HD73D1" },␊ |
328 | { HDA_CODEC_IDT92HD73E1, 0, "IDT 92HD73E1" },␊ |
329 | { HDA_CODEC_IDT92HD75B3, 0, "IDT 92HD75B3" },␊ |
330 | { HDA_CODEC_IDT92HD75BX, 0, "IDT 92HD75BX" },␊ |
331 | { HDA_CODEC_IDT92HD81B1C, 0, "IDT 92HD81B1C" },␊ |
332 | { HDA_CODEC_IDT92HD81B1X, 0, "IDT 92HD81B1X" },␊ |
333 | { HDA_CODEC_IDT92HD83C1C, 0, "IDT 92HD83C1C" },␊ |
334 | { HDA_CODEC_IDT92HD83C1X, 0, "IDT 92HD83C1X" },␊ |
335 | { HDA_CODEC_IDT92HD87B1_3, 0, "IDT 92HD87B1/3" },␊ |
336 | { HDA_CODEC_IDT92HD87B2_4, 0, "IDT 92HD87B2/4" },␊ |
337 | { HDA_CODEC_IDT92HD89C3, 0, "IDT 92HD89C3" },␊ |
338 | { HDA_CODEC_IDT92HD89C2, 0, "IDT 92HD89C2" },␊ |
339 | { HDA_CODEC_IDT92HD89C1, 0, "IDT 92HD89C1" },␊ |
340 | { HDA_CODEC_IDT92HD89B3, 0, "IDT 92HD89B3" },␊ |
341 | { HDA_CODEC_IDT92HD89B2, 0, "IDT 92HD89B2" },␊ |
342 | { HDA_CODEC_IDT92HD89B1, 0, "IDT 92HD89B1" },␊ |
343 | { HDA_CODEC_IDT92HD89E3, 0, "IDT 92HD89E3" },␊ |
344 | { HDA_CODEC_IDT92HD89E2, 0, "IDT 92HD89E2" },␊ |
345 | { HDA_CODEC_IDT92HD89E1, 0, "IDT 92HD89E1" },␊ |
346 | { HDA_CODEC_IDT92HD89D3, 0, "IDT 92HD89D3" },␊ |
347 | { HDA_CODEC_IDT92HD89D2, 0, "IDT 92HD89D2" },␊ |
348 | { HDA_CODEC_IDT92HD89D1, 0, "IDT 92HD89D1" },␊ |
349 | { HDA_CODEC_IDT92HD89F3, 0, "IDT 92HD89F3" },␊ |
350 | { HDA_CODEC_IDT92HD89F2, 0, "IDT 92HD89F2" },␊ |
351 | { HDA_CODEC_IDT92HD89F1, 0, "IDT 92HD89F1" },␊ |
352 | { HDA_CODEC_IDT92HD90BXX, 0, "IDT 92HD90BXX" },␊ |
353 | { HDA_CODEC_IDT92HD91BXX, 0, "IDT 92HD91BXX" },␊ |
354 | { HDA_CODEC_IDT92HD93BXX, 0, "IDT 92HD93BXX" },␊ |
355 | { HDA_CODEC_IDT92HD98BXX, 0, "IDT 92HD98BXX" },␊ |
356 | { HDA_CODEC_IDT92HD99BXX, 0, "IDT 92HD99BXX" },␊ |
357 | { HDA_CODEC_CX20549, 0, "Conexant CX20549 (Venice)" },␊ |
358 | { HDA_CODEC_CX20551, 0, "Conexant CX20551 (Waikiki)" },␊ |
359 | { HDA_CODEC_CX20561, 0, "Conexant CX20561 (Hermosa)" },␊ |
360 | { HDA_CODEC_CX20582, 0, "Conexant CX20582 (Pebble)" },␊ |
361 | { HDA_CODEC_CX20583, 0, "Conexant CX20583 (Pebble HSF)" },␊ |
362 | { HDA_CODEC_CX20584, 0, "Conexant CX20584" },␊ |
363 | { HDA_CODEC_CX20585, 0, "Conexant CX20585" },␊ |
364 | { HDA_CODEC_CX20588, 0, "Conexant CX20588" },␊ |
365 | { HDA_CODEC_CX20590, 0, "Conexant CX20590" },␊ |
366 | { HDA_CODEC_CX20631, 0, "Conexant CX20631" },␊ |
367 | { HDA_CODEC_CX20632, 0, "Conexant CX20632" },␊ |
368 | { HDA_CODEC_CX20641, 0, "Conexant CX20641" },␊ |
369 | { HDA_CODEC_CX20642, 0, "Conexant CX20642" },␊ |
370 | { HDA_CODEC_CX20651, 0, "Conexant CX20651" },␊ |
371 | { HDA_CODEC_CX20652, 0, "Conexant CX20652" },␊ |
372 | { HDA_CODEC_CX20664, 0, "Conexant CX20664" },␊ |
373 | { HDA_CODEC_CX20665, 0, "Conexant CX20665" },␊ |
374 | { HDA_CODEC_VT1708_8, 0, "VIA VT1708_8" },␊ |
375 | { HDA_CODEC_VT1708_9, 0, "VIA VT1708_9" },␊ |
376 | { HDA_CODEC_VT1708_A, 0, "VIA VT1708_A" },␊ |
377 | { HDA_CODEC_VT1708_B, 0, "VIA VT1708_B" },␊ |
378 | { HDA_CODEC_VT1709_0, 0, "VIA VT1709_0" },␊ |
379 | { HDA_CODEC_VT1709_1, 0, "VIA VT1709_1" },␊ |
380 | { HDA_CODEC_VT1709_2, 0, "VIA VT1709_2" },␊ |
381 | { HDA_CODEC_VT1709_3, 0, "VIA VT1709_3" },␊ |
382 | { HDA_CODEC_VT1709_4, 0, "VIA VT1709_4" },␊ |
383 | { HDA_CODEC_VT1709_5, 0, "VIA VT1709_5" },␊ |
384 | { HDA_CODEC_VT1709_6, 0, "VIA VT1709_6" },␊ |
385 | { HDA_CODEC_VT1709_7, 0, "VIA VT1709_7" },␊ |
386 | { HDA_CODEC_VT1708B_0, 0, "VIA VT1708B_0" },␊ |
387 | { HDA_CODEC_VT1708B_1, 0, "VIA VT1708B_1" },␊ |
388 | { HDA_CODEC_VT1708B_2, 0, "VIA VT1708B_2" },␊ |
389 | { HDA_CODEC_VT1708B_3, 0, "VIA VT1708B_3" },␊ |
390 | { HDA_CODEC_VT1708B_4, 0, "VIA VT1708B_4" },␊ |
391 | { HDA_CODEC_VT1708B_5, 0, "VIA VT1708B_5" },␊ |
392 | { HDA_CODEC_VT1708B_6, 0, "VIA VT1708B_6" },␊ |
393 | { HDA_CODEC_VT1708B_7, 0, "VIA VT1708B_7" },␊ |
394 | { HDA_CODEC_VT1708S_0, 0, "VIA VT1708S_0" },␊ |
395 | { HDA_CODEC_VT1708S_1, 0, "VIA VT1708S_1" },␊ |
396 | { HDA_CODEC_VT1708S_2, 0, "VIA VT1708S_2" },␊ |
397 | { HDA_CODEC_VT1708S_3, 0, "VIA VT1708S_3" },␊ |
398 | { HDA_CODEC_VT1708S_4, 0, "VIA VT1708S_4" },␊ |
399 | { HDA_CODEC_VT1708S_5, 0, "VIA VT1708S_5" },␊ |
400 | { HDA_CODEC_VT1708S_6, 0, "VIA VT1708S_6" },␊ |
401 | { HDA_CODEC_VT1708S_7, 0, "VIA VT1708S_7" },␊ |
402 | { HDA_CODEC_VT1702_0, 0, "VIA VT1702_0" },␊ |
403 | { HDA_CODEC_VT1702_1, 0, "VIA VT1702_1" },␊ |
404 | { HDA_CODEC_VT1702_2, 0, "VIA VT1702_2" },␊ |
405 | { HDA_CODEC_VT1702_3, 0, "VIA VT1702_3" },␊ |
406 | { HDA_CODEC_VT1702_4, 0, "VIA VT1702_4" },␊ |
407 | { HDA_CODEC_VT1702_5, 0, "VIA VT1702_5" },␊ |
408 | { HDA_CODEC_VT1702_6, 0, "VIA VT1702_6" },␊ |
409 | { HDA_CODEC_VT1702_7, 0, "VIA VT1702_7" },␊ |
410 | { HDA_CODEC_VT1716S_0, 0, "VIA VT1716S_0" },␊ |
411 | { HDA_CODEC_VT1716S_1, 0, "VIA VT1716S_1" },␊ |
412 | { HDA_CODEC_VT1718S_0, 0, "VIA VT1718S_0" },␊ |
413 | { HDA_CODEC_VT1718S_1, 0, "VIA VT1718S_1" },␊ |
414 | { HDA_CODEC_VT1802_0, 0, "VIA VT1802_0" },␊ |
415 | { HDA_CODEC_VT1802_1, 0, "VIA VT1802_1" },␊ |
416 | { HDA_CODEC_VT1812, 0, "VIA VT1812" },␊ |
417 | { HDA_CODEC_VT1818S, 0, "VIA VT1818S" },␊ |
418 | { HDA_CODEC_VT1828S, 0, "VIA VT1828S" },␊ |
419 | { HDA_CODEC_VT2002P_0, 0, "VIA VT2002P_0" },␊ |
420 | { HDA_CODEC_VT2002P_1, 0, "VIA VT2002P_1" },␊ |
421 | { HDA_CODEC_VT2020, 0, "VIA VT2020" },␊ |
422 | { HDA_CODEC_ATIRS600_1, 0, "ATI RS600" },␊ |
423 | { HDA_CODEC_ATIRS600_2, 0, "ATI RS600" },␊ |
424 | { HDA_CODEC_ATIRS690, 0, "ATI RS690/780" },␊ |
425 | { HDA_CODEC_ATIR6XX, 0, "ATI R6xx" },␊ |
426 | { HDA_CODEC_NVIDIAMCP67, 0, "NVIDIA MCP67" },␊ |
427 | { HDA_CODEC_NVIDIAMCP73, 0, "NVIDIA MCP73" },␊ |
428 | { HDA_CODEC_NVIDIAMCP78, 0, "NVIDIA MCP78" },␊ |
429 | { HDA_CODEC_NVIDIAMCP78_2, 0, "NVIDIA MCP78" },␊ |
430 | { HDA_CODEC_NVIDIAMCP78_3, 0, "NVIDIA MCP78" },␊ |
431 | { HDA_CODEC_NVIDIAMCP78_4, 0, "NVIDIA MCP78" },␊ |
432 | { HDA_CODEC_NVIDIAMCP7A, 0, "NVIDIA MCP7A" },␊ |
433 | { HDA_CODEC_NVIDIAGT220, 0, "NVIDIA GT220" },␊ |
434 | { HDA_CODEC_NVIDIAGT21X, 0, "NVIDIA GT21x" },␊ |
435 | { HDA_CODEC_NVIDIAMCP89, 0, "NVIDIA MCP89" },␊ |
436 | { HDA_CODEC_NVIDIAGT240, 0, "NVIDIA GT240" },␊ |
437 | { HDA_CODEC_NVIDIAGTS450, 0, "NVIDIA GTS450" },␊ |
438 | { HDA_CODEC_NVIDIAGT440, 0, "NVIDIA GT440" },␊ |
439 | { HDA_CODEC_NVIDIAGTX550, 0, "NVIDIA GTX550" },␊ |
440 | { HDA_CODEC_NVIDIAGTX570, 0, "NVIDIA GTX570" },␊ |
441 | { HDA_CODEC_INTELIP, 0, "Intel Ibex Peak" },␊ |
442 | { HDA_CODEC_INTELBL, 0, "Intel Bearlake" },␊ |
443 | { HDA_CODEC_INTELCA, 0, "Intel Cantiga" },␊ |
444 | { HDA_CODEC_INTELEL, 0, "Intel Eaglelake" },␊ |
445 | { HDA_CODEC_INTELIP2, 0, "Intel Ibex Peak" },␊ |
446 | { HDA_CODEC_INTELCPT, 0, "Intel Cougar Point" },␊ |
447 | { HDA_CODEC_INTELPPT, 0, "Intel Panther Point" },␊ |
448 | { HDA_CODEC_INTELCL, 0, "Intel Crestline" },␊ |
449 | { HDA_CODEC_SII1390, 0, "Silicon Image SiI1390" },␊ |
450 | { HDA_CODEC_SII1392, 0, "Silicon Image SiI1392" },␊ |
451 | // Unknown CODECs␊ |
452 | { HDA_CODEC_ADXXXX, 0, "Analog Devices" },␊ |
453 | { HDA_CODEC_AGEREXXXX, 0, "Lucent/Agere Systems" },␊ |
454 | { HDA_CODEC_ALCXXXX, 0, "Realtek" },␊ |
455 | { HDA_CODEC_ATIXXXX, 0, "ATI" },␊ |
456 | { HDA_CODEC_CAXXXX, 0, "Creative" },␊ |
457 | { HDA_CODEC_CMIXXXX, 0, "CMedia" },␊ |
458 | { HDA_CODEC_CMIXXXX2, 0, "CMedia" },␊ |
459 | { HDA_CODEC_CSXXXX, 0, "Cirrus Logic" },␊ |
460 | { HDA_CODEC_CXXXXX, 0, "Conexant" },␊ |
461 | { HDA_CODEC_CHXXXX, 0, "Chrontel" },␊ |
462 | { HDA_CODEC_IDTXXXX, 0, "IDT" },␊ |
463 | { HDA_CODEC_INTELXXXX, 0, "Intel" },␊ |
464 | { HDA_CODEC_MOTOXXXX, 0, "Motorola" },␊ |
465 | { HDA_CODEC_NVIDIAXXXX, 0, "NVIDIA" },␊ |
466 | { HDA_CODEC_SIIXXXX, 0, "Silicon Image" },␊ |
467 | { HDA_CODEC_STACXXXX, 0, "Sigmatel" },␊ |
468 | { HDA_CODEC_VTXXXX, 0, "VIA" },␊ |
469 | };␊ |
470 | #define HDACC_CODECS_LEN (sizeof(know_codecs) / sizeof(know_codecs[0]))␊ |
471 | */␊ |
472 | ␊ |
473 | /*****************␊ |
474 | * Device Methods␊ |
475 | *****************/␊ |
476 | ␊ |
477 | /* get HDA device name */␊ |
478 | static char *get_hda_controller_name(uint16_t controller_device_id, uint16_t controller_vendor_id)␊ |
479 | {␊ |
480 | ␉int i;␊ |
481 | ␉static char desc[128];␊ |
482 | ␊ |
483 | ␉for (i = 0; i < HDAC_DEVICES_LEN; i++)␊ |
484 | ␉{␊ |
485 | ␉␉if (know_hda_controller[i].model == ((controller_device_id << 16) | controller_vendor_id))␊ |
486 | ␉␉{␊ |
487 | ␉␉␉if(controller_vendor_id == INTEL_VENDORID){␊ |
488 | ␉␉␉␉sprintf(desc, "Intel %s Hight Definition Audio Controller", know_hda_controller[i].desc);␊ |
489 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
490 | ␉␉␉} else if (controller_vendor_id == NVIDIA_VENDORID) {␊ |
491 | ␉␉␉␉sprintf(desc, "nVidia %s HDA Controller (HDMi)", know_hda_controller[i].desc);␊ |
492 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
493 | ␉␉␉} else if (controller_vendor_id == ATI_VENDORID) {␊ |
494 | ␉␉␉␉sprintf(desc, "ATI %s HDA Controller (HDMi)", know_hda_controller[i].desc);␊ |
495 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
496 | ␉␉␉} else if (controller_vendor_id == RDC_VENDORID) {␊ |
497 | ␉␉␉␉sprintf(desc, "RDC %s Hight Definition Audio Controller", know_hda_controller[i].desc);␊ |
498 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
499 | ␉␉␉} else if (controller_vendor_id == VIA_VENDORID) {␊ |
500 | ␉␉␉␉sprintf(desc, "VIA %s HDA Controller", know_hda_controller[i].desc);␊ |
501 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
502 | ␉␉␉} else if (controller_vendor_id == SIS_VENDORID) {␊ |
503 | ␉␉␉␉sprintf(desc, "SiS %s HDA Controller", know_hda_controller[i].desc);␊ |
504 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
505 | ␉␉␉} else if (controller_vendor_id == ULI_VENDORID) {␊ |
506 | ␉␉␉␉sprintf(desc, "ULI %s HDA Controller", know_hda_controller[i].desc);␊ |
507 | ␉␉␉␉desc[sizeof(desc) - 1] = '\0';␊ |
508 | ␉␉␉}␊ |
509 | ␉␉␉return desc;␊ |
510 | ␉␉}␊ |
511 | ␉}␊ |
512 | ␉sprintf(desc, "Unknown HD Audio device");␊ |
513 | ␉desc[sizeof(desc) - 1] = '\0';␊ |
514 | ␉return desc;␊ |
515 | }␊ |
516 | ␊ |
517 | static int devprop_add_hda_template(struct DevPropDevice *device)␊ |
518 | {␊ |
519 | ␉if (!device)␊ |
520 | ␉{␊ |
521 | ␉␉return 0;␊ |
522 | ␉}␊ |
523 | ␉devices_number++;␊ |
524 | ␊ |
525 | ␉return 1;␊ |
526 | }␊ |
527 | ␊ |
528 | bool setup_hda_devprop(pci_dt_t *hda_dev)␊ |
529 | {␊ |
530 | ␉struct␉␉DevPropDevice␉*device = NULL;␊ |
531 | ␉char␉␉*devicepath = NULL;␊ |
532 | ␉char␉␉*controller_name = NULL;␊ |
533 | ␉int len;␊ |
534 | ␉uint8_t␉␉BuiltIn = 0x00;␊ |
535 | ␉uint16_t␉controller_vendor_id = hda_dev->vendor_id;␊ |
536 | ␉uint16_t␉controller_device_id = hda_dev->device_id;␊ |
537 | ␉const char␉*value;␊ |
538 | ␊ |
539 | ␉devicepath = get_pci_dev_path(hda_dev);␊ |
540 | ␉controller_name = get_hda_controller_name(controller_device_id, controller_vendor_id);␊ |
541 | ␊ |
542 | ␉if (!string)␊ |
543 | ␉{␊ |
544 | ␉␉string = devprop_create_string();␊ |
545 | ␉␉if (!string)␊ |
546 | ␉␉{␊ |
547 | ␉␉␉return 0;␊ |
548 | ␉␉}␊ |
549 | ␉}␊ |
550 | ␊ |
551 | ␉if (!devicepath)␊ |
552 | ␉{␊ |
553 | ␉␉return 0;␊ |
554 | ␉}␊ |
555 | ␊ |
556 | ␉device = devprop_add_device(string, devicepath);␊ |
557 | ␉if (!device)␊ |
558 | ␉{␊ |
559 | ␉␉return 0;␊ |
560 | ␉}␊ |
561 | ␉devprop_add_hda_template(device);␊ |
562 | ␊ |
563 | ␉verbose("\n--------------------------------\n");␊ |
564 | ␉verbose("- AUDIO DEVICE INFO -\n");␊ |
565 | ␉verbose("--------------------------------\n");␊ |
566 | ␊ |
567 | ␉switch ((controller_device_id << 16) | controller_vendor_id) {␊ |
568 | ␊ |
569 | ␉/***********************************************************************␊ |
570 | ␉* The above case are intended as for HDEF device at address 0x001B0000␊ |
571 | ␉***********************************************************************/␊ |
572 | ␉␉case HDA_INTEL_HASWELL:␊ |
573 | ␉␉case HDA_INTEL_CRYSTAL:␊ |
574 | ␉␉case HDA_INTEL_CPT:␊ |
575 | ␉␉case HDA_INTEL_PATSBURG:␊ |
576 | case HDA_INTEL_PPT1:␊ |
577 | ␉␉case HDA_INTEL_82801F:␊ |
578 | ␉␉case HDA_INTEL_63XXESB:␊ |
579 | ␉␉case HDA_INTEL_82801G:␊ |
580 | ␉␉case HDA_INTEL_82801H:␊ |
581 | case HDA_INTEL_82801I:␊ |
582 | ␉␉case HDA_INTEL_82801JI:␊ |
583 | ␉␉case HDA_INTEL_82801JD:␊ |
584 | ␉␉case HDA_INTEL_PCH:␊ |
585 | ␉␉case HDA_INTEL_PCH2:␊ |
586 | case HDA_INTEL_SCH:␊ |
587 | ␉␉case HDA_INTEL_LPT1:␊ |
588 | ␉␉case HDA_INTEL_LPT2:␊ |
589 | ␉␉case HDA_INTEL_LYNX:␊ |
590 | ␉␉case HDA_INTEL_LYNX2:␊ |
591 | ␉/* if the key value kHDEFLayoutID as a value set that value, if not will assign a default layout */␊ |
592 | ␉if (getValueForKey(kHDEFLayoutID, &value, &len, &bootInfo->chameleonConfig) && len == HDEF_LEN * 2)␊ |
593 | ␉{␊ |
594 | ␉␉uint8_t new_HDEF_layout_id[HDEF_LEN];␊ |
595 | ␉␉if (hex2bin(value, new_HDEF_layout_id, HDEF_LEN) == 0)␉{␊ |
596 | ␉␉␉memcpy(default_HDEF_layout_id, new_HDEF_layout_id, HDEF_LEN);␊ |
597 | ␉␉␉verbose("Using user supplied HDEF layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n", ␊ |
598 | ␉␉␉␉default_HDEF_layout_id[0], default_HDEF_layout_id[1], default_HDEF_layout_id[2], default_HDEF_layout_id[3]);␊ |
599 | ␉␉}␊ |
600 | ␉}␊ |
601 | ␉else␊ |
602 | ␉{␊ |
603 | ␉␉verbose("Using default HDEF layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",␊ |
604 | default_HDEF_layout_id[0], default_HDEF_layout_id[1], default_HDEF_layout_id[2], default_HDEF_layout_id[3]);␊ |
605 | ␉}␊ |
606 | ␉devprop_add_value(device, "layout-id", default_HDEF_layout_id, HDEF_LEN);␊ |
607 | ␉devprop_add_value(device, "built-in", &BuiltIn, 1);␊ |
608 | ␉devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-1", 10);␊ |
609 | ␉break;␊ |
610 | ␊ |
611 | ␉/****************************************************************************************************************␊ |
612 | ␉* The above case are intended as for HDAU (NVIDIA) device onboard audio for GFX card with Audio controller HDMi␊ |
613 | ␉****************************************************************************************************************/␊ |
614 | ␉case HDA_NVIDIA_GK107:␊ |
615 | ␉case HDA_NVIDIA_GF114:␊ |
616 | ␉case HDA_NVIDIA_GK106:␊ |
617 | ␉case HDA_NVIDIA_GK104:␊ |
618 | ␉case HDA_NVIDIA_GF110:␊ |
619 | ␉case HDA_NVIDIA_GF119:␊ |
620 | case HDA_NVIDIA_GT116:␊ |
621 | ␉case HDA_NVIDIA_GT104:␊ |
622 | ␉case HDA_NVIDIA_GT108:␊ |
623 | ␉case HDA_NVIDIA_GT106:␊ |
624 | ␉case HDA_NVIDIA_GT100:␊ |
625 | case HDA_NVIDIA_0BE4:␊ |
626 | ␉case HDA_NVIDIA_0BE3:␊ |
627 | ␉case HDA_NVIDIA_0BE2:␊ |
628 | ␊ |
629 | ␉/* if the key value kHDAULayoutID as a value set that value, if not will assign a default layout */␊ |
630 | ␉if (getValueForKey(kHDAULayoutID, &value, &len, &bootInfo->chameleonConfig) && len == HDAU_LEN * 2)␊ |
631 | ␉{␊ |
632 | ␉␉uint8_t new_HDAU_layout_id[HDAU_LEN];␊ |
633 | ␉␉if (hex2bin(value, new_HDAU_layout_id, HDAU_LEN) == 0)␊ |
634 | ␉␉{␊ |
635 | ␉␉␉memcpy(default_HDAU_layout_id, new_HDAU_layout_id, HDAU_LEN);␊ |
636 | ␉␉␉verbose("Using user supplied HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",␊ |
637 | default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);␊ |
638 | ␉␉}␊ |
639 | ␉}␊ |
640 | ␉else␊ |
641 | ␉{␊ |
642 | ␉␉verbose("Using default HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",␊ |
643 | default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);␊ |
644 | ␉}␊ |
645 | ␊ |
646 | devprop_add_value(device, "layout-id", default_HDAU_layout_id, HDAU_LEN); /*FIX ME*/␊ |
647 | devprop_add_value(device, "@0,connector-type", connector_type_value, 4);␊ |
648 | devprop_add_value(device, "@1,connector-type", connector_type_value, 4);␊ |
649 | devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-2", 10);␊ |
650 | devprop_add_value(device, "built-in", &BuiltIn, 1);␊ |
651 | break;␊ |
652 | ␊ |
653 | ␉/*************************************************************************************************************␊ |
654 | ␉* The above case are intended as for HDAU (ATi) device onboard audio for GFX card with Audio controller HDMi␊ |
655 | ␉*************************************************************************************************************/␊ |
656 | ␉case HDA_ATI_SB450:␊ |
657 | ␉case HDA_ATI_SB600:␊ |
658 | ␉case HDA_ATI_RS600:␊ |
659 | ␉case HDA_ATI_RS690:␊ |
660 | ␉case HDA_ATI_RS780:␊ |
661 | ␉case HDA_ATI_R600:␊ |
662 | ␉case HDA_ATI_RV630:␊ |
663 | ␉case HDA_ATI_RV610:␊ |
664 | ␉case HDA_ATI_RV670:␊ |
665 | ␉case HDA_ATI_RV635:␊ |
666 | ␉case HDA_ATI_RV620:␊ |
667 | ␉case HDA_ATI_RV770:␊ |
668 | ␉case HDA_ATI_RV730:␊ |
669 | ␉case HDA_ATI_RV710:␊ |
670 | ␉case HDA_ATI_RV740:␊ |
671 | ␉case HDA_ATI_RV870:␊ |
672 | ␉case HDA_ATI_RV840:␊ |
673 | ␉case HDA_ATI_RV830:␊ |
674 | ␉case HDA_ATI_RV810:␊ |
675 | ␉case HDA_ATI_RV970:␊ |
676 | ␉case HDA_ATI_RV940:␊ |
677 | ␉case HDA_ATI_RV930:␊ |
678 | ␉case HDA_ATI_RV910:␊ |
679 | ␉case HDA_ATI_R1000:␊ |
680 | ␉case HDA_ATI_VERDE:␊ |
681 | ␊ |
682 | /* if the key value kHDAULayoutID as a value set that value, if not will assign a default layout */␊ |
683 | if (getValueForKey(kHDAULayoutID, &value, &len, &bootInfo->chameleonConfig) && len == HDAU_LEN * 2)␊ |
684 | {␊ |
685 | uint8_t new_HDAU_layout_id[HDAU_LEN];␊ |
686 | if (hex2bin(value, new_HDAU_layout_id, HDAU_LEN) == 0)␊ |
687 | {␊ |
688 | memcpy(default_HDAU_layout_id, new_HDAU_layout_id, HDAU_LEN);␊ |
689 | verbose("Using user supplied HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",␊ |
690 | default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);␊ |
691 | }␊ |
692 | ␉␉␉}␊ |
693 | ␉␉␉else␊ |
694 | ␉␉␉{␊ |
695 | ␉␉␉␉verbose("Using default HDAU layout-id: 0x%02x, 0x%02x, 0x%02x, 0x%02x\n",␊ |
696 | default_HDAU_layout_id[0], default_HDAU_layout_id[1], default_HDAU_layout_id[2], default_HDAU_layout_id[3]);␊ |
697 | }␊ |
698 | ␊ |
699 | devprop_add_value(device, "layout-id", default_HDAU_layout_id, HDAU_LEN); /*FIX ME*/␊ |
700 | devprop_add_value(device, "hda-gfx", (uint8_t *)"onboard-2", 10);␊ |
701 | devprop_add_value(device, "built-in", &BuiltIn, 1);␊ |
702 | break;␊ |
703 | ␊ |
704 | default:␊ |
705 | break;␊ |
706 | ␉}␊ |
707 | ␊ |
708 | ␉verbose("Class code: [%04x]\nModel name: %s [%04x:%04x] (rev %02x)\nSubsystem: [%04x:%04x]\n%s\ndevice number: %d\n",␊ |
709 | ␉hda_dev->class_id, controller_name, hda_dev->vendor_id, hda_dev->device_id, hda_dev->revision_id,␊ |
710 | ␉hda_dev->subsys_id.subsys.vendor_id, hda_dev->subsys_id.subsys.device_id, devicepath, devices_number);␊ |
711 | ␊ |
712 | ␉verbose("--------------------------------\n");␊ |
713 | ␊ |
714 | ␉stringdata = malloc(sizeof(uint8_t) * string->length);␊ |
715 | ␉memcpy(stringdata, (uint8_t*)devprop_generate_string(string), string->length);␊ |
716 | ␉stringlength = string->length;␊ |
717 | ␊ |
718 | ␉return true;␊ |
719 | }␊ |
720 | |