Quellcodebibliothek Statistik Leitseite products/sources/formale Sprachen/C/Linux/lib/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

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.