delay.h revision 1.2
11.2Sriastrad/*	$NetBSD: delay.h,v 1.2 2014/03/18 18:20:43 riastradh Exp $	*/
21.2Sriastrad
31.2Sriastrad/*-
41.2Sriastrad * Copyright (c) 2013 The NetBSD Foundation, Inc.
51.2Sriastrad * All rights reserved.
61.2Sriastrad *
71.2Sriastrad * This code is derived from software contributed to The NetBSD Foundation
81.2Sriastrad * by Taylor R. Campbell.
91.2Sriastrad *
101.2Sriastrad * Redistribution and use in source and binary forms, with or without
111.2Sriastrad * modification, are permitted provided that the following conditions
121.2Sriastrad * are met:
131.2Sriastrad * 1. Redistributions of source code must retain the above copyright
141.2Sriastrad *    notice, this list of conditions and the following disclaimer.
151.2Sriastrad * 2. Redistributions in binary form must reproduce the above copyright
161.2Sriastrad *    notice, this list of conditions and the following disclaimer in the
171.2Sriastrad *    documentation and/or other materials provided with the distribution.
181.2Sriastrad *
191.2Sriastrad * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
201.2Sriastrad * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
211.2Sriastrad * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
221.2Sriastrad * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
231.2Sriastrad * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
241.2Sriastrad * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
251.2Sriastrad * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
261.2Sriastrad * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
271.2Sriastrad * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
281.2Sriastrad * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
291.2Sriastrad * POSSIBILITY OF SUCH DAMAGE.
301.2Sriastrad */
311.2Sriastrad
321.2Sriastrad#ifndef _LINUX_DELAY_H_
331.2Sriastrad#define _LINUX_DELAY_H_
341.2Sriastrad
351.2Sriastrad#include <sys/param.h>
361.2Sriastrad#include <sys/kernel.h>
371.2Sriastrad#include <sys/proc.h>
381.2Sriastrad
391.2Sriastrad#include <machine/param.h>
401.2Sriastrad
411.2Sriastrad#define	MAX_UDELAY_MS	5
421.2Sriastrad
431.2Sriastradstatic inline void
441.2Sriastradudelay(unsigned int usec)
451.2Sriastrad{
461.2Sriastrad	DELAY(usec);
471.2Sriastrad}
481.2Sriastrad
491.2Sriastradstatic inline void
501.2Sriastradmdelay(unsigned int msec)
511.2Sriastrad{
521.2Sriastrad
531.2Sriastrad	if (msec < MAX_UDELAY_MS)
541.2Sriastrad		udelay(msec * 1000);
551.2Sriastrad	else
561.2Sriastrad		while (msec--)
571.2Sriastrad			udelay(1000);
581.2Sriastrad}
591.2Sriastrad
601.2Sriastradstatic inline void
611.2Sriastradmsleep(unsigned int msec)
621.2Sriastrad{
631.2Sriastrad	if ((hz < 1000) && (msec < (1000/hz)))
641.2Sriastrad		mdelay(msec);
651.2Sriastrad	else
661.2Sriastrad		(void)kpause("lnxmslep", false, mstohz(msec), NULL);
671.2Sriastrad}
681.2Sriastrad
691.2Sriastrad#endif  /* _LINUX_DELAY_H_ */
70