btintel.c (95a0c7c2d6cfde3fb5fdb713428ed0df4d6bdd58) | btintel.c (2064ee332e4c1b7495cf68b84355c213d8fe71fd) |
---|---|
1/* 2 * 3 * Bluetooth support for Intel devices 4 * 5 * Copyright (C) 2015 Intel Corporation 6 * 7 * 8 * This program is free software; you can redistribute it and/or modify --- 29 unchanged lines hidden (view full) --- 38{ 39 struct hci_rp_read_bd_addr *bda; 40 struct sk_buff *skb; 41 42 skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL, 43 HCI_INIT_TIMEOUT); 44 if (IS_ERR(skb)) { 45 int err = PTR_ERR(skb); | 1/* 2 * 3 * Bluetooth support for Intel devices 4 * 5 * Copyright (C) 2015 Intel Corporation 6 * 7 * 8 * This program is free software; you can redistribute it and/or modify --- 29 unchanged lines hidden (view full) --- 38{ 39 struct hci_rp_read_bd_addr *bda; 40 struct sk_buff *skb; 41 42 skb = __hci_cmd_sync(hdev, HCI_OP_READ_BD_ADDR, 0, NULL, 43 HCI_INIT_TIMEOUT); 44 if (IS_ERR(skb)) { 45 int err = PTR_ERR(skb); |
46 BT_ERR("%s: Reading Intel device address failed (%d)", 47 hdev->name, err); | 46 bt_dev_err(hdev, "Reading Intel device address failed (%d)", 47 err); |
48 return err; 49 } 50 51 if (skb->len != sizeof(*bda)) { | 48 return err; 49 } 50 51 if (skb->len != sizeof(*bda)) { |
52 BT_ERR("%s: Intel device address length mismatch", hdev->name); | 52 bt_dev_err(hdev, "Intel device address length mismatch"); |
53 kfree_skb(skb); 54 return -EIO; 55 } 56 57 bda = (struct hci_rp_read_bd_addr *)skb->data; 58 59 /* For some Intel based controllers, the default Bluetooth device 60 * address 00:03:19:9E:8B:00 can be found. These controllers are 61 * fully operational, but have the danger of duplicate addresses 62 * and that in turn can cause problems with Bluetooth operation. 63 */ 64 if (!bacmp(&bda->bdaddr, BDADDR_INTEL)) { | 53 kfree_skb(skb); 54 return -EIO; 55 } 56 57 bda = (struct hci_rp_read_bd_addr *)skb->data; 58 59 /* For some Intel based controllers, the default Bluetooth device 60 * address 00:03:19:9E:8B:00 can be found. These controllers are 61 * fully operational, but have the danger of duplicate addresses 62 * and that in turn can cause problems with Bluetooth operation. 63 */ 64 if (!bacmp(&bda->bdaddr, BDADDR_INTEL)) { |
65 BT_ERR("%s: Found Intel default device address (%pMR)", 66 hdev->name, &bda->bdaddr); | 65 bt_dev_err(hdev, "Found Intel default device address (%pMR)", 66 &bda->bdaddr); |
67 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); 68 } 69 70 kfree_skb(skb); 71 72 return 0; 73} 74EXPORT_SYMBOL_GPL(btintel_check_bdaddr); --- 43 unchanged lines hidden (view full) --- 118int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) 119{ 120 struct sk_buff *skb; 121 int err; 122 123 skb = __hci_cmd_sync(hdev, 0xfc31, 6, bdaddr, HCI_INIT_TIMEOUT); 124 if (IS_ERR(skb)) { 125 err = PTR_ERR(skb); | 67 set_bit(HCI_QUIRK_INVALID_BDADDR, &hdev->quirks); 68 } 69 70 kfree_skb(skb); 71 72 return 0; 73} 74EXPORT_SYMBOL_GPL(btintel_check_bdaddr); --- 43 unchanged lines hidden (view full) --- 118int btintel_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr) 119{ 120 struct sk_buff *skb; 121 int err; 122 123 skb = __hci_cmd_sync(hdev, 0xfc31, 6, bdaddr, HCI_INIT_TIMEOUT); 124 if (IS_ERR(skb)) { 125 err = PTR_ERR(skb); |
126 BT_ERR("%s: Changing Intel device address failed (%d)", 127 hdev->name, err); | 126 bt_dev_err(hdev, "Changing Intel device address failed (%d)", 127 err); |
128 return err; 129 } 130 kfree_skb(skb); 131 132 return 0; 133} 134EXPORT_SYMBOL_GPL(btintel_set_bdaddr); 135 --- 13 unchanged lines hidden (view full) --- 149 param[2] = 0x00; 150 } 151 152 skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT); 153 if (IS_ERR(skb)) { 154 err = PTR_ERR(skb); 155 if (err == -ENODATA) 156 goto done; | 128 return err; 129 } 130 kfree_skb(skb); 131 132 return 0; 133} 134EXPORT_SYMBOL_GPL(btintel_set_bdaddr); 135 --- 13 unchanged lines hidden (view full) --- 149 param[2] = 0x00; 150 } 151 152 skb = __hci_cmd_sync(hdev, 0xfc43, 3, param, HCI_INIT_TIMEOUT); 153 if (IS_ERR(skb)) { 154 err = PTR_ERR(skb); 155 if (err == -ENODATA) 156 goto done; |
157 BT_ERR("%s: Changing Intel diagnostic mode failed (%d)", 158 hdev->name, err); | 157 bt_dev_err(hdev, "Changing Intel diagnostic mode failed (%d)", 158 err); |
159 return err; 160 } 161 kfree_skb(skb); 162 163done: 164 btintel_set_event_mask(hdev, enable); 165 return 0; 166} --- 17 unchanged lines hidden (view full) --- 184} 185EXPORT_SYMBOL_GPL(btintel_set_diag_mfg); 186 187void btintel_hw_error(struct hci_dev *hdev, u8 code) 188{ 189 struct sk_buff *skb; 190 u8 type = 0x00; 191 | 159 return err; 160 } 161 kfree_skb(skb); 162 163done: 164 btintel_set_event_mask(hdev, enable); 165 return 0; 166} --- 17 unchanged lines hidden (view full) --- 184} 185EXPORT_SYMBOL_GPL(btintel_set_diag_mfg); 186 187void btintel_hw_error(struct hci_dev *hdev, u8 code) 188{ 189 struct sk_buff *skb; 190 u8 type = 0x00; 191 |
192 BT_ERR("%s: Hardware error 0x%2.2x", hdev->name, code); | 192 bt_dev_err(hdev, "Hardware error 0x%2.2x", code); |
193 194 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); 195 if (IS_ERR(skb)) { | 193 194 skb = __hci_cmd_sync(hdev, HCI_OP_RESET, 0, NULL, HCI_INIT_TIMEOUT); 195 if (IS_ERR(skb)) { |
196 BT_ERR("%s: Reset after hardware error failed (%ld)", 197 hdev->name, PTR_ERR(skb)); | 196 bt_dev_err(hdev, "Reset after hardware error failed (%ld)", 197 PTR_ERR(skb)); |
198 return; 199 } 200 kfree_skb(skb); 201 202 skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT); 203 if (IS_ERR(skb)) { | 198 return; 199 } 200 kfree_skb(skb); 201 202 skb = __hci_cmd_sync(hdev, 0xfc22, 1, &type, HCI_INIT_TIMEOUT); 203 if (IS_ERR(skb)) { |
204 BT_ERR("%s: Retrieving Intel exception info failed (%ld)", 205 hdev->name, PTR_ERR(skb)); | 204 bt_dev_err(hdev, "Retrieving Intel exception info failed (%ld)", 205 PTR_ERR(skb)); |
206 return; 207 } 208 209 if (skb->len != 13) { | 206 return; 207 } 208 209 if (skb->len != 13) { |
210 BT_ERR("%s: Exception info size mismatch", hdev->name); | 210 bt_dev_err(hdev, "Exception info size mismatch"); |
211 kfree_skb(skb); 212 return; 213 } 214 | 211 kfree_skb(skb); 212 return; 213 } 214 |
215 BT_ERR("%s: Exception info %s", hdev->name, (char *)(skb->data + 1)); | 215 bt_dev_err(hdev, "Exception info %s", (char *)(skb->data + 1)); |
216 217 kfree_skb(skb); 218} 219EXPORT_SYMBOL_GPL(btintel_hw_error); 220 221void btintel_version_info(struct hci_dev *hdev, struct intel_version *ver) 222{ 223 const char *variant; --- 4 unchanged lines hidden (view full) --- 228 break; 229 case 0x23: 230 variant = "Firmware"; 231 break; 232 default: 233 return; 234 } 235 | 216 217 kfree_skb(skb); 218} 219EXPORT_SYMBOL_GPL(btintel_hw_error); 220 221void btintel_version_info(struct hci_dev *hdev, struct intel_version *ver) 222{ 223 const char *variant; --- 4 unchanged lines hidden (view full) --- 228 break; 229 case 0x23: 230 variant = "Firmware"; 231 break; 232 default: 233 return; 234 } 235 |
236 BT_INFO("%s: %s revision %u.%u build %u week %u %u", hdev->name, 237 variant, ver->fw_revision >> 4, ver->fw_revision & 0x0f, 238 ver->fw_build_num, ver->fw_build_ww, 2000 + ver->fw_build_yy); | 236 bt_dev_info(hdev, "%s revision %u.%u build %u week %u %u", 237 variant, ver->fw_revision >> 4, ver->fw_revision & 0x0f, 238 ver->fw_build_num, ver->fw_build_ww, 239 2000 + ver->fw_build_yy); |
239} 240EXPORT_SYMBOL_GPL(btintel_version_info); 241 242int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, 243 const void *param) 244{ 245 while (plen > 0) { 246 struct sk_buff *skb; --- 69 unchanged lines hidden (view full) --- 316 int err; 317 318 if (debug) 319 mask[1] |= 0x62; 320 321 skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT); 322 if (IS_ERR(skb)) { 323 err = PTR_ERR(skb); | 240} 241EXPORT_SYMBOL_GPL(btintel_version_info); 242 243int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen, 244 const void *param) 245{ 246 while (plen > 0) { 247 struct sk_buff *skb; --- 69 unchanged lines hidden (view full) --- 317 int err; 318 319 if (debug) 320 mask[1] |= 0x62; 321 322 skb = __hci_cmd_sync(hdev, 0xfc52, 8, mask, HCI_INIT_TIMEOUT); 323 if (IS_ERR(skb)) { 324 err = PTR_ERR(skb); |
324 BT_ERR("%s: Setting Intel event mask failed (%d)", 325 hdev->name, err); | 325 bt_dev_err(hdev, "Setting Intel event mask failed (%d)", err); |
326 return err; 327 } 328 kfree_skb(skb); 329 330 return 0; 331} 332EXPORT_SYMBOL_GPL(btintel_set_event_mask); 333 --- 246 unchanged lines hidden --- | 326 return err; 327 } 328 kfree_skb(skb); 329 330 return 0; 331} 332EXPORT_SYMBOL_GPL(btintel_set_event_mask); 333 --- 246 unchanged lines hidden --- |