diff mbox series

[v7,1/4] bus: mhi: core: Add helper API to return number of free TREs

Message ID 1602907457-13680-2-git-send-email-hemantk@codeaurora.org (mailing list archive)
State Superseded
Headers show
Series userspace MHI client interface driver | expand

Commit Message

Hemant Kumar Oct. 17, 2020, 4:04 a.m. UTC
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>
---
 drivers/bus/mhi/core/main.c | 12 ++++++++++++
 include/linux/mhi.h         |  9 +++++++++
 2 files changed, 21 insertions(+)

Comments

Manivannan Sadhasivam Oct. 21, 2020, 3:27 p.m. UTC | #1
On Fri, Oct 16, 2020 at 09:04:14PM -0700, Hemant Kumar wrote:
> 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>

Thanks,
Mani

> ---
>  drivers/bus/mhi/core/main.c | 12 ++++++++++++
>  include/linux/mhi.h         |  9 +++++++++
>  2 files changed, 21 insertions(+)
> 
> diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
> index 2cff5dd..3950792 100644
> --- a/drivers/bus/mhi/core/main.c
> +++ b/drivers/bus/mhi/core/main.c
> @@ -258,6 +258,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;
> diff --git a/include/linux/mhi.h b/include/linux/mhi.h
> index d4841e5..7829b1d 100644
> --- a/include/linux/mhi.h
> +++ b/include/linux/mhi.h
> @@ -597,6 +597,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
>   *                            the controller does not want bus framework to
> -- 
> The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
> a Linux Foundation Collaborative Project
>
Manivannan Sadhasivam Oct. 21, 2020, 4:25 p.m. UTC | #2
On Wed, Oct 21, 2020 at 05:43:14PM +0200, Loic Poulain wrote:
> On Wed, 21 Oct 2020 at 17:27, Manivannan Sadhasivam <
> manivannan.sadhasivam@linaro.org> wrote:
> 
> > On Fri, Oct 16, 2020 at 09:04:14PM -0700, Hemant Kumar wrote:
> > > Introduce mhi_get_free_desc_count() API to return number
> >
> 
> Would it not be a good idea to have naming aligned with other methods?
> Like mhi_queue_num_free() or mhi_queue_no_free_elem...
> 

'queue_num_free' doesn't sound like getting the number of available
descriptors...

Thanks,
Mani

> Loic
Loic Poulain Oct. 21, 2020, 4:51 p.m. UTC | #3
On Wed, 21 Oct 2020 at 18:25, Manivannan Sadhasivam
<manivannan.sadhasivam@linaro.org> wrote:
>
> On Wed, Oct 21, 2020 at 05:43:14PM +0200, Loic Poulain wrote:
> > On Wed, 21 Oct 2020 at 17:27, Manivannan Sadhasivam <
> > manivannan.sadhasivam@linaro.org> wrote:
> >
> > > On Fri, Oct 16, 2020 at 09:04:14PM -0700, Hemant Kumar wrote:
> > > > Introduce mhi_get_free_desc_count() API to return number
> > >
> >
> > Would it not be a good idea to have naming aligned with other methods?
> > Like mhi_queue_num_free() or mhi_queue_no_free_elem...
> >
>
> 'queue_num_free' doesn't sound like getting the number of available
> descriptors...

Right, TBH, just wanted the function to start with mhi_queue since
it's about getting info about remaining size of the DL or UL 'virtual
queue'. But AFAIU, this is the number of available ring elements that
is returned here, not the number of transfer descriptors (that can be
composed of one or more ring elements), so maybe
mhi_queue_num_free_elements or something similar, I don't want to be
picky here.

Regards,
Loic
Hemant Kumar Oct. 21, 2020, 5:55 p.m. UTC | #4
Hi Loic,

On 10/21/20 9:51 AM, Loic Poulain wrote:
> On Wed, 21 Oct 2020 at 18:25, Manivannan Sadhasivam
> <manivannan.sadhasivam@linaro.org> wrote:
>>
>> On Wed, Oct 21, 2020 at 05:43:14PM +0200, Loic Poulain wrote:
>>> On Wed, 21 Oct 2020 at 17:27, Manivannan Sadhasivam <
>>> manivannan.sadhasivam@linaro.org> wrote:
>>>
>>>> On Fri, Oct 16, 2020 at 09:04:14PM -0700, Hemant Kumar wrote:
>>>>> Introduce mhi_get_free_desc_count() API to return number
>>>>
>>>
>>> Would it not be a good idea to have naming aligned with other methods?
>>> Like mhi_queue_num_free() or mhi_queue_no_free_elem...
>>>
>>
>> 'queue_num_free' doesn't sound like getting the number of available
>> descriptors...
> 
> Right, TBH, just wanted the function to start with mhi_queue since
> it's about getting info about remaining size of the DL or UL 'virtual
> queue'. But AFAIU, this is the number of available ring elements that
> is returned here, not the number of transfer descriptors (that can be
> composed of one or more ring elements), so maybe
> mhi_queue_num_free_elements or something similar, I don't want to be
mhi_get_free_desc_count is the number of TREs available which queue APIs 
can use to queue an transfer ring element. My only concern is if we get 
confused with the name mhi_queue_ part of as number of TREs queued ? 
Transfer ring element is indeed a transfer descriptor.
> picky here.
> 
> Regards,
> Loic
> 
Thanks,
Hemant
diff mbox series

Patch

diff --git a/drivers/bus/mhi/core/main.c b/drivers/bus/mhi/core/main.c
index 2cff5dd..3950792 100644
--- a/drivers/bus/mhi/core/main.c
+++ b/drivers/bus/mhi/core/main.c
@@ -258,6 +258,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;
diff --git a/include/linux/mhi.h b/include/linux/mhi.h
index d4841e5..7829b1d 100644
--- a/include/linux/mhi.h
+++ b/include/linux/mhi.h
@@ -597,6 +597,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
  *                            the controller does not want bus framework to