HID: intel-ish-hid: ipc: change timed_wait_for_timeout() to be a function
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@intel.com> Acked-by: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
parent
fa39baa970
commit
7ede704d74
|
@ -19,7 +19,6 @@
|
||||||
#include <linux/jiffies.h>
|
#include <linux/jiffies.h>
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "hw-ish.h"
|
#include "hw-ish.h"
|
||||||
#include "utils.h"
|
|
||||||
#include "hbm.h"
|
#include "hbm.h"
|
||||||
|
|
||||||
/* For FW reset flow */
|
/* 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);
|
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
|
* ish_fw_reset_handler() - FW reset handler
|
||||||
* @dev: ishtp device pointer
|
* @dev: ishtp device pointer
|
||||||
|
@ -456,8 +508,8 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
|
||||||
ishtp_reset_handler(dev);
|
ishtp_reset_handler(dev);
|
||||||
|
|
||||||
if (!ish_is_input_ready(dev))
|
if (!ish_is_input_ready(dev))
|
||||||
timed_wait_for_timeout(WAIT_FOR_SEND_SLICE,
|
timed_wait_for_timeout(dev, WAIT_FOR_INPUT_RDY,
|
||||||
ish_is_input_ready(dev), (2 * HZ));
|
TIME_SLICE_FOR_INPUT_RDY_MS, TIMEOUT_FOR_INPUT_RDY_MS);
|
||||||
|
|
||||||
/* ISH FW is dead */
|
/* ISH FW is dead */
|
||||||
if (!ish_is_input_ready(dev))
|
if (!ish_is_input_ready(dev))
|
||||||
|
@ -472,8 +524,8 @@ static int ish_fw_reset_handler(struct ishtp_device *dev)
|
||||||
sizeof(uint32_t));
|
sizeof(uint32_t));
|
||||||
|
|
||||||
/* Wait for ISH FW'es ILUP and ISHTP_READY */
|
/* Wait for ISH FW'es ILUP and ISHTP_READY */
|
||||||
timed_wait_for_timeout(WAIT_FOR_SEND_SLICE, ishtp_fw_is_ready(dev),
|
timed_wait_for_timeout(dev, WAIT_FOR_FW_RDY,
|
||||||
(2 * HZ));
|
TIME_SLICE_FOR_FW_RDY_MS, TIMEOUT_FOR_FW_RDY_MS);
|
||||||
if (!ishtp_fw_is_ready(dev)) {
|
if (!ishtp_fw_is_ready(dev)) {
|
||||||
/* ISH FW is dead */
|
/* ISH FW is dead */
|
||||||
uint32_t ish_status;
|
uint32_t ish_status;
|
||||||
|
|
|
@ -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 */
|
|
Loading…
Reference in New Issue