mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2026-11-10 02:53:53 +01:00
Build and Deploy on local RHEL9 / build (push) Successful in 2m0s
Build on RHEL9 docker image / build (push) Successful in 5m0s
Build and Deploy on local RHEL8 / build (push) Successful in 5m10s
Build on RHEL8 docker image / build (push) Successful in 5m27s
Run Simulator Tests on local RHEL9 / build (push) Successful in 20m41s
Run Simulator Tests on local RHEL8 / build (push) Successful in 24m6s
* replaced bf specific usleep replacement with one using cycle counts to be stable while changing optimization levels * uint32_t signature on usleep since the register read is 32bit... * enabled -O2 for ctb and mythen + a few additional warnings * configure stack size for blackfin servers to 256kB instead of the default 4kB * enable opt for JF and Moench, ratemax make local for eiger * fixed misplaced volatile on Beb_Read32 * removed dead code in eiger server (which had 2 byte read passt end), usleep_bf returns -1 for sleeps that can't be represented * deal with fall through of table filling in ratecorr table * memory clobber for inline asm and added flags on eiger * -O2 for gotthard and xilinx * fixes to remove the new warnings * fixed new eiger warnings * binaries in --------- Co-authored-by: Dhanya Thattil <dhanya.thattil@psi.ch>
79 lines
2.6 KiB
C
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");
|
|
}
|