blob: aa55e03b774fab3938f9d16bd82ad8d7b0546388 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/* Copyright 2021 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
/**
* @file
* @brief Chrome OS-specific API for access to Cros Board Info(CBI)
*/
#ifndef ZEPHYR_INCLUDE_DRIVERS_CROS_CBI_H_
#define ZEPHYR_INCLUDE_DRIVERS_CROS_CBI_H_
#include <kernel.h>
#include <device.h>
#include <devicetree.h>
#define CBI_SSFC_VALUE_COMPAT named_cbi_ssfc_value
#define CBI_SSFC_VALUE_ID(id) DT_CAT(CBI_SSFC_VALUE_, id)
#define CBI_SSFC_VALUE_ID_WITH_COMMA(id) CBI_SSFC_VALUE_ID(id),
#define CBI_SSFC_VALUE_INST_ENUM(inst, _) \
CBI_SSFC_VALUE_ID_WITH_COMMA(DT_INST(inst, CBI_SSFC_VALUE_COMPAT))
#define CROS_CBI_LABEL "cros_cbi"
enum cbi_ssfc_value_id {
UTIL_LISTIFY(DT_NUM_INST_STATUS_OKAY(CBI_SSFC_VALUE_COMPAT),
CBI_SSFC_VALUE_INST_ENUM)
CBI_SSFC_VALUE_COUNT
};
/**
* @cond INTERNAL_HIDDEN
*
* cros cbi raw driver API definition and system call entry points
*
* (Internal use only.)
*/
typedef int (*cros_cbi_api_init)(const struct device *dev);
typedef int (*cros_cbi_api_ssfc_check_match)(const struct device *dev,
enum cbi_ssfc_value_id value_id);
__subsystem struct cros_cbi_driver_api {
cros_cbi_api_init init;
cros_cbi_api_ssfc_check_match ssfc_check_match;
};
/**
* @endcond
*/
/**
* @brief Initialize CBI.
*
* @param dev Pointer to the device structure for the CBI instance.
*
* @return 0 If successful.
* @retval -ENOTSUP Not supported api function.
*/
__syscall int cros_cbi_init(const struct device *dev);
static inline int z_impl_cros_cbi_init(const struct device *dev)
{
const struct cros_cbi_driver_api *api =
(const struct cros_cbi_driver_api *)dev->api;
if (!api->init) {
return -ENOTSUP;
}
return api->init(dev);
}
/**
* @brief Check if the CBI SSFC value matches the one in the EEPROM
*
* @param dev Pointer to the device.
*
* @return 1 If matches, 0 if not.
* @retval -ENOTSUP Not supported api function.
*/
__syscall int cros_cbi_ssfc_check_match(const struct device *dev,
enum cbi_ssfc_value_id value_id);
static inline int
z_impl_cros_cbi_ssfc_check_match(const struct device *dev,
enum cbi_ssfc_value_id value_id)
{
const struct cros_cbi_driver_api *api =
(const struct cros_cbi_driver_api *)dev->api;
if (!api->ssfc_check_match) {
return -ENOTSUP;
}
return api->ssfc_check_match(dev, value_id);
}
/**
* @}
*/
#include <syscalls/cros_cbi.h>
#endif /* ZEPHYR_INCLUDE_DRIVERS_CROS_CBI_H_ */
|