Commit | Line | Data |
---|---|---|
0a87c5cf MH |
1 | /* |
2 | * s390 diagnose functions | |
3 | * | |
4 | * Copyright IBM Corp. 2007 | |
5 | * Author(s): Michael Holzheu <holzheu@de.ibm.com> | |
6 | */ | |
7 | ||
8 | #ifndef _ASM_S390_DIAG_H | |
9 | #define _ASM_S390_DIAG_H | |
10 | ||
1ec2772e MS |
11 | #include <linux/percpu.h> |
12 | ||
13 | enum diag_stat_enum { | |
14 | DIAG_STAT_X008, | |
15 | DIAG_STAT_X00C, | |
16 | DIAG_STAT_X010, | |
17 | DIAG_STAT_X014, | |
18 | DIAG_STAT_X044, | |
19 | DIAG_STAT_X064, | |
20 | DIAG_STAT_X09C, | |
21 | DIAG_STAT_X0DC, | |
22 | DIAG_STAT_X204, | |
23 | DIAG_STAT_X210, | |
24 | DIAG_STAT_X224, | |
25 | DIAG_STAT_X250, | |
26 | DIAG_STAT_X258, | |
27 | DIAG_STAT_X288, | |
28 | DIAG_STAT_X2C4, | |
29 | DIAG_STAT_X2FC, | |
30 | DIAG_STAT_X304, | |
31 | DIAG_STAT_X308, | |
32 | DIAG_STAT_X500, | |
33 | NR_DIAG_STAT | |
34 | }; | |
35 | ||
b5a6b71b MS |
36 | void diag_stat_inc(enum diag_stat_enum nr); |
37 | void diag_stat_inc_norecursion(enum diag_stat_enum nr); | |
1ec2772e | 38 | |
0a87c5cf | 39 | /* |
83ace270 | 40 | * Diagnose 10: Release page range |
0a87c5cf | 41 | */ |
83ace270 MH |
42 | static inline void diag10_range(unsigned long start_pfn, unsigned long num_pfn) |
43 | { | |
44 | unsigned long start_addr, end_addr; | |
45 | ||
46 | start_addr = start_pfn << PAGE_SHIFT; | |
47 | end_addr = (start_pfn + num_pfn - 1) << PAGE_SHIFT; | |
48 | ||
1ec2772e | 49 | diag_stat_inc(DIAG_STAT_X010); |
83ace270 MH |
50 | asm volatile( |
51 | "0: diag %0,%1,0x10\n" | |
52 | "1:\n" | |
53 | EX_TABLE(0b, 1b) | |
54 | EX_TABLE(1b, 1b) | |
55 | : : "a" (start_addr), "a" (end_addr)); | |
56 | } | |
0a87c5cf MH |
57 | |
58 | /* | |
59 | * Diagnose 14: Input spool file manipulation | |
60 | */ | |
61 | extern int diag14(unsigned long rx, unsigned long ry1, unsigned long subcode); | |
62 | ||
63 | /* | |
64 | * Diagnose 210: Get information about a virtual device | |
65 | */ | |
66 | struct diag210 { | |
67 | u16 vrdcdvno; /* device number (input) */ | |
68 | u16 vrdclen; /* data block length (input) */ | |
69 | u8 vrdcvcla; /* virtual device class (output) */ | |
70 | u8 vrdcvtyp; /* virtual device type (output) */ | |
71 | u8 vrdcvsta; /* virtual device status (output) */ | |
72 | u8 vrdcvfla; /* virtual device flags (output) */ | |
73 | u8 vrdcrccl; /* real device class (output) */ | |
74 | u8 vrdccrty; /* real device type (output) */ | |
75 | u8 vrdccrmd; /* real device model (output) */ | |
76 | u8 vrdccrft; /* real device feature (output) */ | |
77 | } __attribute__((packed, aligned(4))); | |
78 | ||
79 | extern int diag210(struct diag210 *addr); | |
80 | ||
81 | #endif /* _ASM_S390_DIAG_H */ |