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 list_add_tail(&entry->node, head); 44 } 45 46 static inline void resource_list_del(struct resource_entry *entry) 47 { 48 list_del(&entry->node); 49 } 50 51 static inline void resource_list_free_entry(struct resource_entry *entry) 52 { 53 kfree(entry); 54 } 55 56 static inline void 57 resource_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 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 */ 82
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.