Skip to content

Commit

Permalink
x86, iosf: Make IOSF driver modular and usable by more drivers
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
David E. Box authored and H. Peter Anvin committed May 9, 2014
1 parent d6d211d commit 6b8f0c8
Show file tree
Hide file tree
Showing 3 changed files with 42 additions and 5 deletions.
7 changes: 2 additions & 5 deletions arch/x86/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -2375,12 +2375,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"

Expand Down
33 changes: 33 additions & 0 deletions arch/x86/include/asm/iosf_mbi.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,10 @@
#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
Expand Down Expand Up @@ -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 */
7 changes: 7 additions & 0 deletions arch/x86/kernel/iosf_mbi.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
{
Expand Down

0 comments on commit 6b8f0c8

Please sign in to comment.