Home | History | Annotate | Download | only in include
      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