Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Bluetooth: btmrvl: operate on 16-bit opcodes instead of ogf/ocf

Replace ogf/ocf and its packing with 16-bit opcodes.

Signed-off-by: Bing Zhao <bzhao@marvell.com>
Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>

authored by

Bing Zhao and committed by
Gustavo Padovan
3e4543ab 6a070e6e

+20 -20
+11 -8
drivers/bluetooth/btmrvl_drv.h
··· 90 90 91 91 #define MRVL_VENDOR_PKT 0xFE 92 92 93 - /* Bluetooth commands */ 94 - #define BT_CMD_AUTO_SLEEP_MODE 0x23 95 - #define BT_CMD_HOST_SLEEP_CONFIG 0x59 96 - #define BT_CMD_HOST_SLEEP_ENABLE 0x5A 97 - #define BT_CMD_MODULE_CFG_REQ 0x5B 98 - #define BT_CMD_LOAD_CONFIG_DATA 0x61 93 + /* Vendor specific Bluetooth commands */ 94 + #define BT_CMD_AUTO_SLEEP_MODE 0xFC23 95 + #define BT_CMD_HOST_SLEEP_CONFIG 0xFC59 96 + #define BT_CMD_HOST_SLEEP_ENABLE 0xFC5A 97 + #define BT_CMD_MODULE_CFG_REQ 0xFC5B 98 + #define BT_CMD_LOAD_CONFIG_DATA 0xFC61 99 99 100 100 /* Sub-commands: Module Bringup/Shutdown Request/Response */ 101 101 #define MODULE_BRINGUP_REQ 0xF1 ··· 104 104 105 105 #define MODULE_SHUTDOWN_REQ 0xF2 106 106 107 + /* Vendor specific Bluetooth events */ 108 + #define BT_EVENT_AUTO_SLEEP_MODE 0x23 109 + #define BT_EVENT_HOST_SLEEP_CONFIG 0x59 110 + #define BT_EVENT_HOST_SLEEP_ENABLE 0x5A 111 + #define BT_EVENT_MODULE_CFG_REQ 0x5B 107 112 #define BT_EVENT_POWER_STATE 0x20 108 113 109 114 /* Bluetooth Power States */ 110 115 #define BT_PS_ENABLE 0x02 111 116 #define BT_PS_DISABLE 0x03 112 117 #define BT_PS_SLEEP 0x01 113 - 114 - #define OGF 0x3F 115 118 116 119 /* Host Sleep states */ 117 120 #define HS_ACTIVATED 0x01
+9 -12
drivers/bluetooth/btmrvl_main.c
··· 50 50 51 51 if (hdr->evt == HCI_EV_CMD_COMPLETE) { 52 52 struct hci_ev_cmd_complete *ec; 53 - u16 opcode, ocf, ogf; 53 + u16 opcode; 54 54 55 55 ec = (void *) (skb->data + HCI_EVENT_HDR_SIZE); 56 56 opcode = __le16_to_cpu(ec->opcode); 57 - ocf = hci_opcode_ocf(opcode); 58 - ogf = hci_opcode_ogf(opcode); 59 57 60 58 if (priv->btmrvl_dev.sendcmdflag) { 61 59 priv->btmrvl_dev.sendcmdflag = false; ··· 61 63 wake_up_interruptible(&priv->adapter->cmd_wait_q); 62 64 } 63 65 64 - if (ogf == OGF) { 65 - BT_DBG("vendor event skipped: ogf 0x%4.4x ocf 0x%4.4x", 66 - ogf, ocf); 66 + if (hci_opcode_ogf(opcode) == 0x3F) { 67 + BT_DBG("vendor event skipped: opcode=%#4.4x", opcode); 67 68 kfree_skb(skb); 68 69 return false; 69 70 } ··· 86 89 } 87 90 88 91 switch (event->data[0]) { 89 - case BT_CMD_AUTO_SLEEP_MODE: 92 + case BT_EVENT_AUTO_SLEEP_MODE: 90 93 if (!event->data[2]) { 91 94 if (event->data[1] == BT_PS_ENABLE) 92 95 adapter->psmode = 1; ··· 99 102 } 100 103 break; 101 104 102 - case BT_CMD_HOST_SLEEP_CONFIG: 105 + case BT_EVENT_HOST_SLEEP_CONFIG: 103 106 if (!event->data[3]) 104 107 BT_DBG("gpio=%x, gap=%x", event->data[1], 105 108 event->data[2]); ··· 107 110 BT_DBG("HSCFG command failed"); 108 111 break; 109 112 110 - case BT_CMD_HOST_SLEEP_ENABLE: 113 + case BT_EVENT_HOST_SLEEP_ENABLE: 111 114 if (!event->data[1]) { 112 115 adapter->hs_state = HS_ACTIVATED; 113 116 if (adapter->psmode) ··· 118 121 } 119 122 break; 120 123 121 - case BT_CMD_MODULE_CFG_REQ: 124 + case BT_EVENT_MODULE_CFG_REQ: 122 125 if (priv->btmrvl_dev.sendcmdflag && 123 126 event->data[1] == MODULE_BRINGUP_REQ) { 124 127 BT_DBG("EVENT:%s", ··· 163 166 } 164 167 EXPORT_SYMBOL_GPL(btmrvl_process_event); 165 168 166 - static int btmrvl_send_sync_cmd(struct btmrvl_private *priv, u16 cmd_no, 169 + static int btmrvl_send_sync_cmd(struct btmrvl_private *priv, u16 opcode, 167 170 const void *param, u8 len) 168 171 { 169 172 struct sk_buff *skb; ··· 176 179 } 177 180 178 181 hdr = (struct hci_command_hdr *)skb_put(skb, HCI_COMMAND_HDR_SIZE); 179 - hdr->opcode = cpu_to_le16(hci_opcode_pack(OGF, cmd_no)); 182 + hdr->opcode = cpu_to_le16(opcode); 180 183 hdr->plen = len; 181 184 182 185 if (len)