]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
resource: Add resource set range and size helpers
authorIlpo Järvinen <ilpo.jarvinen@linux.intel.com>
Fri, 14 Jun 2024 10:06:03 +0000 (13:06 +0300)
committerBjorn Helgaas <bhelgaas@google.com>
Thu, 10 Oct 2024 22:44:43 +0000 (17:44 -0500)
Setting the end address for a resource with a given size lacks a helper and
is therefore coded manually unlike the getter side which has a helper for
resource size calculation. Also, almost all callsites that calculate the
end address for a resource also set the start address right before it like
this:

  res->start = start_addr;
  res->end = res->start + size - 1;

Add resource_set_range(res, start_addr, size) that sets the start address
and calculates the end address to simplify this often repeated fragment.

Also add resource_set_size() for the cases where setting the start address
of the resource is not necessary but mention in its kerneldoc that
resource_set_range() is preferred when setting both addresses.

Link: https://lore.kernel.org/r/20240614100606.15830-2-ilpo.jarvinen@linux.intel.com
Signed-off-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
include/linux/ioport.h

index 6e9fb667a1c5a5d5f7b415ac1e21ac082569f256..5385349f0b8a68cb390bc7c1270b11223d5667f8 100644 (file)
@@ -249,6 +249,38 @@ struct resource *lookup_resource(struct resource *root, resource_size_t start);
 int adjust_resource(struct resource *res, resource_size_t start,
                    resource_size_t size);
 resource_size_t resource_alignment(struct resource *res);
+
+/**
+ * resource_set_size - Calculate resource end address from size and start
+ * @res: Resource descriptor
+ * @size: Size of the resource
+ *
+ * Calculate the end address for @res based on @size.
+ *
+ * Note: The start address of @res must be set when calling this function.
+ * Prefer resource_set_range() if setting both the start address and @size.
+ */
+static inline void resource_set_size(struct resource *res, resource_size_t size)
+{
+       res->end = res->start + size - 1;
+}
+
+/**
+ * resource_set_range - Set resource start and end addresses
+ * @res: Resource descriptor
+ * @start: Start address for the resource
+ * @size: Size of the resource
+ *
+ * Set @res start address and calculate the end address based on @size.
+ */
+static inline void resource_set_range(struct resource *res,
+                                     resource_size_t start,
+                                     resource_size_t size)
+{
+       res->start = start;
+       resource_set_size(res, size);
+}
+
 static inline resource_size_t resource_size(const struct resource *res)
 {
        return res->end - res->start + 1;