Zephyr Project API  3.2.0
A Scalable Open Source RTOS
addresses.h
Go to the documentation of this file.
1/*
2 * Copyright 2022 Intel Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_I3C_ADDRESSES_H_
8#define ZEPHYR_INCLUDE_DRIVERS_I3C_ADDRESSES_H_
9
17#include <zephyr/types.h>
18#include <zephyr/sys/sys_io.h>
19#include <zephyr/sys/util.h>
20
21#ifdef __cplusplus
22extern "C" {
23#endif
24
25#define I3C_BROADCAST_ADDR 0x7E
26#define I3C_MAX_ADDR 0x7F
27
28struct i3c_dev_list;
29
36};
37
42 /* 2 bits per slot */
43 unsigned long slots[((I3C_MAX_ADDR + 1) * 2) / BITS_PER_LONG];
44};
45
59 const struct i3c_dev_list *dev_list);
60
69 uint8_t dev_addr,
70 enum i3c_addr_slot_status status);
71
81 uint8_t dev_addr);
82
93 uint8_t dev_addr);
94
106
113static inline void i3c_addr_slots_mark_free(struct i3c_addr_slots *addr_slots,
114 uint8_t addr)
115{
116 i3c_addr_slots_set(addr_slots, addr,
118}
119
126static inline void i3c_addr_slots_mark_rsvd(struct i3c_addr_slots *addr_slots,
127 uint8_t addr)
128{
129 i3c_addr_slots_set(addr_slots, addr,
131}
132
139static inline void i3c_addr_slots_mark_i3c(struct i3c_addr_slots *addr_slots,
140 uint8_t addr)
141{
142 i3c_addr_slots_set(addr_slots, addr,
144}
145
152static inline void i3c_addr_slots_mark_i2c(struct i3c_addr_slots *addr_slots,
153 uint8_t addr)
154{
155 i3c_addr_slots_set(addr_slots, addr,
157}
158
159#ifdef __cplusplus
160}
161#endif
162
167#endif /* ZEPHYR_INCLUDE_DRIVERS_I3C_ADDRESSES_H_ */
uint8_t i3c_addr_slots_next_free_find(struct i3c_addr_slots *slots)
Find the next free address.
enum i3c_addr_slot_status i3c_addr_slots_status(struct i3c_addr_slots *slots, uint8_t dev_addr)
Get the address status of a device.
int i3c_addr_slots_init(struct i3c_addr_slots *slots, const struct i3c_dev_list *dev_list)
Initialize the I3C address slots struct.
#define I3C_MAX_ADDR
Definition: addresses.h:26
i3c_addr_slot_status
Definition: addresses.h:30
static void i3c_addr_slots_mark_rsvd(struct i3c_addr_slots *addr_slots, uint8_t addr)
Mark the address as reserved in device list.
Definition: addresses.h:126
static void i3c_addr_slots_mark_i2c(struct i3c_addr_slots *addr_slots, uint8_t addr)
Mark the address as I2C device in device list.
Definition: addresses.h:152
bool i3c_addr_slots_is_free(struct i3c_addr_slots *slots, uint8_t dev_addr)
Check if the address is free.
static void i3c_addr_slots_mark_i3c(struct i3c_addr_slots *addr_slots, uint8_t addr)
Mark the address as I3C device in device list.
Definition: addresses.h:139
void i3c_addr_slots_set(struct i3c_addr_slots *slots, uint8_t dev_addr, enum i3c_addr_slot_status status)
Set the address status of a device.
static void i3c_addr_slots_mark_free(struct i3c_addr_slots *addr_slots, uint8_t addr)
Mark the address as free (not used) in device list.
Definition: addresses.h:113
@ I3C_ADDR_SLOT_STATUS_RSVD
Definition: addresses.h:32
@ I3C_ADDR_SLOT_STATUS_MASK
Definition: addresses.h:35
@ I3C_ADDR_SLOT_STATUS_I3C_DEV
Definition: addresses.h:33
@ I3C_ADDR_SLOT_STATUS_FREE
Definition: addresses.h:31
@ I3C_ADDR_SLOT_STATUS_I2C_DEV
Definition: addresses.h:34
#define BITS_PER_LONG
Definition: util.h:52
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
Structure to keep track of addresses on I3C bus.
Definition: addresses.h:41
unsigned long slots[((0x7F+1) *2)/BITS_PER_LONG]
Definition: addresses.h:43
Structure for describing attached devices for a controller.
Definition: i3c.h:859
Misc utilities.