Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/arch/s390/include/asm/crw.h
10819 views
1
/*
2
* Data definitions for channel report processing
3
* Copyright IBM Corp. 2000,2009
4
* Author(s): Ingo Adlung <[email protected]>,
5
* Martin Schwidefsky <[email protected]>,
6
* Cornelia Huck <[email protected]>,
7
* Heiko Carstens <[email protected]>,
8
*/
9
10
#ifndef _ASM_S390_CRW_H
11
#define _ASM_S390_CRW_H
12
13
#include <linux/types.h>
14
15
/*
16
* Channel Report Word
17
*/
18
struct crw {
19
__u32 res1 : 1; /* reserved zero */
20
__u32 slct : 1; /* solicited */
21
__u32 oflw : 1; /* overflow */
22
__u32 chn : 1; /* chained */
23
__u32 rsc : 4; /* reporting source code */
24
__u32 anc : 1; /* ancillary report */
25
__u32 res2 : 1; /* reserved zero */
26
__u32 erc : 6; /* error-recovery code */
27
__u32 rsid : 16; /* reporting-source ID */
28
} __attribute__ ((packed));
29
30
typedef void (*crw_handler_t)(struct crw *, struct crw *, int);
31
32
extern int crw_register_handler(int rsc, crw_handler_t handler);
33
extern void crw_unregister_handler(int rsc);
34
extern void crw_handle_channel_report(void);
35
void crw_wait_for_channel_report(void);
36
37
#define NR_RSCS 16
38
39
#define CRW_RSC_MONITOR 0x2 /* monitoring facility */
40
#define CRW_RSC_SCH 0x3 /* subchannel */
41
#define CRW_RSC_CPATH 0x4 /* channel path */
42
#define CRW_RSC_CONFIG 0x9 /* configuration-alert facility */
43
#define CRW_RSC_CSS 0xB /* channel subsystem */
44
45
#define CRW_ERC_EVENT 0x00 /* event information pending */
46
#define CRW_ERC_AVAIL 0x01 /* available */
47
#define CRW_ERC_INIT 0x02 /* initialized */
48
#define CRW_ERC_TERROR 0x03 /* temporary error */
49
#define CRW_ERC_IPARM 0x04 /* installed parm initialized */
50
#define CRW_ERC_TERM 0x05 /* terminal */
51
#define CRW_ERC_PERRN 0x06 /* perm. error, fac. not init */
52
#define CRW_ERC_PERRI 0x07 /* perm. error, facility init */
53
#define CRW_ERC_PMOD 0x08 /* installed parameters modified */
54
55
static inline int stcrw(struct crw *pcrw)
56
{
57
int ccode;
58
59
asm volatile(
60
" stcrw 0(%2)\n"
61
" ipm %0\n"
62
" srl %0,28\n"
63
: "=d" (ccode), "=m" (*pcrw)
64
: "a" (pcrw)
65
: "cc" );
66
return ccode;
67
}
68
69
#endif /* _ASM_S390_CRW_H */
70
71