// SPDX-License-Identifier: LGPL-3.0-or-other // Copyright (C) 2021 Contributors to the SLS Detector Package #include "HardwareIO.h" xfs_u8 HWIO_xfs_in8(xfs_u32 InAddress) { /* read the contents of the I/O location and then synchronize the I/O * such that the I/O operation completes before proceeding on */ xfs_u8 IoContents; __asm__ volatile("eieio; lbz %0,0(%1)" : "=r"(IoContents) : "b"(InAddress)); return IoContents; } /*****************************************************************************/ xfs_u16 HWIO_xfs_in16(xfs_u32 InAddress) { /* read the contents of the I/O location and then synchronize the I/O * such that the I/O operation completes before proceeding on */ xfs_u16 IoContents; __asm__ volatile("eieio; lhz %0,0(%1)" : "=r"(IoContents) : "b"(InAddress)); return IoContents; } /*****************************************************************************/ xfs_u32 HWIO_xfs_in32(xfs_u32 InAddress) { /* read the contents of the I/O location and then synchronize the I/O * such that the I/O operation completes before proceeding on */ xfs_u32 IoContents; __asm__ volatile("eieio; lwz %0,0(%1)" : "=r"(IoContents) : "b"(InAddress)); return IoContents; } /*****************************************************************************/ void HWIO_xfs_out8(xfs_u32 OutAddress, xfs_u8 Value) { /* write the contents of the I/O location and then synchronize the I/O * such that the I/O operation completes before proceeding on */ __asm__ volatile("stb %0,0(%1); eieio" ::"r"(Value), "b"(OutAddress)); } /*****************************************************************************/ void HWIO_xfs_out16(xfs_u32 OutAddress, xfs_u16 Value) { /* write the contents of the I/O location and then synchronize the I/O * such that the I/O operation completes before proceeding on */ __asm__ volatile("sth %0,0(%1); eieio" ::"r"(Value), "b"(OutAddress)); } /*****************************************************************************/ void HWIO_xfs_out32(xfs_u32 OutAddress, xfs_u32 Value) { /* write the contents of the I/O location and then synchronize the I/O * such that the I/O operation completes before proceeding on */ __asm__ volatile("stw %0,0(%1); eieio" ::"r"(Value), "b"(OutAddress)); }