1 /* 2 * Copyright (c) 2023 Raspberry Pi (Trading) Ltd. 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 #ifndef CYBT_SHARE_BUS_DRIVER_H 8 #define CYBT_SHARE_BUS_DRIVER_H 9 10 #define BTSDIO_FWBUF_SIZE (0x1000) 11 #define BTFW_MAX_STR_LEN (600) 12 #define BTFW_SD_ALIGN (32) 13 #define BTFW_DOWNLOAD_BLK_SIZE (((BTFW_MAX_STR_LEN) / 2) + 8) 14 15 typedef enum { 16 CYBT_SUCCESS = 0, 17 CYBT_ERR_BADARG = 0xB1, 18 CYBT_ERR_OUT_OF_MEMORY, 19 CYBT_ERR_TIMEOUT, 20 CYBT_ERR_HCI_INIT_FAILED, 21 CYBT_ERR_HCI_UNSUPPORTED_IF, 22 CYBT_ERR_HCI_UNSUPPORTED_BAUDRATE, 23 CYBT_ERR_HCI_NOT_INITIALIZE, 24 CYBT_ERR_HCI_WRITE_FAILED, 25 CYBT_ERR_HCI_READ_FAILED, 26 CYBT_ERR_HCI_GET_TX_MUTEX_FAILED, 27 CYBT_ERR_HCI_GET_RX_MUTEX_FAILED, 28 CYBT_ERR_HCI_SET_BAUDRATE_FAILED, 29 CYBT_ERR_HCI_SET_FLOW_CTRL_FAILED, 30 CYBT_ERR_INIT_MEMPOOL_FAILED, 31 CYBT_ERR_INIT_QUEUE_FAILED, 32 CYBT_ERR_CREATE_TASK_FAILED, 33 CYBT_ERR_SEND_QUEUE_FAILED, 34 CYBT_ERR_MEMPOOL_NOT_INITIALIZE, 35 CYBT_ERR_QUEUE_ALMOST_FULL, 36 CYBT_ERR_QUEUE_FULL, 37 CYBT_ERR_GPIO_POWER_INIT_FAILED, 38 CYBT_ERR_GPIO_DEV_WAKE_INIT_FAILED, 39 CYBT_ERR_GPIO_HOST_WAKE_INIT_FAILED, 40 CYBT_ERR_GENERIC 41 } cybt_result_t; 42 43 typedef enum { 44 H2B_BUF_ADDR_IDX = 0x10, 45 H2B_BUF_IN_ADDR_IDX, 46 H2B_BUF_OUT_ADDR_IDX, 47 B2H_BUF_ADDR_IDX, 48 B2H_BUF_IN_ADDR_IDX, 49 B2H_BUF_OUT_ADDR_IDX, 50 } cybt_addr_idx_t; 51 52 typedef struct { 53 uint32_t host2bt_in_val; 54 uint32_t host2bt_out_val; 55 uint32_t bt2host_in_val; 56 uint32_t bt2host_out_val; 57 } cybt_fw_membuf_index_t; 58 59 struct _cyw43_ll_t; 60 void cybt_sharedbus_driver_init(struct _cyw43_ll_t *driver); 61 62 cybt_result_t cybt_init_buffer(void); 63 64 cybt_result_t cybt_reg_write_idx(cybt_addr_idx_t reg_idx, uint32_t value); 65 cybt_result_t cybt_mem_write_idx(cybt_addr_idx_t mem_idx, uint32_t offset, const uint8_t *p_data, uint32_t data_len); 66 cybt_result_t cybt_mem_read_idx(cybt_addr_idx_t mem_idx, uint32_t offset, uint8_t *p_data, uint32_t data_len); 67 68 cybt_result_t cybt_fw_download(const uint8_t *p_bt_firmware, uint32_t bt_firmware_len, uint8_t *p_write_buf, uint8_t *p_hex_buf); 69 70 int cybt_ready(void); 71 int cybt_awake(void); 72 73 cybt_result_t cybt_set_bt_awake(int value); 74 cybt_result_t cybt_set_host_ready(void); 75 cybt_result_t cybt_set_bt_intr(int value); 76 cybt_result_t cybt_toggle_bt_intr(void); 77 cybt_result_t cybt_get_bt_buf_index(cybt_fw_membuf_index_t *p_buf_index); 78 79 void cybt_debug_dump(void); 80 81 #endif 82