if_fwip.c (227309) | if_fwip.c (243857) |
---|---|
1/*- 2 * Copyright (c) 2004 3 * Doug Rabson 4 * Copyright (c) 2002-2003 5 * Hidetoshi Shimokawa. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * | 1/*- 2 * Copyright (c) 2004 3 * Doug Rabson 4 * Copyright (c) 2002-2003 5 * Hidetoshi Shimokawa. All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification, are permitted provided that the following conditions --- 19 unchanged lines hidden (view full) --- 28 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 29 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 30 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 31 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 32 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 33 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 34 * SUCH DAMAGE. 35 * |
36 * $FreeBSD: head/sys/dev/firewire/if_fwip.c 227309 2011-11-07 15:43:11Z ed $ | 36 * $FreeBSD: head/sys/dev/firewire/if_fwip.c 243857 2012-12-04 09:32:43Z glebius $ |
37 */ 38 39#ifdef HAVE_KERNEL_OPTION_HEADERS 40#include "opt_device_polling.h" 41#include "opt_inet.h" 42#endif 43 44#include <sys/param.h> --- 283 unchanged lines hidden (view full) --- 328 printf("if_fwip: malloc failed\n"); 329 return; 330 } 331 STAILQ_INIT(&xferq->stvalid); 332 STAILQ_INIT(&xferq->stfree); 333 STAILQ_INIT(&xferq->stdma); 334 xferq->stproc = NULL; 335 for (i = 0; i < xferq->bnchunk; i ++) { | 37 */ 38 39#ifdef HAVE_KERNEL_OPTION_HEADERS 40#include "opt_device_polling.h" 41#include "opt_inet.h" 42#endif 43 44#include <sys/param.h> --- 283 unchanged lines hidden (view full) --- 328 printf("if_fwip: malloc failed\n"); 329 return; 330 } 331 STAILQ_INIT(&xferq->stvalid); 332 STAILQ_INIT(&xferq->stfree); 333 STAILQ_INIT(&xferq->stdma); 334 xferq->stproc = NULL; 335 for (i = 0; i < xferq->bnchunk; i ++) { |
336 m = m_getcl(M_WAIT, MT_DATA, M_PKTHDR); | 336 m = m_getcl(M_WAITOK, MT_DATA, M_PKTHDR); |
337 xferq->bulkxfer[i].mbuf = m; 338 m->m_len = m->m_pkthdr.len = m->m_ext.ext_size; 339 STAILQ_INSERT_TAIL(&xferq->stfree, 340 &xferq->bulkxfer[i], link); 341 } 342 343 fwip->fwb.start = INET_FIFO; 344 fwip->fwb.end = INET_FIFO + 16384; /* S3200 packet size */ 345 346 /* pre-allocate xfer */ 347 STAILQ_INIT(&fwip->fwb.xferlist); 348 for (i = 0; i < rx_queue_len; i ++) { 349 xfer = fw_xfer_alloc(M_FWIP); 350 if (xfer == NULL) 351 break; | 337 xferq->bulkxfer[i].mbuf = m; 338 m->m_len = m->m_pkthdr.len = m->m_ext.ext_size; 339 STAILQ_INSERT_TAIL(&xferq->stfree, 340 &xferq->bulkxfer[i], link); 341 } 342 343 fwip->fwb.start = INET_FIFO; 344 fwip->fwb.end = INET_FIFO + 16384; /* S3200 packet size */ 345 346 /* pre-allocate xfer */ 347 STAILQ_INIT(&fwip->fwb.xferlist); 348 for (i = 0; i < rx_queue_len; i ++) { 349 xfer = fw_xfer_alloc(M_FWIP); 350 if (xfer == NULL) 351 break; |
352 m = m_getcl(M_WAIT, MT_DATA, M_PKTHDR); | 352 m = m_getcl(M_WAITOK, MT_DATA, M_PKTHDR); |
353 xfer->recv.payload = mtod(m, uint32_t *); 354 xfer->recv.pay_len = MCLBYTES; 355 xfer->hand = fwip_unicast_input; 356 xfer->fc = fc; 357 xfer->sc = (caddr_t)fwip; 358 xfer->mbuf = m; 359 STAILQ_INSERT_TAIL(&fwip->fwb.xferlist, xfer, link); 360 } --- 291 unchanged lines hidden (view full) --- 652 /* 653 * Broadcast packets are sent as GASP packets with 654 * specifier ID 0x00005e, version 1 on the broadcast 655 * channel. To be conservative, we send at the 656 * slowest possible speed. 657 */ 658 uint32_t *p; 659 | 353 xfer->recv.payload = mtod(m, uint32_t *); 354 xfer->recv.pay_len = MCLBYTES; 355 xfer->hand = fwip_unicast_input; 356 xfer->fc = fc; 357 xfer->sc = (caddr_t)fwip; 358 xfer->mbuf = m; 359 STAILQ_INSERT_TAIL(&fwip->fwb.xferlist, xfer, link); 360 } --- 291 unchanged lines hidden (view full) --- 652 /* 653 * Broadcast packets are sent as GASP packets with 654 * specifier ID 0x00005e, version 1 on the broadcast 655 * channel. To be conservative, we send at the 656 * slowest possible speed. 657 */ 658 uint32_t *p; 659 |
660 M_PREPEND(m, 2*sizeof(uint32_t), M_DONTWAIT); | 660 M_PREPEND(m, 2*sizeof(uint32_t), M_NOWAIT); |
661 p = mtod(m, uint32_t *); 662 fp->mode.stream.len = m->m_pkthdr.len; 663 fp->mode.stream.chtag = broadcast_channel; 664 fp->mode.stream.tcode = FWTCODE_STREAM; 665 fp->mode.stream.sy = 0; 666 xfer->send.spd = 0; 667 p[0] = htonl(nodeid << 16); 668 p[1] = htonl((0x5e << 24) | 1); --- 104 unchanged lines hidden (view full) --- 773 while ((sxfer = STAILQ_FIRST(&xferq->stvalid)) != NULL) { 774 STAILQ_REMOVE_HEAD(&xferq->stvalid, link); 775 fp = mtod(sxfer->mbuf, struct fw_pkt *); 776 if (fwip->fd.fc->irx_post != NULL) 777 fwip->fd.fc->irx_post(fwip->fd.fc, fp->mode.ld); 778 m = sxfer->mbuf; 779 780 /* insert new rbuf */ | 661 p = mtod(m, uint32_t *); 662 fp->mode.stream.len = m->m_pkthdr.len; 663 fp->mode.stream.chtag = broadcast_channel; 664 fp->mode.stream.tcode = FWTCODE_STREAM; 665 fp->mode.stream.sy = 0; 666 xfer->send.spd = 0; 667 p[0] = htonl(nodeid << 16); 668 p[1] = htonl((0x5e << 24) | 1); --- 104 unchanged lines hidden (view full) --- 773 while ((sxfer = STAILQ_FIRST(&xferq->stvalid)) != NULL) { 774 STAILQ_REMOVE_HEAD(&xferq->stvalid, link); 775 fp = mtod(sxfer->mbuf, struct fw_pkt *); 776 if (fwip->fd.fc->irx_post != NULL) 777 fwip->fd.fc->irx_post(fwip->fd.fc, fp->mode.ld); 778 m = sxfer->mbuf; 779 780 /* insert new rbuf */ |
781 sxfer->mbuf = m0 = m_getcl(M_DONTWAIT, MT_DATA, M_PKTHDR); | 781 sxfer->mbuf = m0 = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR); |
782 if (m0 != NULL) { 783 m0->m_len = m0->m_pkthdr.len = m0->m_ext.ext_size; 784 STAILQ_INSERT_TAIL(&xferq->stfree, sxfer, link); 785 } else 786 printf("fwip_as_input: m_getcl failed\n"); 787 788 /* 789 * We must have a GASP header - leave the --- 76 unchanged lines hidden (view full) --- 866fwip_unicast_input_recycle(struct fwip_softc *fwip, struct fw_xfer *xfer) 867{ 868 struct mbuf *m; 869 870 /* 871 * We have finished with a unicast xfer. Allocate a new 872 * cluster and stick it on the back of the input queue. 873 */ | 782 if (m0 != NULL) { 783 m0->m_len = m0->m_pkthdr.len = m0->m_ext.ext_size; 784 STAILQ_INSERT_TAIL(&xferq->stfree, sxfer, link); 785 } else 786 printf("fwip_as_input: m_getcl failed\n"); 787 788 /* 789 * We must have a GASP header - leave the --- 76 unchanged lines hidden (view full) --- 866fwip_unicast_input_recycle(struct fwip_softc *fwip, struct fw_xfer *xfer) 867{ 868 struct mbuf *m; 869 870 /* 871 * We have finished with a unicast xfer. Allocate a new 872 * cluster and stick it on the back of the input queue. 873 */ |
874 m = m_getcl(M_WAIT, MT_DATA, M_PKTHDR); | 874 m = m_getcl(M_WAITOK, MT_DATA, M_PKTHDR); |
875 xfer->mbuf = m; 876 xfer->recv.payload = mtod(m, uint32_t *); 877 xfer->recv.pay_len = MCLBYTES; 878 xfer->mbuf = m; 879 STAILQ_INSERT_TAIL(&fwip->fwb.xferlist, xfer, link); 880} 881 882static void --- 104 unchanged lines hidden --- | 875 xfer->mbuf = m; 876 xfer->recv.payload = mtod(m, uint32_t *); 877 xfer->recv.pay_len = MCLBYTES; 878 xfer->mbuf = m; 879 STAILQ_INSERT_TAIL(&fwip->fwb.xferlist, xfer, link); 880} 881 882static void --- 104 unchanged lines hidden --- |