Deleted Added
full compact
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 ---