0001
0002
0003
0004
0005
0006 #ifndef _LINUX_RESOURCE_EXT_H
0007 #define _LINUX_RESOURCE_EXT_H
0008 #include <linux/types.h>
0009 #include <linux/list.h>
0010 #include <linux/ioport.h>
0011 #include <linux/slab.h>
0012
0013
0014 struct resource_win {
0015 struct resource res;
0016 resource_size_t offset;
0017 };
0018
0019
0020
0021
0022
0023 struct resource_entry {
0024 struct list_head node;
0025 struct resource *res;
0026 resource_size_t offset;
0027 struct resource __res;
0028 };
0029
0030 extern struct resource_entry *
0031 resource_list_create_entry(struct resource *res, size_t extra_size);
0032 extern void resource_list_free(struct list_head *head);
0033
0034 static inline void resource_list_add(struct resource_entry *entry,
0035 struct list_head *head)
0036 {
0037 list_add(&entry->node, head);
0038 }
0039
0040 static inline void resource_list_add_tail(struct resource_entry *entry,
0041 struct list_head *head)
0042 {
0043 list_add_tail(&entry->node, head);
0044 }
0045
0046 static inline void resource_list_del(struct resource_entry *entry)
0047 {
0048 list_del(&entry->node);
0049 }
0050
0051 static inline void resource_list_free_entry(struct resource_entry *entry)
0052 {
0053 kfree(entry);
0054 }
0055
0056 static inline void
0057 resource_list_destroy_entry(struct resource_entry *entry)
0058 {
0059 resource_list_del(entry);
0060 resource_list_free_entry(entry);
0061 }
0062
0063 #define resource_list_for_each_entry(entry, list) \
0064 list_for_each_entry((entry), (list), node)
0065
0066 #define resource_list_for_each_entry_safe(entry, tmp, list) \
0067 list_for_each_entry_safe((entry), (tmp), (list), node)
0068
0069 static inline struct resource_entry *
0070 resource_list_first_type(struct list_head *list, unsigned long type)
0071 {
0072 struct resource_entry *entry;
0073
0074 resource_list_for_each_entry(entry, list) {
0075 if (resource_type(entry->res) == type)
0076 return entry;
0077 }
0078 return NULL;
0079 }
0080
0081 #endif