Commit 14e12559919195d817d94bc5590a8a26c70e2298
Committed by
Anthony Liguori
1 parent
b7ee1603
qemu/pci: helper routines for pci access
Add inline routines for convenient access to pci devices with correct (little) endianness. Will be used by MSI-X support. Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
Showing
1 changed file
with
27 additions
and
3 deletions
hw/pci.h
| @@ -215,21 +215,45 @@ PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did, | @@ -215,21 +215,45 @@ PCIBus *pci_bridge_init(PCIBus *bus, int devfn, uint16_t vid, uint16_t did, | ||
| 215 | pci_map_irq_fn map_irq, const char *name); | 215 | pci_map_irq_fn map_irq, const char *name); |
| 216 | 216 | ||
| 217 | static inline void | 217 | static inline void |
| 218 | +pci_set_word(uint8_t *config, uint16_t val) | ||
| 219 | +{ | ||
| 220 | + cpu_to_le16wu((uint16_t *)config, val); | ||
| 221 | +} | ||
| 222 | + | ||
| 223 | +static inline uint16_t | ||
| 224 | +pci_get_word(uint8_t *config) | ||
| 225 | +{ | ||
| 226 | + return le16_to_cpupu((uint16_t *)config); | ||
| 227 | +} | ||
| 228 | + | ||
| 229 | +static inline void | ||
| 230 | +pci_set_long(uint8_t *config, uint32_t val) | ||
| 231 | +{ | ||
| 232 | + cpu_to_le32wu((uint32_t *)config, val); | ||
| 233 | +} | ||
| 234 | + | ||
| 235 | +static inline uint32_t | ||
| 236 | +pci_get_long(uint8_t *config) | ||
| 237 | +{ | ||
| 238 | + return le32_to_cpupu((uint32_t *)config); | ||
| 239 | +} | ||
| 240 | + | ||
| 241 | +static inline void | ||
| 218 | pci_config_set_vendor_id(uint8_t *pci_config, uint16_t val) | 242 | pci_config_set_vendor_id(uint8_t *pci_config, uint16_t val) |
| 219 | { | 243 | { |
| 220 | - cpu_to_le16wu((uint16_t *)&pci_config[PCI_VENDOR_ID], val); | 244 | + pci_set_word(&pci_config[PCI_VENDOR_ID], val); |
| 221 | } | 245 | } |
| 222 | 246 | ||
| 223 | static inline void | 247 | static inline void |
| 224 | pci_config_set_device_id(uint8_t *pci_config, uint16_t val) | 248 | pci_config_set_device_id(uint8_t *pci_config, uint16_t val) |
| 225 | { | 249 | { |
| 226 | - cpu_to_le16wu((uint16_t *)&pci_config[PCI_DEVICE_ID], val); | 250 | + pci_set_word(&pci_config[PCI_DEVICE_ID], val); |
| 227 | } | 251 | } |
| 228 | 252 | ||
| 229 | static inline void | 253 | static inline void |
| 230 | pci_config_set_class(uint8_t *pci_config, uint16_t val) | 254 | pci_config_set_class(uint8_t *pci_config, uint16_t val) |
| 231 | { | 255 | { |
| 232 | - cpu_to_le16wu((uint16_t *)&pci_config[PCI_CLASS_DEVICE], val); | 256 | + pci_set_word(&pci_config[PCI_CLASS_DEVICE], val); |
| 233 | } | 257 | } |
| 234 | 258 | ||
| 235 | typedef void (*pci_qdev_initfn)(PCIDevice *dev); | 259 | typedef void (*pci_qdev_initfn)(PCIDevice *dev); |