Re: [PATCH 2/3] hid: intel-ish-hid: ipc: change timed_wait_for_timeout() to be a function

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2016-11-11 at 09:40 +0800, Even Xu wrote:
> The macro timed_wait_for_timeout() only be used in one function, so
> move
> this marco from header file and change it to a function in ipc.c,
> where
> it is used.
> 
> Signed-off-by: Even Xu <even.xu@xxxxxxxxx>
Acked-by: Srinivas Pandruvada <srinivas.pandruvada@xxxxxxxxxxxxxxx>

> ---
>  drivers/hid/intel-ish-hid/ipc/ipc.c   | 62
> ++++++++++++++++++++++++++++++++---
>  drivers/hid/intel-ish-hid/ipc/utils.h | 43 ------------------------
>  2 files changed, 57 insertions(+), 48 deletions(-)
>  delete mode 100644 drivers/hid/intel-ish-hid/ipc/utils.h
> 
> diff --git a/drivers/hid/intel-ish-hid/ipc/ipc.c b/drivers/hid/intel-
> ish-hid/ipc/ipc.c
> index 522c0e1..8194c35 100644
> --- a/drivers/hid/intel-ish-hid/ipc/ipc.c
> +++ b/drivers/hid/intel-ish-hid/ipc/ipc.c
> @@ -19,7 +19,6 @@
>  #include <linux/jiffies.h>
>  #include "client.h"
>  #include "hw-ish.h"
> -#include "utils.h"
>  #include "hbm.h"
>  
>  /* For FW reset flow */
> @@ -427,6 +426,59 @@ static int ipc_send_mng_msg(struct ishtp_device
> *dev, uint32_t msg_code,
>  		sizeof(uint32_t) + size);
>  }
>  
> +#define WAIT_FOR_FW_RDY			0x1
> +#define WAIT_FOR_INPUT_RDY		0x2
> +
> +/**
> + * timed_wait_for_timeout() - wait special event with timeout
> + * @dev: ISHTP device pointer
> + * @condition: indicate the condition for waiting
> + * @timeinc: time slice for every wait cycle, in ms
> + * @timeout: time in ms for timeout
> + *
> + * This function will check special event to be ready in a loop, the
> loop
> + * period is specificd in timeinc. Wait timeout will causes failure.
> + *
> + * Return: 0 for success else failure code
> + */
> +static int timed_wait_for_timeout(struct ishtp_device *dev, int
> condition,
> +				unsigned int timeinc, unsigned int
> timeout)
> +{
> +	bool complete = false;
> +	int ret;
> +
> +	do {
> +		if (condition == WAIT_FOR_FW_RDY) {
> +			complete = ishtp_fw_is_ready(dev);
> +		} else if (condition == WAIT_FOR_INPUT_RDY) {
> +			complete = ish_is_input_ready(dev);
> +		} else {
> +			ret = -EINVAL;
> +			goto out;
> +		}
> +
> +		if (!complete) {
> +			unsigned long left_time;
> +
> +			left_time = msleep_interruptible(timeinc);
> +			timeout -= (timeinc - left_time);
> +		}
> +	} while (!complete && timeout > 0);
> +
> +	if (complete)
> +		ret = 0;
> +	else
> +		ret = -EBUSY;
> +
> +out:
> +	return ret;
> +}
> +
> +#define TIME_SLICE_FOR_FW_RDY_MS		100
> +#define TIME_SLICE_FOR_INPUT_RDY_MS		100
> +#define TIMEOUT_FOR_FW_RDY_MS			2000
> +#define TIMEOUT_FOR_INPUT_RDY_MS		2000
> +
>  /**
>   * ish_fw_reset_handler() - FW reset handler
>   * @dev: ishtp device pointer
> @@ -456,8 +508,8 @@ static int ish_fw_reset_handler(struct
> ishtp_device *dev)
>  	ishtp_reset_handler(dev);
>  
>  	if (!ish_is_input_ready(dev))
> -		timed_wait_for_timeout(WAIT_FOR_SEND_SLICE,
> -			ish_is_input_ready(dev), (2 * HZ));
> +		timed_wait_for_timeout(dev, WAIT_FOR_INPUT_RDY,
> +			TIME_SLICE_FOR_INPUT_RDY_MS,
> TIMEOUT_FOR_INPUT_RDY_MS);
>  
>  	/* ISH FW is dead */
>  	if (!ish_is_input_ready(dev))
> @@ -472,8 +524,8 @@ static int ish_fw_reset_handler(struct
> ishtp_device *dev)
>  			 sizeof(uint32_t));
>  
>  	/* Wait for ISH FW'es ILUP and ISHTP_READY */
> -	timed_wait_for_timeout(WAIT_FOR_SEND_SLICE,
> ishtp_fw_is_ready(dev),
> -		(2 * HZ));
> +	timed_wait_for_timeout(dev, WAIT_FOR_FW_RDY,
> +			TIME_SLICE_FOR_FW_RDY_MS,
> TIMEOUT_FOR_FW_RDY_MS);
>  	if (!ishtp_fw_is_ready(dev)) {
>  		/* ISH FW is dead */
>  		uint32_t	ish_status;
> diff --git a/drivers/hid/intel-ish-hid/ipc/utils.h
> b/drivers/hid/intel-ish-hid/ipc/utils.h
> deleted file mode 100644
> index dc39dfe..0000000
> --- a/drivers/hid/intel-ish-hid/ipc/utils.h
> +++ /dev/null
> @@ -1,43 +0,0 @@
> -/*
> - * Utility macros of ISH
> - *
> - * Copyright (c) 2014-2016, Intel Corporation.
> - *
> - * This program is free software; you can redistribute it and/or
> modify it
> - * under the terms and conditions of the GNU General Public License,
> - * version 2, as published by the Free Software Foundation.
> - *
> - * This program is distributed in the hope it will be useful, but
> WITHOUT
> - * ANY WARRANTY; without even the implied warranty of
> MERCHANTABILITY or
> - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public
> License for
> - * more details.
> - */
> -#ifndef UTILS__H
> -#define UTILS__H
> -
> -#define	WAIT_FOR_SEND_SLICE	(HZ / 10)
> -#define	WAIT_FOR_CONNECT_SLICE	(HZ / 10)
> -
> -/*
> - * Waits for specified event when a thread that triggers event
> - * can't signal with timeout (use whenever we may hang)
> - */
> -#define	timed_wait_for_timeout(timeinc, condition, timeout)	
> \
> -	do {							
> \
> -		int	t = timeout;				
> \
> -		do {						
> \
> -			unsigned long	j;			
> \
> -			int	done = 0;			
> \
> -								\
> -			for (j = jiffies, done = 0; !done; ) {	
> \
> -				schedule_timeout(timeinc);	\
> -				if (time_is_before_eq_jiffies(j +
> timeinc)) \
> -					done = 1;		\
> -			} \
> -			t -= timeinc;				
> \
> -			if (t <= 0)				\
> -				break;				
> \
> -		} while (!(condition));				
> \
> -	} while (0)
> -
> -#endif /* UTILS__H */��.n��������+%������w��{.n�����{��)��^n�r������&��z�ޗ�zf���h���~����������_��+v���)ߣ�

[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux