Line data Source code
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 */ 14 : struct 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 : */ 23 : struct 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 : 30 : extern struct resource_entry * 31 : resource_list_create_entry(struct resource *res, size_t extra_size); 32 : extern void resource_list_free(struct list_head *head); 33 : 34 : static inline void resource_list_add(struct resource_entry *entry, 35 : struct list_head *head) 36 : { 37 : list_add(&entry->node, head); 38 : } 39 : 40 : static inline void resource_list_add_tail(struct resource_entry *entry, 41 : struct list_head *head) 42 : { 43 0 : list_add_tail(&entry->node, head); 44 : } 45 : 46 : static inline void resource_list_del(struct resource_entry *entry) 47 : { 48 0 : list_del(&entry->node); 49 : } 50 : 51 : static inline void resource_list_free_entry(struct resource_entry *entry) 52 : { 53 0 : kfree(entry); 54 : } 55 : 56 : static inline void 57 : resource_list_destroy_entry(struct resource_entry *entry) 58 : { 59 0 : resource_list_del(entry); 60 0 : 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 : 69 : static inline struct resource_entry * 70 : resource_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 */