diff options
author | Cornelia Huck <cohuck@de.ibm.com> | 2006-01-06 03:19:25 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-01-06 11:33:52 -0500 |
commit | fb6958a594da49ece869793e6ec163b89fc5f79f (patch) | |
tree | 0746cc23ab13a059f9a34d7fc134aaf6410d07b8 /drivers/s390/cio/device_pgid.c | |
parent | 678a395b356a98368a93c3640252502b70c3676f (diff) |
[PATCH] s390: multiple subchannel sets support
Add support for multiple subchannel sets. Works with arbitrary devices in
subchannel set 1 and is transparent to device drivers. Although currently
only two subchannel sets are available, this will work with the architectured
maximum number of subchannel sets as well.
Signed-off-by: Cornelia Huck <cohuck@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/s390/cio/device_pgid.c')
-rw-r--r-- | drivers/s390/cio/device_pgid.c | 40 |
1 files changed, 22 insertions, 18 deletions
diff --git a/drivers/s390/cio/device_pgid.c b/drivers/s390/cio/device_pgid.c index 3c89d70b9c09..052832d03d38 100644 --- a/drivers/s390/cio/device_pgid.c +++ b/drivers/s390/cio/device_pgid.c | |||
@@ -57,10 +57,10 @@ __ccw_device_sense_pgid_start(struct ccw_device *cdev) | |||
57 | if (ret != -EACCES) | 57 | if (ret != -EACCES) |
58 | return ret; | 58 | return ret; |
59 | CIO_MSG_EVENT(2, "SNID - Device %04x on Subchannel " | 59 | CIO_MSG_EVENT(2, "SNID - Device %04x on Subchannel " |
60 | "%04x, lpm %02X, became 'not " | 60 | "0.%x.%04x, lpm %02X, became 'not " |
61 | "operational'\n", | 61 | "operational'\n", |
62 | cdev->private->devno, sch->schid.sch_no, | 62 | cdev->private->devno, sch->schid.ssid, |
63 | cdev->private->imask); | 63 | sch->schid.sch_no, cdev->private->imask); |
64 | 64 | ||
65 | } | 65 | } |
66 | cdev->private->imask >>= 1; | 66 | cdev->private->imask >>= 1; |
@@ -106,10 +106,10 @@ __ccw_device_check_sense_pgid(struct ccw_device *cdev) | |||
106 | return -EOPNOTSUPP; | 106 | return -EOPNOTSUPP; |
107 | } | 107 | } |
108 | if (irb->esw.esw0.erw.cons) { | 108 | if (irb->esw.esw0.erw.cons) { |
109 | CIO_MSG_EVENT(2, "SNID - device %04x, unit check, " | 109 | CIO_MSG_EVENT(2, "SNID - device 0.%x.%04x, unit check, " |
110 | "lpum %02X, cnt %02d, sns : " | 110 | "lpum %02X, cnt %02d, sns : " |
111 | "%02X%02X%02X%02X %02X%02X%02X%02X ...\n", | 111 | "%02X%02X%02X%02X %02X%02X%02X%02X ...\n", |
112 | cdev->private->devno, | 112 | cdev->private->ssid, cdev->private->devno, |
113 | irb->esw.esw0.sublog.lpum, | 113 | irb->esw.esw0.sublog.lpum, |
114 | irb->esw.esw0.erw.scnt, | 114 | irb->esw.esw0.erw.scnt, |
115 | irb->ecw[0], irb->ecw[1], | 115 | irb->ecw[0], irb->ecw[1], |
@@ -119,16 +119,17 @@ __ccw_device_check_sense_pgid(struct ccw_device *cdev) | |||
119 | return -EAGAIN; | 119 | return -EAGAIN; |
120 | } | 120 | } |
121 | if (irb->scsw.cc == 3) { | 121 | if (irb->scsw.cc == 3) { |
122 | CIO_MSG_EVENT(2, "SNID - Device %04x on Subchannel " | 122 | CIO_MSG_EVENT(2, "SNID - Device %04x on Subchannel 0.%x.%04x," |
123 | "%04x, lpm %02X, became 'not operational'\n", | 123 | " lpm %02X, became 'not operational'\n", |
124 | cdev->private->devno, sch->schid.sch_no, | 124 | cdev->private->devno, sch->schid.ssid, |
125 | sch->orb.lpm); | 125 | sch->schid.sch_no, sch->orb.lpm); |
126 | return -EACCES; | 126 | return -EACCES; |
127 | } | 127 | } |
128 | if (cdev->private->pgid.inf.ps.state2 == SNID_STATE2_RESVD_ELSE) { | 128 | if (cdev->private->pgid.inf.ps.state2 == SNID_STATE2_RESVD_ELSE) { |
129 | CIO_MSG_EVENT(2, "SNID - Device %04x on Subchannel %04x " | 129 | CIO_MSG_EVENT(2, "SNID - Device %04x on Subchannel 0.%x.%04x " |
130 | "is reserved by someone else\n", | 130 | "is reserved by someone else\n", |
131 | cdev->private->devno, sch->schid.sch_no); | 131 | cdev->private->devno, sch->schid.ssid, |
132 | sch->schid.sch_no); | ||
132 | return -EUSERS; | 133 | return -EUSERS; |
133 | } | 134 | } |
134 | return 0; | 135 | return 0; |
@@ -237,8 +238,9 @@ __ccw_device_do_pgid(struct ccw_device *cdev, __u8 func) | |||
237 | sch->lpm &= ~cdev->private->imask; | 238 | sch->lpm &= ~cdev->private->imask; |
238 | sch->vpm &= ~cdev->private->imask; | 239 | sch->vpm &= ~cdev->private->imask; |
239 | CIO_MSG_EVENT(2, "SPID - Device %04x on Subchannel " | 240 | CIO_MSG_EVENT(2, "SPID - Device %04x on Subchannel " |
240 | "%04x, lpm %02X, became 'not operational'\n", | 241 | "0.%x.%04x, lpm %02X, became 'not operational'\n", |
241 | cdev->private->devno, sch->schid.sch_no, cdev->private->imask); | 242 | cdev->private->devno, sch->schid.ssid, |
243 | sch->schid.sch_no, cdev->private->imask); | ||
242 | return ret; | 244 | return ret; |
243 | } | 245 | } |
244 | 246 | ||
@@ -260,8 +262,10 @@ __ccw_device_check_pgid(struct ccw_device *cdev) | |||
260 | if (irb->ecw[0] & SNS0_CMD_REJECT) | 262 | if (irb->ecw[0] & SNS0_CMD_REJECT) |
261 | return -EOPNOTSUPP; | 263 | return -EOPNOTSUPP; |
262 | /* Hmm, whatever happened, try again. */ | 264 | /* Hmm, whatever happened, try again. */ |
263 | CIO_MSG_EVENT(2, "SPID - device %04x, unit check, cnt %02d, " | 265 | CIO_MSG_EVENT(2, "SPID - device 0.%x.%04x, unit check, " |
266 | "cnt %02d, " | ||
264 | "sns : %02X%02X%02X%02X %02X%02X%02X%02X ...\n", | 267 | "sns : %02X%02X%02X%02X %02X%02X%02X%02X ...\n", |
268 | cdev->private->ssid, | ||
265 | cdev->private->devno, irb->esw.esw0.erw.scnt, | 269 | cdev->private->devno, irb->esw.esw0.erw.scnt, |
266 | irb->ecw[0], irb->ecw[1], | 270 | irb->ecw[0], irb->ecw[1], |
267 | irb->ecw[2], irb->ecw[3], | 271 | irb->ecw[2], irb->ecw[3], |
@@ -270,10 +274,10 @@ __ccw_device_check_pgid(struct ccw_device *cdev) | |||
270 | return -EAGAIN; | 274 | return -EAGAIN; |
271 | } | 275 | } |
272 | if (irb->scsw.cc == 3) { | 276 | if (irb->scsw.cc == 3) { |
273 | CIO_MSG_EVENT(2, "SPID - Device %04x on Subchannel " | 277 | CIO_MSG_EVENT(2, "SPID - Device %04x on Subchannel 0.%x.%04x," |
274 | "%04x, lpm %02X, became 'not operational'\n", | 278 | " lpm %02X, became 'not operational'\n", |
275 | cdev->private->devno, sch->schid.sch_no, | 279 | cdev->private->devno, sch->schid.ssid, |
276 | cdev->private->imask); | 280 | sch->schid.sch_no, cdev->private->imask); |
277 | return -EACCES; | 281 | return -EACCES; |
278 | } | 282 | } |
279 | return 0; | 283 | return 0; |