Lines Matching refs:cdev
41 static u16 ccwreq_next_path(struct ccw_device *cdev) in ccwreq_next_path() argument
43 struct ccw_request *req = &cdev->private->req; in ccwreq_next_path()
58 static void ccwreq_stop(struct ccw_device *cdev, int rc) in ccwreq_stop() argument
60 struct ccw_request *req = &cdev->private->req; in ccwreq_stop()
65 ccw_device_set_timeout(cdev, 0); in ccwreq_stop()
66 memset(&cdev->private->irb, 0, sizeof(struct irb)); in ccwreq_stop()
69 req->callback(cdev, req->data, rc); in ccwreq_stop()
75 static void ccwreq_do(struct ccw_device *cdev) in ccwreq_do() argument
77 struct ccw_request *req = &cdev->private->req; in ccwreq_do()
78 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccwreq_do()
85 ccwreq_next_path(cdev); in ccwreq_do()
89 memset(&cdev->private->irb, 0, sizeof(struct irb)); in ccwreq_do()
93 ccw_device_set_timeout(cdev, req->timeout); in ccwreq_do()
102 ccwreq_next_path(cdev); in ccwreq_do()
111 ccwreq_stop(cdev, rc); in ccwreq_do()
120 void ccw_request_start(struct ccw_device *cdev) in ccw_request_start() argument
122 struct ccw_request *req = &cdev->private->req; in ccw_request_start()
137 ccwreq_do(cdev); in ccw_request_start()
141 ccwreq_stop(cdev, -EACCES); in ccw_request_start()
151 int ccw_request_cancel(struct ccw_device *cdev) in ccw_request_cancel() argument
153 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_request_cancel()
154 struct ccw_request *req = &cdev->private->req; in ccw_request_cancel()
162 ccwreq_stop(cdev, rc); in ccw_request_cancel()
170 static enum io_status ccwreq_status(struct ccw_device *cdev, struct irb *lcirb) in ccwreq_status() argument
172 struct irb *irb = &cdev->private->irb; in ccwreq_status()
177 if (ccw_device_accumulate_and_sense(cdev, lcirb)) in ccwreq_status()
188 CIO_HEX_EVENT(2, &cdev->private->dev_id, in ccwreq_status()
190 CIO_HEX_EVENT(2, &cdev->private->irb.ecw, SENSE_MAX_COUNT); in ccwreq_status()
195 if (cdev->drv && cdev->drv->uc_handler) { in ccwreq_status()
196 todo = cdev->drv->uc_handler(cdev, lcirb); in ccwreq_status()
231 static void ccwreq_log_status(struct ccw_device *cdev, enum io_status status) in ccwreq_log_status() argument
233 struct ccw_request *req = &cdev->private->req; in ccwreq_log_status()
240 data.dev_id = cdev->private->dev_id; in ccwreq_log_status()
254 void ccw_request_handler(struct ccw_device *cdev) in ccw_request_handler() argument
257 struct ccw_request *req = &cdev->private->req; in ccw_request_handler()
262 status = ccwreq_status(cdev, irb); in ccw_request_handler()
264 status = req->filter(cdev, req->data, irb, status); in ccw_request_handler()
266 ccw_device_set_timeout(cdev, 0); in ccw_request_handler()
268 ccwreq_log_status(cdev, status); in ccw_request_handler()
291 switch (req->check(cdev, req->data)) { in ccw_request_handler()
302 ccwreq_stop(cdev, 0); in ccw_request_handler()
307 if (!ccwreq_next_path(cdev)) { in ccw_request_handler()
313 ccwreq_do(cdev); in ccw_request_handler()
316 ccwreq_stop(cdev, rc); in ccw_request_handler()
326 void ccw_request_timeout(struct ccw_device *cdev) in ccw_request_timeout() argument
328 struct subchannel *sch = to_subchannel(cdev->dev.parent); in ccw_request_timeout()
329 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()