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