bus: mhi: core: Add helper API to return number of free TREs
authorHemant Kumar <hemantk@codeaurora.org>
Mon, 11 Jan 2021 18:07:40 +0000 (19:07 +0100)
committerManivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Wed, 27 Jan 2021 11:15:21 +0000 (16:45 +0530)
Introduce mhi_get_free_desc_count() API to return number
of TREs available to queue buffer. MHI clients can use this
API to know before hand if ring is full without calling queue
API.

Signed-off-by: Hemant Kumar <hemantk@codeaurora.org>
Reviewed-by: Jeffrey Hugo <jhugo@codeaurora.org>
Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/1610388462-16322-1-git-send-email-loic.poulain@linaro.org
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
drivers/bus/mhi/core/main.c
include/linux/mhi.h

index d34d7e90e38d9c5f9bf58ead5f945b23e273d648..1202433ecf9817b46c068b398825349d8b99706c 100644 (file)
@@ -260,6 +260,18 @@ int mhi_destroy_device(struct device *dev, void *data)
        return 0;
 }
 
+int mhi_get_free_desc_count(struct mhi_device *mhi_dev,
+                               enum dma_data_direction dir)
+{
+       struct mhi_controller *mhi_cntrl = mhi_dev->mhi_cntrl;
+       struct mhi_chan *mhi_chan = (dir == DMA_TO_DEVICE) ?
+               mhi_dev->ul_chan : mhi_dev->dl_chan;
+       struct mhi_ring *tre_ring = &mhi_chan->tre_ring;
+
+       return get_nr_avail_ring_elements(mhi_cntrl, tre_ring);
+}
+EXPORT_SYMBOL_GPL(mhi_get_free_desc_count);
+
 void mhi_notify(struct mhi_device *mhi_dev, enum mhi_callback cb_reason)
 {
        struct mhi_driver *mhi_drv;
index 562862ff819c4316d20fa8ca86f98ae6aeab1e61..ece53a2522176b13d6fdc99f7ef33ff2d389bd96 100644 (file)
@@ -598,6 +598,15 @@ void mhi_set_mhi_state(struct mhi_controller *mhi_cntrl,
  */
 void mhi_notify(struct mhi_device *mhi_dev, enum mhi_callback cb_reason);
 
+/**
+ * mhi_get_free_desc_count - Get transfer ring length
+ * Get # of TD available to queue buffers
+ * @mhi_dev: Device associated with the channels
+ * @dir: Direction of the channel
+ */
+int mhi_get_free_desc_count(struct mhi_device *mhi_dev,
+                               enum dma_data_direction dir);
+
 /**
  * mhi_prepare_for_power_up - Do pre-initialization before power up.
  *                            This is optional, call this before power up if