xref: /dflybsd-src/sys/dev/acpica/acpi_if.m (revision 417dc5a4ca57ab931d8a048e758e6771e6ffb7e5)
15db2f26eSSascha Wildner#-
25db2f26eSSascha Wildner# Copyright (c) 2004 Nate Lawson
35db2f26eSSascha Wildner# All rights reserved.
45db2f26eSSascha Wildner#
55db2f26eSSascha Wildner# Redistribution and use in source and binary forms, with or without
65db2f26eSSascha Wildner# modification, are permitted provided that the following conditions
75db2f26eSSascha Wildner# are met:
85db2f26eSSascha Wildner# 1. Redistributions of source code must retain the above copyright
95db2f26eSSascha Wildner#    notice, this list of conditions and the following disclaimer.
105db2f26eSSascha Wildner# 2. Redistributions in binary form must reproduce the above copyright
115db2f26eSSascha Wildner#    notice, this list of conditions and the following disclaimer in the
125db2f26eSSascha Wildner#    documentation and/or other materials provided with the distribution.
135db2f26eSSascha Wildner#
145db2f26eSSascha Wildner# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
155db2f26eSSascha Wildner# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
165db2f26eSSascha Wildner# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
175db2f26eSSascha Wildner# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
185db2f26eSSascha Wildner# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
195db2f26eSSascha Wildner# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
205db2f26eSSascha Wildner# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
215db2f26eSSascha Wildner# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
225db2f26eSSascha Wildner# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
235db2f26eSSascha Wildner# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
245db2f26eSSascha Wildner# SUCH DAMAGE.
255db2f26eSSascha Wildner#
265db2f26eSSascha Wildner# $FreeBSD: src/sys/dev/acpica/acpi_if.m,v 1.8.8.1 2009/04/15 03:14:26 kensmith Exp $
275db2f26eSSascha Wildner#
285db2f26eSSascha Wildner
295db2f26eSSascha Wildner#include <sys/bus.h>
305db2f26eSSascha Wildner#include <sys/types.h>
315db2f26eSSascha Wildner#include "acpi.h"
325db2f26eSSascha Wildner
335db2f26eSSascha WildnerINTERFACE acpi;
345db2f26eSSascha Wildner
355db2f26eSSascha Wildner#
365db2f26eSSascha Wildner# Callback function for each child handle traversed in acpi_scan_children().
375db2f26eSSascha Wildner#
385db2f26eSSascha Wildner# ACPI_HANDLE h:  current child device being considered
395db2f26eSSascha Wildner#
405db2f26eSSascha Wildner# device_t *dev:  pointer to the child's original device_t or NULL if there
415db2f26eSSascha Wildner#   was none.  The callback should store a new device in *dev if it has
425db2f26eSSascha Wildner#   created one.  The method implementation will automatically clean up the
435db2f26eSSascha Wildner#   previous device and properly associate the current ACPI_HANDLE with it.
445db2f26eSSascha Wildner#
455db2f26eSSascha Wildner# level:  current level being scanned
465db2f26eSSascha Wildner#
475db2f26eSSascha Wildner# void *arg:  argument passed in original call to acpi_scan_children()
485db2f26eSSascha Wildner#
495db2f26eSSascha Wildner# Returns:  AE_OK if the scan should continue, otherwise an error
505db2f26eSSascha Wildner#
515db2f26eSSascha WildnerHEADER {
525db2f26eSSascha Wildner	typedef ACPI_STATUS (*acpi_scan_cb_t)(ACPI_HANDLE h, device_t *dev,
535db2f26eSSascha Wildner	    int level, void *arg);
545db2f26eSSascha Wildner
555db2f26eSSascha Wildner	struct acpi_bif;
565db2f26eSSascha Wildner	struct acpi_bst;
575db2f26eSSascha Wildner};
585db2f26eSSascha Wildner
595db2f26eSSascha Wildner#
605db2f26eSSascha Wildner# Default implementation for acpi_id_probe().
615db2f26eSSascha Wildner#
625db2f26eSSascha WildnerCODE {
635db2f26eSSascha Wildner	static char *
645db2f26eSSascha Wildner	acpi_generic_id_probe(device_t bus, device_t dev, char **ids)
655db2f26eSSascha Wildner	{
665db2f26eSSascha Wildner		return (NULL);
675db2f26eSSascha Wildner	}
685db2f26eSSascha Wildner};
695db2f26eSSascha Wildner
705db2f26eSSascha Wildner#
715db2f26eSSascha Wildner# Check a device for a match in a list of ID strings.  The strings can be
725db2f26eSSascha Wildner# EISA PNP IDs or ACPI _HID/_CID values.
735db2f26eSSascha Wildner#
745db2f26eSSascha Wildner# device_t bus:  parent bus for the device
755db2f26eSSascha Wildner#
765db2f26eSSascha Wildner# device_t dev:  device being considered
775db2f26eSSascha Wildner#
785db2f26eSSascha Wildner# char **ids:  array of ID strings to consider
795db2f26eSSascha Wildner#
805db2f26eSSascha Wildner# Returns:  ID string matched or NULL if no match
815db2f26eSSascha Wildner#
825db2f26eSSascha WildnerMETHOD char * id_probe {
835db2f26eSSascha Wildner	device_t	bus;
845db2f26eSSascha Wildner	device_t	dev;
855db2f26eSSascha Wildner	char		**ids;
865db2f26eSSascha Wildner} DEFAULT acpi_generic_id_probe;
875db2f26eSSascha Wildner
885db2f26eSSascha Wildner#
895db2f26eSSascha Wildner# Evaluate an ACPI method or object, given its path.
905db2f26eSSascha Wildner#
915db2f26eSSascha Wildner# device_t bus:  parent bus for the device
925db2f26eSSascha Wildner#
935db2f26eSSascha Wildner# device_t dev:  evaluate the object relative to this device's handle.
945db2f26eSSascha Wildner#   Specify NULL to begin the search at the ACPI root.
955db2f26eSSascha Wildner#
965db2f26eSSascha Wildner# ACPI_STRING pathname:  absolute or relative path to this object
975db2f26eSSascha Wildner#
985db2f26eSSascha Wildner# ACPI_OBJECT_LIST *parameters:  array of arguments to pass to the object.
995db2f26eSSascha Wildner#   Specify NULL if there are none.
1005db2f26eSSascha Wildner#
1015db2f26eSSascha Wildner# ACPI_BUFFER *ret:  the result (if any) of the evaluation
1025db2f26eSSascha Wildner#   Specify NULL if there is none.
1035db2f26eSSascha Wildner#
1045db2f26eSSascha Wildner# Returns:  AE_OK or an error value
1055db2f26eSSascha Wildner#
1065db2f26eSSascha WildnerMETHOD ACPI_STATUS evaluate_object {
1075db2f26eSSascha Wildner	device_t	bus;
1085db2f26eSSascha Wildner	device_t	dev;
1095db2f26eSSascha Wildner	ACPI_STRING 	pathname;
1105db2f26eSSascha Wildner	ACPI_OBJECT_LIST *parameters;
1115db2f26eSSascha Wildner	ACPI_BUFFER	*ret;
1125db2f26eSSascha Wildner};
1135db2f26eSSascha Wildner
1145db2f26eSSascha Wildner#
1155db2f26eSSascha Wildner# Get the highest power state (D0-D3) that is usable for a device when
1165db2f26eSSascha Wildner# suspending/resuming.  If a bus calls this when suspending a device, it
1175db2f26eSSascha Wildner# must also call it when resuming.
1185db2f26eSSascha Wildner#
1195db2f26eSSascha Wildner# device_t bus:  parent bus for the device
1205db2f26eSSascha Wildner#
1215db2f26eSSascha Wildner# device_t dev:  check this device's appropriate power state
1225db2f26eSSascha Wildner#
1235db2f26eSSascha Wildner# int *dstate:  if successful, contains the highest valid sleep state
1245db2f26eSSascha Wildner#
1255db2f26eSSascha Wildner# Returns:  0 on success, ESRCH if device has no special state, or
1265db2f26eSSascha Wildner#   some other error value.
1275db2f26eSSascha Wildner#
1285db2f26eSSascha WildnerMETHOD int pwr_for_sleep {
1295db2f26eSSascha Wildner	device_t	bus;
1305db2f26eSSascha Wildner	device_t	dev;
1315db2f26eSSascha Wildner	int		*dstate;
1325db2f26eSSascha Wildner};
1335db2f26eSSascha Wildner
1345db2f26eSSascha Wildner#
1355db2f26eSSascha Wildner# Rescan a subtree and optionally reattach devices to handles.  Users
1365db2f26eSSascha Wildner# specify a callback that is called for each ACPI_HANDLE of type Device
1375db2f26eSSascha Wildner# that is a child of "dev".
1385db2f26eSSascha Wildner#
1395db2f26eSSascha Wildner# device_t bus:  parent bus for the device
1405db2f26eSSascha Wildner#
1415db2f26eSSascha Wildner# device_t dev:  begin the scan starting with this device's handle.
1425db2f26eSSascha Wildner#   Specify NULL to begin the scan at the ACPI root.
1435db2f26eSSascha Wildner#
1445db2f26eSSascha Wildner# int max_depth:  number of levels to traverse (i.e., 1 means just the
1455db2f26eSSascha Wildner#   immediate children.
1465db2f26eSSascha Wildner#
1475db2f26eSSascha Wildner# acpi_scan_cb_t user_fn:  called for each child handle
1485db2f26eSSascha Wildner#
1495db2f26eSSascha Wildner# void *arg:  argument to pass to the callback function
1505db2f26eSSascha Wildner#
1515db2f26eSSascha Wildner# Returns:  AE_OK or an error value, based on the callback return value
1525db2f26eSSascha Wildner#
1535db2f26eSSascha WildnerMETHOD ACPI_STATUS scan_children {
1545db2f26eSSascha Wildner	device_t	bus;
1555db2f26eSSascha Wildner	device_t	dev;
1565db2f26eSSascha Wildner	int		max_depth;
1575db2f26eSSascha Wildner	acpi_scan_cb_t	user_fn;
1585db2f26eSSascha Wildner	void		*arg;
1595db2f26eSSascha Wildner};
1605db2f26eSSascha Wildner
1615db2f26eSSascha Wildner#
1625db2f26eSSascha Wildner# Query a given driver for its supported feature(s).  This should be
1635db2f26eSSascha Wildner# called by the parent bus before the driver is probed.
1645db2f26eSSascha Wildner#
1655db2f26eSSascha Wildner# driver_t *driver:  child driver
1665db2f26eSSascha Wildner#
1675db2f26eSSascha Wildner# u_int *features:  returned bitmask of all supported features
1685db2f26eSSascha Wildner#
1695db2f26eSSascha WildnerSTATICMETHOD int get_features {
1705db2f26eSSascha Wildner	driver_t	*driver;
1715db2f26eSSascha Wildner	u_int		*features;
1725db2f26eSSascha Wildner};
1735db2f26eSSascha Wildner
1745db2f26eSSascha Wildner#
1755db2f26eSSascha Wildner# Read embedded controller (EC) address space
1765db2f26eSSascha Wildner#
1775db2f26eSSascha Wildner# device_t dev:  EC device
1785db2f26eSSascha Wildner# u_int addr:  Address to read from in EC space
179*417dc5a4SSascha Wildner# UINT64 *val:  Location to store read value
1805db2f26eSSascha Wildner# int width:  Size of area to read in bytes
1815db2f26eSSascha Wildner#
1825db2f26eSSascha WildnerMETHOD int ec_read {
1835db2f26eSSascha Wildner	device_t	dev;
1845db2f26eSSascha Wildner	u_int		addr;
185*417dc5a4SSascha Wildner	UINT64		*val;
1865db2f26eSSascha Wildner	int		width;
1875db2f26eSSascha Wildner};
1885db2f26eSSascha Wildner
1895db2f26eSSascha Wildner#
1905db2f26eSSascha Wildner# Write embedded controller (EC) address space
1915db2f26eSSascha Wildner#
1925db2f26eSSascha Wildner# device_t dev:  EC device
1935db2f26eSSascha Wildner# u_int addr:  Address to write to in EC space
194*417dc5a4SSascha Wildner# UINT64 val:  Value to write
1955db2f26eSSascha Wildner# int width:  Size of value to write in bytes
1965db2f26eSSascha Wildner#
1975db2f26eSSascha WildnerMETHOD int ec_write {
1985db2f26eSSascha Wildner	device_t	dev;
1995db2f26eSSascha Wildner	u_int		addr;
200*417dc5a4SSascha Wildner	UINT64		val;
2015db2f26eSSascha Wildner	int		width;
2025db2f26eSSascha Wildner};
2035db2f26eSSascha Wildner
2045db2f26eSSascha Wildner#
2055db2f26eSSascha Wildner# Get battery information (_BIF format)
2065db2f26eSSascha Wildner#
2075db2f26eSSascha Wildner# device_t dev:  Battery device
2085db2f26eSSascha Wildner# struct acpi_bif *bif:  Pointer to storage for _BIF results
2095db2f26eSSascha Wildner#
2105db2f26eSSascha WildnerMETHOD int batt_get_info {
2115db2f26eSSascha Wildner	device_t	dev;
2125db2f26eSSascha Wildner	struct acpi_bif	*bif;
2135db2f26eSSascha Wildner};
2145db2f26eSSascha Wildner
2155db2f26eSSascha Wildner#
2165db2f26eSSascha Wildner# Get battery status (_BST format)
2175db2f26eSSascha Wildner#
2185db2f26eSSascha Wildner# device_t dev:  Battery device
2195db2f26eSSascha Wildner# struct acpi_bst *bst:  Pointer to storage for _BST results
2205db2f26eSSascha Wildner#
2215db2f26eSSascha WildnerMETHOD int batt_get_status {
2225db2f26eSSascha Wildner	device_t	dev;
2235db2f26eSSascha Wildner	struct acpi_bst	*bst;
2245db2f26eSSascha Wildner};
225