Lines Matching refs:pktp

53 static void dadk_restart(void *pktp);
54 static void dadk_pktcb(struct cmpkt *pktp);
61 static int dadk_chkerr(struct cmpkt *pktp);
62 static int dadk_ioprep(struct dadk *dadkp, struct cmpkt *pktp);
63 static int dadk_iosetup(struct dadk *dadkp, struct cmpkt *pktp);
64 static int dadk_ioretry(struct cmpkt *pktp, int action);
133 static void dadk_recorderr(struct cmpkt *pktp, struct dadkio_rwcmd *rwcmdp);
678 struct cmpkt *pktp; in dadk_dump() local
692 pktp = dadk_pktprep(dadkp, NULL, bp, dadk_polldone, NULL, NULL); in dadk_dump()
693 if (!pktp) { in dadk_dump()
698 pktp->cp_flags |= CPF_NOINTR; in dadk_dump()
700 (void) dadk_ioprep(dadkp, pktp); in dadk_dump()
702 pktp->cp_byteleft -= pktp->cp_bytexfer; in dadk_dump()
704 while (geterror(bp) == 0 && pktp->cp_byteleft != 0) { in dadk_dump()
705 (void) dadk_iosetup(dadkp, pktp); in dadk_dump()
707 pktp->cp_byteleft -= pktp->cp_bytexfer; in dadk_dump()
710 if (pktp->cp_private) in dadk_dump()
711 BBH_FREEHANDLE(dadkp->dad_bbhobjp, pktp->cp_private); in dadk_dump()
712 gda_free(dadkp->dad_ctlobjp, pktp, NULL); in dadk_dump()
825 struct cmpkt *pktp; in dadk_ioctl() local
879 pktp = dadk_pktprep(dadkp, NULL, bp, in dadk_ioctl()
882 pktp->cp_time = DADK_FLUSH_CACHE_TIME; in dadk_ioctl()
884 *((char *)(pktp->cp_cdbp)) = DCMD_FLUSH_CACHE; in dadk_ioctl()
885 pktp->cp_byteleft = 0; in dadk_ioctl()
886 pktp->cp_private = NULL; in dadk_ioctl()
887 pktp->cp_secleft = 0; in dadk_ioctl()
888 pktp->cp_srtsec = -1; in dadk_ioctl()
889 pktp->cp_bytexfer = 0; in dadk_ioctl()
891 CTL_IOSETUP(dadkp->dad_ctlobjp, pktp); in dadk_ioctl()
1146 struct cmpkt *pktp; in dadk_pkt() local
1152 pktp = dadk_pktprep(dadkp, NULL, bp, dadk_iodone, func, arg); in dadk_pkt()
1153 if (!pktp) in dadk_pkt()
1156 return (dadk_ioprep(dadkp, pktp)); in dadk_pkt()
1163 dadk_ioprep(struct dadk *dadkp, struct cmpkt *pktp) in dadk_ioprep() argument
1167 bp = pktp->cp_bp; in dadk_ioprep()
1169 *((char *)(pktp->cp_cdbp)) = (char)(intptr_t)bp->b_back; in dadk_ioprep()
1172 *((char *)(pktp->cp_cdbp)) = DCMD_READ; in dadk_ioprep()
1174 *((char *)(pktp->cp_cdbp)) = DCMD_WRITE; in dadk_ioprep()
1175 pktp->cp_byteleft = bp->b_bcount; in dadk_ioprep()
1178 pktp->cp_private = BBH_GETHANDLE(dadkp->dad_bbhobjp, bp); in dadk_ioprep()
1179 return (dadk_iosetup(dadkp, pktp)); in dadk_ioprep()
1183 dadk_iosetup(struct dadk *dadkp, struct cmpkt *pktp) in dadk_iosetup() argument
1189 seccnt = pktp->cp_bytexfer >> dadkp->dad_secshf; in dadk_iosetup()
1190 pktp->cp_secleft -= seccnt; in dadk_iosetup()
1192 if (pktp->cp_secleft) { in dadk_iosetup()
1193 pktp->cp_srtsec += seccnt; in dadk_iosetup()
1196 if (!pktp->cp_private) { in dadk_iosetup()
1197 bp = pktp->cp_bp; in dadk_iosetup()
1198 pktp->cp_srtsec = GET_BP_SEC(bp); in dadk_iosetup()
1199 pktp->cp_secleft = (bp->b_bcount >> dadkp->dad_secshf); in dadk_iosetup()
1202 pktp->cp_private); in dadk_iosetup()
1203 pktp->cp_srtsec = BBH_GETCK_SECTOR(dadkp->dad_bbhobjp, in dadk_iosetup()
1205 pktp->cp_secleft = BBH_GETCK_SECLEN(dadkp->dad_bbhobjp, in dadk_iosetup()
1210 pktp->cp_bytexfer = pktp->cp_secleft << dadkp->dad_secshf; in dadk_iosetup()
1212 if (CTL_IOSETUP(dadkp->dad_ctlobjp, pktp)) { in dadk_iosetup()
1227 struct cmpkt *pktp; in dadk_pktprep() local
1229 pktp = gda_pktprep(dadkp->dad_ctlobjp, in_pktp, (opaque_t)bp, func, in dadk_pktprep()
1232 if (pktp) { in dadk_pktprep()
1233 pktp->cp_callback = dadk_pktcb; in dadk_pktprep()
1234 pktp->cp_time = DADK_IO_TIME; in dadk_pktprep()
1235 pktp->cp_flags = 0; in dadk_pktprep()
1236 pktp->cp_iodone = cb_func; in dadk_pktprep()
1237 pktp->cp_dev_private = (opaque_t)dadkp; in dadk_pktprep()
1241 return (pktp); in dadk_pktprep()
1248 struct cmpkt *pktp = (struct cmpkt *)vpktp; in dadk_restart() local
1250 if (dadk_ioretry(pktp, QUE_COMMAND) == JUST_RETURN) in dadk_restart()
1252 pktp->cp_iodone(pktp->cp_bp); in dadk_restart()
1256 dadk_ioretry(struct cmpkt *pktp, int action) in dadk_ioretry() argument
1259 struct dadk *dadkp = PKT2DADK(pktp); in dadk_ioretry()
1263 if (pktp->cp_retry++ < DADK_RETRY_COUNT) { in dadk_ioretry()
1264 CTL_IOSETUP(dadkp->dad_ctlobjp, pktp); in dadk_ioretry()
1265 if (CTL_TRANSPORT(dadkp->dad_ctlobjp, pktp) == in dadk_ioretry()
1275 bioerror(pktp->cp_bp, ENXIO); in dadk_ioretry()
1278 bp = pktp->cp_bp; in dadk_ioretry()
1279 bp->b_resid += pktp->cp_byteleft - pktp->cp_bytexfer + in dadk_ioretry()
1280 pktp->cp_resid; in dadk_ioretry()
1282 if ((*((char *)(pktp->cp_cdbp)) == DCMD_FLUSH_CACHE) && in dadk_ioretry()
1283 (pktp->cp_dev_private == (opaque_t)dadkp) && in dadk_ioretry()
1284 ((int)(*(char *)pktp->cp_scbp) == DERR_ABORT)) { in dadk_ioretry()
1306 dadk_pktcb(struct cmpkt *pktp) in dadk_pktcb() argument
1311 rwcmdp = (struct dadkio_rwcmd *)pktp->cp_passthru; /* ioctl packet */ in dadk_pktcb()
1313 if (pktp->cp_reason == CPS_SUCCESS) { in dadk_pktcb()
1316 pktp->cp_iodone(pktp->cp_bp); in dadk_pktcb()
1321 if (pktp->cp_reason == CPS_CHKERR) in dadk_pktcb()
1322 dadk_recorderr(pktp, rwcmdp); in dadk_pktcb()
1323 dadk_iodone(pktp->cp_bp); in dadk_pktcb()
1327 if (pktp->cp_reason == CPS_CHKERR) in dadk_pktcb()
1328 action = dadk_chkerr(pktp); in dadk_pktcb()
1344 if ((dadk_ioretry(pktp, action)) == JUST_RETURN) in dadk_pktcb()
1347 pktp->cp_iodone(pktp->cp_bp); in dadk_pktcb()
1380 dadk_chkerr(struct cmpkt *pktp) in dadk_chkerr() argument
1383 struct dadk *dadkp = PKT2DADK(pktp); in dadk_chkerr()
1385 int scb = *(char *)pktp->cp_scbp; in dadk_chkerr()
1388 if (pktp->cp_retry != 0 && dadkp->dad_errstats != NULL) { in dadk_chkerr()
1396 if (pktp->cp_retry) { in dadk_chkerr()
1397 err_blkno = pktp->cp_srtsec + ((pktp->cp_bytexfer - in dadk_chkerr()
1398 pktp->cp_resid) >> dadkp->dad_secshf); in dadk_chkerr()
1460 (*((char *)(pktp->cp_cdbp)) == DCMD_READ) && in dadk_chkerr()
1464 if (pktp->cp_passthru == NULL) { in dadk_chkerr()
1465 gda_errmsg(dadkp->dad_sd, pktp, dadk_name, in dadk_chkerr()
1466 dadk_errtab[scb].d_severity, pktp->cp_srtsec, in dadk_chkerr()
1471 (void) timeout(dadk_restart, (void *)pktp, DADK_BSY_TIMEOUT); in dadk_chkerr()
1478 dadk_recorderr(struct cmpkt *pktp, struct dadkio_rwcmd *rwcmdp) in dadk_recorderr() argument
1483 dadkp = PKT2DADK(pktp); in dadk_recorderr()
1484 scb = (int)(*(char *)pktp->cp_scbp); in dadk_recorderr()
1488 ((pktp->cp_bytexfer - pktp->cp_resid) >> dadkp->dad_secshf); in dadk_recorderr()
1490 rwcmdp->status.resid = pktp->cp_bp->b_resid + in dadk_recorderr()
1491 pktp->cp_byteleft - pktp->cp_bytexfer + pktp->cp_resid; in dadk_recorderr()
1492 switch ((int)(* (char *)pktp->cp_scbp)) { in dadk_recorderr()
1522 gda_errmsg(dadkp->dad_sd, pktp, dadk_name, dadk_errtab[scb].d_severity, in dadk_recorderr()
1531 struct cmpkt *pktp; in dadk_polldone() local
1534 pktp = GDA_BP_PKT(bp); in dadk_polldone()
1535 dadkp = PKT2DADK(pktp); in dadk_polldone()
1544 struct cmpkt *pktp; in dadk_iodone() local
1547 pktp = GDA_BP_PKT(bp); in dadk_iodone()
1548 dadkp = PKT2DADK(pktp); in dadk_iodone()
1551 pktp->cp_byteleft -= pktp->cp_bytexfer; in dadk_iodone()
1552 if (geterror(bp) == 0 && pktp->cp_byteleft != 0) { in dadk_iodone()
1553 pktp->cp_retry = 0; in dadk_iodone()
1554 (void) dadk_iosetup(dadkp, pktp); in dadk_iodone()
1558 if (CTL_TRANSPORT(dadkp->dad_ctlobjp, pktp) == CTL_SEND_SUCCESS) in dadk_iodone()
1560 if ((dadk_ioretry(pktp, QUE_COMMAND)) == JUST_RETURN) in dadk_iodone()
1568 if (pktp->cp_private) in dadk_iodone()
1569 BBH_FREEHANDLE(dadkp->dad_bbhobjp, pktp->cp_private); in dadk_iodone()
1570 gda_free(dadkp->dad_ctlobjp, pktp, NULL); in dadk_iodone()
1692 struct cmpkt *pktp; in dadk_rmb_ioctl() local
1697 pktp = dadk_pktprep(dadkp, NULL, bp, dadk_rmb_iodone, NULL, NULL); in dadk_rmb_ioctl()
1698 if (!pktp) { in dadk_rmb_ioctl()
1704 pktp->cp_passthru = (opaque_t)(intptr_t)silent; in dadk_rmb_ioctl()
1706 err = dadk_ctl_ioctl(dadkp, cmd, (uintptr_t)pktp, flags); in dadk_rmb_ioctl()
1708 gda_free(dadkp->dad_ctlobjp, pktp, NULL); in dadk_rmb_ioctl()
1717 struct cmpkt *pktp; in dadk_rmb_iodone() local
1720 pktp = GDA_BP_PKT(bp); in dadk_rmb_iodone()
1721 dadkp = PKT2DADK(pktp); in dadk_rmb_iodone()
1789 struct cmpkt *pktp; in dadk_dk() local
1791 pktp = dadk_pktprep(dadkp, NULL, bp, dadk_iodone, NULL, NULL); in dadk_dk()
1792 if (!pktp) { in dadk_dk()
1798 pktp->cp_passthru = rwcmdp; in dadk_dk()
1800 (void) dadk_ioprep(dadkp, pktp); in dadk_dk()