Blob Blame History Raw
From: Takashi Iwai <tiwai@suse.de>
Subject: kABI workaround for btintel symbol changes
Patch-mainline: Never, kABI workaround
References: bsc#1188893

The recent change for btintel changed symbols of btintel_version_info()
and btintel_download_firmware().  Add a workaround for those.

Signed-off-by: Takashi Iwai <tiwai@suse.de>

---
 drivers/bluetooth/btintel.c |   27 +++++++++++++++++++++++----
 drivers/bluetooth/btintel.h |    7 +++++--
 2 files changed, 28 insertions(+), 6 deletions(-)

--- a/drivers/bluetooth/btintel.c
+++ b/drivers/bluetooth/btintel.c
@@ -216,7 +216,7 @@ void btintel_hw_error(struct hci_dev *hd
 }
 EXPORT_SYMBOL_GPL(btintel_hw_error);
 
-int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver)
+int __btintel_version_info(struct hci_dev *hdev, struct intel_version *ver)
 {
 	const char *variant;
 
@@ -268,7 +268,7 @@ int btintel_version_info(struct hci_dev
 
 	return 0;
 }
-EXPORT_SYMBOL_GPL(btintel_version_info);
+EXPORT_SYMBOL_GPL(__btintel_version_info);
 
 int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen,
 			const void *param)
@@ -1015,7 +1015,7 @@ static bool btintel_firmware_version(str
 	return false;
 }
 
-int btintel_download_firmware(struct hci_dev *hdev,
+int __btintel_download_firmware(struct hci_dev *hdev,
 			      struct intel_version *ver,
 			      const struct firmware *fw,
 			      u32 *boot_param)
@@ -1064,7 +1064,7 @@ int btintel_download_firmware(struct hci
 
 	return btintel_download_firmware_payload(hdev, fw, RSA_HEADER_LEN);
 }
-EXPORT_SYMBOL_GPL(btintel_download_firmware);
+EXPORT_SYMBOL_GPL(__btintel_download_firmware);
 
 int btintel_download_firmware_newgen(struct hci_dev *hdev,
 				     struct intel_version_tlv *ver,
@@ -1272,6 +1272,25 @@ int btintel_set_debug_features(struct hc
 }
 EXPORT_SYMBOL_GPL(btintel_set_debug_features);
 
+/* XXX SLE15-SP3 kABI-compatible symbols */
+#undef btintel_version_info
+#undef btintel_download_firmware
+
+void btintel_version_info(struct hci_dev *hdev, struct intel_version *ver)
+{
+	__btintel_version_info(hdev, ver);
+}
+EXPORT_SYMBOL_GPL(btintel_version_info);
+
+int btintel_download_firmware(struct hci_dev *hdev,
+			      const struct firmware *fw,
+			      u32 *boot_param)
+{
+	struct intel_version ver = {};
+	return  __btintel_download_firmware(hdev, &ver, fw, boot_param);
+}
+EXPORT_SYMBOL_GPL(btintel_download_firmware);
+
 MODULE_AUTHOR("Marcel Holtmann <marcel@holtmann.org>");
 MODULE_DESCRIPTION("Bluetooth support for Intel devices ver " VERSION);
 MODULE_VERSION(VERSION);
--- a/drivers/bluetooth/btintel.h
+++ b/drivers/bluetooth/btintel.h
@@ -148,7 +148,7 @@ int btintel_set_diag(struct hci_dev *hde
 int btintel_set_diag_mfg(struct hci_dev *hdev, bool enable);
 void btintel_hw_error(struct hci_dev *hdev, u8 code);
 
-int btintel_version_info(struct hci_dev *hdev, struct intel_version *ver);
+int __btintel_version_info(struct hci_dev *hdev, struct intel_version *ver);
 int btintel_version_info_tlv(struct hci_dev *hdev, struct intel_version_tlv *version);
 int btintel_secure_send(struct hci_dev *hdev, u8 fragment_type, u32 plen,
 			const void *param);
@@ -163,7 +163,7 @@ struct regmap *btintel_regmap_init(struc
 int btintel_send_intel_reset(struct hci_dev *hdev, u32 boot_param);
 int btintel_read_boot_params(struct hci_dev *hdev,
 			     struct intel_boot_params *params);
-int btintel_download_firmware(struct hci_dev *dev, struct intel_version *ver,
+int __btintel_download_firmware(struct hci_dev *dev, struct intel_version *ver,
 			      const struct firmware *fw, u32 *boot_param);
 int btintel_download_firmware_newgen(struct hci_dev *hdev,
 				     struct intel_version_tlv *ver,
@@ -175,6 +175,9 @@ int btintel_read_debug_features(struct h
 				struct intel_debug_features *features);
 int btintel_set_debug_features(struct hci_dev *hdev,
 			       const struct intel_debug_features *features);
+/* XXX SLE15-SP3 kABI compatibility */
+#define btintel_version_info(h, v) __btintel_version_info(h, v)
+#define btintel_download_firmware(h, v, f, b) __btintel_download_firmware(h, v, f, b)
 #else
 
 static inline int btintel_check_bdaddr(struct hci_dev *hdev)