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


Quelle  iomem_copy.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright 2024 Kalray, Inc.  All Rights Reserved.
 */


#include <linux/align.h>
#include <linux/export.h>
#include <linux/io.h>
#include <linux/types.h>
#include <linux/unaligned.h>

#ifndef memset_io
/**
 * memset_io() - Set a range of I/O memory to a constant value
 * @addr: The beginning of the I/O-memory range to set
 * @val: The value to set the memory to
 * @count: The number of bytes to set
 *
 * Set a range of I/O memory to a given value.
 */

void memset_io(volatile void __iomem *addr, int val, size_t count)
{
 long qc = (u8)val;

 qc *= ~0UL / 0xff;

 while (count && !IS_ALIGNED((long)addr, sizeof(long))) {
  __raw_writeb(val, addr);
  addr++;
  count--;
 }

 while (count >= sizeof(long)) {
#ifdef CONFIG_64BIT
  __raw_writeq(qc, addr);
#else
  __raw_writel(qc, addr);
#endif

  addr += sizeof(long);
  count -= sizeof(long);
 }

 while (count) {
  __raw_writeb(val, addr);
  addr++;
  count--;
 }
}
EXPORT_SYMBOL(memset_io);
#endif

#ifndef memcpy_fromio
/**
 * memcpy_fromio() - Copy a block of data from I/O memory
 * @dst: The (RAM) destination for the copy
 * @src: The (I/O memory) source for the data
 * @count: The number of bytes to copy
 *
 * Copy a block of data from I/O memory.
 */

void memcpy_fromio(void *dst, const volatile void __iomem *src, size_t count)
{
 while (count && !IS_ALIGNED((long)src, sizeof(long))) {
  *(u8 *)dst = __raw_readb(src);
  src++;
  dst++;
  count--;
 }

 while (count >= sizeof(long)) {
#ifdef CONFIG_64BIT
  long val = __raw_readq(src);
#else
  long val = __raw_readl(src);
#endif
  put_unaligned(val, (long *)dst);


  src += sizeof(long);
  dst += sizeof(long);
  count -= sizeof(long);
 }

 while (count) {
  *(u8 *)dst = __raw_readb(src);
  src++;
  dst++;
  count--;
 }
}
EXPORT_SYMBOL(memcpy_fromio);
#endif

#ifndef memcpy_toio
/**
 * memcpy_toio() -Copy a block of data into I/O memory
 * @dst: The (I/O memory) destination for the copy
 * @src: The (RAM) source for the data
 * @count: The number of bytes to copy
 *
 * Copy a block of data to I/O memory.
 */

void memcpy_toio(volatile void __iomem *dst, const void *src, size_t count)
{
 while (count && !IS_ALIGNED((long)dst, sizeof(long))) {
  __raw_writeb(*(u8 *)src, dst);
  src++;
  dst++;
  count--;
 }

 while (count >= sizeof(long)) {
  long val = get_unaligned((long *)src);
#ifdef CONFIG_64BIT
  __raw_writeq(val, dst);
#else
  __raw_writel(val, dst);
#endif

  src += sizeof(long);
  dst += sizeof(long);
  count -= sizeof(long);
 }

 while (count) {
  __raw_writeb(*(u8 *)src, dst);
  src++;
  dst++;
  count--;
 }
}
EXPORT_SYMBOL(memcpy_toio);
#endif



Messung V0.5
C=92 H=89 G=90

¤ Dauer der Verarbeitung: 0.11 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