]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
x86, iosf: Make IOSF driver modular and usable by more drivers
authorDavid E. Box <david.e.box@linux.intel.com>
Fri, 9 May 2014 20:44:05 +0000 (13:44 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 14 Nov 2014 16:59:59 +0000 (08:59 -0800)
commit 6b8f0c8780c71d78624f736d7849645b64cc88b7 upstream.

Currently drivers that run on non-IOSF systems (Core/Xeon) can't use the IOSF
driver on SOC's without selecting it which forces an unnecessary and limiting
dependency. Provides dummy functions to allow these modules to conditionally
use the driver on IOSF equipped platforms without impacting their ability to
compile and load on non-IOSF platforms. Build default m to ensure availability
on x86 SOC's.

Signed-off-by: David E. Box <david.e.box@linux.intel.com>
Link: http://lkml.kernel.org/r/1399668248-24199-2-git-send-email-david.e.box@linux.intel.com
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Signed-off-by: Chang Rebecca Swee Fun <rebecca.swee.fun.chang@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/Kconfig
arch/x86/include/asm/iosf_mbi.h
arch/x86/kernel/iosf_mbi.c

index e4098912fef26469226d1d4d45b865052f7733c8..98aa930230ec2af2510bb64897bf02797f46b6b3 100644 (file)
@@ -2436,12 +2436,9 @@ config X86_DMA_REMAP
        depends on STA2X11
 
 config IOSF_MBI
-       bool
+       tristate
+       default m
        depends on PCI
-       ---help---
-         To be selected by modules requiring access to the Intel OnChip System
-         Fabric (IOSF) Sideband MailBox Interface (MBI). For MBI platforms
-         enumerable by PCI.
 
 source "net/Kconfig"
 
index 8e71c79417672e849bd602c09aa368ba54149c20..1a91a3698b1ebbdd2a55c87f6617add2d3107d3a 100644 (file)
 #define BT_MBI_PCIE_READ       0x00
 #define BT_MBI_PCIE_WRITE      0x01
 
+#if IS_ENABLED(CONFIG_IOSF_MBI)
+
+bool iosf_mbi_available(void);
+
 /**
  * iosf_mbi_read() - MailBox Interface read command
  * @port:      port indicating subunit being accessed
@@ -87,4 +91,33 @@ int iosf_mbi_write(u8 port, u8 opcode, u32 offset, u32 mdr);
  */
 int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask);
 
+#else /* CONFIG_IOSF_MBI is not enabled */
+static inline
+bool iosf_mbi_available(void)
+{
+       return false;
+}
+
+static inline
+int iosf_mbi_read(u8 port, u8 opcode, u32 offset, u32 *mdr)
+{
+       WARN(1, "IOSF_MBI driver not available");
+       return -EPERM;
+}
+
+static inline
+int iosf_mbi_write(u8 port, u8 opcode, u32 offset, u32 mdr)
+{
+       WARN(1, "IOSF_MBI driver not available");
+       return -EPERM;
+}
+
+static inline
+int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask)
+{
+       WARN(1, "IOSF_MBI driver not available");
+       return -EPERM;
+}
+#endif /* CONFIG_IOSF_MBI */
+
 #endif /* IOSF_MBI_SYMS_H */
index c3aae66728438f42a2f55f6bbc924c84fd5a61ea..f4ff9786a6209c3cee769e4d5897ce87e3686ff3 100644 (file)
@@ -177,6 +177,13 @@ int iosf_mbi_modify(u8 port, u8 opcode, u32 offset, u32 mdr, u32 mask)
 }
 EXPORT_SYMBOL(iosf_mbi_modify);
 
+bool iosf_mbi_available(void)
+{
+       /* Mbi isn't hot-pluggable. No remove routine is provided */
+       return mbi_pdev;
+}
+EXPORT_SYMBOL(iosf_mbi_available);
+
 static int iosf_mbi_probe(struct pci_dev *pdev,
                          const struct pci_device_id *unused)
 {