#include <linux/delay.h>
#include <linux/device.h>
#include <linux/dma-direction.h>
#include <linux/dma-mapping.h>
#include <linux/interrupt.h>
#include <linux/list.h>
#include <linux/mhi.h>
#include <linux/module.h>
#include <linux/skbuff.h>
#include <linux/slab.h>
#include "internal.h"
#include "trace.h"
int __must_check mhi_read_reg(struct mhi_controller *mhi_cntrl,
void __iomem *base, u32 offset, u32 *out)
{ … }
int __must_check mhi_read_reg_field(struct mhi_controller *mhi_cntrl,
void __iomem *base, u32 offset,
u32 mask, u32 *out)
{ … }
int __must_check mhi_poll_reg_field(struct mhi_controller *mhi_cntrl,
void __iomem *base, u32 offset,
u32 mask, u32 val, u32 delayus,
u32 timeout_ms)
{ … }
void mhi_write_reg(struct mhi_controller *mhi_cntrl, void __iomem *base,
u32 offset, u32 val)
{ … }
int __must_check mhi_write_reg_field(struct mhi_controller *mhi_cntrl,
void __iomem *base, u32 offset, u32 mask,
u32 val)
{ … }
void mhi_write_db(struct mhi_controller *mhi_cntrl, void __iomem *db_addr,
dma_addr_t db_val)
{ … }
void mhi_db_brstmode(struct mhi_controller *mhi_cntrl,
struct db_cfg *db_cfg,
void __iomem *db_addr,
dma_addr_t db_val)
{ … }
void mhi_db_brstmode_disable(struct mhi_controller *mhi_cntrl,
struct db_cfg *db_cfg,
void __iomem *db_addr,
dma_addr_t db_val)
{ … }
void mhi_ring_er_db(struct mhi_event *mhi_event)
{ … }
void mhi_ring_cmd_db(struct mhi_controller *mhi_cntrl, struct mhi_cmd *mhi_cmd)
{ … }
void mhi_ring_chan_db(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan)
{ … }
enum mhi_ee_type mhi_get_exec_env(struct mhi_controller *mhi_cntrl)
{ … }
EXPORT_SYMBOL_GPL(…);
enum mhi_state mhi_get_mhi_state(struct mhi_controller *mhi_cntrl)
{ … }
EXPORT_SYMBOL_GPL(…);
void mhi_soc_reset(struct mhi_controller *mhi_cntrl)
{ … }
EXPORT_SYMBOL_GPL(…);
int mhi_map_single_no_bb(struct mhi_controller *mhi_cntrl,
struct mhi_buf_info *buf_info)
{ … }
int mhi_map_single_use_bb(struct mhi_controller *mhi_cntrl,
struct mhi_buf_info *buf_info)
{ … }
void mhi_unmap_single_no_bb(struct mhi_controller *mhi_cntrl,
struct mhi_buf_info *buf_info)
{ … }
void mhi_unmap_single_use_bb(struct mhi_controller *mhi_cntrl,
struct mhi_buf_info *buf_info)
{ … }
static int get_nr_avail_ring_elements(struct mhi_controller *mhi_cntrl,
struct mhi_ring *ring)
{ … }
static void *mhi_to_virtual(struct mhi_ring *ring, dma_addr_t addr)
{ … }
static void mhi_add_ring_element(struct mhi_controller *mhi_cntrl,
struct mhi_ring *ring)
{ … }
static void mhi_del_ring_element(struct mhi_controller *mhi_cntrl,
struct mhi_ring *ring)
{ … }
static bool is_valid_ring_ptr(struct mhi_ring *ring, dma_addr_t addr)
{ … }
int mhi_destroy_device(struct device *dev, void *data)
{ … }
int mhi_get_free_desc_count(struct mhi_device *mhi_dev,
enum dma_data_direction dir)
{ … }
EXPORT_SYMBOL_GPL(…);
void mhi_notify(struct mhi_device *mhi_dev, enum mhi_callback cb_reason)
{ … }
EXPORT_SYMBOL_GPL(…);
void mhi_create_devices(struct mhi_controller *mhi_cntrl)
{ … }
irqreturn_t mhi_irq_handler(int irq_number, void *dev)
{ … }
irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *priv)
{ … }
irqreturn_t mhi_intvec_handler(int irq_number, void *dev)
{ … }
static void mhi_recycle_ev_ring_element(struct mhi_controller *mhi_cntrl,
struct mhi_ring *ring)
{ … }
static int parse_xfer_event(struct mhi_controller *mhi_cntrl,
struct mhi_ring_element *event,
struct mhi_chan *mhi_chan)
{ … }
static int parse_rsc_event(struct mhi_controller *mhi_cntrl,
struct mhi_ring_element *event,
struct mhi_chan *mhi_chan)
{ … }
static void mhi_process_cmd_completion(struct mhi_controller *mhi_cntrl,
struct mhi_ring_element *tre)
{ … }
int mhi_process_ctrl_ev_ring(struct mhi_controller *mhi_cntrl,
struct mhi_event *mhi_event,
u32 event_quota)
{ … }
int mhi_process_data_event_ring(struct mhi_controller *mhi_cntrl,
struct mhi_event *mhi_event,
u32 event_quota)
{ … }
void mhi_ev_task(unsigned long data)
{ … }
void mhi_ctrl_ev_task(unsigned long data)
{ … }
static bool mhi_is_ring_full(struct mhi_controller *mhi_cntrl,
struct mhi_ring *ring)
{ … }
static int mhi_queue(struct mhi_device *mhi_dev, struct mhi_buf_info *buf_info,
enum dma_data_direction dir, enum mhi_flags mflags)
{ … }
int mhi_queue_skb(struct mhi_device *mhi_dev, enum dma_data_direction dir,
struct sk_buff *skb, size_t len, enum mhi_flags mflags)
{ … }
EXPORT_SYMBOL_GPL(…);
int mhi_queue_dma(struct mhi_device *mhi_dev, enum dma_data_direction dir,
struct mhi_buf *mhi_buf, size_t len, enum mhi_flags mflags)
{ … }
EXPORT_SYMBOL_GPL(…);
int mhi_gen_tre(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan,
struct mhi_buf_info *info, enum mhi_flags flags)
{ … }
int mhi_queue_buf(struct mhi_device *mhi_dev, enum dma_data_direction dir,
void *buf, size_t len, enum mhi_flags mflags)
{ … }
EXPORT_SYMBOL_GPL(…);
bool mhi_queue_is_full(struct mhi_device *mhi_dev, enum dma_data_direction dir)
{ … }
EXPORT_SYMBOL_GPL(…);
int mhi_send_cmd(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan,
enum mhi_cmd_type cmd)
{ … }
static int mhi_update_channel_state(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan,
enum mhi_ch_state_type to_state)
{ … }
static void mhi_unprepare_channel(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan)
{ … }
int mhi_prepare_channel(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan, unsigned int flags)
{ … }
static void mhi_mark_stale_events(struct mhi_controller *mhi_cntrl,
struct mhi_event *mhi_event,
struct mhi_event_ctxt *er_ctxt,
int chan)
{ … }
static void mhi_reset_data_chan(struct mhi_controller *mhi_cntrl,
struct mhi_chan *mhi_chan)
{ … }
void mhi_reset_chan(struct mhi_controller *mhi_cntrl, struct mhi_chan *mhi_chan)
{ … }
static int __mhi_prepare_for_transfer(struct mhi_device *mhi_dev, unsigned int flags)
{ … }
int mhi_prepare_for_transfer(struct mhi_device *mhi_dev)
{ … }
EXPORT_SYMBOL_GPL(…);
int mhi_prepare_for_transfer_autoqueue(struct mhi_device *mhi_dev)
{ … }
EXPORT_SYMBOL_GPL(…);
void mhi_unprepare_from_transfer(struct mhi_device *mhi_dev)
{ … }
EXPORT_SYMBOL_GPL(…);
int mhi_get_channel_doorbell_offset(struct mhi_controller *mhi_cntrl, u32 *chdb_offset)
{ … }
EXPORT_SYMBOL_GPL(…);