Lines Matching refs:cdev
40 static u16 ccwreq_next_path(struct ccw_device *cdev) in ccwreq_next_path() argument
42 struct ccw_request *req = &cdev->private->req; in ccwreq_next_path()
57 static void ccwreq_stop(struct ccw_device *cdev, int rc) in ccwreq_stop() argument
59 struct ccw_request *req = &cdev->private->req; in ccwreq_stop()
64 ccw_device_set_timeout(cdev, 0); in ccwreq_stop()
65 memset(&cdev->private->irb, 0, sizeof(struct irb)); in ccwreq_stop()
68 req->callback(cdev, req->data, rc); in ccwreq_stop()
74 static void ccwreq_do(struct ccw_device *cdev) in ccwreq_do() argument
76 struct ccw_request *req = &cdev->private->req; in ccwreq_do()
77 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccwreq_do()
84 ccwreq_next_path(cdev); in ccwreq_do()
88 memset(&cdev->private->irb, 0, sizeof(struct irb)); in ccwreq_do()
92 ccw_device_set_timeout(cdev, req->timeout); in ccwreq_do()
101 ccwreq_next_path(cdev); in ccwreq_do()
110 ccwreq_stop(cdev, rc); in ccwreq_do()
119 void ccw_request_start(struct ccw_device *cdev) in ccw_request_start() argument
121 struct ccw_request *req = &cdev->private->req; in ccw_request_start()
136 ccwreq_do(cdev); in ccw_request_start()
140 ccwreq_stop(cdev, -EACCES); in ccw_request_start()
150 int ccw_request_cancel(struct ccw_device *cdev) in ccw_request_cancel() argument
152 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_request_cancel()
153 struct ccw_request *req = &cdev->private->req; in ccw_request_cancel()
161 ccwreq_stop(cdev, rc); in ccw_request_cancel()
169 static enum io_status ccwreq_status(struct ccw_device *cdev, struct irb *lcirb) in ccwreq_status() argument
171 struct irb *irb = &cdev->private->irb; in ccwreq_status()
176 if (ccw_device_accumulate_and_sense(cdev, lcirb)) in ccwreq_status()
187 CIO_HEX_EVENT(2, &cdev->private->dev_id, in ccwreq_status()
189 CIO_HEX_EVENT(2, &cdev->private->irb.ecw, SENSE_MAX_COUNT); in ccwreq_status()
194 if (cdev->drv && cdev->drv->uc_handler) { in ccwreq_status()
195 todo = cdev->drv->uc_handler(cdev, lcirb); in ccwreq_status()
230 static void ccwreq_log_status(struct ccw_device *cdev, enum io_status status) in ccwreq_log_status() argument
232 struct ccw_request *req = &cdev->private->req; in ccwreq_log_status()
239 data.dev_id = cdev->private->dev_id; in ccwreq_log_status()
253 void ccw_request_handler(struct ccw_device *cdev) in ccw_request_handler() argument
256 struct ccw_request *req = &cdev->private->req; in ccw_request_handler()
261 status = ccwreq_status(cdev, irb); in ccw_request_handler()
263 status = req->filter(cdev, req->data, irb, status); in ccw_request_handler()
265 ccw_device_set_timeout(cdev, 0); in ccw_request_handler()
267 ccwreq_log_status(cdev, status); in ccw_request_handler()
290 switch (req->check(cdev, req->data)) { in ccw_request_handler()
301 ccwreq_stop(cdev, 0); in ccw_request_handler()
306 if (!ccwreq_next_path(cdev)) { in ccw_request_handler()
312 ccwreq_do(cdev); in ccw_request_handler()
315 ccwreq_stop(cdev, rc); in ccw_request_handler()
325 void ccw_request_timeout(struct ccw_device *cdev) in ccw_request_timeout() argument
327 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_request_timeout()
328 struct ccw_request *req = &cdev->private->req; in ccw_request_timeout()
338 dev_name(&cdev->dev), req->timeout / HZ, in ccw_request_timeout()
345 if (!ccwreq_next_path(cdev)) { in ccw_request_timeout()
355 ccwreq_stop(cdev, rc); in ccw_request_timeout()
364 void ccw_request_notoper(struct ccw_device *cdev) in ccw_request_notoper() argument
366 ccwreq_stop(cdev, -ENODEV); in ccw_request_notoper()