Linux Audio

Check our new training course

Loading...
  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