Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  delay.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * Precise Delay Loops for parisc
 *
 * based on code by:
 * Copyright (C) 1993 Linus Torvalds
 * Copyright (C) 1997 Martin Mares <mj@atrey.karlin.mff.cuni.cz>
 * Copyright (C) 2008 Jiri Hladky <hladky _dot_ jiri _at_ gmail _dot_ com>
 *
 * parisc implementation:
 * Copyright (C) 2013 Helge Deller <deller@gmx.de>
 */



#include <linux/module.h>
#include <linux/preempt.h>
#include <linux/init.h>

#include <asm/delay.h>
#include <asm/special_insns.h>    /* for mfctl() */
#include <asm/processor.h> /* for boot_cpu_data */

/* CR16 based delay: */
static void __cr16_delay(unsigned long __loops)
{
 /*
 * Note: Due to unsigned math, cr16 rollovers shouldn't be
 * a problem here. However, on 32 bit, we need to make sure
 * we don't pass in too big a value. The current default
 * value of MAX_UDELAY_MS should help prevent this.
 */

 u32 bclock, now, loops = __loops;
 int cpu;

 preempt_disable();
 cpu = smp_processor_id();
 bclock = mfctl(16);
 for (;;) {
  now = mfctl(16);
  if ((now - bclock) >= loops)
   break;

  /* Allow RT tasks to run */
  preempt_enable();
  asm volatile(" nop\n");
  barrier();
  preempt_disable();

  /*
 * It is possible that we moved to another CPU, and
 * since CR16's are per-cpu we need to calculate
 * that. The delay must guarantee that we wait "at
 * least" the amount of time. Being moved to another
 * CPU could make the wait longer but we just need to
 * make sure we waited long enough. Rebalance the
 * counter for this CPU.
 */

  if (unlikely(cpu != smp_processor_id())) {
   loops -= (now - bclock);
   cpu = smp_processor_id();
   bclock = mfctl(16);
  }
 }
 preempt_enable();
}


void __udelay(unsigned long usecs)
{
 __cr16_delay(usecs * ((unsigned long)boot_cpu_data.cpu_hz / 1000000UL));
}
EXPORT_SYMBOL(__udelay);

Messung V0.5
C=87 H=94 G=90

¤ Dauer der Verarbeitung: 0.10 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge