1 /******************************************************************************
2  *
3  *  Copyright (C) 2009-2012 Broadcom Corporation
4  *
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at:
8  *
9  *  http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *  Unless required by applicable law or agreed to in writing, software
12  *  distributed under the License is distributed on an "AS IS" BASIS,
13  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *  See the License for the specific language governing permissions and
15  *  limitations under the License.
16  *
17  ******************************************************************************/
18 
19 /******************************************************************************
20  *
21  *  Filename:      bt_vendor_brcm.h
22  *
23  *  Description:   A wrapper header file of bt_vendor_lib.h
24  *
25  *                 Contains definitions specific for interfacing with Broadcom
26  *                 Bluetooth chipsets
27  *
28  ******************************************************************************/
29 
30 #ifndef BT_VENDOR_BRCM_H
31 #define BT_VENDOR_BRCM_H
32 
33 #include "bt_vendor_lib.h"
34 #include "vnd_buildcfg.h"
35 
36 /******************************************************************************
37 **  Constants & Macros
38 ******************************************************************************/
39 
40 #ifndef FALSE
41 #define FALSE  0
42 #endif
43 
44 #ifndef TRUE
45 #define TRUE   (!FALSE)
46 #endif
47 
48 #ifndef VENDOR_LIB_RUNTIME_TUNING_ENABLED
49 #define VENDOR_LIB_RUNTIME_TUNING_ENABLED   FALSE
50 #endif
51 
52 /* Run-time configuration file */
53 #ifndef VENDOR_LIB_CONF_FILE
54 #define VENDOR_LIB_CONF_FILE "/etc/bluetooth/bt_vendor.conf"
55 #endif
56 
57 /* Device port name where Bluetooth controller attached */
58 #ifndef BLUETOOTH_UART_DEVICE_PORT
59 #define BLUETOOTH_UART_DEVICE_PORT      "/dev/ttyO1"    /* maguro */
60 #endif
61 
62 /* Location of firmware patch files */
63 #ifndef FW_PATCHFILE_LOCATION
64 #define FW_PATCHFILE_LOCATION "/vendor/firmware/"  /* maguro */
65 #endif
66 
67 #ifndef UART_TARGET_BAUD_RATE
68 #define UART_TARGET_BAUD_RATE           3000000
69 #endif
70 
71 /* The millisecond delay pauses on HCI transport after firmware patches
72  * were downloaded. This gives some time for firmware to restart with
73  * patches before host attempts to send down any HCI commands.
74  *
75  * Note: It has been discovered that BCM43241B0 needs at least 200ms
76  * settlement delay in here. Without the delay, a Hardware Error event
77  * from BCM43241B0 had been seen in HCI upstream path right after the
78  * host sent the HCI_VSC_SET_BDADDR commad to the controller at higher
79  * baud.
80  */
81 #ifndef FW_PATCH_SETTLEMENT_DELAY_MS
82 #define FW_PATCH_SETTLEMENT_DELAY_MS          0
83 #endif
84 
85 /* The Bluetooth Device Aaddress source switch:
86  *
87  * -FALSE- (default value)
88  *  Get the factory BDADDR from device's file system. Normally the BDADDR is
89  *  stored in the location pointed by the PROPERTY_BT_BDADDR_PATH (defined in
90  *  btif_common.h file) property.
91  *
92  * -TRUE-
93  *  If the Bluetooth Controller has equipped with a non-volatile memory (such
94  *  as BCM4330's OTP memory), the factory BDADDR can be stored in there and
95  *  retrieved by the stack while enabling BT.
96  *  !!! WARNING !!! Make sure that the OTP feature has been enabled in the
97  *  firmware patchram (.hcd) file.
98  */
99 #ifndef USE_CONTROLLER_BDADDR
100 #define USE_CONTROLLER_BDADDR   FALSE
101 #endif
102 
103 /* sleep mode
104 
105     0: disable
106     1: UART with Host wake/BT wake out of band signals
107 */
108 #ifndef LPM_SLEEP_MODE
109 #define LPM_SLEEP_MODE                  1
110 #endif
111 
112 /* Host Stack Idle Threshold in 300ms or 25ms
113 
114   In sleep mode 1, this is the number of firmware loops executed with no
115     activity before the Host wake line is deasserted. Activity includes HCI
116     traffic excluding certain sleep mode commands and the presence of SCO
117     connections if the "Allow Host Sleep During SCO" flag is not set to 1.
118     Each count of this parameter is roughly equivalent to 300ms or 25ms.
119 */
120 #ifndef LPM_IDLE_THRESHOLD
121 #define LPM_IDLE_THRESHOLD              1
122 #endif
123 
124 /* Host Controller Idle Threshold in 300ms or 25ms
125 
126     This is the number of firmware loops executed with no activity before the
127     HC is considered idle. Depending on the mode, HC may then attempt to sleep.
128     Activity includes HCI traffic excluding certain sleep mode commands and
129     the presence of ACL/SCO connections.
130 */
131 #ifndef LPM_HC_IDLE_THRESHOLD
132 #define LPM_HC_IDLE_THRESHOLD           1
133 #endif
134 
135 /* BT_WAKE Polarity - 0=Active Low, 1= Active High */
136 #ifndef LPM_BT_WAKE_POLARITY
137 #define LPM_BT_WAKE_POLARITY            1    /* maguro */
138 #endif
139 
140 /* HOST_WAKE Polarity - 0=Active Low, 1= Active High */
141 #ifndef LPM_HOST_WAKE_POLARITY
142 #define LPM_HOST_WAKE_POLARITY          1    /* maguro */
143 #endif
144 
145 /* LPM_ALLOW_HOST_SLEEP_DURING_SCO
146 
147     When this flag is set to 0, the host is not allowed to sleep while
148     an SCO is active. In sleep mode 1, the device will keep the host
149     wake line asserted while an SCO is active.
150     When this flag is set to 1, the host can sleep while an SCO is active.
151     This flag should only be set to 1 if SCO traffic is directed to the PCM
152     interface.
153 */
154 #ifndef LPM_ALLOW_HOST_SLEEP_DURING_SCO
155 #define LPM_ALLOW_HOST_SLEEP_DURING_SCO 1
156 #endif
157 
158 /* LPM_COMBINE_SLEEP_MODE_AND_LPM
159 
160     In Mode 0, always set byte 7 to 0. In sleep mode 1, device always
161     requires permission to sleep between scans / periodic inquiries regardless
162     of the setting of this byte. In sleep mode 1, if byte is set, device must
163     have "permission" to sleep during the low power modes of sniff, hold, and
164     park. If byte is not set, device can sleep without permission during these
165     modes. Permission to sleep in Mode 1 is obtained if the BT_WAKE signal is
166     not asserted.
167 */
168 #ifndef LPM_COMBINE_SLEEP_MODE_AND_LPM
169 #define LPM_COMBINE_SLEEP_MODE_AND_LPM  1
170 #endif
171 
172 /* LPM_ENABLE_UART_TXD_TRI_STATE
173 
174     When set to 0, the device will not tristate its UART TX line before going
175     to sleep.
176     When set to 1, the device will tristate its UART TX line before going to
177     sleep.
178 */
179 #ifndef LPM_ENABLE_UART_TXD_TRI_STATE
180 #define LPM_ENABLE_UART_TXD_TRI_STATE   0
181 #endif
182 
183 /* LPM_PULSED_HOST_WAKE
184 */
185 #ifndef LPM_PULSED_HOST_WAKE
186 #define LPM_PULSED_HOST_WAKE            0
187 #endif
188 
189 /* LPM_IDLE_TIMEOUT_MULTIPLE
190 
191     The multiple factor of host stack idle threshold in 300ms/25ms
192 */
193 #ifndef LPM_IDLE_TIMEOUT_MULTIPLE
194 #define LPM_IDLE_TIMEOUT_MULTIPLE       10
195 #endif
196 
197 /* BT_WAKE_VIA_USERIAL_IOCTL
198 
199     Use userial ioctl function to control BT_WAKE signal
200 */
201 #ifndef BT_WAKE_VIA_USERIAL_IOCTL
202 #define BT_WAKE_VIA_USERIAL_IOCTL       FALSE
203 #endif
204 
205 /* BT_WAKE_USERIAL_LDISC
206 
207     Use line discipline if the BT_WAKE control is in line discipline
208 */
209 #ifndef BT_WAKE_USERIAL_LDISC
210 #define BT_WAKE_USERIAL_LDISC           FALSE
211 #endif
212 
213 /* BT_WAKE_VIA_PROC
214 
215     LPM & BT_WAKE control through PROC nodes
216 */
217 #ifndef BT_WAKE_VIA_PROC
218 #define BT_WAKE_VIA_PROC       FALSE
219 #endif
220 
221 #ifndef BT_WAKE_VIA_PROC_NOTIFY_DEASSERT
222 #define  BT_WAKE_VIA_PROC_NOTIFY_DEASSERT       FALSE
223 #endif
224 
225 /* N_BRCM_HCI
226 
227     UART ioctl line discipline
228 */
229 #ifndef N_BRCM_HCI
230 #define N_BRCM_HCI             25
231 #endif
232 
233 /* SCO_CFG_INCLUDED
234 
235     Do SCO configuration by default. If the firmware patch had been embedded
236     with desired SCO configuration, set this FALSE to bypass configuration
237     from host software.
238 */
239 #ifndef SCO_CFG_INCLUDED
240 #define SCO_CFG_INCLUDED                TRUE
241 #endif
242 
243 #ifndef SCO_USE_I2S_INTERFACE
244 #define SCO_USE_I2S_INTERFACE           FALSE
245 #endif
246 
247 #define SCO_I2SPCM_PARAM_SIZE           4
248 
249 /* SCO_WBS_SAMPLE_RATE
250     0 : 8K
251     1 : 16K
252     2 : 4K
253  This macro is used for setting WBS sampling rate for a SCO connection
254  If the mobile network supports WBS, we need to use 16KHz as default
255  but if the platform doesn't support 16KHz, the sample rate can be
256  overriden to 8KHz by setting this to 0.
257 */
258 #ifndef SCO_WBS_SAMPLE_RATE
259 #define SCO_WBS_SAMPLE_RATE            1
260 #endif
261 
262 
263 /* SCO_I2SPCM_IF_MODE - 0=Disable, 1=Enable */
264 #ifndef SCO_I2SPCM_IF_MODE
265 #define SCO_I2SPCM_IF_MODE              1
266 #endif
267 
268 /* SCO_I2SPCM_IF_ROLE - 0=Slave, 1=Master */
269 #ifndef SCO_I2SPCM_IF_ROLE
270 #define SCO_I2SPCM_IF_ROLE              1
271 #endif
272 
273 /* SCO_I2SPCM_IF_SAMPLE_RATE
274 
275     0 : 8K
276     1 : 16K
277     2 : 4K
278 */
279 #ifndef SCO_I2SPCM_IF_SAMPLE_RATE
280 #define SCO_I2SPCM_IF_SAMPLE_RATE       0
281 #endif
282 
283 /* SCO_I2SPCM_IF_CLOCK_RATE
284 
285     0 : 128K
286     1 : 256K
287     2 : 512K
288     3 : 1024K
289     4 : 2048K
290 */
291 #ifndef SCO_I2SPCM_IF_CLOCK_RATE
292 #define SCO_I2SPCM_IF_CLOCK_RATE        1
293 #endif
294 
295 /* SCO_I2SPCM_IF_CLOCK_RATE4WBS
296 
297     0 : 128K
298     1 : 256K
299     2 : 512K
300     3 : 1024K
301     4 : 2048K
302 */
303 #ifndef SCO_I2SPCM_IF_CLOCK_RATE4WBS
304 #define SCO_I2SPCM_IF_CLOCK_RATE4WBS        2
305 #endif
306 
307 
308 #define SCO_PCM_PARAM_SIZE              5
309 
310 /* SCO_PCM_ROUTING
311 
312     0 : PCM
313     1 : Transport
314     2 : Codec
315     3 : I2S
316 */
317 #ifndef SCO_PCM_ROUTING
318 #define SCO_PCM_ROUTING                 0
319 #endif
320 
321 /* SCO_PCM_IF_CLOCK_RATE
322 
323     NOTICE: suggested to be consistent with SCO_I2SPCM_IF_CLOCK_RATE
324 
325     0 : 128K
326     1 : 256K
327     2 : 512K
328     3 : 1024K
329     4 : 2048K
330 */
331 #ifndef SCO_PCM_IF_CLOCK_RATE
332 #define SCO_PCM_IF_CLOCK_RATE           4
333 #endif
334 
335 /* SCO_PCM_IF_FRAME_TYPE - 0=Short, 1=Long */
336 #ifndef SCO_PCM_IF_FRAME_TYPE
337 #define SCO_PCM_IF_FRAME_TYPE           0
338 #endif
339 
340 /* SCO_PCM_IF_SYNC_MODE
341 
342     NOTICE: in most usage cases the value will be the same as
343             SCO_PCM_IF_CLOCK_MODE setting
344 
345     0 : Slave
346     1 : Master
347 */
348 #ifndef SCO_PCM_IF_SYNC_MODE
349 #define SCO_PCM_IF_SYNC_MODE            0
350 #endif
351 
352 /* SCO_PCM_IF_CLOCK_MODE
353 
354     NOTICE: suggested to be consistent with SCO_I2SPCM_IF_ROLE
355 
356     0 : Slave
357     1 : Master
358 */
359 #ifndef SCO_PCM_IF_CLOCK_MODE
360 #define SCO_PCM_IF_CLOCK_MODE           0
361 #endif
362 
363 #define PCM_DATA_FORMAT_PARAM_SIZE      5
364 
365 /* PCM_DATA_FMT_SHIFT_MODE
366 
367     0 : MSB first
368     1 : LSB first
369 */
370 #ifndef PCM_DATA_FMT_SHIFT_MODE
371 #define PCM_DATA_FMT_SHIFT_MODE         0
372 #endif
373 
374 /* PCM_DATA_FMT_FILL_BITS
375 
376     Specifies the value with which to fill unused bits
377     if Fill_Method is set to programmable
378 */
379 #ifndef PCM_DATA_FMT_FILL_BITS
380 #define PCM_DATA_FMT_FILL_BITS          0
381 #endif
382 
383 /* PCM_DATA_FMT_FILL_METHOD
384 
385     0 : 0's
386     1 : 1's
387     2 : Signed
388     3 : Programmable
389 */
390 #ifndef PCM_DATA_FMT_FILL_METHOD
391 #define PCM_DATA_FMT_FILL_METHOD        3
392 #endif
393 
394 /* PCM_DATA_FMT_FILL_NUM
395 
396     Specifies the number of bits to be filled
397 */
398 #ifndef PCM_DATA_FMT_FILL_NUM
399 #define PCM_DATA_FMT_FILL_NUM           0
400 #endif
401 
402 /* PCM_DATA_FMT_JUSTIFY_MODE
403 
404     0 : Left justify (fill data shifted out last)
405     1 : Right justify (fill data shifted out first)
406 */
407 #ifndef PCM_DATA_FMT_JUSTIFY_MODE
408 #define PCM_DATA_FMT_JUSTIFY_MODE       0
409 #endif
410 
411 /* HW_END_WITH_HCI_RESET
412 
413     Sample code implementation of sending a HCI_RESET command during the epilog
414     process. It calls back to the callers after command complete of HCI_RESET
415     is received.
416 */
417 #ifndef HW_END_WITH_HCI_RESET
418 #define HW_END_WITH_HCI_RESET    TRUE
419 #endif
420 
421 /******************************************************************************
422 **  Extern variables and functions
423 ******************************************************************************/
424 
425 extern bt_vendor_callbacks_t *bt_vendor_cbacks;
426 
427 extern int hw_set_audio_state(bt_vendor_op_audio_state_t *p_state);
428 
429 #endif /* BT_VENDOR_BRCM_H */
430 
431