root/drivers/pci/hotplug/acpiphp.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. slot_name
  2. to_slot
  3. to_acpiphp_context
  4. func_to_context
  5. func_to_acpi_device
  6. func_to_handle
  7. to_acpiphp_root_context

   1 /* SPDX-License-Identifier: GPL-2.0+ */
   2 /*
   3  * ACPI PCI Hot Plug Controller Driver
   4  *
   5  * Copyright (C) 1995,2001 Compaq Computer Corporation
   6  * Copyright (C) 2001 Greg Kroah-Hartman (greg@kroah.com)
   7  * Copyright (C) 2001 IBM Corp.
   8  * Copyright (C) 2002 Hiroshi Aono (h-aono@ap.jp.nec.com)
   9  * Copyright (C) 2002,2003 Takayoshi Kochi (t-kochi@bq.jp.nec.com)
  10  * Copyright (C) 2002,2003 NEC Corporation
  11  * Copyright (C) 2003-2005 Matthew Wilcox (willy@infradead.org)
  12  * Copyright (C) 2003-2005 Hewlett Packard
  13  *
  14  * All rights reserved.
  15  *
  16  * Send feedback to <gregkh@us.ibm.com>,
  17  *                  <t-kochi@bq.jp.nec.com>
  18  *
  19  */
  20 
  21 #ifndef _ACPIPHP_H
  22 #define _ACPIPHP_H
  23 
  24 #include <linux/acpi.h>
  25 #include <linux/mutex.h>
  26 #include <linux/pci_hotplug.h>
  27 
  28 struct acpiphp_context;
  29 struct acpiphp_bridge;
  30 struct acpiphp_slot;
  31 
  32 /*
  33  * struct slot - slot information for each *physical* slot
  34  */
  35 struct slot {
  36         struct hotplug_slot     hotplug_slot;
  37         struct acpiphp_slot     *acpi_slot;
  38         unsigned int sun;       /* ACPI _SUN (Slot User Number) value */
  39 };
  40 
  41 static inline const char *slot_name(struct slot *slot)
  42 {
  43         return hotplug_slot_name(&slot->hotplug_slot);
  44 }
  45 
  46 static inline struct slot *to_slot(struct hotplug_slot *hotplug_slot)
  47 {
  48         return container_of(hotplug_slot, struct slot, hotplug_slot);
  49 }
  50 
  51 /*
  52  * struct acpiphp_bridge - PCI bridge information
  53  *
  54  * for each bridge device in ACPI namespace
  55  */
  56 struct acpiphp_bridge {
  57         struct list_head list;
  58         struct list_head slots;
  59         struct kref ref;
  60 
  61         struct acpiphp_context *context;
  62 
  63         int nr_slots;
  64 
  65         /* This bus (host bridge) or Secondary bus (PCI-to-PCI bridge) */
  66         struct pci_bus *pci_bus;
  67 
  68         /* PCI-to-PCI bridge device */
  69         struct pci_dev *pci_dev;
  70 
  71         bool is_going_away;
  72 };
  73 
  74 
  75 /*
  76  * struct acpiphp_slot - PCI slot information
  77  *
  78  * PCI slot information for each *physical* PCI slot
  79  */
  80 struct acpiphp_slot {
  81         struct list_head node;
  82         struct pci_bus *bus;
  83         struct list_head funcs;         /* one slot may have different
  84                                            objects (i.e. for each function) */
  85         struct slot *slot;
  86 
  87         u8              device;         /* pci device# */
  88         u32             flags;          /* see below */
  89 };
  90 
  91 
  92 /*
  93  * struct acpiphp_func - PCI function information
  94  *
  95  * PCI function information for each object in ACPI namespace
  96  * typically 8 objects per slot (i.e. for each PCI function)
  97  */
  98 struct acpiphp_func {
  99         struct acpiphp_bridge *parent;
 100         struct acpiphp_slot *slot;
 101 
 102         struct list_head sibling;
 103 
 104         u8              function;       /* pci function# */
 105         u32             flags;          /* see below */
 106 };
 107 
 108 struct acpiphp_context {
 109         struct acpi_hotplug_context hp;
 110         struct acpiphp_func func;
 111         struct acpiphp_bridge *bridge;
 112         unsigned int refcount;
 113 };
 114 
 115 static inline struct acpiphp_context *to_acpiphp_context(struct acpi_hotplug_context *hp)
 116 {
 117         return container_of(hp, struct acpiphp_context, hp);
 118 }
 119 
 120 static inline struct acpiphp_context *func_to_context(struct acpiphp_func *func)
 121 {
 122         return container_of(func, struct acpiphp_context, func);
 123 }
 124 
 125 static inline struct acpi_device *func_to_acpi_device(struct acpiphp_func *func)
 126 {
 127         return func_to_context(func)->hp.self;
 128 }
 129 
 130 static inline acpi_handle func_to_handle(struct acpiphp_func *func)
 131 {
 132         return func_to_acpi_device(func)->handle;
 133 }
 134 
 135 struct acpiphp_root_context {
 136         struct acpi_hotplug_context hp;
 137         struct acpiphp_bridge *root_bridge;
 138 };
 139 
 140 static inline struct acpiphp_root_context *to_acpiphp_root_context(struct acpi_hotplug_context *hp)
 141 {
 142         return container_of(hp, struct acpiphp_root_context, hp);
 143 }
 144 
 145 /*
 146  * struct acpiphp_attention_info - device specific attention registration
 147  *
 148  * ACPI has no generic method of setting/getting attention status
 149  * this allows for device specific driver registration
 150  */
 151 struct acpiphp_attention_info
 152 {
 153         int (*set_attn)(struct hotplug_slot *slot, u8 status);
 154         int (*get_attn)(struct hotplug_slot *slot, u8 *status);
 155         struct module *owner;
 156 };
 157 
 158 /* ACPI _STA method value (ignore bit 4; battery present) */
 159 #define ACPI_STA_ALL                    (0x0000000f)
 160 
 161 /* slot flags */
 162 
 163 #define SLOT_ENABLED            (0x00000001)
 164 #define SLOT_IS_GOING_AWAY      (0x00000002)
 165 
 166 /* function flags */
 167 
 168 #define FUNC_HAS_STA            (0x00000001)
 169 #define FUNC_HAS_EJ0            (0x00000002)
 170 
 171 /* function prototypes */
 172 
 173 /* acpiphp_core.c */
 174 int acpiphp_register_attention(struct acpiphp_attention_info *info);
 175 int acpiphp_unregister_attention(struct acpiphp_attention_info *info);
 176 int acpiphp_register_hotplug_slot(struct acpiphp_slot *slot, unsigned int sun);
 177 void acpiphp_unregister_hotplug_slot(struct acpiphp_slot *slot);
 178 
 179 /* acpiphp_glue.c */
 180 typedef int (*acpiphp_callback)(struct acpiphp_slot *slot, void *data);
 181 
 182 int acpiphp_enable_slot(struct acpiphp_slot *slot);
 183 int acpiphp_disable_slot(struct acpiphp_slot *slot);
 184 u8 acpiphp_get_power_status(struct acpiphp_slot *slot);
 185 u8 acpiphp_get_attention_status(struct acpiphp_slot *slot);
 186 u8 acpiphp_get_latch_status(struct acpiphp_slot *slot);
 187 u8 acpiphp_get_adapter_status(struct acpiphp_slot *slot);
 188 
 189 /* variables */
 190 extern bool acpiphp_disabled;
 191 
 192 #endif /* _ACPIPHP_H */

/* [<][>][^][v][top][bottom][index][help] */