Branch data 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 : : 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 : 0 : 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 */