Commit 14e12559919195d817d94bc5590a8a26c70e2298

Authored by Michael S. Tsirkin
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);