The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/acpica/acpivar.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2000 Mitsuru IWASAKI <iwasaki@jp.freebsd.org>
    3  * Copyright (c) 2000 Michael Smith <msmith@freebsd.org>
    4  * Copyright (c) 2000 BSDi
    5  * All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  *
   16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
   17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   26  * SUCH DAMAGE.
   27  *
   28  *      $FreeBSD: releng/5.2/sys/dev/acpica/acpivar.h 122765 2003-11-15 19:20:46Z njl $
   29  */
   30 
   31 #include "bus_if.h"
   32 #include <sys/eventhandler.h>
   33 #include <sys/sysctl.h>
   34 #if __FreeBSD_version >= 500000
   35 #include <sys/lock.h>
   36 #include <sys/mutex.h>
   37 #endif
   38 
   39 #include <machine/bus.h>
   40 #include <machine/resource.h>
   41 
   42 #if __FreeBSD_version < 500000
   43 typedef vm_offset_t vm_paddr_t;
   44 #endif
   45 
   46 struct acpi_softc {
   47     device_t            acpi_dev;
   48     dev_t               acpi_dev_t;
   49 
   50     struct resource     *acpi_irq;
   51     int                 acpi_irq_rid;
   52     void                *acpi_irq_handle;
   53 
   54     int                 acpi_enabled;
   55     int                 acpi_sstate;
   56     int                 acpi_sleep_disabled;
   57 
   58     struct sysctl_ctx_list acpi_sysctl_ctx;
   59     struct sysctl_oid   *acpi_sysctl_tree;
   60 #define ACPI_POWER_BUTTON_DEFAULT_SX    ACPI_STATE_S5;
   61 #define ACPI_SLEEP_BUTTON_DEFAULT_SX    ACPI_STATE_S1;
   62 #define ACPI_LID_SWITCH_DEFAULT_SX      ACPI_STATE_S1;
   63     int                 acpi_power_button_sx;
   64     int                 acpi_sleep_button_sx;
   65     int                 acpi_lid_switch_sx;
   66 
   67     int                 acpi_standby_sx;
   68     int                 acpi_suspend_sx;
   69 
   70     int                 acpi_sleep_delay;
   71     int                 acpi_s4bios;
   72     int                 acpi_disable_on_poweroff;
   73 
   74     int                 acpi_verbose;
   75 
   76     bus_dma_tag_t       acpi_waketag;
   77     bus_dmamap_t        acpi_wakemap;
   78     vm_offset_t         acpi_wakeaddr;
   79     vm_paddr_t          acpi_wakephys;
   80 
   81     struct sysctl_ctx_list       acpi_battery_sysctl_ctx;
   82     struct sysctl_oid           *acpi_battery_sysctl_tree;
   83 };
   84 
   85 struct acpi_device {
   86     /* ACPI ivars */
   87     ACPI_HANDLE                 ad_handle;
   88     int                         ad_magic;
   89     void                        *ad_private;
   90 
   91     /* resources */
   92     struct resource_list        ad_rl;
   93 
   94 };
   95 
   96 #if __FreeBSD_version < 500000
   97 /*
   98  * In 4.x, ACPI is protected by splhigh().
   99  */
  100 # define ACPI_LOCK                      s = splhigh()
  101 # define ACPI_UNLOCK                    splx(s)
  102 # define ACPI_ASSERTLOCK
  103 # define ACPI_MSLEEP(a, b, c, d, e)     tsleep(a, c, d, e)
  104 # define ACPI_LOCK_DECL                 int s
  105 # define kthread_create(a, b, c, d, e, f)       kthread_create(a, b, c, f)
  106 # define tc_init(a)                     init_timecounter(a)
  107 #else
  108 # define ACPI_LOCK
  109 # define ACPI_UNLOCK
  110 # define ACPI_ASSERTLOCK
  111 # define ACPI_LOCK_DECL
  112 #endif
  113 
  114 /*
  115  * ACPI CA does not define layers for non-ACPI CA drivers.
  116  * We define some here within the range provided.
  117  */
  118 #define ACPI_BUS                0x00010000
  119 #define ACPI_SYSTEM             0x00020000
  120 #define ACPI_POWER              0x00040000
  121 #define ACPI_EC                 0x00080000
  122 #define ACPI_AC_ADAPTER         0x00100000
  123 #define ACPI_BATTERY            0x00110000
  124 #define ACPI_BUTTON             0x00120000
  125 #define ACPI_PROCESSOR          0x00140000
  126 #define ACPI_THERMAL            0x00180000
  127 #define ACPI_FAN                0x00200000
  128 
  129 /*
  130  * Constants for different interrupt models used with acpi_SetIntrModel().
  131  */
  132 #define ACPI_INTR_PIC           0
  133 #define ACPI_INTR_APIC          1
  134 #define ACPI_INTR_SAPIC         2
  135 
  136 /*
  137  * Note that the low ivar values are reserved to provide
  138  * interface compatibility with ISA drivers which can also
  139  * attach to ACPI.
  140  */
  141 #define ACPI_IVAR_HANDLE        0x100
  142 #define ACPI_IVAR_MAGIC         0x101
  143 #define ACPI_IVAR_PRIVATE       0x102
  144 
  145 extern ACPI_HANDLE      acpi_get_handle(device_t dev);
  146 extern int              acpi_set_handle(device_t dev, ACPI_HANDLE h);
  147 extern int              acpi_get_magic(device_t dev);
  148 extern int              acpi_set_magic(device_t dev, int m);
  149 extern void *           acpi_get_private(device_t dev);
  150 extern int              acpi_set_private(device_t dev, void *p);
  151 extern ACPI_OBJECT_TYPE acpi_get_type(device_t dev);
  152 struct resource *       acpi_bus_alloc_gas(device_t dev, int *rid,
  153                                            ACPI_GENERIC_ADDRESS *gas);
  154 
  155 #ifdef ACPI_DEBUGGER
  156 extern void             acpi_EnterDebugger(void);
  157 #endif
  158 
  159 #ifdef ACPI_DEBUG
  160 #include <sys/cons.h>
  161 #define STEP(x)         do {printf x, printf("\n"); cngetc();} while (0)
  162 #else
  163 #define STEP(x)
  164 #endif
  165 
  166 #define ACPI_VPRINT(dev, acpi_sc, x...) do {                    \
  167     if (acpi_get_verbose(acpi_sc))                              \
  168         device_printf(dev, x);                                  \
  169 } while (0)
  170 
  171 #define ACPI_DEVINFO_PRESENT(x) (((x) & 0x9) == 9)
  172 extern BOOLEAN          acpi_DeviceIsPresent(device_t dev);
  173 extern BOOLEAN          acpi_BatteryIsPresent(device_t dev);
  174 extern BOOLEAN          acpi_MatchHid(device_t dev, char *hid);
  175 extern ACPI_STATUS      acpi_GetHandleInScope(ACPI_HANDLE parent, char *path,
  176                                               ACPI_HANDLE *result);
  177 extern ACPI_BUFFER      *acpi_AllocBuffer(int size);
  178 extern ACPI_STATUS      acpi_EvaluateInteger(ACPI_HANDLE handle, char *path,
  179                                              int *number);
  180 extern ACPI_STATUS      acpi_ConvertBufferToInteger(ACPI_BUFFER *bufp,
  181                                                     int *number);
  182 extern ACPI_STATUS      acpi_ForeachPackageObject(ACPI_OBJECT *obj, 
  183                                 void (*func)(ACPI_OBJECT *comp, void *arg),
  184                                 void *arg);
  185 extern ACPI_STATUS      acpi_FindIndexedResource(ACPI_BUFFER *buf, int index,
  186                                                  ACPI_RESOURCE **resp);
  187 extern ACPI_STATUS      acpi_AppendBufferResource(ACPI_BUFFER *buf,
  188                                                   ACPI_RESOURCE *res);
  189 extern ACPI_STATUS      acpi_OverrideInterruptLevel(UINT32 InterruptNumber);
  190 extern ACPI_STATUS      acpi_SetIntrModel(int model);
  191 extern ACPI_STATUS      acpi_SetSleepState(struct acpi_softc *sc, int state);
  192 extern ACPI_STATUS      acpi_Enable(struct acpi_softc *sc);
  193 extern ACPI_STATUS      acpi_Disable(struct acpi_softc *sc);
  194 extern void             acpi_UserNotify(const char *subsystem, ACPI_HANDLE h,
  195                                         uint8_t notify);
  196 
  197 struct acpi_parse_resource_set {
  198     void        (*set_init)(device_t dev, void **context);
  199     void        (*set_done)(device_t dev, void *context);
  200     void        (*set_ioport)(device_t dev, void *context, u_int32_t base,
  201                               u_int32_t length);
  202     void        (*set_iorange)(device_t dev, void *context,
  203                                u_int32_t low, u_int32_t high, 
  204                                u_int32_t length, u_int32_t align);
  205     void        (*set_memory)(device_t dev, void *context, u_int32_t base,
  206                               u_int32_t length);
  207     void        (*set_memoryrange)(device_t dev, void *context, u_int32_t low,
  208                                    u_int32_t high, u_int32_t length,
  209                                    u_int32_t align);
  210     void        (*set_irq)(device_t dev, void *context, u_int32_t *irq,
  211                            int count, int trig, int pol);
  212     void        (*set_drq)(device_t dev, void *context, u_int32_t *drq,
  213                            int count);
  214     void        (*set_start_dependant)(device_t dev, void *context,
  215                                        int preference);
  216     void        (*set_end_dependant)(device_t dev, void *context);
  217 };
  218 
  219 extern struct acpi_parse_resource_set   acpi_res_parse_set;
  220 extern ACPI_STATUS      acpi_parse_resources(device_t dev, ACPI_HANDLE handle,
  221                             struct acpi_parse_resource_set *set);
  222 /* XXX until Intel fix this in their headers, based on NEXT_RESOURCE */
  223 #define ACPI_RESOURCE_NEXT(Res) (ACPI_RESOURCE *)((UINT8 *)Res + Res->Length)
  224 
  225 /* ACPI event handling */
  226 extern UINT32   acpi_eventhandler_power_button_for_sleep(void *context);
  227 extern UINT32   acpi_eventhandler_power_button_for_wakeup(void *context);
  228 extern UINT32   acpi_eventhandler_sleep_button_for_sleep(void *context);
  229 extern UINT32   acpi_eventhandler_sleep_button_for_wakeup(void *context);
  230 
  231 #define ACPI_EVENT_PRI_FIRST      0
  232 #define ACPI_EVENT_PRI_DEFAULT    10000
  233 #define ACPI_EVENT_PRI_LAST       20000
  234 
  235 typedef void (*acpi_event_handler_t)(void *, int);
  236 
  237 EVENTHANDLER_DECLARE(acpi_sleep_event, acpi_event_handler_t);
  238 EVENTHANDLER_DECLARE(acpi_wakeup_event, acpi_event_handler_t);
  239 
  240 /* Device power control. */
  241 extern ACPI_STATUS      acpi_pwr_switch_consumer(ACPI_HANDLE consumer,
  242                                                  int state);
  243 
  244 /* Misc. */
  245 static __inline struct acpi_softc *
  246 acpi_device_get_parent_softc(device_t child)
  247 {
  248     device_t    parent;
  249 
  250     parent = device_get_parent(child);
  251     if (parent == NULL)
  252         return (NULL);
  253     return (device_get_softc(parent));
  254 }
  255 
  256 static __inline int
  257 acpi_get_verbose(struct acpi_softc *sc)
  258 {
  259     if (sc)
  260         return (sc->acpi_verbose);
  261     return (0);
  262 }
  263 
  264 extern char     *acpi_name(ACPI_HANDLE handle);
  265 extern int      acpi_avoid(ACPI_HANDLE handle);
  266 extern int      acpi_disabled(char *subsys);
  267 extern void     acpi_device_enable_wake_capability(ACPI_HANDLE h, int enable);
  268 extern void     acpi_device_enable_wake_event(ACPI_HANDLE h);
  269 extern int      acpi_machdep_init(device_t dev);
  270 extern void     acpi_install_wakeup_handler(struct acpi_softc *sc);
  271 extern int      acpi_sleep_machdep(struct acpi_softc *sc, int state);
  272 
  273 /* Battery Abstraction. */
  274 struct acpi_battinfo;
  275 struct acpi_battdesc;
  276 
  277 extern int      acpi_battery_register(int, int);
  278 extern int      acpi_battery_get_battinfo(int, struct acpi_battinfo *);
  279 extern int      acpi_battery_get_units(void);
  280 extern int      acpi_battery_get_info_expire(void);
  281 extern int      acpi_battery_get_battdesc(int, struct acpi_battdesc *);
  282 
  283 extern int      acpi_cmbat_get_battinfo(int, struct acpi_battinfo *);
  284 
  285 /* Embedded controller. */
  286 extern void     acpi_ec_ecdt_probe(device_t);
  287 
  288 /* AC adapter interface. */
  289 extern int      acpi_acad_get_acline(int *);
  290 
  291 /* Package manipulation convenience functions. */
  292 #define ACPI_PKG_VALID(pkg, size)                               \
  293     ((pkg) != NULL && (pkg)->Type == ACPI_TYPE_PACKAGE &&       \
  294      (pkg)->Package.Count >= (size))
  295 int             acpi_PkgInt(device_t dev, ACPI_OBJECT *res, int idx,
  296                             ACPI_INTEGER *dst);
  297 int             acpi_PkgInt32(device_t dev, ACPI_OBJECT *res, int idx,
  298                               uint32_t *dst);
  299 int             acpi_PkgStr(device_t dev, ACPI_OBJECT *res, int idx, void *dst,
  300                             size_t size);
  301 int             acpi_PkgGas(device_t dev, ACPI_OBJECT *res, int idx, int *rid,
  302                             struct resource **dst);
  303 
  304 #if __FreeBSD_version >= 500000
  305 #ifndef ACPI_MAX_THREADS
  306 #define ACPI_MAX_THREADS        3
  307 #endif
  308 #if ACPI_MAX_THREADS > 0
  309 #define ACPI_USE_THREADS
  310 #endif
  311 #endif
  312 
  313 #ifdef ACPI_USE_THREADS
  314 /* ACPI task kernel thread initialization. */
  315 extern int      acpi_task_thread_init(void);
  316 #endif

Cache object: c1c6cd250cbd3689f14b97bb12908f9d


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.