linux/arch/hexagon/lib/io.c
<<
>>
Prefs
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * I/O access functions for Hexagon
   4 *
   5 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
   6 */
   7
   8#include <asm/io.h>
   9
  10/*  These are all FIFO routines!  */
  11
  12/*
  13 * __raw_readsw - read words a short at a time
  14 * @addr:  source address
  15 * @data:  data address
  16 * @len: number of shorts to read
  17 */
  18void __raw_readsw(const void __iomem *addr, void *data, int len)
  19{
  20        const volatile short int *src = (short int *) addr;
  21        short int *dst = (short int *) data;
  22
  23        if ((u32)data & 0x1)
  24                panic("unaligned pointer to readsw");
  25
  26        while (len-- > 0)
  27                *dst++ = *src;
  28
  29}
  30
  31/*
  32 * __raw_writesw - read words a short at a time
  33 * @addr:  source address
  34 * @data:  data address
  35 * @len: number of shorts to read
  36 */
  37void __raw_writesw(void __iomem *addr, const void *data, int len)
  38{
  39        const short int *src = (short int *)data;
  40        volatile short int *dst = (short int *)addr;
  41
  42        if ((u32)data & 0x1)
  43                panic("unaligned pointer to writesw");
  44
  45        while (len-- > 0)
  46                *dst = *src++;
  47
  48
  49}
  50
  51/*  Pretty sure len is pre-adjusted for the length of the access already */
  52void __raw_readsl(const void __iomem *addr, void *data, int len)
  53{
  54        const volatile long *src = (long *) addr;
  55        long *dst = (long *) data;
  56
  57        if ((u32)data & 0x3)
  58                panic("unaligned pointer to readsl");
  59
  60        while (len-- > 0)
  61                *dst++ = *src;
  62
  63
  64}
  65
  66void __raw_writesl(void __iomem *addr, const void *data, int len)
  67{
  68        const long *src = (long *)data;
  69        volatile long *dst = (long *)addr;
  70
  71        if ((u32)data & 0x3)
  72                panic("unaligned pointer to writesl");
  73
  74        while (len-- > 0)
  75                *dst = *src++;
  76
  77
  78}
  79