Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Oct 2014 20:15:22 +0300
From:      Konstantin Belousov <kostikbel@gmail.com>
To:        Martin Galvan <omgalvan.86@gmail.com>
Cc:        freebsd-drivers@freebsd.org, freebsd-embedded@freebsd.org
Subject:   Re: A few questions about SD/MMC drivers
Message-ID:  <20141006171521.GD26076@kib.kiev.ua>
In-Reply-To: <CAN19L9ENsuAR6_aXwJSRdfDz6UgE6kU%2BrCkGGsdK7tRcUes%2B0w@mail.gmail.com>
References:  <CAN19L9ENsuAR6_aXwJSRdfDz6UgE6kU%2BrCkGGsdK7tRcUes%2B0w@mail.gmail.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Sun, Oct 05, 2014 at 07:05:16PM -0300, Martin Galvan wrote:
> 3) Finally, I noticed in the Linux driver they sometimes wrap a
> register read operation around a do-while loop waiting on both the
> result of that read and a timer, like this:
> 
> do {
>     read_value = read_a_register(some_register);
> } while ((read_value != desired_value) && (time_before(jiffies, expire));
> 
> where "expire" is an unsigned long whose value is computed as the sum
> of a global called "jiffies" and the result of a call to
> msecs_to_jiffies(). This is done so after the loop they can check
> whether the register holds the desired value or a timeout occurred. Do
> we have something similar on BSD? If not, what would be a safer way to
> implement a timeout mechanism than simply decreasing a counter?

Look at the _intel_wait_for() in the sys/dev/drm2/i915/intel_drv.h.
There is improved version of the macro in the i915 update I posted
several days ago.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20141006171521.GD26076>