1 /* SPDX-License-Identifier: GPL-2.0-only */ 2 /* 3 * Copyright (C) 2025 Google Corporation 4 */ 5 6 #ifndef __HCI_DRV_H 7 #define __HCI_DRV_H 8 9 #include <linux/types.h> 10 11 #include <net/bluetooth/bluetooth.h> 12 #include <net/bluetooth/hci.h> 13 14 struct hci_drv_cmd_hdr { 15 __le16 opcode; 16 __le16 len; 17 } __packed; 18 19 struct hci_drv_ev_hdr { 20 __le16 opcode; 21 __le16 len; 22 } __packed; 23 24 #define HCI_DRV_EV_CMD_STATUS 0x0000 25 struct hci_drv_ev_cmd_status { 26 __le16 opcode; 27 __u8 status; 28 } __packed; 29 30 #define HCI_DRV_EV_CMD_COMPLETE 0x0001 31 struct hci_drv_ev_cmd_complete { 32 __le16 opcode; 33 __u8 status; 34 __u8 data[]; 35 } __packed; 36 37 #define HCI_DRV_STATUS_SUCCESS 0x00 38 #define HCI_DRV_STATUS_UNSPECIFIED_ERROR 0x01 39 #define HCI_DRV_STATUS_UNKNOWN_COMMAND 0x02 40 #define HCI_DRV_STATUS_INVALID_PARAMETERS 0x03 41 42 #define HCI_DRV_MAX_DRIVER_NAME_LENGTH 32 43 44 /* Common commands that make sense on all drivers start from 0x0000 */ 45 #define HCI_DRV_OP_READ_INFO 0x0000 46 #define HCI_DRV_READ_INFO_SIZE 0 47 struct hci_drv_rp_read_info { 48 __u8 driver_name[HCI_DRV_MAX_DRIVER_NAME_LENGTH]; 49 __le16 num_supported_commands; 50 __le16 supported_commands[]; 51 } __packed; 52 53 /* Driver specific OGF (Opcode Group Field) 54 * Commands in this group may have different meanings across different drivers. 55 */ 56 #define HCI_DRV_OGF_DRIVER_SPECIFIC 0x01 57 58 int hci_drv_cmd_status(struct hci_dev *hdev, u16 cmd, u8 status); 59 int hci_drv_cmd_complete(struct hci_dev *hdev, u16 cmd, u8 status, void *rp, 60 size_t rp_len); 61 int hci_drv_process_cmd(struct hci_dev *hdev, struct sk_buff *cmd_skb); 62 63 struct hci_drv_handler { 64 int (*func)(struct hci_dev *hdev, void *data, u16 data_len); 65 size_t data_len; 66 }; 67 68 struct hci_drv { 69 size_t common_handler_count; 70 const struct hci_drv_handler *common_handlers; 71 72 size_t specific_handler_count; 73 const struct hci_drv_handler *specific_handlers; 74 }; 75 76 #endif /* __HCI_DRV_H */ 77