#include <linux/compiler.h>
#include <asm/byteorder.h>
#define CXL_HCALL_TIMEOUT 60000
#define CXL_HCALL_TIMEOUT_DOWNLOAD 120000
#define H_ATTACH_CA_PROCESS 0x344
#define H_CONTROL_CA_FUNCTION 0x348
#define H_DETACH_CA_PROCESS 0x34C
#define H_COLLECT_CA_INT_INFO 0x350
#define H_CONTROL_CA_FAULTS 0x354
#define H_DOWNLOAD_CA_FUNCTION 0x35C
#define H_DOWNLOAD_CA_FACILITY 0x364
#define H_CONTROL_CA_FACILITY 0x368
#define H_CONTROL_CA_FUNCTION_RESET 1
#define H_CONTROL_CA_FUNCTION_SUSPEND_PROCESS 2
#define H_CONTROL_CA_FUNCTION_RESUME_PROCESS 3
#define H_CONTROL_CA_FUNCTION_READ_ERR_STATE 4
#define H_CONTROL_CA_FUNCTION_GET_AFU_ERR 5
#define H_CONTROL_CA_FUNCTION_GET_CONFIG 6
#define H_CONTROL_CA_FUNCTION_GET_DOWNLOAD_STATE 7
#define H_CONTROL_CA_FUNCTION_TERMINATE_PROCESS 8
#define H_CONTROL_CA_FUNCTION_COLLECT_VPD 9
#define H_CONTROL_CA_FUNCTION_GET_FUNCTION_ERR_INT 11
#define H_CONTROL_CA_FUNCTION_ACK_FUNCTION_ERR_INT 12
#define H_CONTROL_CA_FUNCTION_GET_ERROR_LOG 13
#define H_CONTROL_CA_FAULTS_RESPOND_PSL 1
#define H_CONTROL_CA_FAULTS_RESPOND_AFU 2
#define H_CONTROL_CA_FACILITY_RESET 1
#define H_CONTROL_CA_FACILITY_COLLECT_VPD 2
#define H_DOWNLOAD_CA_FACILITY_DOWNLOAD 1
#define H_DOWNLOAD_CA_FACILITY_VALIDATE 2
#define _CXL_LOOP_HCALL(call, rc, retbuf, fn, ...) \
unsigned int delay, total_delay = 0; \
memset(retbuf, 0, sizeof(retbuf)); \
rc = call(fn, retbuf, __VA_ARGS__, token); \
if (rc != H_BUSY && !H_IS_LONG_BUSY(rc)) \