#include <linux/bitfield.h>
#include <linux/device.h>
#include <linux/errno.h>
#include <linux/i3c/master.h>
#include <linux/kernel.h>
#include <linux/io.h>
#include "hci.h"
#include "ext_caps.h"
#include "xfer_mode_rate.h"
#define CAP_HEADER_LENGTH …
#define CAP_HEADER_ID …
static int hci_extcap_hardware_id(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_master_config(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_multi_bus(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_xfer_modes(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_xfer_rates(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_auto_command(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_debug(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_scheduled_cmd(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_non_curr_master(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_ccc_resp_conf(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_global_DAT(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_multilane(struct i3c_hci *hci, void __iomem *base)
{ … }
static int hci_extcap_ncm_multilane(struct i3c_hci *hci, void __iomem *base)
{ … }
struct hci_ext_caps { … };
#define EXT_CAP(_id, _highest_mandatory_reg_offset, _parser) …
static const struct hci_ext_caps ext_capabilities[] = …;
static int hci_extcap_vendor_NXP(struct i3c_hci *hci, void __iomem *base)
{ … }
struct hci_ext_cap_vendor_specific { … };
#define EXT_CAP_VENDOR(_vendor, _cap, _highest_mandatory_reg_offset) …
static const struct hci_ext_cap_vendor_specific vendor_ext_caps[] = …;
static int hci_extcap_vendor_specific(struct i3c_hci *hci, void __iomem *base,
u32 cap_id, u32 cap_length)
{ … }
int i3c_hci_parse_ext_caps(struct i3c_hci *hci)
{ … }