]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - arch/s390/include/asm/diag.h
Merge branch 'for-4.8/core' of git://git.kernel.dk/linux-block
[karo-tx-linux.git] / arch / s390 / include / asm / diag.h
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
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
36 void diag_stat_inc(enum diag_stat_enum nr);
37 void diag_stat_inc_norecursion(enum diag_stat_enum nr);
38
39 /*
40  * Diagnose 10: Release page range
41  */
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
49         diag_stat_inc(DIAG_STAT_X010);
50         asm volatile(
51                 "0:     diag    %0,%1,0x10\n"
52                 "1:     nopr    %%r7\n"
53                 EX_TABLE(0b, 1b)
54                 EX_TABLE(1b, 1b)
55                 : : "a" (start_addr), "a" (end_addr));
56 }
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 */