1 #ifndef S390_CHSC_H 2 #define S390_CHSC_H 3 4 #include <linux/types.h> 5 #include <linux/device.h> 6 #include <asm/chpid.h> 7 #include <asm/chsc.h> 8 #include <asm/schid.h> 9 10 #define CHSC_SDA_OC_MSS 0x2 11 12 struct chsc_header { 13 u16 length; 14 u16 code; 15 } __attribute__ ((packed)); 16 17 #define NR_MEASUREMENT_CHARS 5 18 struct cmg_chars { 19 u32 values[NR_MEASUREMENT_CHARS]; 20 } __attribute__ ((packed)); 21 22 #define NR_MEASUREMENT_ENTRIES 8 23 struct cmg_entry { 24 u32 values[NR_MEASUREMENT_ENTRIES]; 25 } __attribute__ ((packed)); 26 27 struct channel_path_desc { 28 u8 flags; 29 u8 lsn; 30 u8 desc; 31 u8 chpid; 32 u8 swla; 33 u8 zeroes; 34 u8 chla; 35 u8 chpp; 36 } __attribute__ ((packed)); 37 38 struct channel_path_desc_fmt1 { 39 u8 flags; 40 u8 lsn; 41 u8 desc; 42 u8 chpid; 43 u32:24; 44 u8 chpp; 45 u32 unused[3]; 46 u16 mdc; 47 u16:13; 48 u8 r:1; 49 u8 s:1; 50 u8 f:1; 51 u32 zeros[2]; 52 } __attribute__ ((packed)); 53 54 struct channel_path; 55 56 struct css_chsc_char { 57 u64 res; 58 u64 : 20; 59 u32 secm : 1; /* bit 84 */ 60 u32 : 1; 61 u32 scmc : 1; /* bit 86 */ 62 u32 : 20; 63 u32 scssc : 1; /* bit 107 */ 64 u32 scsscf : 1; /* bit 108 */ 65 u32 : 19; 66 }__attribute__((packed)); 67 68 extern struct css_chsc_char css_chsc_characteristics; 69 70 struct chsc_ssd_info { 71 u8 path_mask; 72 u8 fla_valid_mask; 73 struct chp_id chpid[8]; 74 u16 fla[8]; 75 }; 76 77 struct chsc_scpd { 78 struct chsc_header request; 79 u32:2; 80 u32 m:1; 81 u32 c:1; 82 u32 fmt:4; 83 u32 cssid:8; 84 u32:4; 85 u32 rfmt:4; 86 u32 first_chpid:8; 87 u32:24; 88 u32 last_chpid:8; 89 u32 zeroes1; 90 struct chsc_header response; 91 u8 data[PAGE_SIZE - 20]; 92 } __attribute__ ((packed)); 93 94 95 extern int chsc_get_ssd_info(struct subchannel_id schid, 96 struct chsc_ssd_info *ssd); 97 extern int chsc_determine_css_characteristics(void); 98 extern int chsc_init(void); 99 extern void chsc_init_cleanup(void); 100 101 extern int chsc_enable_facility(int); 102 struct channel_subsystem; 103 extern int chsc_secm(struct channel_subsystem *, int); 104 int __chsc_do_secm(struct channel_subsystem *css, int enable); 105 106 int chsc_chp_vary(struct chp_id chpid, int on); 107 int chsc_determine_channel_path_desc(struct chp_id chpid, int fmt, int rfmt, 108 int c, int m, void *page); 109 int chsc_determine_base_channel_path_desc(struct chp_id chpid, 110 struct channel_path_desc *desc); 111 int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid, 112 struct channel_path_desc_fmt1 *desc); 113 void chsc_chp_online(struct chp_id chpid); 114 void chsc_chp_offline(struct chp_id chpid); 115 int chsc_get_channel_measurement_chars(struct channel_path *chp); 116 117 int chsc_error_from_response(int response); 118 119 int chsc_siosl(struct subchannel_id schid); 120 121 #endif 122