mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-08 14:13:53 +00:00
a19bd79e31
The cxl kernel API has a concept of a default context associated with each PCI device under the virtual PHB. The Mellanox CX4 will also use the cxl kernel API, but it does not use a virtual PHB - rather, the AFU appears as a physical function as a peer to the networking functions. In order to allow the kernel API to work with those networking functions, we will need to associate a default context with them as well. To this end, refactor the corresponding code to do this in vphb.c and export it so that it can be called from the PHB code. Signed-off-by: Ian Munsie <imunsie@au1.ibm.com> Reviewed-by: Frederic Barrat <fbarrat@linux.vnet.ibm.com> Reviewed-by: Andrew Donnellan <andrew.donnellan@au1.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
/*
|
|
* Copyright 2014 IBM Corp.
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version
|
|
* 2 of the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#ifndef _MISC_CXL_BASE_H
|
|
#define _MISC_CXL_BASE_H
|
|
|
|
#include <misc/cxl.h>
|
|
|
|
#ifdef CONFIG_CXL_BASE
|
|
|
|
#define CXL_IRQ_RANGES 4
|
|
|
|
struct cxl_irq_ranges {
|
|
irq_hw_number_t offset[CXL_IRQ_RANGES];
|
|
irq_hw_number_t range[CXL_IRQ_RANGES];
|
|
};
|
|
|
|
extern atomic_t cxl_use_count;
|
|
|
|
static inline bool cxl_ctx_in_use(void)
|
|
{
|
|
return (atomic_read(&cxl_use_count) != 0);
|
|
}
|
|
|
|
static inline void cxl_ctx_get(void)
|
|
{
|
|
atomic_inc(&cxl_use_count);
|
|
}
|
|
|
|
static inline void cxl_ctx_put(void)
|
|
{
|
|
atomic_dec(&cxl_use_count);
|
|
}
|
|
|
|
struct cxl_afu *cxl_afu_get(struct cxl_afu *afu);
|
|
void cxl_afu_put(struct cxl_afu *afu);
|
|
void cxl_slbia(struct mm_struct *mm);
|
|
bool cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu);
|
|
void cxl_pci_disable_device(struct pci_dev *dev);
|
|
|
|
#else /* CONFIG_CXL_BASE */
|
|
|
|
static inline bool cxl_ctx_in_use(void) { return false; }
|
|
static inline struct cxl_afu *cxl_afu_get(struct cxl_afu *afu) { return NULL; }
|
|
static inline void cxl_afu_put(struct cxl_afu *afu) {}
|
|
static inline void cxl_slbia(struct mm_struct *mm) {}
|
|
static inline bool cxl_pci_associate_default_context(struct pci_dev *dev, struct cxl_afu *afu) { return false; }
|
|
static inline void cxl_pci_disable_device(struct pci_dev *dev) {}
|
|
|
|
#endif /* CONFIG_CXL_BASE */
|
|
|
|
#endif
|