xref: /linux/drivers/i3c/master/mipi-i3c-hci/ibi.h (revision a4eb44a6435d6d8f9e642407a4a06f65eb90ca04)
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /*
3  * Copyright (c) 2020, MIPI Alliance, Inc.
4  *
5  * Author: Nicolas Pitre <npitre@baylibre.com>
6  *
7  * Common IBI related stuff
8  */
9 
10 #ifndef IBI_H
11 #define IBI_H
12 
13 /*
14  * IBI Status Descriptor bits
15  */
16 #define IBI_STS				BIT(31)
17 #define IBI_ERROR			BIT(30)
18 #define IBI_STATUS_TYPE			BIT(29)
19 #define IBI_HW_CONTEXT			GENMASK(28, 26)
20 #define IBI_TS				BIT(25)
21 #define IBI_LAST_STATUS			BIT(24)
22 #define IBI_CHUNKS			GENMASK(23, 16)
23 #define IBI_ID				GENMASK(15, 8)
24 #define IBI_TARGET_ADDR			GENMASK(15, 9)
25 #define IBI_TARGET_RNW			BIT(8)
26 #define IBI_DATA_LENGTH			GENMASK(7, 0)
27 
28 /*  handy helpers */
29 static inline struct i3c_dev_desc *
30 i3c_hci_addr_to_dev(struct i3c_hci *hci, unsigned int addr)
31 {
32 	struct i3c_bus *bus = i3c_master_get_bus(&hci->master);
33 	struct i3c_dev_desc *dev;
34 
35 	i3c_bus_for_each_i3cdev(bus, dev) {
36 		if (dev->info.dyn_addr == addr)
37 			return dev;
38 	}
39 	return NULL;
40 }
41 
42 #endif
43