2019-05-27 09:55:06 +03:00
/* SPDX-License-Identifier: GPL-2.0-or-later */
2015-05-14 11:49:09 +03:00
/*
* Bluetooth support for Realtek devices
*
* Copyright ( C ) 2015 Endless Mobile , Inc .
*/
# define RTL_FRAG_LEN 252
2018-08-02 17:57:13 +03:00
# define rtl_dev_err(dev, fmt, ...) bt_dev_err(dev, "RTL: " fmt, ##__VA_ARGS__)
# define rtl_dev_warn(dev, fmt, ...) bt_dev_warn(dev, "RTL: " fmt, ##__VA_ARGS__)
# define rtl_dev_info(dev, fmt, ...) bt_dev_info(dev, "RTL: " fmt, ##__VA_ARGS__)
# define rtl_dev_dbg(dev, fmt, ...) bt_dev_dbg(dev, "RTL: " fmt, ##__VA_ARGS__)
struct btrtl_device_info ;
2015-05-14 11:49:09 +03:00
struct rtl_download_cmd {
__u8 index ;
__u8 data [ RTL_FRAG_LEN ] ;
} __packed ;
struct rtl_download_response {
__u8 status ;
__u8 index ;
} __packed ;
struct rtl_rom_version_evt {
__u8 status ;
__u8 version ;
} __packed ;
struct rtl_epatch_header {
__u8 signature [ 8 ] ;
__le32 fw_version ;
__le16 num_patches ;
} __packed ;
2018-08-02 17:57:15 +03:00
struct rtl_vendor_config_entry {
__le16 offset ;
__u8 len ;
2020-02-27 02:02:27 +03:00
__u8 data [ ] ;
2018-08-02 17:57:15 +03:00
} __packed ;
struct rtl_vendor_config {
__le32 signature ;
__le16 total_len ;
2020-02-27 02:02:27 +03:00
struct rtl_vendor_config_entry entry [ ] ;
2018-08-02 17:57:15 +03:00
} __packed ;
2015-05-14 11:49:09 +03:00
# if IS_ENABLED(CONFIG_BT_RTL)
2018-08-02 17:57:17 +03:00
struct btrtl_device_info * btrtl_initialize ( struct hci_dev * hdev ,
const char * postfix ) ;
2018-08-02 17:57:13 +03:00
void btrtl_free ( struct btrtl_device_info * btrtl_dev ) ;
int btrtl_download_firmware ( struct hci_dev * hdev ,
struct btrtl_device_info * btrtl_dev ) ;
2015-05-14 11:49:09 +03:00
int btrtl_setup_realtek ( struct hci_dev * hdev ) ;
2019-06-25 11:30:51 +03:00
int btrtl_shutdown_realtek ( struct hci_dev * hdev ) ;
2018-08-02 17:57:15 +03:00
int btrtl_get_uart_settings ( struct hci_dev * hdev ,
struct btrtl_device_info * btrtl_dev ,
unsigned int * controller_baudrate ,
u32 * device_baudrate , bool * flow_control ) ;
2015-05-14 11:49:09 +03:00
# else
2018-08-02 17:57:17 +03:00
static inline struct btrtl_device_info * btrtl_initialize ( struct hci_dev * hdev ,
const char * postfix )
2018-08-02 17:57:13 +03:00
{
return ERR_PTR ( - EOPNOTSUPP ) ;
}
static inline void btrtl_free ( struct btrtl_device_info * btrtl_dev )
{
}
static inline int btrtl_download_firmware ( struct hci_dev * hdev ,
struct btrtl_device_info * btrtl_dev )
{
return - EOPNOTSUPP ;
}
2015-05-14 11:49:09 +03:00
static inline int btrtl_setup_realtek ( struct hci_dev * hdev )
{
return - EOPNOTSUPP ;
}
2019-06-25 11:30:51 +03:00
static inline int btrtl_shutdown_realtek ( struct hci_dev * hdev )
{
return - EOPNOTSUPP ;
}
2018-08-02 17:57:15 +03:00
static inline int btrtl_get_uart_settings ( struct hci_dev * hdev ,
struct btrtl_device_info * btrtl_dev ,
unsigned int * controller_baudrate ,
u32 * device_baudrate ,
bool * flow_control )
{
return - ENOENT ;
}
2015-05-14 11:49:09 +03:00
# endif