mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-25 18:30:06 +00:00
![Jiang Liu](/assets/img/avatar_default.png)
Currently ACPI, PCI and pnp all implement the same resource list management with different data structure. We need to transfer from one data structure into another when passing resources from one subsystem into another subsystem. So move struct resource_list_entry from ACPI into resource core and rename it as resource_entry, then it could be reused by different subystems and avoid the data structure conversion. Introduce dedicated header file resource_ext.h instead of embedding it into ioport.h to avoid header file inclusion order issues. Signed-off-by: Jiang Liu <jiang.liu@linux.intel.com> Acked-by: Vinod Koul <vinod.koul@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
77 lines
2.2 KiB
C
77 lines
2.2 KiB
C
/*
|
|
* Copyright (C) 2015, Intel Corporation
|
|
* Author: Jiang Liu <jiang.liu@linux.intel.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms and conditions of the GNU General Public License,
|
|
* version 2, as published by the Free Software Foundation.
|
|
*
|
|
* This program is distributed in the hope it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
|
* more details.
|
|
*/
|
|
#ifndef _LINUX_RESOURCE_EXT_H
|
|
#define _LINUX_RESOURCE_EXT_H
|
|
#include <linux/types.h>
|
|
#include <linux/list.h>
|
|
#include <linux/ioport.h>
|
|
#include <linux/slab.h>
|
|
|
|
/* Represent resource window for bridge devices */
|
|
struct resource_win {
|
|
struct resource res; /* In master (CPU) address space */
|
|
resource_size_t offset; /* Translation offset for bridge */
|
|
};
|
|
|
|
/*
|
|
* Common resource list management data structure and interfaces to support
|
|
* ACPI, PNP and PCI host bridge etc.
|
|
*/
|
|
struct resource_entry {
|
|
struct list_head node;
|
|
struct resource *res; /* In master (CPU) address space */
|
|
resource_size_t offset; /* Translation offset for bridge */
|
|
struct resource __res; /* Default storage for res */
|
|
};
|
|
|
|
extern struct resource_entry *
|
|
resource_list_create_entry(struct resource *res, size_t extra_size);
|
|
extern void resource_list_free(struct list_head *head);
|
|
|
|
static inline void resource_list_add(struct resource_entry *entry,
|
|
struct list_head *head)
|
|
{
|
|
list_add(&entry->node, head);
|
|
}
|
|
|
|
static inline void resource_list_add_tail(struct resource_entry *entry,
|
|
struct list_head *head)
|
|
{
|
|
list_add_tail(&entry->node, head);
|
|
}
|
|
|
|
static inline void resource_list_del(struct resource_entry *entry)
|
|
{
|
|
list_del(&entry->node);
|
|
}
|
|
|
|
static inline void resource_list_free_entry(struct resource_entry *entry)
|
|
{
|
|
kfree(entry);
|
|
}
|
|
|
|
static inline void
|
|
resource_list_destroy_entry(struct resource_entry *entry)
|
|
{
|
|
resource_list_del(entry);
|
|
resource_list_free_entry(entry);
|
|
}
|
|
|
|
#define resource_list_for_each_entry(entry, list) \
|
|
list_for_each_entry((entry), (list), node)
|
|
|
|
#define resource_list_for_each_entry_safe(entry, tmp, list) \
|
|
list_for_each_entry_safe((entry), (tmp), (list), node)
|
|
|
|
#endif /* _LINUX_RESOURCE_EXT_H */
|