linux/drivers/s390/cio/chsc.h
<<
>>
Prefs
   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
  12struct chsc_header {
  13        u16 length;
  14        u16 code;
  15} __attribute__ ((packed));
  16
  17#define NR_MEASUREMENT_CHARS 5
  18struct cmg_chars {
  19        u32 values[NR_MEASUREMENT_CHARS];
  20} __attribute__ ((packed));
  21
  22#define NR_MEASUREMENT_ENTRIES 8
  23struct cmg_entry {
  24        u32 values[NR_MEASUREMENT_ENTRIES];
  25} __attribute__ ((packed));
  26
  27struct 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
  38struct 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
  54struct channel_path;
  55
  56struct 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
  68extern struct css_chsc_char css_chsc_characteristics;
  69
  70struct chsc_ssd_info {
  71        u8 path_mask;
  72        u8 fla_valid_mask;
  73        struct chp_id chpid[8];
  74        u16 fla[8];
  75};
  76
  77struct 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
  95extern int chsc_get_ssd_info(struct subchannel_id schid,
  96                             struct chsc_ssd_info *ssd);
  97extern int chsc_determine_css_characteristics(void);
  98extern int chsc_init(void);
  99extern void chsc_init_cleanup(void);
 100
 101extern int chsc_enable_facility(int);
 102struct channel_subsystem;
 103extern int chsc_secm(struct channel_subsystem *, int);
 104int __chsc_do_secm(struct channel_subsystem *css, int enable);
 105
 106int chsc_chp_vary(struct chp_id chpid, int on);
 107int chsc_determine_channel_path_desc(struct chp_id chpid, int fmt, int rfmt,
 108                                     int c, int m, void *page);
 109int chsc_determine_base_channel_path_desc(struct chp_id chpid,
 110                                          struct channel_path_desc *desc);
 111int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid,
 112                                          struct channel_path_desc_fmt1 *desc);
 113void chsc_chp_online(struct chp_id chpid);
 114void chsc_chp_offline(struct chp_id chpid);
 115int chsc_get_channel_measurement_chars(struct channel_path *chp);
 116
 117int chsc_error_from_response(int response);
 118
 119int chsc_siosl(struct subchannel_id schid);
 120
 121#endif
 122