2005-04-17 02:20:36 +04:00
# ifndef S390_CHSC_H
# define S390_CHSC_H
2007-04-27 18:01:26 +04:00
# include <linux/types.h>
# include <linux/device.h>
2007-04-27 18:01:31 +04:00
# include <asm/chpid.h>
2007-04-27 18:01:35 +04:00
# include "schid.h"
2007-04-27 18:01:26 +04:00
2006-01-06 11:19:25 +03:00
# define CHSC_SDA_OC_MSS 0x2
2005-04-17 02:20:36 +04:00
struct chsc_header {
u16 length ;
u16 code ;
2007-02-05 23:17:40 +03:00
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
2006-03-24 14:15:14 +03:00
# define NR_MEASUREMENT_CHARS 5
struct cmg_chars {
u32 values [ NR_MEASUREMENT_CHARS ] ;
2007-02-05 23:17:40 +03:00
} __attribute__ ( ( packed ) ) ;
2006-03-24 14:15:14 +03:00
# define NR_MEASUREMENT_ENTRIES 8
struct cmg_entry {
u32 values [ NR_MEASUREMENT_ENTRIES ] ;
2007-02-05 23:17:40 +03:00
} __attribute__ ( ( packed ) ) ;
2006-03-24 14:15:14 +03:00
2005-04-17 02:20:36 +04:00
struct channel_path_desc {
u8 flags ;
u8 lsn ;
u8 desc ;
u8 chpid ;
u8 swla ;
u8 zeroes ;
u8 chla ;
u8 chpp ;
2007-02-05 23:17:40 +03:00
} __attribute__ ( ( packed ) ) ;
2005-04-17 02:20:36 +04:00
2007-04-27 18:01:28 +04:00
struct channel_path ;
2005-04-17 02:20:36 +04:00
2007-04-27 18:01:34 +04:00
extern void chsc_process_crw ( void ) ;
2005-04-17 02:20:36 +04:00
struct css_general_char {
u64 : 41 ;
u32 aif : 1 ; /* bit 41 */
u32 : 3 ;
u32 mcss : 1 ; /* bit 45 */
u32 : 2 ;
u32 ext_mb : 1 ; /* bit 48 */
u32 : 7 ;
u32 aif_tdd : 1 ; /* bit 56 */
2006-01-06 11:19:20 +03:00
u32 : 1 ;
u32 qebsm : 1 ; /* bit 58 */
u32 : 8 ;
2005-04-17 02:20:36 +04:00
u32 aif_osa : 1 ; /* bit 67 */
u32 : 28 ;
} __attribute__ ( ( packed ) ) ;
struct css_chsc_char {
u64 res ;
2006-03-24 14:15:14 +03:00
u64 : 20 ;
u32 secm : 1 ; /* bit 84 */
u32 : 1 ;
u32 scmc : 1 ; /* bit 86 */
u32 : 20 ;
2005-04-17 02:20:36 +04:00
u32 scssc : 1 ; /* bit 107 */
u32 scsscf : 1 ; /* bit 108 */
u32 : 19 ;
} __attribute__ ( ( packed ) ) ;
extern struct css_general_char css_general_characteristics ;
extern struct css_chsc_char css_chsc_characteristics ;
2007-04-27 18:01:35 +04:00
struct chsc_ssd_info {
u8 path_mask ;
u8 fla_valid_mask ;
struct chp_id chpid [ 8 ] ;
u16 fla [ 8 ] ;
} ;
extern int chsc_get_ssd_info ( struct subchannel_id schid ,
struct chsc_ssd_info * ssd ) ;
2005-04-17 02:20:36 +04:00
extern int chsc_determine_css_characteristics ( void ) ;
extern int css_characteristics_avail ;
2007-07-27 14:29:21 +04:00
extern int chsc_alloc_sei_area ( void ) ;
extern void chsc_free_sei_area ( void ) ;
2005-04-17 02:20:36 +04:00
2006-01-06 11:19:25 +03:00
extern int chsc_enable_facility ( int ) ;
2006-03-24 14:15:14 +03:00
struct channel_subsystem ;
extern int chsc_secm ( struct channel_subsystem * , int ) ;
2006-01-06 11:19:25 +03:00
2007-04-27 18:01:28 +04:00
int chsc_chp_vary ( struct chp_id chpid , int on ) ;
int chsc_determine_channel_path_description ( struct chp_id chpid ,
struct channel_path_desc * desc ) ;
2007-04-27 18:01:34 +04:00
void chsc_chp_online ( struct chp_id chpid ) ;
2007-04-27 18:01:28 +04:00
void chsc_chp_offline ( struct chp_id chpid ) ;
int chsc_get_channel_measurement_chars ( struct channel_path * chp ) ;
2006-01-06 11:19:23 +03:00
2005-04-17 02:20:36 +04:00
# endif