diff options
Diffstat (limited to 'drivers/s390/block/dasd.c')
-rw-r--r-- | drivers/s390/block/dasd.c | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/drivers/s390/block/dasd.c b/drivers/s390/block/dasd.c index e71929db8b06..977521013fe8 100644 --- a/drivers/s390/block/dasd.c +++ b/drivers/s390/block/dasd.c | |||
@@ -2174,6 +2174,51 @@ dasd_generic_notify(struct ccw_device *cdev, int event) | |||
2174 | return ret; | 2174 | return ret; |
2175 | } | 2175 | } |
2176 | 2176 | ||
2177 | struct dasd_ccw_req * dasd_generic_build_rdc(struct dasd_device *device, | ||
2178 | void *rdc_buffer, | ||
2179 | int rdc_buffer_size, char *magic) | ||
2180 | { | ||
2181 | struct dasd_ccw_req *cqr; | ||
2182 | struct ccw1 *ccw; | ||
2183 | |||
2184 | cqr = dasd_smalloc_request(magic, 1 /* RDC */, rdc_buffer_size, device); | ||
2185 | |||
2186 | if (IS_ERR(cqr)) { | ||
2187 | DEV_MESSAGE(KERN_WARNING, device, "%s", | ||
2188 | "Could not allocate RDC request"); | ||
2189 | return cqr; | ||
2190 | } | ||
2191 | |||
2192 | ccw = cqr->cpaddr; | ||
2193 | ccw->cmd_code = CCW_CMD_RDC; | ||
2194 | ccw->cda = (__u32)(addr_t)rdc_buffer; | ||
2195 | ccw->count = rdc_buffer_size; | ||
2196 | |||
2197 | cqr->device = device; | ||
2198 | cqr->expires = 10*HZ; | ||
2199 | clear_bit(DASD_CQR_FLAGS_USE_ERP, &cqr->flags); | ||
2200 | cqr->retries = 2; | ||
2201 | cqr->buildclk = get_clock(); | ||
2202 | cqr->status = DASD_CQR_FILLED; | ||
2203 | return cqr; | ||
2204 | } | ||
2205 | |||
2206 | |||
2207 | int dasd_generic_read_dev_chars(struct dasd_device *device, char *magic, | ||
2208 | void **rdc_buffer, int rdc_buffer_size) | ||
2209 | { | ||
2210 | int ret; | ||
2211 | struct dasd_ccw_req *cqr; | ||
2212 | |||
2213 | cqr = dasd_generic_build_rdc(device, *rdc_buffer, rdc_buffer_size, | ||
2214 | magic); | ||
2215 | if (IS_ERR(cqr)) | ||
2216 | return PTR_ERR(cqr); | ||
2217 | |||
2218 | ret = dasd_sleep_on(cqr); | ||
2219 | dasd_sfree_request(cqr, cqr->device); | ||
2220 | return ret; | ||
2221 | } | ||
2177 | 2222 | ||
2178 | static int __init | 2223 | static int __init |
2179 | dasd_init(void) | 2224 | dasd_init(void) |