LCOV - code coverage report
Current view: top level - arch/x86/um - delay.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 3 15 20.0 %
Date: 2023-03-27 20:00:47 Functions: 1 4 25.0 %

          Line data    Source code
       1             : // SPDX-License-Identifier: GPL-2.0-only
       2             : /*
       3             :  * Copyright (C) 2011 Richard Weinberger <richrd@nod.at>
       4             :  * Mostly copied from arch/x86/lib/delay.c
       5             :  */
       6             : 
       7             : #include <linux/export.h>
       8             : #include <linux/kernel.h>
       9             : #include <linux/delay.h>
      10             : #include <asm/param.h>
      11             : 
      12        1072 : void __delay(unsigned long loops)
      13             : {
      14        1072 :         asm volatile(
      15             :                 "test %0,%0\n"
      16             :                 "jz 3f\n"
      17             :                 "jmp 1f\n"
      18             : 
      19             :                 ".align 16\n"
      20             :                 "1: jmp 2f\n"
      21             : 
      22             :                 ".align 16\n"
      23             :                 "2: dec %0\n"
      24             :                 " jnz 2b\n"
      25             :                 "3: dec %0\n"
      26             : 
      27             :                 : /* we don't need output */
      28             :                 : "a" (loops)
      29             :         );
      30        1072 : }
      31             : EXPORT_SYMBOL(__delay);
      32             : 
      33           0 : inline void __const_udelay(unsigned long xloops)
      34             : {
      35             :         int d0;
      36             : 
      37           0 :         xloops *= 4;
      38           0 :         asm("mull %%edx"
      39             :                 : "=d" (xloops), "=&a" (d0)
      40             :                 : "1" (xloops), "0"
      41           0 :                 (loops_per_jiffy * (HZ/4)));
      42             : 
      43           0 :         __delay(++xloops);
      44           0 : }
      45             : EXPORT_SYMBOL(__const_udelay);
      46             : 
      47           0 : void __udelay(unsigned long usecs)
      48             : {
      49           0 :         __const_udelay(usecs * 0x000010c7); /* 2**32 / 1000000 (rounded up) */
      50           0 : }
      51             : EXPORT_SYMBOL(__udelay);
      52             : 
      53           0 : void __ndelay(unsigned long nsecs)
      54             : {
      55           0 :         __const_udelay(nsecs * 0x00005); /* 2**32 / 1000000000 (rounded up) */
      56           0 : }
      57             : EXPORT_SYMBOL(__ndelay);

Generated by: LCOV version 1.14