linux-old/arch/s390x/lib/delay.c
<<
>>
Prefs
   1/*
   2 *  arch/s390x/kernel/delay.c
   3 *    Precise Delay Loops for S390
   4 *
   5 *  S390 version
   6 *    Copyright (C) 1999 IBM Deutschland Entwicklung GmbH, IBM Corporation
   7 *    Author(s): Martin Schwidefsky (schwidefsky@de.ibm.com),
   8 *
   9 *  Derived from "arch/i386/lib/delay.c"
  10 *    Copyright (C) 1993 Linus Torvalds
  11 *    Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
  12 */
  13
  14#include <linux/config.h>
  15#include <linux/sched.h>
  16#include <linux/delay.h>
  17
  18#ifdef CONFIG_SMP
  19#include <asm/smp.h>
  20#endif
  21
  22void __delay(unsigned long loops)
  23{
  24        /*
  25         * To end the bloody studid and useless discussion about the
  26         * BogoMips number I took the liberty to define the __delay
  27         * function in a way that that resulting BogoMips number will
  28         * yield the megahertz number of the cpu. The important function
  29         * is udelay and that is done using the tod clock. -- martin.
  30         */
  31        __asm__ __volatile__(
  32                "0: brct %0,0b"
  33                : /* no outputs */ : "r" (loops/2) );
  34}
  35
  36/*
  37 * Waits for 'usecs' microseconds using the tod clock
  38 */
  39void __udelay(unsigned long usecs)
  40{
  41        uint64_t start_cc, end_cc;
  42
  43        if (usecs == 0)
  44                return;
  45        asm volatile ("STCK %0" : "=m" (start_cc));
  46        do {
  47                asm volatile ("STCK %0" : "=m" (end_cc));
  48        } while (((end_cc - start_cc)/4096) < usecs);
  49}
  50
  51
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.