]> Git Repo - J-u-boot.git/blame - include/linux/iopoll.h
include: linux: Remove duplicate newlines
[J-u-boot.git] / include / linux / iopoll.h
CommitLineData
83d290c5 1/* SPDX-License-Identifier: GPL-2.0 */
6569c0d3
MY
2/*
3 * Copyright (c) 2012-2014 The Linux Foundation. All rights reserved.
6569c0d3
MY
4 */
5
6#ifndef _LINUX_IOPOLL_H
7#define _LINUX_IOPOLL_H
8
c094e219 9#include <linux/delay.h>
6569c0d3
MY
10#include <linux/errno.h>
11#include <linux/io.h>
12#include <time.h>
13
14/**
54232474 15 * read_poll_timeout - Periodically poll an address until a condition is met or a timeout occurs
6569c0d3 16 * @op: accessor function (takes @addr as its only argument)
6569c0d3
MY
17 * @val: Variable to read the value into
18 * @cond: Break condition (usually involving @val)
c094e219 19 * @sleep_us: Maximum time to sleep in us
6569c0d3 20 * @timeout_us: Timeout in us, 0 means never timeout
d7db0e6d 21 * @args: arguments for @op poll
6569c0d3
MY
22 *
23 * Returns 0 on success and -ETIMEDOUT upon a timeout. In either
24 * case, the last read value at @addr is stored in @val.
25 *
26 * When available, you'll probably want to use one of the specialized
27 * macros defined below rather than this macro directly.
28 */
d7db0e6d 29#define read_poll_timeout(op, val, cond, sleep_us, timeout_us, args...) \
6569c0d3
MY
30({ \
31 unsigned long timeout = timer_get_us() + timeout_us; \
32 for (;;) { \
d7db0e6d 33 (val) = op(args); \
6569c0d3
MY
34 if (cond) \
35 break; \
36 if (timeout_us && time_after(timer_get_us(), timeout)) { \
d7db0e6d 37 (val) = op(args); \
6569c0d3
MY
38 break; \
39 } \
c094e219
JT
40 if (sleep_us) \
41 udelay(sleep_us); \
6569c0d3
MY
42 } \
43 (cond) ? 0 : -ETIMEDOUT; \
44})
45
ce786ae3 46#define readx_poll_sleep_timeout(op, addr, val, cond, sleep_us, timeout_us) \
d7db0e6d 47 read_poll_timeout(op, val, cond, sleep_us, timeout_us, addr)
ce786ae3
JT
48
49#define readl_poll_sleep_timeout(addr, val, cond, sleep_us, timeout_us) \
50 readx_poll_sleep_timeout(readl, addr, val, cond, sleep_us, timeout_us)
51
54232474 52#define readx_poll_timeout(op, addr, val, cond, timeout_us) \
d7db0e6d 53 read_poll_timeout(op, val, cond, false, timeout_us, addr)
6569c0d3
MY
54
55#define readb_poll_timeout(addr, val, cond, timeout_us) \
56 readx_poll_timeout(readb, addr, val, cond, timeout_us)
57
58#define readw_poll_timeout(addr, val, cond, timeout_us) \
59 readx_poll_timeout(readw, addr, val, cond, timeout_us)
60
61#define readl_poll_timeout(addr, val, cond, timeout_us) \
62 readx_poll_timeout(readl, addr, val, cond, timeout_us)
63
64#define readq_poll_timeout(addr, val, cond, timeout_us) \
65 readx_poll_timeout(readq, addr, val, cond, timeout_us)
66
67#define readb_relaxed_poll_timeout(addr, val, cond, timeout_us) \
68 readx_poll_timeout(readb_relaxed, addr, val, cond, timeout_us)
69
70#define readw_relaxed_poll_timeout(addr, val, cond, timeout_us) \
71 readx_poll_timeout(readw_relaxed, addr, val, cond, timeout_us)
72
73#define readl_relaxed_poll_timeout(addr, val, cond, timeout_us) \
74 readx_poll_timeout(readl_relaxed, addr, val, cond, timeout_us)
75
76#define readq_relaxed_poll_timeout(addr, val, cond, timeout_us) \
77 readx_poll_timeout(readq_relaxed, addr, val, cond, timeout_us)
78
79#endif /* _LINUX_IOPOLL_H */
This page took 0.329591 seconds and 4 git commands to generate.