Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
s390
kernel
diag.c
Go to the documentation of this file.
1
/*
2
* Implementation of s390 diagnose codes
3
*
4
* Copyright IBM Corp. 2007
5
* Author(s): Michael Holzheu <
[email protected]
>
6
*/
7
8
#include <linux/module.h>
9
#include <
asm/diag.h
>
10
11
/*
12
* Diagnose 14: Input spool file manipulation
13
*/
14
int
diag14
(
unsigned
long
rx
,
unsigned
long
ry1,
unsigned
long
subcode)
15
{
16
register
unsigned
long
_ry1
asm
(
"2"
) = ry1;
17
register
unsigned
long
_ry2
asm
(
"3"
) = subcode;
18
int
rc
= 0;
19
20
asm
volatile
(
21
#ifdef CONFIG_64BIT
22
" sam31\n"
23
" diag %2,2,0x14\n"
24
" sam64\n"
25
#else
26
" diag %2,2,0x14\n"
27
#endif
28
" ipm %0\n"
29
" srl %0,28\n"
30
:
"=d"
(
rc
),
"+d"
(_ry2)
31
:
"d"
(
rx
),
"d"
(_ry1)
32
:
"cc"
);
33
34
return
rc
;
35
}
36
EXPORT_SYMBOL
(
diag14
);
37
38
/*
39
* Diagnose 210: Get information about a virtual device
40
*/
41
int
diag210
(
struct
diag210
*
addr
)
42
{
43
/*
44
* diag 210 needs its data below the 2GB border, so we
45
* use a static data area to be sure
46
*/
47
static
struct
diag210
diag210_tmp;
48
static
DEFINE_SPINLOCK
(diag210_lock);
49
unsigned
long
flags
;
50
int
ccode;
51
52
spin_lock_irqsave
(&diag210_lock, flags);
53
diag210_tmp = *
addr
;
54
55
#ifdef CONFIG_64BIT
56
asm
volatile
(
57
" lhi %0,-1\n"
58
" sam31\n"
59
" diag %1,0,0x210\n"
60
"0: ipm %0\n"
61
" srl %0,28\n"
62
"1: sam64\n"
63
EX_TABLE
(0
b
, 1
b
)
64
:
"=&d"
(ccode) :
"a"
(&diag210_tmp) :
"cc"
,
"memory"
);
65
#else
66
asm
volatile
(
67
" lhi %0,-1\n"
68
" diag %1,0,0x210\n"
69
"0: ipm %0\n"
70
" srl %0,28\n"
71
"1:\n"
72
EX_TABLE
(0
b
, 1
b
)
73
:
"=&d"
(ccode) :
"a"
(&diag210_tmp) :
"cc"
,
"memory"
);
74
#endif
75
76
*addr = diag210_tmp;
77
spin_unlock_irqrestore(&diag210_lock, flags);
78
79
return
ccode;
80
}
81
EXPORT_SYMBOL
(
diag210
);
Generated on Thu Jan 10 2013 13:16:48 for Linux Kernel by
1.8.2