Files
Erik Frojdh a8c391509e
Build on RHEL9 docker image / build (push) Successful in 3m52s
Build on RHEL8 docker image / build (push) Successful in 5m10s
Run Simulator Tests on local RHEL9 / build (push) Successful in 20m40s
Run Simulator Tests on local RHEL8 / build (push) Successful in 24m10s
memory clobber for inline asm and added flags on eiger
2026-10-26 14:05:01 +01:00

79 lines
2.6 KiB
C

// 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)
: "memory");
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)
: "memory");
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)
: "memory");
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)
: "memory");
}
/*****************************************************************************/
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)
: "memory");
}
/*****************************************************************************/
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)
: "memory");
}