162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2020, MIPI Alliance, Inc.
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Author: Nicolas Pitre <npitre@baylibre.com>
662306a36Sopenharmony_ci *
762306a36Sopenharmony_ci * Common IBI related stuff
862306a36Sopenharmony_ci */
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#ifndef IBI_H
1162306a36Sopenharmony_ci#define IBI_H
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci/*
1462306a36Sopenharmony_ci * IBI Status Descriptor bits
1562306a36Sopenharmony_ci */
1662306a36Sopenharmony_ci#define IBI_STS				BIT(31)
1762306a36Sopenharmony_ci#define IBI_ERROR			BIT(30)
1862306a36Sopenharmony_ci#define IBI_STATUS_TYPE			BIT(29)
1962306a36Sopenharmony_ci#define IBI_HW_CONTEXT			GENMASK(28, 26)
2062306a36Sopenharmony_ci#define IBI_TS				BIT(25)
2162306a36Sopenharmony_ci#define IBI_LAST_STATUS			BIT(24)
2262306a36Sopenharmony_ci#define IBI_CHUNKS			GENMASK(23, 16)
2362306a36Sopenharmony_ci#define IBI_ID				GENMASK(15, 8)
2462306a36Sopenharmony_ci#define IBI_TARGET_ADDR			GENMASK(15, 9)
2562306a36Sopenharmony_ci#define IBI_TARGET_RNW			BIT(8)
2662306a36Sopenharmony_ci#define IBI_DATA_LENGTH			GENMASK(7, 0)
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci/*  handy helpers */
2962306a36Sopenharmony_cistatic inline struct i3c_dev_desc *
3062306a36Sopenharmony_cii3c_hci_addr_to_dev(struct i3c_hci *hci, unsigned int addr)
3162306a36Sopenharmony_ci{
3262306a36Sopenharmony_ci	struct i3c_bus *bus = i3c_master_get_bus(&hci->master);
3362306a36Sopenharmony_ci	struct i3c_dev_desc *dev;
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ci	i3c_bus_for_each_i3cdev(bus, dev) {
3662306a36Sopenharmony_ci		if (dev->info.dyn_addr == addr)
3762306a36Sopenharmony_ci			return dev;
3862306a36Sopenharmony_ci	}
3962306a36Sopenharmony_ci	return NULL;
4062306a36Sopenharmony_ci}
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci#endif
43