]>
Commit | Line | Data |
---|---|---|
1f38d613 | 1 | /* |
a53c8fab | 2 | * Copyright IBM Corp. 2006 |
1f38d613 GS |
3 | * |
4 | * Author(s): Melissa Howland <melissah@us.ibm.com> | |
5 | */ | |
6 | ||
7 | #ifndef _ASM_S390_APPLDATA_H | |
8 | #define _ASM_S390_APPLDATA_H | |
9 | ||
1ec2772e | 10 | #include <asm/diag.h> |
1f38d613 GS |
11 | #include <asm/io.h> |
12 | ||
1f38d613 GS |
13 | #define APPLDATA_START_INTERVAL_REC 0x80 |
14 | #define APPLDATA_STOP_REC 0x81 | |
15 | #define APPLDATA_GEN_EVENT_REC 0x82 | |
16 | #define APPLDATA_START_CONFIG_REC 0x83 | |
17 | ||
18 | /* | |
19 | * Parameter list for DIAGNOSE X'DC' | |
20 | */ | |
21 | struct appldata_parameter_list { | |
22 | u16 diag; | |
23 | u8 function; | |
24 | u8 parlist_length; | |
25 | u32 unused01; | |
26 | u16 reserved; | |
27 | u16 buffer_length; | |
28 | u32 unused02; | |
29 | u64 product_id_addr; | |
30 | u64 buffer_addr; | |
31 | } __attribute__ ((packed)); | |
32 | ||
1f38d613 GS |
33 | struct appldata_product_id { |
34 | char prod_nr[7]; /* product number */ | |
35 | u16 prod_fn; /* product function */ | |
36 | u8 record_nr; /* record number */ | |
37 | u16 version_nr; /* version */ | |
38 | u16 release_nr; /* release */ | |
39 | u16 mod_lvl; /* modification level */ | |
40 | } __attribute__ ((packed)); | |
41 | ||
42 | static inline int appldata_asm(struct appldata_product_id *id, | |
43 | unsigned short fn, void *buffer, | |
44 | unsigned short length) | |
45 | { | |
46 | struct appldata_parameter_list parm_list; | |
47 | int ry; | |
48 | ||
49 | if (!MACHINE_IS_VM) | |
a11b2ef7 | 50 | return -EOPNOTSUPP; |
1f38d613 GS |
51 | parm_list.diag = 0xdc; |
52 | parm_list.function = fn; | |
53 | parm_list.parlist_length = sizeof(parm_list); | |
54 | parm_list.buffer_length = length; | |
55 | parm_list.product_id_addr = (unsigned long) id; | |
56 | parm_list.buffer_addr = virt_to_phys(buffer); | |
1ec2772e | 57 | diag_stat_inc(DIAG_STAT_X0DC); |
1f38d613 | 58 | asm volatile( |
94c12cc7 | 59 | " diag %1,%0,0xdc" |
1f38d613 GS |
60 | : "=d" (ry) |
61 | : "d" (&parm_list), "m" (parm_list), "m" (*id) | |
62 | : "cc"); | |
63 | return ry; | |
64 | } | |
65 | ||
66 | #endif /* _ASM_S390_APPLDATA_H */ |