resource_ext.h (2135B)
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 */