Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fcc6dd4b authored by Sebastian Ott's avatar Sebastian Ott Committed by Martin Schwidefsky
Browse files

s390/chsc: query utility strings via fmt3 channel path descriptor



Add support for format 3 channel path descriptors and use them to
gather utility strings.

Signed-off-by: default avatarSebastian Ott <sebott@linux.vnet.ibm.com>
Reviewed-by: default avatarPeter Oberparleiter <oberpar@linux.vnet.ibm.com>
Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
parent ded27d8d
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ struct css_general_char {
	u32 alt_ssi : 1; /* bit 108 */
	u32 : 1;
	u32 narf : 1;	 /* bit 110 */
	u32 : 12;
	u32 util_str : 1;/* bit 123 */
} __packed;

extern struct css_general_char css_general_characteristics;
+1 −0
Original line number Diff line number Diff line
@@ -431,6 +431,7 @@ int chp_update_desc(struct channel_path *chp)
	 * hypervisors implement the required chsc commands.
	 */
	chsc_determine_fmt1_channel_path_desc(chp->chpid, &chp->desc_fmt1);
	chsc_determine_fmt3_channel_path_desc(chp->chpid, &chp->desc_fmt3);
	chsc_get_channel_measurement_chars(chp);

	return 0;
+1 −0
Original line number Diff line number Diff line
@@ -46,6 +46,7 @@ struct channel_path {
	int state;
	struct channel_path_desc_fmt0 desc;
	struct channel_path_desc_fmt1 desc_fmt1;
	struct channel_path_desc_fmt3 desc_fmt3;
	/* Channel-measurement related stuff: */
	int cmg;
	int shared;
+3 −0
Original line number Diff line number Diff line
@@ -915,6 +915,8 @@ int chsc_determine_channel_path_desc(struct chp_id chpid, int fmt, int rfmt,
		return -EINVAL;
	if ((rfmt == 2) && !css_general_characteristics.cib)
		return -EINVAL;
	if ((rfmt == 3) && !css_general_characteristics.util_str)
		return -EINVAL;

	memset(page, 0, PAGE_SIZE);
	scpd_area = page;
@@ -963,6 +965,7 @@ out: \

chsc_det_chp_desc(0, 0)
chsc_det_chp_desc(1, 1)
chsc_det_chp_desc(3, 0)

static void
chsc_initialize_cmg_chars(struct channel_path *chp, u8 cmcv,
+7 −0
Original line number Diff line number Diff line
@@ -40,6 +40,11 @@ struct channel_path_desc_fmt1 {
	u32 zeros[2];
} __attribute__ ((packed));

struct channel_path_desc_fmt3 {
	struct channel_path_desc_fmt1 fmt1_desc;
	u8 util_str[64];
};

struct channel_path;

struct css_chsc_char {
@@ -151,6 +156,8 @@ int chsc_determine_fmt0_channel_path_desc(struct chp_id chpid,
					  struct channel_path_desc_fmt0 *desc);
int chsc_determine_fmt1_channel_path_desc(struct chp_id chpid,
					  struct channel_path_desc_fmt1 *desc);
int chsc_determine_fmt3_channel_path_desc(struct chp_id chpid,
					  struct channel_path_desc_fmt3 *desc);
void chsc_chp_online(struct chp_id chpid);
void chsc_chp_offline(struct chp_id chpid);
int chsc_get_channel_measurement_chars(struct channel_path *chp);