Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
appldata.h
Go to the documentation of this file.
1 /*
2  * Copyright IBM Corp. 2006
3  *
4  * Author(s): Melissa Howland <[email protected]>
5  */
6 
7 #ifndef _ASM_S390_APPLDATA_H
8 #define _ASM_S390_APPLDATA_H
9 
10 #include <asm/io.h>
11 
12 #ifndef CONFIG_64BIT
13 
14 #define APPLDATA_START_INTERVAL_REC 0x00 /* Function codes for */
15 #define APPLDATA_STOP_REC 0x01 /* DIAG 0xDC */
16 #define APPLDATA_GEN_EVENT_REC 0x02
17 #define APPLDATA_START_CONFIG_REC 0x03
18 
19 /*
20  * Parameter list for DIAGNOSE X'DC'
21  */
23  u16 diag; /* The DIAGNOSE code X'00DC' */
24  u8 function; /* The function code for the DIAGNOSE */
25  u8 parlist_length; /* Length of the parameter list */
26  u32 product_id_addr; /* Address of the 16-byte product ID */
28  u16 buffer_length; /* Length of the application data buffer */
29  u32 buffer_addr; /* Address of the application data buffer */
30 } __attribute__ ((packed));
31 
32 #else /* CONFIG_64BIT */
33 
34 #define APPLDATA_START_INTERVAL_REC 0x80
35 #define APPLDATA_STOP_REC 0x81
36 #define APPLDATA_GEN_EVENT_REC 0x82
37 #define APPLDATA_START_CONFIG_REC 0x83
38 
39 /*
40  * Parameter list for DIAGNOSE X'DC'
41  */
43  u16 diag;
44  u8 function;
46  u32 unused01;
47  u16 reserved;
49  u32 unused02;
52 } __attribute__ ((packed));
53 
54 #endif /* CONFIG_64BIT */
55 
57  char prod_nr[7]; /* product number */
58  u16 prod_fn; /* product function */
59  u8 record_nr; /* record number */
60  u16 version_nr; /* version */
61  u16 release_nr; /* release */
62  u16 mod_lvl; /* modification level */
63 } __attribute__ ((packed));
64 
65 static inline int appldata_asm(struct appldata_product_id *id,
66  unsigned short fn, void *buffer,
67  unsigned short length)
68 {
69  struct appldata_parameter_list parm_list;
70  int ry;
71 
72  if (!MACHINE_IS_VM)
73  return -EOPNOTSUPP;
74  parm_list.diag = 0xdc;
75  parm_list.function = fn;
76  parm_list.parlist_length = sizeof(parm_list);
77  parm_list.buffer_length = length;
78  parm_list.product_id_addr = (unsigned long) id;
79  parm_list.buffer_addr = virt_to_phys(buffer);
80  asm volatile(
81  " diag %1,%0,0xdc"
82  : "=d" (ry)
83  : "d" (&parm_list), "m" (parm_list), "m" (*id)
84  : "cc");
85  return ry;
86 }
87 
88 #endif /* _ASM_S390_APPLDATA_H */