[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH V6 25/32] pci: add helper functions to check ranges
From: |
Isaku Yamahata |
Subject: |
[Qemu-devel] [PATCH V6 25/32] pci: add helper functions to check ranges overlap. |
Date: |
Fri, 30 Oct 2009 21:21:19 +0900 |
add helper function to check ranges overlap suggested by
Michael S. Tsirkin <address@hidden>.
His original suggestion was to use [first, last], however I chosen
to use offset, length pair, i.e. [offset, offset + length)
because pci configuration space related functions all uses offset and length
pair, so it helps to avoid to type constant twice.
Cc: Michael S. Tsirkin <address@hidden>
Signed-off-by: Isaku Yamahata <address@hidden>
---
hw/pci.h | 29 +++++++++++++++++++++++++++++
1 files changed, 29 insertions(+), 0 deletions(-)
diff --git a/hw/pci.h b/hw/pci.h
index 8e5d64a..7991bfd 100644
--- a/hw/pci.h
+++ b/hw/pci.h
@@ -406,4 +406,33 @@ PCIBus *pci_apb_init(target_phys_addr_t special_base,
PCIBus *sh_pci_register_bus(pci_set_irq_fn set_irq, pci_map_irq_fn map_irq,
void *pic, int devfn_min, int nirq);
+/* These are not pci specific. Should move into a separate header.
+ * Only pci.c uses them, so keep them here for now.
+ */
+
+/* Get last byte of a range from offset + length.
+ * Undefined for ranges that wrap around 0. */
+static inline uint64_t range_get_last(uint64_t offset, uint64_t len)
+{
+ return offset + len - 1;
+}
+
+/* Check whether a given range covers a given byte. */
+static inline int range_covers_byte(uint64_t offset, uint64_t len,
+ uint64_t byte)
+{
+ return offset <= byte && byte <= range_get_last(offset, len);
+}
+
+/* Check whether 2 given ranges overlap.
+ * Undefined if ranges that wrap around 0. */
+static inline int ranges_overlap(uint64_t first1, uint64_t len1,
+ uint64_t first2, uint64_t len2)
+{
+ uint64_t last1 = range_get_last(first1, len1);
+ uint64_t last2 = range_get_last(first2, len2);
+
+ return !(last2 < first1 || last1 < first2);
+}
+
#endif
--
1.6.0.2
- [Qemu-devel] [PATCH V6 09/32] pci: s/PCI_ADDRESS_SPACE_/PCI_BASE_ADDRESS_SPACE_/ to match pci_regs.h, (continued)
- [Qemu-devel] [PATCH V6 09/32] pci: s/PCI_ADDRESS_SPACE_/PCI_BASE_ADDRESS_SPACE_/ to match pci_regs.h, Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 12/32] pci_host.h: move functions in pci_host.h into .c file., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 04/32] pci: define a constant to represent a unmapped bar and use it., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 29/32] pci: cosmetic on pci_upadte_mappings(), Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 22/32] pci_host: change the signature of pci_data_{read, write}., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 13/32] pci_host: consolidate pci config address access., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 23/32] vmstate: introduce VMSTATE_BUFFER_UNSAFE_INFO., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 24/32] pci: pcie host and mmcfg support., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 07/32] pci/bridge: clean up of pci_bridge_initfn(), Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 31/32] pci: implement pci bridge filtering., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 25/32] pci: add helper functions to check ranges overlap.,
Isaku Yamahata <=
- [Qemu-devel] [PATCH V6 08/32] pci: clean up pci_init_wmask(), Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 28/32] pci: initialize pci config headers depending it pci header type., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 32/32] pci/monitor: print out bridge's filtering values and so on., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 20/32] pci: factor out the conversion logic from io port address into pci device., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 30/32] pci: factor out pci_for_each_device()., Isaku Yamahata, 2009/10/30
- [Qemu-devel] [PATCH V6 19/32] pci: make pci configuration transaction more accurate., Isaku Yamahata, 2009/10/30