aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/chsc.h
diff options
context:
space:
mode:
authorSebastian Ott <sebott@linux.vnet.ibm.com>2010-10-25 10:10:30 -0400
committerMartin Schwidefsky <sky@mschwide.boeblingen.de.ibm.com>2010-10-25 10:10:18 -0400
commit906c9768c7750ce76b85597174b9c3599a6ca9f6 (patch)
tree8676732f1a6bf8f83575a0d7c69048d76097ddde /drivers/s390/cio/chsc.h
parent34196f82b16749e119db5572271944c4add0a9aa (diff)
[S390] chsc: use the global page to determine the chp desriptor
chsc_determine_channel_path_desc is called by a wrapper who allocates a response struct. The response data is then memcpy'ed to this response struct by chsc_determine_channel_path_desc. Change chsc_determine_base_channel_path_desc to use the global chsc_page and deliver it to the function doing the actual chsc call. The channel path desriptor is then directly read from the response data. As a result we get rid of the additional allocation for the response struct. Signed-off-by: Sebastian Ott <sebott@linux.vnet.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Diffstat (limited to 'drivers/s390/cio/chsc.h')
-rw-r--r--drivers/s390/cio/chsc.h22
1 files changed, 20 insertions, 2 deletions
diff --git a/drivers/s390/cio/chsc.h b/drivers/s390/cio/chsc.h
index 852b61fc56ea..6693f5e3176f 100644
--- a/drivers/s390/cio/chsc.h
+++ b/drivers/s390/cio/chsc.h
@@ -57,6 +57,25 @@ struct chsc_ssd_info {
57 struct chp_id chpid[8]; 57 struct chp_id chpid[8];
58 u16 fla[8]; 58 u16 fla[8];
59}; 59};
60
61struct chsc_scpd {
62 struct chsc_header request;
63 u32:2;
64 u32 m:1;
65 u32 c:1;
66 u32 fmt:4;
67 u32 cssid:8;
68 u32:4;
69 u32 rfmt:4;
70 u32 first_chpid:8;
71 u32:24;
72 u32 last_chpid:8;
73 u32 zeroes1;
74 struct chsc_header response;
75 u8 data[PAGE_SIZE - 20];
76} __attribute__ ((packed));
77
78
60extern int chsc_get_ssd_info(struct subchannel_id schid, 79extern int chsc_get_ssd_info(struct subchannel_id schid,
61 struct chsc_ssd_info *ssd); 80 struct chsc_ssd_info *ssd);
62extern int chsc_determine_css_characteristics(void); 81extern int chsc_determine_css_characteristics(void);
@@ -70,8 +89,7 @@ int __chsc_do_secm(struct channel_subsystem *css, int enable);
70 89
71int chsc_chp_vary(struct chp_id chpid, int on); 90int chsc_chp_vary(struct chp_id chpid, int on);
72int chsc_determine_channel_path_desc(struct chp_id chpid, int fmt, int rfmt, 91int chsc_determine_channel_path_desc(struct chp_id chpid, int fmt, int rfmt,
73 int c, int m, 92 int c, int m, void *page);
74 struct chsc_response_struct *resp);
75int chsc_determine_base_channel_path_desc(struct chp_id chpid, 93int chsc_determine_base_channel_path_desc(struct chp_id chpid,
76 struct channel_path_desc *desc); 94 struct channel_path_desc *desc);
77void chsc_chp_online(struct chp_id chpid); 95void chsc_chp_online(struct chp_id chpid);