Lines Matching defs:xfer

183 fw_asyreq(struct firewire_comm *fc, int sub, struct fw_xfer *xfer)
192 if (xfer == NULL)
194 if (xfer->hand == NULL) {
198 fp = &xfer->send.hdr;
212 xfer->resp = EAGAIN;
213 xfer->flag = FWXF_BUSY;
222 if (xfer->send.pay_len > MAXREC(fc->maxrec)) {
232 if (len != xfer->send.pay_len) {
234 len, xfer->send.pay_len, tcode_str[tcode], tcode);
248 xfer->tl = -1;
250 if (fw_get_tlabel(fc, xfer) < 0)
254 xfer->resp = 0;
255 xfer->fc = fc;
256 xfer->q = xferq;
258 fw_asystart(xfer);
266 fw_xferwake(struct fw_xfer *xfer)
268 struct mtx *lock = &xfer->fc->wait_lock;
271 xfer->flag |= FWXF_WAKE;
274 wakeup(xfer);
279 fw_xferwait(struct fw_xfer *xfer)
281 struct mtx *lock = &xfer->fc->wait_lock;
285 while ((xfer->flag & FWXF_WAKE) == 0)
286 err = msleep(xfer, lock, PWAIT|PCATCH, "fw_xferwait", 0);
293 * Async. request with given xfer structure.
296 fw_asystart(struct fw_xfer *xfer)
298 struct firewire_comm *fc = xfer->fc;
302 xfer->flag = FWXF_INQ;
303 STAILQ_INSERT_TAIL(&xfer->q->q, xfer, link);
305 xfer->q->queued++;
309 if (xfer->mbuf == NULL)
310 xfer->q->start(fc);
332 struct fw_xfer *xfer, *txfer;
347 while ((xfer = STAILQ_FIRST(&fc->tlabels[i])) != NULL) {
348 if ((xfer->flag & FWXF_SENT) == 0)
351 if (timevalcmp(&xfer->tv, &tv, >))
356 i, xfer->flag);
357 fw_dump_hdr(&xfer->send.hdr, "send");
358 xfer->resp = ETIMEDOUT;
359 xfer->tl = -1;
361 STAILQ_INSERT_TAIL(&xfer_timeout, xfer, tlabel);
367 STAILQ_FOREACH_SAFE(xfer, &xfer_timeout, tlabel, txfer)
368 xfer->hand(xfer);
552 struct fw_xfer *xfer;
554 while ((xfer = STAILQ_FIRST(&xferq->q)) != NULL) {
559 xfer->resp = EAGAIN;
560 xfer->flag = FWXF_SENTERR;
561 fw_xfer_done(xfer);
568 struct fw_xfer *xfer, *txfer;
583 while ((xfer = STAILQ_FIRST(&fc->tlabels[i])) != NULL) {
585 printf("tl=%d flag=%d\n", i, xfer->flag);
586 xfer->tl = -1;
587 xfer->resp = EAGAIN;
589 STAILQ_INSERT_TAIL(&xfer_drain, xfer, tlabel);
593 STAILQ_FOREACH_SAFE(xfer, &xfer_drain, tlabel, txfer)
594 xfer->hand(xfer);
774 struct fw_xfer *xfer;
854 xfer = fw_xfer_alloc();
855 if (xfer == NULL)
860 fw_xfer_free(xfer);
863 xfer->hand = fw_vmaccess;
864 xfer->fc = fc;
865 xfer->sc = NULL;
870 fwb->xfer = xfer;
937 struct fw_xfer *xfer, *next;
957 for (xfer = STAILQ_FIRST(&fwb->xferlist); xfer != NULL; xfer = next) {
958 next = STAILQ_NEXT(xfer, link);
959 fw_xfer_free(xfer);
975 struct fw_xfer *xfer;
978 xfer = fw_xfer_alloc_buf(type, slen, rlen);
979 if (xfer == NULL)
981 xfer->fc = fc;
982 xfer->sc = sc;
983 xfer->hand = hand;
985 STAILQ_INSERT_TAIL(q, xfer, link);
994 struct fw_xfer *xfer, *next;
996 for (xfer = STAILQ_FIRST(q); xfer != NULL; xfer = next) {
997 next = STAILQ_NEXT(xfer, link);
998 fw_xfer_free_buf(xfer);
1020 fw_tl_free(struct firewire_comm *fc, struct fw_xfer *xfer)
1025 if (xfer->tl < 0) {
1030 STAILQ_FOREACH(txfer, &fc->tlabels[xfer->tl], tlabel)
1031 if (txfer == xfer)
1034 printf("%s: the xfer is not in the queue "
1036 __FUNCTION__, xfer->tl, xfer->flag);
1037 fw_dump_hdr(&xfer->send.hdr, "send");
1038 fw_dump_hdr(&xfer->recv.hdr, "recv");
1044 STAILQ_REMOVE(&fc->tlabels[xfer->tl], xfer, fw_xfer, tlabel);
1045 xfer->tl = -1;
1056 struct fw_xfer *xfer;
1061 STAILQ_FOREACH(xfer, &fc->tlabels[tlabel], tlabel)
1062 if (xfer->send.hdr.mode.hdr.dst == node) {
1065 KASSERT(xfer->tl == tlabel,
1066 ("xfer->tl 0x%x != 0x%x", xfer->tl, tlabel));
1068 req = xfer->send.hdr.mode.hdr.tcode;
1069 if (xfer->fc->tcode[req].valid_res != tcode) {
1078 return (xfer);
1093 struct fw_xfer *xfer;
1095 xfer = malloc(sizeof(struct fw_xfer), type, M_NOWAIT | M_ZERO);
1096 if (xfer == NULL)
1097 return xfer;
1099 xfer->malloc = type;
1100 xfer->tl = -1;
1102 return xfer;
1108 struct fw_xfer *xfer;
1110 xfer = fw_xfer_alloc(type);
1111 if (xfer == NULL)
1113 xfer->send.pay_len = send_len;
1114 xfer->recv.pay_len = recv_len;
1116 xfer->send.payload = malloc(send_len, type, M_NOWAIT | M_ZERO);
1117 if (xfer->send.payload == NULL) {
1118 fw_xfer_free(xfer);
1123 xfer->recv.payload = malloc(recv_len, type, M_NOWAIT);
1124 if (xfer->recv.payload == NULL) {
1125 if (xfer->send.payload != NULL)
1126 free(xfer->send.payload, type);
1127 fw_xfer_free(xfer);
1131 return (xfer);
1138 fw_xfer_done(struct fw_xfer *xfer)
1140 if (xfer->hand == NULL) {
1145 if (xfer->fc == NULL)
1146 panic("fw_xfer_done: why xfer->fc is NULL?");
1148 fw_tl_free(xfer->fc, xfer);
1149 xfer->hand(xfer);
1153 fw_xfer_unload(struct fw_xfer *xfer)
1156 if (xfer == NULL)
1159 if (xfer->fc != NULL) {
1160 FW_GLOCK(xfer->fc);
1161 if (xfer->flag & FWXF_INQ) {
1162 STAILQ_REMOVE(&xfer->q->q, xfer, fw_xfer, link);
1163 xfer->flag &= ~FWXF_INQ;
1165 xfer->q->queued--;
1168 FW_GUNLOCK(xfer->fc);
1172 * xfer after it's freed.
1174 fw_tl_free(xfer->fc, xfer);
1176 if (xfer->flag & FWXF_START)
1185 xfer->flag = FWXF_INIT;
1186 xfer->resp = 0;
1193 fw_xfer_free_buf(struct fw_xfer *xfer)
1195 if (xfer == NULL) {
1196 printf("%s: xfer == NULL\n", __func__);
1199 fw_xfer_unload(xfer);
1200 if (xfer->send.payload != NULL)
1201 free(xfer->send.payload, xfer->malloc);
1202 if (xfer->recv.payload != NULL)
1203 free(xfer->recv.payload, xfer->malloc);
1204 free(xfer, xfer->malloc);
1208 fw_xfer_free(struct fw_xfer *xfer)
1210 if (xfer == NULL) {
1211 printf("%s: xfer == NULL\n", __func__);
1214 fw_xfer_unload(xfer);
1215 free(xfer, xfer->malloc);
1219 fw_asy_callback_free(struct fw_xfer *xfer)
1223 xfer->flag, xfer->resp);
1225 fw_xfer_free(xfer);
1234 struct fw_xfer *xfer;
1239 xfer = fw_xfer_alloc(M_FWXFER);
1240 if (xfer == NULL)
1242 xfer->fc = fc;
1243 xfer->hand = fw_asy_callback_free;
1245 fp = &xfer->send.hdr;
1258 fw_asyreq(fc, -1, xfer);
1437 struct fw_xfer *xfer;
1442 xfer = fwmem_read_quad(fwdev, NULL, -1, 0xffff,
1444 if (xfer == NULL)
1446 fw_xferwait(xfer);
1448 if (xfer->resp == 0)
1451 error = xfer->resp;
1452 fw_xfer_free(xfer);
1812 fw_get_tlabel(struct firewire_comm *fc, struct fw_xfer *xfer)
1818 dst = xfer->send.hdr.mode.hdr.dst & 0x3f;
1827 STAILQ_INSERT_TAIL(&fc->tlabels[new_tlabel], xfer, tlabel);
1830 xfer->tl = new_tlabel;
1831 xfer->send.hdr.mode.hdr.tlrt = new_tlabel << 2;
1852 rb->xfer->recv.spd = rb->spd;
1858 p = (u_char *)&rb->xfer->recv.hdr;
1864 p = (u_char *)rb->xfer->recv.payload;
1865 res = rb->xfer->recv.pay_len;
1871 rb->xfer->recv.pay_len = sizeof(uint32_t);
1885 __func__, rb->xfer->recv.pay_len, len - res);
1895 rb->xfer->recv.pay_len -= res;
1929 rb->xfer = fw_tl2xfer(rb->fc, fp->mode.hdr.src,
1931 if (rb->xfer == NULL) {
1942 rb->xfer = fw_tl2xfer(rb->fc, fp->mode.hdr.src,
1944 if (rb->xfer == NULL) {
1953 if (rb->xfer->recv.hdr.mode.wres.rtcode != RESP_CMP)
1954 rb->xfer->resp = EIO;
1956 rb->xfer->resp = 0;
1958 oldstate = rb->xfer->flag;
1959 rb->xfer->flag = FWXF_RCVD;
1962 fw_xfer_done(rb->xfer);
1967 printf("not sent yet tl=%x\n", rb->xfer->tl);
1973 rb->xfer->flag);
2000 rb->xfer = fw_xfer_alloc(M_FWXFER);
2001 if (rb->xfer == NULL) {
2004 rb->xfer->send.spd = rb->spd;
2005 rb->xfer->send.pay_len = 0;
2006 resfp = &rb->xfer->send.hdr;
2029 rb->xfer->hand = fw_xferwake;
2031 rb->xfer->hand = fw_xfer_free;
2032 if (fw_asyreq(rb->fc, -1, rb->xfer))
2033 fw_xfer_free(rb->xfer);
2041 rb->xfer = STAILQ_FIRST(&bind->xferlist);
2042 if (rb->xfer == NULL) {
2049 rb->xfer->hand(rb->xfer);
2065 /* XXX get xfer from xfer queue, we don't need copy for
2067 rb->xfer = fw_xfer_alloc_buf(M_FWXFER, 0, /* XXX */
2069 if (rb->xfer == NULL)
2074 STAILQ_INSERT_TAIL(&xferq->q, rb->xfer, link);
2101 fw_try_bmr_callback(struct fw_xfer *xfer)
2106 if (xfer == NULL)
2108 fc = xfer->fc;
2109 if (xfer->resp != 0)
2111 if (xfer->recv.payload == NULL)
2113 if (xfer->recv.hdr.mode.lres.rtcode != FWRCODE_COMPLETE)
2116 bmr = ntohl(xfer->recv.payload[0]);
2121 fw_xfer_free_buf(xfer);
2127 fw_xfer_free_buf(xfer);
2137 struct fw_xfer *xfer;
2142 xfer = fw_xfer_alloc_buf(M_FWXFER, 8, 4);
2143 if (xfer == NULL)
2145 xfer->send.spd = 0;
2148 fp = &xfer->send.hdr;
2158 xfer->send.payload[0] = htonl(0x3f);
2159 xfer->send.payload[1] = htonl(fc->nodeid);
2160 xfer->hand = fw_try_bmr_callback;
2162 err = fw_asyreq(fc, -1, xfer);
2164 fw_xfer_free_buf(xfer);
2176 fw_vmaccess(struct fw_xfer *xfer)
2179 uint32_t *ld = (uint32_t *)xfer->recv.buf;
2182 xfer->spd, xfer->recv.len, ntohl(ld[0]), ntohl(ld[1]), ntohl(ld[2]),
2186 if (xfer->resp != 0) {
2187 fw_xfer_free(xfer);
2190 if (xfer->recv.buf == NULL) {
2191 fw_xfer_free(xfer);
2194 rfp = (struct fw_pkt *)xfer->recv.buf;
2198 xfer->send.buf = malloc(12, M_FW, M_NOWAIT);
2199 xfer->send.len = 12;
2200 sfp = (struct fw_pkt *)xfer->send.buf;
2208 xfer->send.buf = malloc(12, M_FW, M_NOWAIT);
2209 xfer->send.len = 12;
2216 xfer->send.buf = malloc(16 + rfp->mode.rreqb.len,
2218 xfer->send.len = 16 + ntohs(rfp->mode.rreqb.len);
2219 sfp = (struct fw_pkt *)xfer->send.buf;
2229 xfer->send.buf = malloc(16, M_FW, M_NOWAIT);
2230 xfer->send.len = 16;
2231 sfp = (struct fw_pkt *)xfer->send.buf;
2238 fw_xfer_free(xfer);
2242 xfer->dst = ntohs(rfp->mode.hdr.src);
2243 xfer->hand = fw_xfer_free;
2248 fw_asyreq(xfer->fc, -1, xfer);