Lines Matching refs:erp
53 dasd_3990_erp_cleanup(struct dasd_ccw_req * erp, char final_status) in dasd_3990_erp_cleanup() argument
55 struct dasd_ccw_req *cqr = erp->refers; in dasd_3990_erp_cleanup()
57 dasd_free_erp_request(erp, erp->memdev); in dasd_3990_erp_cleanup()
71 static void dasd_3990_erp_block_queue(struct dasd_ccw_req *erp, int expires) in dasd_3990_erp_block_queue() argument
74 struct dasd_device *device = erp->startdev; in dasd_3990_erp_block_queue()
83 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_block_queue()
84 if (erp->block) in dasd_3990_erp_block_queue()
85 dasd_block_set_timer(erp->block, expires); in dasd_3990_erp_block_queue()
103 dasd_3990_erp_int_req(struct dasd_ccw_req * erp) in dasd_3990_erp_int_req() argument
106 struct dasd_device *device = erp->startdev; in dasd_3990_erp_int_req()
111 if (erp->function != dasd_3990_erp_int_req) { in dasd_3990_erp_int_req()
113 erp->retries = 256; in dasd_3990_erp_int_req()
114 erp->function = dasd_3990_erp_int_req; in dasd_3990_erp_int_req()
123 dasd_3990_erp_block_queue(erp, 60*HZ); in dasd_3990_erp_int_req()
126 return erp; in dasd_3990_erp_int_req()
145 dasd_3990_erp_alternate_path(struct dasd_ccw_req * erp) in dasd_3990_erp_alternate_path() argument
147 struct dasd_device *device = erp->startdev; in dasd_3990_erp_alternate_path()
155 if (erp->lpm == 0) in dasd_3990_erp_alternate_path()
156 erp->lpm = dasd_path_get_opm(device) & in dasd_3990_erp_alternate_path()
157 ~(erp->irb.esw.esw0.sublog.lpum); in dasd_3990_erp_alternate_path()
159 erp->lpm &= ~(erp->irb.esw.esw0.sublog.lpum); in dasd_3990_erp_alternate_path()
161 if ((erp->lpm & opm) != 0x00) { in dasd_3990_erp_alternate_path()
165 erp->lpm, erp->irb.esw.esw0.sublog.lpum, opm); in dasd_3990_erp_alternate_path()
168 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_alternate_path()
169 erp->retries = 10; in dasd_3990_erp_alternate_path()
173 "/opm=%x)\n", erp->irb.esw.esw0.sublog.lpum, opm); in dasd_3990_erp_alternate_path()
176 erp->status = DASD_CQR_FAILED; in dasd_3990_erp_alternate_path()
196 dasd_3990_erp_DCTL(struct dasd_ccw_req * erp, char modifier) in dasd_3990_erp_DCTL() argument
199 struct dasd_device *device = erp->startdev; in dasd_3990_erp_DCTL()
204 dctl_cqr = dasd_alloc_erp_request(erp->magic, 1, in dasd_3990_erp_DCTL()
210 erp->status = DASD_CQR_FAILED; in dasd_3990_erp_DCTL()
211 return erp; in dasd_3990_erp_DCTL()
224 dctl_cqr->flags = erp->flags; in dasd_3990_erp_DCTL()
226 dctl_cqr->refers = erp; in dasd_3990_erp_DCTL()
229 dctl_cqr->magic = erp->magic; in dasd_3990_erp_DCTL()
262 static struct dasd_ccw_req *dasd_3990_erp_action_1_sec(struct dasd_ccw_req *erp) in dasd_3990_erp_action_1_sec() argument
264 erp->function = dasd_3990_erp_action_1_sec; in dasd_3990_erp_action_1_sec()
265 dasd_3990_erp_alternate_path(erp); in dasd_3990_erp_action_1_sec()
266 return erp; in dasd_3990_erp_action_1_sec()
269 static struct dasd_ccw_req *dasd_3990_erp_action_1(struct dasd_ccw_req *erp) in dasd_3990_erp_action_1() argument
271 erp->function = dasd_3990_erp_action_1; in dasd_3990_erp_action_1()
272 dasd_3990_erp_alternate_path(erp); in dasd_3990_erp_action_1()
273 if (erp->status == DASD_CQR_FAILED && in dasd_3990_erp_action_1()
274 !test_bit(DASD_CQR_VERIFY_PATH, &erp->flags)) { in dasd_3990_erp_action_1()
275 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_action_1()
276 erp->retries = 10; in dasd_3990_erp_action_1()
277 erp->lpm = dasd_path_get_opm(erp->startdev); in dasd_3990_erp_action_1()
278 erp->function = dasd_3990_erp_action_1_sec; in dasd_3990_erp_action_1()
280 return erp; in dasd_3990_erp_action_1()
302 dasd_3990_erp_action_4(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_action_4() argument
305 struct dasd_device *device = erp->startdev; in dasd_3990_erp_action_4()
310 if (erp->function != dasd_3990_erp_action_4) { in dasd_3990_erp_action_4()
315 erp->retries = 256; in dasd_3990_erp_action_4()
316 erp->function = dasd_3990_erp_action_4; in dasd_3990_erp_action_4()
324 erp->retries); in dasd_3990_erp_action_4()
326 dasd_3990_erp_block_queue(erp, 30*HZ); in dasd_3990_erp_action_4()
332 erp->retries); in dasd_3990_erp_action_4()
333 dasd_3990_erp_block_queue(erp, HZ); in dasd_3990_erp_action_4()
339 erp->retries); in dasd_3990_erp_action_4()
340 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_action_4()
344 return erp; in dasd_3990_erp_action_4()
369 dasd_3990_erp_action_5(struct dasd_ccw_req * erp) in dasd_3990_erp_action_5() argument
373 erp->retries = 10; in dasd_3990_erp_action_5()
374 erp->function = dasd_3990_erp_action_5; in dasd_3990_erp_action_5()
376 return erp; in dasd_3990_erp_action_5()
395 dasd_3990_handle_env_data(struct dasd_ccw_req * erp, char *sense) in dasd_3990_handle_env_data() argument
398 struct dasd_device *device = erp->startdev; in dasd_3990_handle_env_data()
984 dasd_eer_write(device, erp->refers, in dasd_3990_handle_env_data()
1032 dasd_3990_erp_com_rej(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_com_rej() argument
1035 struct dasd_device *device = erp->startdev; in dasd_3990_erp_com_rej()
1037 erp->function = dasd_3990_erp_com_rej; in dasd_3990_erp_com_rej()
1045 dasd_3990_handle_env_data(erp, sense); in dasd_3990_erp_com_rej()
1047 erp->retries = 5; in dasd_3990_erp_com_rej()
1052 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_com_rej()
1056 set_bit(DASD_CQR_SUPPRESS_CR, &erp->refers->flags); in dasd_3990_erp_com_rej()
1057 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_com_rej()
1061 if (!test_bit(DASD_CQR_SUPPRESS_CR, &erp->flags)) in dasd_3990_erp_com_rej()
1065 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_com_rej()
1068 return erp; in dasd_3990_erp_com_rej()
1084 dasd_3990_erp_bus_out(struct dasd_ccw_req * erp) in dasd_3990_erp_bus_out() argument
1087 struct dasd_device *device = erp->startdev; in dasd_3990_erp_bus_out()
1092 if (erp->function != dasd_3990_erp_bus_out) { in dasd_3990_erp_bus_out()
1093 erp->retries = 256; in dasd_3990_erp_bus_out()
1094 erp->function = dasd_3990_erp_bus_out; in dasd_3990_erp_bus_out()
1103 dasd_3990_erp_block_queue(erp, 60*HZ); in dasd_3990_erp_bus_out()
1107 return erp; in dasd_3990_erp_bus_out()
1123 dasd_3990_erp_equip_check(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_equip_check() argument
1126 struct dasd_device *device = erp->startdev; in dasd_3990_erp_equip_check()
1128 erp->function = dasd_3990_erp_equip_check; in dasd_3990_erp_equip_check()
1139 erp = dasd_3990_erp_action_1(erp); in dasd_3990_erp_equip_check()
1146 dasd_3990_handle_env_data(erp, sense); in dasd_3990_erp_equip_check()
1148 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_equip_check()
1156 erp = dasd_3990_erp_action_1(erp); in dasd_3990_erp_equip_check()
1164 erp = dasd_3990_erp_action_5(erp); in dasd_3990_erp_equip_check()
1166 return erp; in dasd_3990_erp_equip_check()
1182 dasd_3990_erp_data_check(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_data_check() argument
1185 struct dasd_device *device = erp->startdev; in dasd_3990_erp_data_check()
1187 erp->function = dasd_3990_erp_data_check; in dasd_3990_erp_data_check()
1206 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_data_check()
1214 erp = dasd_3990_erp_action_1(erp); in dasd_3990_erp_data_check()
1222 erp = dasd_3990_erp_action_5(erp); in dasd_3990_erp_data_check()
1225 return erp; in dasd_3990_erp_data_check()
1241 dasd_3990_erp_overrun(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_overrun() argument
1244 struct dasd_device *device = erp->startdev; in dasd_3990_erp_overrun()
1246 erp->function = dasd_3990_erp_overrun; in dasd_3990_erp_overrun()
1252 erp = dasd_3990_erp_action_5(erp); in dasd_3990_erp_overrun()
1254 return erp; in dasd_3990_erp_overrun()
1270 dasd_3990_erp_inv_format(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_inv_format() argument
1273 struct dasd_device *device = erp->startdev; in dasd_3990_erp_inv_format()
1275 erp->function = dasd_3990_erp_inv_format; in dasd_3990_erp_inv_format()
1283 dasd_3990_handle_env_data(erp, sense); in dasd_3990_erp_inv_format()
1285 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_inv_format()
1293 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_inv_format()
1296 return erp; in dasd_3990_erp_inv_format()
1337 dasd_3990_erp_env_data(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_env_data() argument
1340 struct dasd_device *device = erp->startdev; in dasd_3990_erp_env_data()
1342 erp->function = dasd_3990_erp_env_data; in dasd_3990_erp_env_data()
1346 dasd_3990_handle_env_data(erp, sense); in dasd_3990_erp_env_data()
1350 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_env_data()
1352 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_env_data()
1355 return erp; in dasd_3990_erp_env_data()
1404 dasd_3990_erp_file_prot(struct dasd_ccw_req * erp) in dasd_3990_erp_file_prot() argument
1407 struct dasd_device *device = erp->startdev; in dasd_3990_erp_file_prot()
1414 if (!test_bit(DASD_CQR_SUPPRESS_FP, &erp->flags)) in dasd_3990_erp_file_prot()
1418 return dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_file_prot()
1438 struct dasd_ccw_req *erp) in dasd_3990_erp_inspect_alias() argument
1440 struct dasd_ccw_req *cqr = erp->refers; in dasd_3990_erp_inspect_alias()
1446 sense = dasd_get_sense(&erp->refers->irb); in dasd_3990_erp_inspect_alias()
1471 erp->startdev = cqr->block->base; in dasd_3990_erp_inspect_alias()
1472 erp->function = dasd_3990_erp_inspect_alias; in dasd_3990_erp_inspect_alias()
1473 return erp; in dasd_3990_erp_inspect_alias()
1494 dasd_3990_erp_inspect_24(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_inspect_24() argument
1502 erp_filled = dasd_3990_erp_com_rej(erp, sense); in dasd_3990_erp_inspect_24()
1506 erp_filled = dasd_3990_erp_int_req(erp); in dasd_3990_erp_inspect_24()
1510 erp_filled = dasd_3990_erp_bus_out(erp); in dasd_3990_erp_inspect_24()
1514 erp_filled = dasd_3990_erp_equip_check(erp, sense); in dasd_3990_erp_inspect_24()
1518 erp_filled = dasd_3990_erp_data_check(erp, sense); in dasd_3990_erp_inspect_24()
1522 erp_filled = dasd_3990_erp_overrun(erp, sense); in dasd_3990_erp_inspect_24()
1526 erp_filled = dasd_3990_erp_inv_format(erp, sense); in dasd_3990_erp_inspect_24()
1530 erp_filled = dasd_3990_erp_EOC(erp, sense); in dasd_3990_erp_inspect_24()
1534 erp_filled = dasd_3990_erp_env_data(erp, sense); in dasd_3990_erp_inspect_24()
1538 erp_filled = dasd_3990_erp_no_rec(erp, sense); in dasd_3990_erp_inspect_24()
1542 erp_filled = dasd_3990_erp_file_prot(erp); in dasd_3990_erp_inspect_24()
1547 erp_filled = erp; in dasd_3990_erp_inspect_24()
1574 dasd_3990_erp_action_10_32(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_action_10_32() argument
1577 struct dasd_device *device = erp->startdev; in dasd_3990_erp_action_10_32()
1579 erp->retries = 256; in dasd_3990_erp_action_10_32()
1580 erp->function = dasd_3990_erp_action_10_32; in dasd_3990_erp_action_10_32()
1584 return erp; in dasd_3990_erp_action_10_32()
1614 struct dasd_ccw_req *erp; in dasd_3990_erp_action_1B_32() local
1660 erp = dasd_alloc_erp_request(cqr->magic, in dasd_3990_erp_action_1B_32()
1665 if (IS_ERR(erp)) { in dasd_3990_erp_action_1B_32()
1673 DE_data = erp->data; in dasd_3990_erp_action_1B_32()
1683 LO_data = erp->data + sizeof(struct DE_eckd_data); in dasd_3990_erp_action_1B_32()
1712 ccw = erp->cpaddr; in dasd_3990_erp_action_1B_32()
1733 erp->flags = default_erp->flags; in dasd_3990_erp_action_1B_32()
1734 erp->function = dasd_3990_erp_action_1B_32; in dasd_3990_erp_action_1B_32()
1735 erp->refers = default_erp->refers; in dasd_3990_erp_action_1B_32()
1736 erp->startdev = device; in dasd_3990_erp_action_1B_32()
1737 erp->memdev = device; in dasd_3990_erp_action_1B_32()
1738 erp->magic = default_erp->magic; in dasd_3990_erp_action_1B_32()
1739 erp->expires = default_erp->expires; in dasd_3990_erp_action_1B_32()
1740 erp->retries = 256; in dasd_3990_erp_action_1B_32()
1741 erp->buildclk = get_tod_clock(); in dasd_3990_erp_action_1B_32()
1742 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_action_1B_32()
1747 return erp; in dasd_3990_erp_action_1B_32()
1773 struct dasd_ccw_req *erp; in dasd_3990_update_1B() local
1820 erp = previous_erp; in dasd_3990_update_1B()
1823 LO_data = erp->data + sizeof(struct DE_eckd_data); in dasd_3990_update_1B()
1854 ccw = erp->cpaddr; /* addr of DE ccw */ in dasd_3990_update_1B()
1859 erp->status = DASD_CQR_FILLED; in dasd_3990_update_1B()
1861 return erp; in dasd_3990_update_1B()
1883 dasd_3990_erp_compound_retry(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_compound_retry() argument
1888 erp->retries = 1; in dasd_3990_erp_compound_retry()
1892 erp->retries = 2; in dasd_3990_erp_compound_retry()
1896 erp->retries = 10; in dasd_3990_erp_compound_retry()
1900 erp->retries = 256; in dasd_3990_erp_compound_retry()
1907 erp->function = dasd_3990_erp_compound_retry; in dasd_3990_erp_compound_retry()
1927 dasd_3990_erp_compound_path(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_compound_path() argument
1930 dasd_3990_erp_alternate_path(erp); in dasd_3990_erp_compound_path()
1932 if (erp->status == DASD_CQR_FAILED && in dasd_3990_erp_compound_path()
1933 !test_bit(DASD_CQR_VERIFY_PATH, &erp->flags)) { in dasd_3990_erp_compound_path()
1936 erp->lpm = dasd_path_get_opm(erp->startdev); in dasd_3990_erp_compound_path()
1937 erp->status = DASD_CQR_NEED_ERP; in dasd_3990_erp_compound_path()
1941 erp->function = dasd_3990_erp_compound_path; in dasd_3990_erp_compound_path()
1960 dasd_3990_erp_compound_code(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_compound_code() argument
1969 erp = dasd_3990_erp_DCTL(erp, 0x20); in dasd_3990_erp_compound_code()
1974 erp->retries = 1; in dasd_3990_erp_compound_code()
1976 dasd_3990_erp_block_queue (erp, 5*HZ); in dasd_3990_erp_compound_code()
1985 erp->function = dasd_3990_erp_compound_code; in dasd_3990_erp_compound_code()
1987 return erp; in dasd_3990_erp_compound_code()
2008 dasd_3990_erp_compound_config(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_compound_config() argument
2016 struct dasd_device *device = erp->startdev; in dasd_3990_erp_compound_config()
2023 erp->function = dasd_3990_erp_compound_config; in dasd_3990_erp_compound_config()
2043 dasd_3990_erp_compound(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_compound() argument
2046 if ((erp->function == dasd_3990_erp_compound_retry) && in dasd_3990_erp_compound()
2047 (erp->status == DASD_CQR_NEED_ERP)) { in dasd_3990_erp_compound()
2049 dasd_3990_erp_compound_path(erp, sense); in dasd_3990_erp_compound()
2052 if ((erp->function == dasd_3990_erp_compound_path) && in dasd_3990_erp_compound()
2053 (erp->status == DASD_CQR_NEED_ERP)) { in dasd_3990_erp_compound()
2055 erp = dasd_3990_erp_compound_code(erp, sense); in dasd_3990_erp_compound()
2058 if ((erp->function == dasd_3990_erp_compound_code) && in dasd_3990_erp_compound()
2059 (erp->status == DASD_CQR_NEED_ERP)) { in dasd_3990_erp_compound()
2061 dasd_3990_erp_compound_config(erp, sense); in dasd_3990_erp_compound()
2065 if (erp->status == DASD_CQR_NEED_ERP) in dasd_3990_erp_compound()
2066 erp->status = DASD_CQR_FAILED; in dasd_3990_erp_compound()
2068 return erp; in dasd_3990_erp_compound()
2117 dasd_3990_erp_inspect_32(struct dasd_ccw_req * erp, char *sense) in dasd_3990_erp_inspect_32() argument
2120 struct dasd_device *device = erp->startdev; in dasd_3990_erp_inspect_32()
2122 erp->function = dasd_3990_erp_inspect_32; in dasd_3990_erp_inspect_32()
2131 dasd_3990_erp_compound_retry(erp, sense); in dasd_3990_erp_inspect_32()
2148 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_inspect_32()
2153 erp = dasd_3990_erp_int_req(erp); in dasd_3990_erp_inspect_32()
2161 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_inspect_32()
2165 erp = dasd_3990_erp_action_10_32(erp, sense); in dasd_3990_erp_inspect_32()
2175 erp = dasd_3990_erp_cleanup(erp, DASD_CQR_FAILED); in dasd_3990_erp_inspect_32()
2180 erp = dasd_3990_erp_action_1B_32(erp, sense); in dasd_3990_erp_inspect_32()
2199 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_inspect_32()
2206 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_inspect_32()
2214 return erp; in dasd_3990_erp_inspect_32()
2248 static void dasd_3990_erp_account_error(struct dasd_ccw_req *erp) in dasd_3990_erp_account_error() argument
2250 struct dasd_device *device = erp->startdev; in dasd_3990_erp_account_error()
2251 __u8 lpum = erp->refers->irb.esw.esw1.lpum; in dasd_3990_erp_account_error()
2297 dasd_3990_erp_control_check(struct dasd_ccw_req *erp) in dasd_3990_erp_control_check() argument
2299 struct dasd_device *device = erp->startdev; in dasd_3990_erp_control_check()
2301 if (scsw_cstat(&erp->refers->irb.scsw) & (SCHN_STAT_INTF_CTRL_CHK in dasd_3990_erp_control_check()
2305 dasd_3990_erp_account_error(erp); in dasd_3990_erp_control_check()
2306 erp = dasd_3990_erp_action_4(erp, NULL); in dasd_3990_erp_control_check()
2308 return erp; in dasd_3990_erp_control_check()
2324 dasd_3990_erp_inspect(struct dasd_ccw_req *erp) in dasd_3990_erp_inspect() argument
2331 erp_new = dasd_3990_erp_inspect_alias(erp); in dasd_3990_erp_inspect()
2339 sense = dasd_get_sense(&erp->refers->irb); in dasd_3990_erp_inspect()
2341 erp_new = dasd_3990_erp_control_check(erp); in dasd_3990_erp_inspect()
2346 erp_new = dasd_3990_erp_inspect_24(erp, sense); in dasd_3990_erp_inspect()
2351 erp_new = dasd_3990_erp_inspect_32(erp, sense); in dasd_3990_erp_inspect()
2381 struct dasd_ccw_req *erp; in dasd_3990_erp_add_erp() local
2396 erp = dasd_alloc_erp_request(cqr->magic, in dasd_3990_erp_add_erp()
2398 if (IS_ERR(erp)) { in dasd_3990_erp_add_erp()
2411 return erp; in dasd_3990_erp_add_erp()
2417 erp->cpmode = 1; in dasd_3990_erp_add_erp()
2418 erp->cpaddr = PTR_ALIGN(erp->data, 64); in dasd_3990_erp_add_erp()
2419 tcw = erp->cpaddr; in dasd_3990_erp_add_erp()
2425 erp->cpaddr = cqr->cpaddr; in dasd_3990_erp_add_erp()
2428 ccw = erp->cpaddr; in dasd_3990_erp_add_erp()
2436 erp->flags = cqr->flags; in dasd_3990_erp_add_erp()
2437 erp->function = dasd_3990_erp_add_erp; in dasd_3990_erp_add_erp()
2438 erp->refers = cqr; in dasd_3990_erp_add_erp()
2439 erp->startdev = device; in dasd_3990_erp_add_erp()
2440 erp->memdev = device; in dasd_3990_erp_add_erp()
2441 erp->block = cqr->block; in dasd_3990_erp_add_erp()
2442 erp->magic = cqr->magic; in dasd_3990_erp_add_erp()
2443 erp->expires = cqr->expires; in dasd_3990_erp_add_erp()
2444 erp->retries = device->default_retries; in dasd_3990_erp_add_erp()
2445 erp->buildclk = get_tod_clock(); in dasd_3990_erp_add_erp()
2446 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_add_erp()
2448 return erp; in dasd_3990_erp_add_erp()
2470 struct dasd_ccw_req *erp = NULL; in dasd_3990_erp_additional_erp() local
2473 erp = dasd_3990_erp_add_erp(cqr); in dasd_3990_erp_additional_erp()
2475 if (IS_ERR(erp)) in dasd_3990_erp_additional_erp()
2476 return erp; in dasd_3990_erp_additional_erp()
2479 if (erp != cqr) { in dasd_3990_erp_additional_erp()
2481 erp = dasd_3990_erp_inspect(erp); in dasd_3990_erp_additional_erp()
2484 return erp; in dasd_3990_erp_additional_erp()
2601 dasd_3990_erp_further_erp(struct dasd_ccw_req *erp) in dasd_3990_erp_further_erp() argument
2604 struct dasd_device *device = erp->startdev; in dasd_3990_erp_further_erp()
2605 char *sense = dasd_get_sense(&erp->irb); in dasd_3990_erp_further_erp()
2608 if ((erp->function == dasd_3990_erp_bus_out) || in dasd_3990_erp_further_erp()
2609 (erp->function == dasd_3990_erp_action_1) || in dasd_3990_erp_further_erp()
2610 (erp->function == dasd_3990_erp_action_4)) { in dasd_3990_erp_further_erp()
2612 erp = dasd_3990_erp_action_1(erp); in dasd_3990_erp_further_erp()
2614 } else if (erp->function == dasd_3990_erp_action_1_sec) { in dasd_3990_erp_further_erp()
2615 erp = dasd_3990_erp_action_1_sec(erp); in dasd_3990_erp_further_erp()
2616 } else if (erp->function == dasd_3990_erp_action_5) { in dasd_3990_erp_further_erp()
2620 erp = dasd_3990_erp_action_1(erp); in dasd_3990_erp_further_erp()
2630 erp = dasd_3990_erp_DCTL(erp, 0x20); in dasd_3990_erp_further_erp()
2635 erp = dasd_3990_erp_DCTL(erp, 0x40); in dasd_3990_erp_further_erp()
2640 erp = dasd_3990_erp_DCTL(erp, 0x80); in dasd_3990_erp_further_erp()
2653 ((erp->function == dasd_3990_erp_compound_retry) || in dasd_3990_erp_further_erp()
2654 (erp->function == dasd_3990_erp_compound_path) || in dasd_3990_erp_further_erp()
2655 (erp->function == dasd_3990_erp_compound_code) || in dasd_3990_erp_further_erp()
2656 (erp->function == dasd_3990_erp_compound_config))) { in dasd_3990_erp_further_erp()
2658 erp = dasd_3990_erp_compound(erp, sense); in dasd_3990_erp_further_erp()
2666 "ERP %p has run out of retries and failed\n", erp); in dasd_3990_erp_further_erp()
2668 erp->status = DASD_CQR_FAILED; in dasd_3990_erp_further_erp()
2671 return erp; in dasd_3990_erp_further_erp()
2696 struct dasd_ccw_req *erp) in dasd_3990_erp_handle_match_erp()
2704 while (erp_done != erp) { in dasd_3990_erp_handle_match_erp()
2721 if (erp->retries > 0) { in dasd_3990_erp_handle_match_erp()
2723 char *sense = dasd_get_sense(&erp->refers->irb); in dasd_3990_erp_handle_match_erp()
2726 if (sense && erp->function == dasd_3990_erp_action_4) { in dasd_3990_erp_handle_match_erp()
2728 erp = dasd_3990_erp_action_4(erp, sense); in dasd_3990_erp_handle_match_erp()
2731 erp->function == dasd_3990_erp_action_1B_32) { in dasd_3990_erp_handle_match_erp()
2733 erp = dasd_3990_update_1B(erp, sense); in dasd_3990_erp_handle_match_erp()
2735 } else if (sense && erp->function == dasd_3990_erp_int_req) { in dasd_3990_erp_handle_match_erp()
2737 erp = dasd_3990_erp_int_req(erp); in dasd_3990_erp_handle_match_erp()
2743 erp->retries, erp); in dasd_3990_erp_handle_match_erp()
2746 erp->status = DASD_CQR_FILLED; in dasd_3990_erp_handle_match_erp()
2752 erp = dasd_3990_erp_further_erp(erp); in dasd_3990_erp_handle_match_erp()
2755 return erp; in dasd_3990_erp_handle_match_erp()
2779 struct dasd_ccw_req *erp = NULL; in dasd_3990_erp_action() local
2812 erp = dasd_3990_erp_in_erp(cqr); in dasd_3990_erp_action()
2814 if (erp == NULL) { in dasd_3990_erp_action()
2816 erp = dasd_3990_erp_additional_erp(cqr); in dasd_3990_erp_action()
2817 if (IS_ERR(erp)) in dasd_3990_erp_action()
2818 return erp; in dasd_3990_erp_action()
2821 erp = dasd_3990_erp_handle_match_erp(cqr, erp); in dasd_3990_erp_action()
2830 if (test_bit(DASD_CQR_VERIFY_PATH, &erp->flags) && cqr->lpm) { in dasd_3990_erp_action()
2831 erp->lpm = cqr->lpm; in dasd_3990_erp_action()
2838 for (temp_erp = erp; in dasd_3990_erp_action()
2849 if (list_empty(&erp->blocklist)) { in dasd_3990_erp_action()
2852 list_add_tail(&erp->blocklist, &cqr->blocklist); in dasd_3990_erp_action()
2857 return erp; in dasd_3990_erp_action()