diff --git a/drivers/staging/wfx/hif_api_general.h b/drivers/staging/wfx/hif_api_general.h index 275354eb6b6a..1c010f15c6d0 100644 --- a/drivers/staging/wfx/hif_api_general.h +++ b/drivers/staging/wfx/hif_api_general.h @@ -223,12 +223,6 @@ struct hif_ind_generic { union hif_indication_data indication_data; } __packed; - -struct hif_ind_exception { - u8 data[124]; -} __packed; - - enum hif_error { HIF_ERROR_FIRMWARE_ROLLBACK = 0x0, HIF_ERROR_FIRMWARE_DEBUG_ENABLED = 0x1, @@ -248,6 +242,11 @@ struct hif_ind_error { u8 data[]; } __packed; +struct hif_ind_exception { + __le32 type; + u8 data[]; +} __packed; + enum hif_secure_link_state { SEC_LINK_UNAVAILABLE = 0x0, SEC_LINK_RESERVED = 0x1, diff --git a/drivers/staging/wfx/hif_rx.c b/drivers/staging/wfx/hif_rx.c index e6daac36f5c8..783f301d58a8 100644 --- a/drivers/staging/wfx/hif_rx.c +++ b/drivers/staging/wfx/hif_rx.c @@ -331,10 +331,16 @@ static int hif_generic_indication(struct wfx_dev *wdev, static int hif_exception_indication(struct wfx_dev *wdev, const struct hif_msg *hif, const void *buf) { - size_t len = hif->len - 4; // drop header + const struct hif_ind_exception *body = buf; + int type = le32_to_cpu(body->type); - dev_err(wdev->dev, "firmware exception\n"); - print_hex_dump_bytes("Dump: ", DUMP_PREFIX_NONE, buf, len); + if (type == 4) + dev_err(wdev->dev, "firmware assert %d\n", + le32_to_cpup((__le32 *)body->data)); + else + dev_err(wdev->dev, "firmware exception\n"); + print_hex_dump(KERN_INFO, "hif: ", DUMP_PREFIX_OFFSET, + 16, 1, hif, hif->len, false); wdev->chip_frozen = true; return -1;