Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c63587d7 authored by Alex Williamson's avatar Alex Williamson Committed by Bjorn Helgaas
Browse files

PCI: export pci_user functions for use by other drivers



VFIO PCI support will make use of these for user-initiated
PCI config accesses.

Signed-off-by: default avatarAlex Williamson <alex.williamson@redhat.com>
Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
parent ad805758
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -162,7 +162,8 @@ int pci_user_read_config_##size \
	if (ret > 0)							\
	if (ret > 0)							\
		ret = -EINVAL;						\
		ret = -EINVAL;						\
	return ret;							\
	return ret;							\
}
}									\
EXPORT_SYMBOL_GPL(pci_user_read_config_##size);


/* Returns 0 on success, negative values indicate error. */
/* Returns 0 on success, negative values indicate error. */
#define PCI_USER_WRITE_CONFIG(size,type)				\
#define PCI_USER_WRITE_CONFIG(size,type)				\
@@ -181,7 +182,8 @@ int pci_user_write_config_##size \
	if (ret > 0)							\
	if (ret > 0)							\
		ret = -EINVAL;						\
		ret = -EINVAL;						\
	return ret;							\
	return ret;							\
}
}									\
EXPORT_SYMBOL_GPL(pci_user_write_config_##size);


PCI_USER_READ_CONFIG(byte, u8)
PCI_USER_READ_CONFIG(byte, u8)
PCI_USER_READ_CONFIG(word, u16)
PCI_USER_READ_CONFIG(word, u16)
+0 −7
Original line number Original line Diff line number Diff line
@@ -86,13 +86,6 @@ static inline bool pci_is_bridge(struct pci_dev *pci_dev)
	return !!(pci_dev->subordinate);
	return !!(pci_dev->subordinate);
}
}


extern int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
extern int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);
extern int pci_user_read_config_dword(struct pci_dev *dev, int where, u32 *val);
extern int pci_user_write_config_byte(struct pci_dev *dev, int where, u8 val);
extern int pci_user_write_config_word(struct pci_dev *dev, int where, u16 val);
extern int pci_user_write_config_dword(struct pci_dev *dev, int where, u32 val);

struct pci_vpd_ops {
struct pci_vpd_ops {
	ssize_t (*read)(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
	ssize_t (*read)(struct pci_dev *dev, loff_t pos, size_t count, void *buf);
	ssize_t (*write)(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
	ssize_t (*write)(struct pci_dev *dev, loff_t pos, size_t count, const void *buf);
+8 −0
Original line number Original line Diff line number Diff line
@@ -777,6 +777,14 @@ static inline int pci_write_config_dword(const struct pci_dev *dev, int where,
	return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
	return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val);
}
}


/* user-space driven config access */
int pci_user_read_config_byte(struct pci_dev *dev, int where, u8 *val);
int pci_user_read_config_word(struct pci_dev *dev, int where, u16 *val);
int pci_user_read_config_dword(struct pci_dev *dev, int where, u32 *val);
int pci_user_write_config_byte(struct pci_dev *dev, int where, u8 val);
int pci_user_write_config_word(struct pci_dev *dev, int where, u16 val);
int pci_user_write_config_dword(struct pci_dev *dev, int where, u32 val);

int __must_check pci_enable_device(struct pci_dev *dev);
int __must_check pci_enable_device(struct pci_dev *dev);
int __must_check pci_enable_device_io(struct pci_dev *dev);
int __must_check pci_enable_device_io(struct pci_dev *dev);
int __must_check pci_enable_device_mem(struct pci_dev *dev);
int __must_check pci_enable_device_mem(struct pci_dev *dev);