arch/s390/include/asm/diag288.h

Source file repositories/reference/linux-study-clean/arch/s390/include/asm/diag288.h

File Facts

System
Linux kernel
Corpus path
arch/s390/include/asm/diag288.h
Extension
.h
Size
1031 bytes
Lines
42
Domain
Architecture Layer
Bucket
arch/s390
Inferred role
Architecture Layer: implementation source
Status
source implementation candidate

Why This File Exists

CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.

Dependency Surface

Detected Declarations

Annotated Snippet

#ifndef _ASM_S390_DIAG288_H
#define _ASM_S390_DIAG288_H

#include <asm/asm-extable.h>
#include <asm/types.h>

#define MIN_INTERVAL 15	    /* Minimal time supported by diag288 */
#define MAX_INTERVAL 3600   /* One hour should be enough - pure estimation */

#define WDT_DEFAULT_TIMEOUT 30

/* Function codes - init, change, cancel */
#define WDT_FUNC_INIT 0
#define WDT_FUNC_CHANGE 1
#define WDT_FUNC_CANCEL 2
#define WDT_FUNC_CONCEAL 0x80000000

/* Action codes for LPAR watchdog */
#define LPARWDT_RESTART 0

static inline int __diag288(unsigned int func, unsigned int timeout,
			    unsigned long action, unsigned int len)
{
	union register_pair r1 = { .even = func, .odd = timeout, };
	union register_pair r3 = { .even = action, .odd = len, };
	int rc = -EINVAL;

	asm volatile(
		"	diag	%[r1],%[r3],0x288\n"
		"0:	lhi	%[rc],0\n"
		"1:"
		EX_TABLE(0b, 1b)
		: [rc] "+d" (rc)
		: [r1] "d" (r1.pair), [r3] "d" (r3.pair)
		: "cc", "memory");
	return rc;
}

#endif /* _ASM_S390_DIAG288_H */

Annotation

Implementation Notes