opnsense-src/sys/compat/linuxkpi/common/include/linux/mhi.h
Bjoern A. Zeeb bee50f894b LinuxKPI: qcom: update QMI and MHI
Minor updates to QMI and MHI (mostly making arguments const)
in order to facilitate porting the next generation athk driver.

MFC after:	10 days
2023-06-10 23:06:04 +00:00

222 lines
5.5 KiB
C

/*-
* SPDX-License-Identifier: BSD-2-Clause
*
* Copyright (c) 2022-2023 Bjoern A. Zeeb
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* $FreeBSD$
*/
#ifndef _LINUXKPI_LINUX_MHI_H
#define _LINUXKPI_LINUX_MHI_H
#include <linux/types.h>
/* Modem Host Interface (MHI) */
/* XXX FIXME */
#define MHI_DB_BRST_DISABLE 0
#define MHI_ER_CTRL 0
enum mhi_callback {
MHI_CB_SYS_ERROR,
MHI_CB_BW_REQ,
MHI_CB_EE_MISSION_MODE,
MHI_CB_EE_RDDM,
MHI_CB_FATAL_ERROR,
MHI_CB_IDLE,
MHI_CB_LPM_ENTER,
MHI_CB_LPM_EXIT,
MHI_CB_PENDING_DATA,
};
struct mhi_channel_config {
const char *name;
int auto_queue, dir, doorbell, doorbell_mode_switch, ee_mask, event_ring, lpm_notify, num, num_elements, offload_channel, pollcfg;
};
struct mhi_event_config {
int client_managed, data_type, hardware_event, irq, irq_moderation_ms, mode, num_elements, offload_channel, priority;
};
struct mhi_device {
};
struct mhi_controller_config {
const struct mhi_channel_config *ch_cfg;
struct mhi_event_config *event_cfg;
int buf_len, max_channels, num_channels, num_events, use_bounce_buf;
uint32_t timeout_ms;
};
struct mhi_controller {
struct device *cntrl_dev;
struct mhi_device *mhi_dev;
void *regs;
int *irq;
const char *fw_image;
bool fbc_download;
size_t rddm_size;
size_t sbl_size;
size_t seg_len;
size_t reg_len;
int nr_irqs;
unsigned long irq_flags;
uint32_t timeout_ms;
dma_addr_t iova_start;
dma_addr_t iova_stop;
int (*runtime_get)(struct mhi_controller *);
void (*runtime_put)(struct mhi_controller *);
void (*status_cb)(struct mhi_controller *, enum mhi_callback);
int (*read_reg)(struct mhi_controller *, void __iomem *, uint32_t *);
void (*write_reg)(struct mhi_controller *, void __iomem *, uint32_t);
};
/* -------------------------------------------------------------------------- */
struct mhi_controller *linuxkpi_mhi_alloc_controller(void);
void linuxkpi_mhi_free_controller(struct mhi_controller *);
int linuxkpi_mhi_register_controller(struct mhi_controller *,
const struct mhi_controller_config *);
void linuxkpi_mhi_unregister_controller(struct mhi_controller *);
/* -------------------------------------------------------------------------- */
static inline struct mhi_controller *
mhi_alloc_controller(void)
{
/* Keep allocations internal to our implementation. */
return (linuxkpi_mhi_alloc_controller());
}
static inline void
mhi_free_controller(struct mhi_controller *mhi_ctrl)
{
linuxkpi_mhi_free_controller(mhi_ctrl);
}
static inline int
mhi_register_controller(struct mhi_controller *mhi_ctrl,
const struct mhi_controller_config *cfg)
{
return (linuxkpi_mhi_register_controller(mhi_ctrl, cfg));
}
static inline void
mhi_unregister_controller(struct mhi_controller *mhi_ctrl)
{
linuxkpi_mhi_unregister_controller(mhi_ctrl);
}
/* -------------------------------------------------------------------------- */
static __inline int
mhi_device_get_sync(struct mhi_device *mhi_dev)
{
/* XXX TODO */
return (-1);
}
static __inline void
mhi_device_put(struct mhi_device *mhi_dev)
{
/* XXX TODO */
}
/* -------------------------------------------------------------------------- */
static __inline int
mhi_prepare_for_power_up(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
static __inline int
mhi_sync_power_up(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
static __inline int
mhi_async_power_up(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
static __inline void
mhi_power_down(struct mhi_controller *mhi_ctrl, bool x)
{
/* XXX TODO */
}
static __inline void
mhi_unprepare_after_power_down(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
}
/* -------------------------------------------------------------------------- */
static __inline int
mhi_pm_suspend(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
static __inline int
mhi_pm_resume(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
static __inline int
mhi_pm_resume_force(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
/* -------------------------------------------------------------------------- */
static __inline int
mhi_force_rddm_mode(struct mhi_controller *mhi_ctrl)
{
/* XXX TODO */
return (0);
}
#endif /* _LINUXKPI_LINUX_MHI_H */