scmi_info
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
static inline void scmi_xfer_command_release(struct scmi_info *info,
static inline void scmi_clear_channel(struct scmi_info *info,
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
#define handle_to_scmi_info(h) container_of(h, struct scmi_info, handle)
#define tx_minfo_to_scmi_info(h) container_of(h, struct scmi_info, tx_minfo)
#define bus_nb_to_scmi_info(nb) container_of(nb, struct scmi_info, bus_nb)
#define req_nb_to_scmi_info(nb) container_of(nb, struct scmi_info, dev_req_nb)
scmi_alloc_init_protocol_instance(struct scmi_info *info,
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(pi->handle);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info;
info = list_entry(p, struct scmi_info, node);
struct scmi_info *info;
static int __scmi_xfer_info_init(struct scmi_info *sinfo,
static int scmi_channels_max_msg_configure(struct scmi_info *sinfo)
static int scmi_xfer_info_init(struct scmi_info *sinfo)
static int scmi_chan_setup(struct scmi_info *info, struct device_node *of_node,
scmi_txrx_setup(struct scmi_info *info, struct device_node *of_node,
static int scmi_channels_setup(struct scmi_info *info)
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
static void scmi_cleanup_channels(struct scmi_info *info, struct idr *idr)
static void scmi_cleanup_txrx_channels(struct scmi_info *info)
struct scmi_info *info = bus_nb_to_scmi_info(nb);
struct scmi_info *info = req_nb_to_scmi_info(nb);
static struct scmi_debug_info *scmi_debugfs_common_setup(struct scmi_info *info)
static int scmi_debugfs_raw_mode_setup(struct scmi_info *info)
static void scmi_enable_matching_quirks(struct scmi_info *info)
struct scmi_info *info;
struct scmi_info *info = platform_get_drvdata(pdev);
struct scmi_info *info = dev_get_drvdata(dev);
struct scmi_info *info = dev_get_drvdata(dev);
struct scmi_info *info = dev_get_drvdata(dev);
struct scmi_info *info = dev_get_drvdata(dev);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info,
static void scmi_destroy_protocol_devices(struct scmi_info *info,
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = tx_minfo_to_scmi_info(minfo);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = tx_minfo_to_scmi_info(minfo);
struct scmi_info *info = handle_to_scmi_info(handle);
struct scmi_info *info = handle_to_scmi_info(cinfo->handle);
atomic_set(&scmi_info->inflight, INFLIGHT_NONE);
mutex_init(&scmi_info->shmem_lock);
smc_channel_lock_acquire(struct scmi_smc *scmi_info,
spin_until_cond(smc_xfer_inflight(xfer, &scmi_info->inflight));
mutex_lock(&scmi_info->shmem_lock);
static inline void smc_channel_lock_release(struct scmi_smc *scmi_info)
atomic_set(&scmi_info->inflight, INFLIGHT_NONE);
mutex_unlock(&scmi_info->shmem_lock);
struct scmi_smc *scmi_info;
scmi_info = devm_kzalloc(dev, sizeof(*scmi_info), GFP_KERNEL);
if (!scmi_info)
scmi_info->shmem = core->shmem->setup_iomap(cinfo, dev, tx, &res,
&scmi_info->io_ops);
if (IS_ERR(scmi_info->shmem))
return PTR_ERR(scmi_info->shmem);
void __iomem *ptr = (void __iomem *)scmi_info->shmem + size - 8;
scmi_info->param_page = SHMEM_PAGE(res.start);
scmi_info->param_offset = SHMEM_OFFSET(res.start);
scmi_info->irq = of_irq_get_byname(cdev->of_node, "a2p");
if (scmi_info->irq > 0) {
ret = request_irq(scmi_info->irq, smc_msg_done_isr,
IRQF_NO_SUSPEND, dev_name(dev), scmi_info);
scmi_info->func_id = func_id;
scmi_info->cap_id = cap_id;
scmi_info->cinfo = cinfo;
smc_channel_lock_init(scmi_info);
cinfo->transport_info = scmi_info;
struct scmi_smc *scmi_info = cinfo->transport_info;
if (!scmi_info)
if (scmi_info->irq > 0)
free_irq(scmi_info->irq, scmi_info);
scmi_info->cinfo = NULL;
struct scmi_smc *scmi_info = cinfo->transport_info;
smc_channel_lock_acquire(scmi_info, xfer);
core->shmem->tx_prepare(scmi_info->shmem, xfer, cinfo,
scmi_info->io_ops->toio);
if (scmi_info->cap_id != ULONG_MAX)
arm_smccc_1_1_invoke(scmi_info->func_id, scmi_info->cap_id, 0,
arm_smccc_1_1_invoke(scmi_info->func_id, scmi_info->param_page,
scmi_info->param_offset, 0, 0, 0, 0, 0,
smc_channel_lock_release(scmi_info);
struct scmi_smc *scmi_info = cinfo->transport_info;
core->shmem->fetch_response(scmi_info->shmem, xfer,
scmi_info->io_ops->fromio);
struct scmi_smc *scmi_info = cinfo->transport_info;
smc_channel_lock_release(scmi_info);
struct scmi_smc *scmi_info = data;
core->rx_callback(scmi_info->cinfo,
core->shmem->read_header(scmi_info->shmem), NULL);
static inline void smc_channel_lock_init(struct scmi_smc *scmi_info)