Home | History | Annotate | Download | only in i2o

Lines Matching refs:im

286 	struct iop_msg *im;
395 im = malloc(sizeof(*im) * sc->sc_maxib, M_DEVBUF, M_WAITOK|M_ZERO);
397 sc->sc_ims = im;
400 for (i = 0; i < sc->sc_maxib; i++, im++) {
404 &im->im_xfer[0].ix_map);
410 im->im_tctx = i;
411 SLIST_INSERT_HEAD(&sc->sc_im_freelist, im, im_chain);
412 cv_init(&im->im_cv, "iopmsg");
647 struct iop_msg *im;
674 im = iop_msg_alloc(sc, IM_WAIT);
679 mf.msgtctx = im->im_tctx;
684 rv = iop_msg_post(sc, im, &mf, 5*60*1000);
685 iop_msg_free(sc, im);
1070 struct iop_msg *im;
1075 im = iop_msg_alloc(sc, IM_WAIT);
1080 mf->msgtctx = im->im_tctx;
1082 iop_msg_map(sc, im, mb, hrt, size, 0, NULL);
1083 rv = iop_msg_post(sc, im, mb, 30000);
1084 iop_msg_unmap(sc, im);
1085 iop_msg_free(sc, im);
1129 struct iop_msg *im;
1134 im = iop_msg_alloc(sc, IM_WAIT);
1141 mf->msgtctx = im->im_tctx;
1152 iop_msg_map(sc, im, mb, lct, size, 0, NULL);
1153 rv = iop_msg_post(sc, im, mb, (chgind == 0 ? 120*1000 : 0));
1154 iop_msg_unmap(sc, im);
1155 iop_msg_free(sc, im);
1201 struct iop_msg *im;
1205 im = iop_msg_alloc(sc, IM_WAIT | IM_NOSTATUS);
1210 mf.msgtctx = im->im_tctx;
1212 rv = iop_msg_post(sc, im, &mf, 30000);
1214 if ((im->im_flags & IM_FAIL) != 0)
1216 else if (im->im_reqstatus == I2O_STATUS_SUCCESS ||
1217 (im->im_reqstatus == I2O_STATUS_ERROR_NO_DATA_XFER &&
1218 im->im_detstatus == I2O_DSC_INVALID_REQUEST))
1224 iop_msg_free(sc, im);
1238 struct iop_msg *im;
1244 im = iop_msg_alloc(sc, (ii == NULL ? IM_WAIT : 0) | IM_NOSTATUS);
1246 im->im_dvcontext = pgop;
1252 mf->msgtctx = im->im_tctx;
1262 iop_msg_map(sc, im, mb, pgop, sizeof(*pgop), 1, NULL);
1263 iop_msg_map(sc, im, mb, buf, size, 0, NULL);
1264 rv = iop_msg_post(sc, im, mb, (ii == NULL ? 30000 : 0));
1268 if (im->im_reqstatus == I2O_STATUS_ERROR_PARTIAL_XFER &&
1269 im->im_detstatus == I2O_DSC_UNKNOWN_ERROR)
1272 rv = (im->im_reqstatus != 0 ? EIO : 0);
1280 iop_msg_unmap(sc, im);
1281 iop_msg_free(sc, im);
1295 struct iop_msg *im;
1303 im = iop_msg_alloc(sc, IM_WAIT);
1309 mf->msgtctx = im->im_tctx;
1320 iop_msg_map(sc, im, mb, pgop, totsize, 1, NULL);
1321 rv = iop_msg_post(sc, im, mb, 30000);
1326 iop_msg_unmap(sc, im);
1327 iop_msg_free(sc, im);
1338 struct iop_msg *im;
1344 im = iop_msg_alloc(sc, IM_WAIT);
1350 mf->msgtctx = im->im_tctx;
1360 iop_msg_map(sc, im, mb, &pgop, sizeof(pgop), 1, NULL);
1361 rv = iop_msg_post(sc, im, mb, 30000);
1366 iop_msg_unmap(sc, im);
1367 iop_msg_free(sc, im);
1379 struct iop_msg *im;
1387 im = iop_msg_alloc(sc, IM_WAIT);
1393 mf->msgtctx = im->im_tctx;
1406 iop_msg_map(sc, im, mb, pgop, totsize, 1, NULL);
1407 rv = iop_msg_post(sc, im, mb, 30000);
1412 iop_msg_unmap(sc, im);
1413 iop_msg_free(sc, im);
1425 struct iop_msg *im;
1430 im = iop_msg_alloc(sc, fl);
1435 mf.msgtctx = im->im_tctx;
1437 rv = iop_msg_post(sc, im, &mf, timo);
1438 iop_msg_free(sc, im);
1449 struct iop_msg *im;
1456 im = iop_msg_alloc(sc, IM_WAIT);
1462 mf->msgtctx = im->im_tctx;
1491 iop_msg_map(sc, im, mb, iop_systab, iop_systab_size, 1, NULL);
1492 iop_msg_map(sc, im, mb, mema, sizeof(mema), 1, NULL);
1493 iop_msg_map(sc, im, mb, ioa, sizeof(ioa), 1, NULL);
1494 rv = iop_msg_post(sc, im, mb, 5000);
1495 iop_msg_unmap(sc, im);
1496 iop_msg_free(sc, im);
1612 struct iop_msg *im;
1676 im = sc->sc_ims + (tctx & IOP_TCTX_MASK);
1678 (im->im_flags & IM_ALLOCED) == 0 ||
1679 tctx != im->im_tctx) {
1680 aprint_error_dev(sc->sc_dev, "WARNING: bad tctx returned (0x%08x, %p)\n", tctx, im);
1681 if (im != NULL)
1683 im->im_flags, im->im_tctx);
1692 im->im_flags |= IM_FAIL;
1695 if ((im->im_flags & IM_REPLIED) != 0)
1698 im->im_flags |= IM_REPLIED;
1704 im->im_reqstatus = status;
1705 im->im_detstatus = le16toh(rb->detail);
1708 if (im->im_rb != NULL) {
1714 memcpy(im->im_rb, rb, size);
1718 if ((im->im_flags & IM_WAIT) != 0)
1719 cv_broadcast(&im->im_cv);
1720 else if ((im->im_flags & (IM_POLL | IM_POLL_INTR)) != IM_POLL) {
1723 (*ii->ii_intr)(ii->ii_dv, im, rb);
1780 iop_intr_event(device_t dv, struct iop_msg *im, void *reply)
1800 struct iop_msg *im;
1810 im = SLIST_FIRST(&sc->sc_im_freelist);
1812 if (im == NULL)
1818 im->im_tctx = (im->im_tctx & IOP_TCTX_MASK) | tctxgen;
1820 im->im_flags = flags | IM_ALLOCED;
1821 im->im_rb = NULL;
1824 im->im_xfer[i++].ix_size = 0;
1827 return (im);
1834 iop_msg_free(struct iop_softc *sc, struct iop_msg *im)
1838 if ((im->im_flags & IM_ALLOCED) == 0)
1842 im->im_flags = 0;
1844 SLIST_INSERT_HEAD(&sc->sc_im_freelist, im, im_chain);
1852 iop_msg_map(struct iop_softc *sc, struct iop_msg *im, u_int32_t *mb,
1861 for (xn = 0, ix = im->im_xfer; xn < IOP_MAX_MSG_XFERS; xn++, ix++)
1936 if ((im->im_flags & IM_SGLOFFADJ) == 0) {
1938 im->im_flags |= IM_SGLOFFADJ;
1955 iop_msg_map_bio(struct iop_softc *sc, struct iop_msg *im, u_int32_t *mb,
1970 if ((im->im_flags & IM_SGLOFFADJ) != 0)
1974 ix = im->im_xfer;
2050 iop_msg_unmap(struct iop_softc *sc, struct iop_msg *im)
2056 if (im->im_xfer[0].ix_size == 0)
2060 for (ix = im->im_xfer, i = 0;;) {
2122 iop_msg_post(struct iop_softc *sc, struct iop_msg *im, void *xmb, int timo)
2130 if ((im->im_flags & IM_SGLOFFADJ) != 0)
2136 if ((im->im_flags & (IM_POLL | IM_WAIT)) != 0) {
2137 if ((im->im_flags & IM_POLL) != 0)
2138 iop_msg_poll(sc, im, timo);
2140 iop_msg_wait(sc, im, timo);
2143 if ((im->im_flags & IM_REPLIED) != 0) {
2144 if ((im->im_flags & IM_NOSTATUS) != 0)
2146 else if ((im->im_flags & IM_FAIL) != 0)
2148 else if (im->im_reqstatus != I2O_STATUS_SUCCESS)
2165 iop_msg_poll(struct iop_softc *sc, struct iop_msg *im, int timo)
2187 if ((im->im_flags & IM_REPLIED) != 0)
2212 iop_msg_wait(struct iop_softc *sc, struct iop_msg *im, int timo)
2217 if ((im->im_flags & IM_REPLIED) != 0) {
2221 rv = cv_timedwait(&im->im_cv, &sc->sc_intrlock, mstohz(timo));
2377 struct iop_msg *im;
2382 im = iop_msg_alloc(sc, IM_WAIT);
2388 mf.msgtctx = im->im_tctx;
2391 rv = iop_msg_post(sc, im, &mf, 5000);
2392 iop_msg_free(sc, im);
2402 struct iop_msg *im;
2406 im = iop_msg_alloc(sc, IM_WAIT);
2411 mf.msgtctx = im->im_tctx;
2415 rv = iop_msg_post(sc, im, &mf, 5000);
2416 iop_msg_free(sc, im);
2557 struct iop_msg *im;
2565 im = NULL;
2588 im = iop_msg_alloc(sc, IM_WAIT | IM_NOSTATUS);
2589 im->im_rb = (struct i2o_reply *)mf;
2591 mf->msgtctx = im
2595 rv = iop_msg_map(sc, im, (u_int32_t *)mf, ptb->ptb_data,
2602 if ((rv = iop_msg_post(sc, im, mf, pt->pt_timo)) != 0)
2605 i = (le32toh(im->im_rb->msgflags) >> 14) & ~3;
2610 rv = copyout(im->im_rb, pt->pt_reply, i);
2614 iop_msg_unmap(sc, im);
2615 if (im != NULL)
2616 iop_msg_free(sc, im);