linux/include/linux/resource_ext.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-only */
   2/*
   3 * Copyright (C) 2015, Intel Corporation
   4 * Author: Jiang Liu <jiang.liu@linux.intel.com>
   5 */
   6#ifndef _LINUX_RESOURCE_EXT_H
   7#define _LINUX_RESOURCE_EXT_H
   8#include <linux/types.h>
   9#include <linux/list.h>
  10#include <linux/ioport.h>
  11#include <linux/slab.h>
  12
  13/* Represent resource window for bridge devices */
  14struct resource_win {
  15        struct resource res;            /* In master (CPU) address space */
  16        resource_size_t offset;         /* Translation offset for bridge */
  17};
  18
  19/*
  20 * Common resource list management data structure and interfaces to support
  21 * ACPI, PNP and PCI host bridge etc.
  22 */
  23struct resource_entry {
  24        struct list_head        node;
  25        struct resource         *res;   /* In master (CPU) address space */
  26        resource_size_t         offset; /* Translation offset for bridge */
  27        struct resource         __res;  /* Default storage for res */
  28};
  29
  30extern struct resource_entry *
  31resource_list_create_entry(struct resource *res, size_t extra_size);
  32extern void resource_list_free(struct list_head *head);
  33
  34static inline void resource_list_add(struct resource_entry *entry,
  35                                     struct list_head *head)
  36{
  37        list_add(&entry->node, head);
  38}
  39
  40static inline void resource_list_add_tail(struct resource_entry *entry,
  41                                          struct list_head *head)
  42{
  43        list_add_tail(&entry->node, head);
  44}
  45
  46static inline void resource_list_del(struct resource_entry *entry)
  47{
  48        list_del(&entry->node);
  49}
  50
  51static inline void resource_list_free_entry(struct resource_entry *entry)
  52{
  53        kfree(entry);
  54}
  55
  56static inline void
  57resource_list_destroy_entry(struct resource_entry *entry)
  58{
  59        resource_list_del(entry);
  60        resource_list_free_entry(entry);
  61}
  62
  63#define resource_list_for_each_entry(entry, list)       \
  64        list_for_each_entry((entry), (list), node)
  65
  66#define resource_list_for_each_entry_safe(entry, tmp, list)     \
  67        list_for_each_entry_safe((entry), (tmp), (list), node)
  68
  69static inline struct resource_entry *
  70resource_list_first_type(struct list_head *list, unsigned long type)
  71{
  72        struct resource_entry *entry;
  73
  74        resource_list_for_each_entry(entry, list) {
  75                if (resource_type(entry->res) == type)
  76                        return entry;
  77        }
  78        return NULL;
  79}
  80
  81#endif /* _LINUX_RESOURCE_EXT_H */
  82