lkml.org 
[lkml]   [2014]   [May]   [9]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 1/4] x86/iosf: Make IOSF driver modular and usable by more drivers
    Date
    From: "David E. Box" <david.e.box@linux.intel.com>

    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>
    ---
    arch/x86/Kconfig | 7 ++-----
    arch/x86/include/asm/iosf_mbi.h | 33 +++++++++++++++++++++++++++++++++
    arch/x86/kernel/iosf_mbi.c | 7 +++++++
    3 files changed, 42 insertions(+), 5 deletions(-)

    diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
    index 25d2c6f..f1304d3 100644
    --- a/arch/x86/Kconfig
    +++ b/arch/x86/Kconfig
    @@ -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"

    diff --git a/arch/x86/include/asm/iosf_mbi.h b/arch/x86/include/asm/iosf_mbi.h
    index 8e71c79..1a91a36 100644
    --- a/arch/x86/include/asm/iosf_mbi.h
    +++ b/arch/x86/include/asm/iosf_mbi.h
    @@ -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
    @@ -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 */
    diff --git a/arch/x86/kernel/iosf_mbi.c b/arch/x86/kernel/iosf_mbi.c
    index c3aae66..f4ff978 100644
    --- a/arch/x86/kernel/iosf_mbi.c
    +++ b/arch/x86/kernel/iosf_mbi.c
    @@ -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)
    {
    --
    1.7.10.4


    \
     
     \ /
      Last update: 2014-05-09 23:21    [W:4.596 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site