26
26
#define ECDSA_HEADER_LEN 320
27
27
28
28
#define BTINTEL_PPAG_NAME "PPAG"
29
- #define BTINTEL_PPAG_PREFIX "\\_SB_.PCI0.XHCI.RHUB"
29
+
30
+ /* structure to store the PPAG data read from ACPI table */
31
+ struct btintel_ppag {
32
+ u32 domain ;
33
+ u32 mode ;
34
+ acpi_status status ;
35
+ struct hci_dev * hdev ;
36
+ };
30
37
31
38
#define CMD_WRITE_BOOT_PARAMS 0xfc0e
32
39
struct cmd_write_boot_params {
@@ -1295,17 +1302,16 @@ static acpi_status btintel_ppag_callback(acpi_handle handle, u32 lvl, void *data
1295
1302
1296
1303
status = acpi_get_name (handle , ACPI_FULL_PATHNAME , & string );
1297
1304
if (ACPI_FAILURE (status )) {
1298
- bt_dev_warn (hdev , "ACPI Failure: %s" , acpi_format_exception (status ));
1305
+ bt_dev_warn (hdev , "PPAG-BT: ACPI Failure: %s" , acpi_format_exception (status ));
1299
1306
return status ;
1300
1307
}
1301
1308
1302
- if ( strncmp ( BTINTEL_PPAG_PREFIX , string .pointer ,
1303
- strlen (BTINTEL_PPAG_PREFIX ) )) {
1309
+ len = strlen ( string .pointer );
1310
+ if ( len < strlen (BTINTEL_PPAG_NAME )) {
1304
1311
kfree (string .pointer );
1305
1312
return AE_OK ;
1306
1313
}
1307
1314
1308
- len = strlen (string .pointer );
1309
1315
if (strncmp ((char * )string .pointer + len - 4 , BTINTEL_PPAG_NAME , 4 )) {
1310
1316
kfree (string .pointer );
1311
1317
return AE_OK ;
@@ -1314,7 +1320,8 @@ static acpi_status btintel_ppag_callback(acpi_handle handle, u32 lvl, void *data
1314
1320
1315
1321
status = acpi_evaluate_object (handle , NULL , NULL , & buffer );
1316
1322
if (ACPI_FAILURE (status )) {
1317
- bt_dev_warn (hdev , "ACPI Failure: %s" , acpi_format_exception (status ));
1323
+ ppag -> status = status ;
1324
+ bt_dev_warn (hdev , "PPAG-BT: ACPI Failure: %s" , acpi_format_exception (status ));
1318
1325
return status ;
1319
1326
}
1320
1327
@@ -1323,8 +1330,9 @@ static acpi_status btintel_ppag_callback(acpi_handle handle, u32 lvl, void *data
1323
1330
1324
1331
if (p -> type != ACPI_TYPE_PACKAGE || p -> package .count != 2 ) {
1325
1332
kfree (buffer .pointer );
1326
- bt_dev_warn (hdev , "Invalid object type: %d or package count: %d" ,
1333
+ bt_dev_warn (hdev , "PPAG-BT: Invalid object type: %d or package count: %d" ,
1327
1334
p -> type , p -> package .count );
1335
+ ppag -> status = AE_ERROR ;
1328
1336
return AE_ERROR ;
1329
1337
}
1330
1338
@@ -1335,6 +1343,7 @@ static acpi_status btintel_ppag_callback(acpi_handle handle, u32 lvl, void *data
1335
1343
1336
1344
ppag -> domain = (u32 )p -> package .elements [0 ].integer .value ;
1337
1345
ppag -> mode = (u32 )p -> package .elements [1 ].integer .value ;
1346
+ ppag -> status = AE_OK ;
1338
1347
kfree (buffer .pointer );
1339
1348
return AE_CTRL_TERMINATE ;
1340
1349
}
@@ -2314,12 +2323,11 @@ static int btintel_configure_offload(struct hci_dev *hdev)
2314
2323
2315
2324
static void btintel_set_ppag (struct hci_dev * hdev , struct intel_version_tlv * ver )
2316
2325
{
2317
- acpi_status status ;
2318
2326
struct btintel_ppag ppag ;
2319
2327
struct sk_buff * skb ;
2320
2328
struct btintel_loc_aware_reg ppag_cmd ;
2321
2329
2322
- /* PPAG is not supported if CRF is HrP2, Jfp2, JfP1 */
2330
+ /* PPAG is not supported if CRF is HrP2, Jfp2, JfP1 */
2323
2331
switch (ver -> cnvr_top & 0xFFF ) {
2324
2332
case 0x504 : /* Hrp2 */
2325
2333
case 0x202 : /* Jfp2 */
@@ -2330,26 +2338,26 @@ static void btintel_set_ppag(struct hci_dev *hdev, struct intel_version_tlv *ver
2330
2338
memset (& ppag , 0 , sizeof (ppag ));
2331
2339
2332
2340
ppag .hdev = hdev ;
2333
- status = acpi_walk_namespace ( ACPI_TYPE_ANY , ACPI_ROOT_OBJECT ,
2334
- ACPI_UINT32_MAX , NULL ,
2335
- btintel_ppag_callback , & ppag , NULL );
2341
+ ppag . status = AE_NOT_FOUND ;
2342
+ acpi_walk_namespace ( ACPI_TYPE_PACKAGE , ACPI_HANDLE ( GET_HCIDEV_DEV ( hdev )) ,
2343
+ 1 , NULL , btintel_ppag_callback , & ppag , NULL );
2336
2344
2337
- if (ACPI_FAILURE (status )) {
2338
- /* Do not log warning message if ACPI entry is not found */
2339
- if ( status == AE_NOT_FOUND )
2345
+ if (ACPI_FAILURE (ppag . status )) {
2346
+ if ( ppag . status == AE_NOT_FOUND ) {
2347
+ bt_dev_dbg ( hdev , "PPAG-BT: ACPI entry not found" );
2340
2348
return ;
2341
- bt_dev_warn ( hdev , "PPAG: ACPI Failure: %s" , acpi_format_exception ( status ));
2349
+ }
2342
2350
return ;
2343
2351
}
2344
2352
2345
2353
if (ppag .domain != 0x12 ) {
2346
- bt_dev_warn (hdev , "PPAG-BT Domain disabled " );
2354
+ bt_dev_warn (hdev , "PPAG-BT: domain is not bluetooth " );
2347
2355
return ;
2348
2356
}
2349
2357
2350
2358
/* PPAG mode, BIT0 = 0 Disabled, BIT0 = 1 Enabled */
2351
2359
if (!(ppag .mode & BIT (0 ))) {
2352
- bt_dev_dbg (hdev , "PPAG disabled" );
2360
+ bt_dev_dbg (hdev , "PPAG-BT: disabled" );
2353
2361
return ;
2354
2362
}
2355
2363
0 commit comments