]> pilppa.org Git - linux-2.6-omap-h63xx.git/blob - drivers/s390/cio/chsc.h
[S390] cio: Introduce struct chp_id.
[linux-2.6-omap-h63xx.git] / drivers / s390 / cio / chsc.h
1 #ifndef S390_CHSC_H
2 #define S390_CHSC_H
3
4 #include <linux/types.h>
5 #include <linux/device.h>
6 #include "chpid.h"
7
8 #define CHSC_SEI_ACC_CHPID        1
9 #define CHSC_SEI_ACC_LINKADDR     2
10 #define CHSC_SEI_ACC_FULLLINKADDR 3
11
12 #define CHSC_SDA_OC_MSS   0x2
13
14 struct chsc_header {
15         u16 length;
16         u16 code;
17 } __attribute__ ((packed));
18
19 #define NR_MEASUREMENT_CHARS 5
20 struct cmg_chars {
21         u32 values[NR_MEASUREMENT_CHARS];
22 } __attribute__ ((packed));
23
24 #define NR_MEASUREMENT_ENTRIES 8
25 struct cmg_entry {
26         u32 values[NR_MEASUREMENT_ENTRIES];
27 } __attribute__ ((packed));
28
29 struct channel_path_desc {
30         u8 flags;
31         u8 lsn;
32         u8 desc;
33         u8 chpid;
34         u8 swla;
35         u8 zeroes;
36         u8 chla;
37         u8 chpp;
38 } __attribute__ ((packed));
39
40 struct channel_path {
41         struct chp_id chpid;
42         int state;
43         struct channel_path_desc desc;
44         /* Channel-measurement related stuff: */
45         int cmg;
46         int shared;
47         void *cmg_chars;
48         struct device dev;
49 };
50
51 extern void s390_process_css( void );
52 extern void chsc_validate_chpids(struct subchannel *);
53 extern void chpid_is_actually_online(struct chp_id);
54 extern int css_get_ssd_info(struct subchannel *);
55 extern int chsc_process_crw(void);
56 extern int chp_process_crw(int, int);
57
58 struct css_general_char {
59         u64 : 41;
60         u32 aif : 1;     /* bit 41 */
61         u32 : 3;
62         u32 mcss : 1;    /* bit 45 */
63         u32 : 2;
64         u32 ext_mb : 1;  /* bit 48 */
65         u32 : 7;
66         u32 aif_tdd : 1; /* bit 56 */
67         u32 : 1;
68         u32 qebsm : 1;   /* bit 58 */
69         u32 : 8;
70         u32 aif_osa : 1; /* bit 67 */
71         u32 : 28;
72 }__attribute__((packed));
73
74 struct css_chsc_char {
75         u64 res;
76         u64 : 20;
77         u32 secm : 1; /* bit 84 */
78         u32 : 1;
79         u32 scmc : 1; /* bit 86 */
80         u32 : 20;
81         u32 scssc : 1;  /* bit 107 */
82         u32 scsscf : 1; /* bit 108 */
83         u32 : 19;
84 }__attribute__((packed));
85
86 extern struct css_general_char css_general_characteristics;
87 extern struct css_chsc_char css_chsc_characteristics;
88
89 extern int chsc_determine_css_characteristics(void);
90 extern int css_characteristics_avail;
91
92 extern void *chsc_get_chp_desc(struct subchannel*, int);
93
94 extern int chsc_enable_facility(int);
95 struct channel_subsystem;
96 extern int chsc_secm(struct channel_subsystem *, int);
97
98 #define to_channelpath(device) container_of(device, struct channel_path, dev)
99
100 #endif