acrn-hypervisor/hypervisor/include/arch/x86/asm/io.h
Geoffroy Van Cutsem 8b16be9185 Remove "All rights reserved" string headers
Many of the license and Intel copyright headers include the "All rights
reserved" string. It is not relevant in the context of the BSD-3-Clause
license that the code is released under. This patch removes those strings
throughout the code (hypervisor, devicemodel and misc).

Tracked-On: #7254
Signed-off-by: Geoffroy Van Cutsem <geoffroy.vancutsem@intel.com>
2022-04-06 13:21:02 +08:00

170 lines
3.8 KiB
C

/*
* Copyright (C) 2018 Intel Corporation.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef IO_H
#define IO_H
#include <types.h>
/* Write 1 byte to specified I/O port */
static inline void pio_write8(uint8_t value, uint16_t port)
{
asm volatile ("outb %0,%1"::"a" (value), "dN"(port));
}
/* Read 1 byte from specified I/O port */
static inline uint8_t pio_read8(uint16_t port)
{
uint8_t value;
asm volatile ("inb %1,%0":"=a" (value):"dN"(port));
return value;
}
/* Write 2 bytes to specified I/O port */
static inline void pio_write16(uint16_t value, uint16_t port)
{
asm volatile ("outw %0,%1"::"a" (value), "dN"(port));
}
/* Read 2 bytes from specified I/O port */
static inline uint16_t pio_read16(uint16_t port)
{
uint16_t value;
asm volatile ("inw %1,%0":"=a" (value):"dN"(port));
return value;
}
/* Write 4 bytes to specified I/O port */
static inline void pio_write32(uint32_t value, uint16_t port)
{
asm volatile ("outl %0,%1"::"a" (value), "dN"(port));
}
/* Read 4 bytes from specified I/O port */
static inline uint32_t pio_read32(uint16_t port)
{
uint32_t value;
asm volatile ("inl %1,%0":"=a" (value):"dN"(port));
return value;
}
static inline void pio_write(uint32_t v, uint16_t addr, size_t sz)
{
if (sz == 1U) {
pio_write8((uint8_t)v, addr);
} else if (sz == 2U) {
pio_write16((uint16_t)v, addr);
} else {
pio_write32(v, addr);
}
}
static inline uint32_t pio_read(uint16_t addr, size_t sz)
{
uint32_t ret;
if (sz == 1U) {
ret = pio_read8(addr);
} else if (sz == 2U) {
ret = pio_read16(addr);
} else {
ret = pio_read32(addr);
}
return ret;
}
/** Writes a 64 bit value to a memory mapped IO device.
*
* @param value The 64 bit value to write.
* @param addr The memory address to write to.
*/
static inline void mmio_write64(uint64_t value, void *addr)
{
volatile uint64_t *addr64 = (volatile uint64_t *)addr;
*addr64 = value;
}
/** Writes a 32 bit value to a memory mapped IO device.
*
* @param value The 32 bit value to write.
* @param addr The memory address to write to.
*/
static inline void mmio_write32(uint32_t value, void *addr)
{
volatile uint32_t *addr32 = (volatile uint32_t *)addr;
*addr32 = value;
}
/** Writes a 16 bit value to a memory mapped IO device.
*
* @param value The 16 bit value to write.
* @param addr The memory address to write to.
*/
static inline void mmio_write16(uint16_t value, void *addr)
{
volatile uint16_t *addr16 = (volatile uint16_t *)addr;
*addr16 = value;
}
/** Writes an 8 bit value to a memory mapped IO device.
*
* @param value The 8 bit value to write.
* @param addr The memory address to write to.
*/
static inline void mmio_write8(uint8_t value, void *addr)
{
volatile uint8_t *addr8 = (volatile uint8_t *)addr;
*addr8 = value;
}
/** Reads a 64 bit value from a memory mapped IO device.
*
* @param addr The memory address to read from.
*
* @return The 64 bit value read from the given address.
*/
static inline uint64_t mmio_read64(const void *addr)
{
return *((volatile const uint64_t *)addr);
}
/** Reads a 32 bit value from a memory mapped IO device.
*
* @param addr The memory address to read from.
*
* @return The 32 bit value read from the given address.
*/
static inline uint32_t mmio_read32(const void *addr)
{
return *((volatile const uint32_t *)addr);
}
/** Reads a 16 bit value from a memory mapped IO device.
*
* @param addr The memory address to read from.
*
* @return The 16 bit value read from the given address.
*/
static inline uint16_t mmio_read16(const void *addr)
{
return *((volatile const uint16_t *)addr);
}
/** Reads an 8 bit value from a memory mapped IO device.
*
* @param addr The memory address to read from.
*
* @return The 8 bit value read from the given address.
*/
static inline uint8_t mmio_read8(const void *addr)
{
return *((volatile const uint8_t *)addr);
}
#endif /* _IO_H defined */