49257914ffdfd6504d75c7271f7fc2ea37de8556
[oweals/u-boot.git] / include / dm / acpi.h
1 /* SPDX-License-Identifier: GPL-2.0+ */
2 /*
3  * Core ACPI (Advanced Configuration and Power Interface) support
4  *
5  * Copyright 2019 Google LLC
6  * Written by Simon Glass <sjg@chromium.org>
7  */
8
9 #ifndef __DM_ACPI_H__
10 #define __DM_ACPI_H__
11
12 /* Allow operations to be optional for ACPI */
13 #if CONFIG_IS_ENABLED(ACPIGEN)
14 #define ACPI_OPS_PTR(_ptr)      .acpi_ops       = _ptr,
15 #else
16 #define ACPI_OPS_PTR(_ptr)
17 #endif
18
19 /* Length of an ACPI name string, excluding nul terminator */
20 #define ACPI_NAME_LEN   4
21
22 /* Length of an ACPI name string including nul terminator */
23 #define ACPI_NAME_MAX   (ACPI_NAME_LEN + 1)
24
25 #if !defined(__ACPI__)
26
27 /**
28  * struct acpi_ops - ACPI operations supported by driver model
29  */
30 struct acpi_ops {
31         /**
32          * get_name() - Obtain the ACPI name of a device
33          *
34          * @dev: Device to check
35          * @out_name: Place to put the name, must hold at least ACPI_NAME_MAX
36          *      bytes
37          * @return 0 if OK, -ENOENT if no name is available, other -ve value on
38          *      other error
39          */
40         int (*get_name)(const struct udevice *dev, char *out_name);
41 };
42
43 #define device_get_acpi_ops(dev)        ((dev)->driver->acpi_ops)
44
45 /**
46  * acpi_get_name() - Obtain the ACPI name of a device
47  *
48  * @dev: Device to check
49  * @out_name: Place to put the name, must hold at least ACPI_NAME_MAX
50  *      bytes
51  * @return 0 if OK, -ENOENT if no name is available, other -ve value on
52  *      other error
53  */
54 int acpi_get_name(const struct udevice *dev, char *out_name);
55
56 /**
57  * acpi_copy_name() - Copy an ACPI name to an output buffer
58  *
59  * This convenience function can be used to return a literal string as a name
60  * in functions that implement the get_name() method.
61  *
62  * For example:
63  *
64  *      static int mydev_get_name(const struct udevice *dev, char *out_name)
65  *      {
66  *              return acpi_copy_name(out_name, "WIBB");
67  *      }
68  *
69  * @out_name: Place to put the name
70  * @name: Name to copy
71  * @return 0 (always)
72  */
73 int acpi_copy_name(char *out_name, const char *name);
74
75 #endif /* __ACPI__ */
76
77 #endif