aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/s390/cio/device_pgid.c
diff options
context:
space:
mode:
authorCornelia Huck <cohuck@de.ibm.com>2006-01-06 03:19:25 -0500
committerLinus Torvalds <torvalds@g5.osdl.org>2006-01-06 11:33:52 -0500
commitfb6958a594da49ece869793e6ec163b89fc5f79f (patch)
tree0746cc23ab13a059f9a34d7fc134aaf6410d07b8 /drivers/s390/cio/device_pgid.c
parent678a395b356a98368a93c3640252502b70c3676f (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.c40
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;