firewire.c (110193) | firewire.c (110195) |
---|---|
1/* 2 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 16 unchanged lines hidden (view full) --- 25 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 29 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 30 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * | 1/* 2 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright --- 16 unchanged lines hidden (view full) --- 25 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 26 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 27 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 28 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 29 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 30 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 * |
33 * $FreeBSD: head/sys/dev/firewire/firewire.c 110193 2003-02-01 14:42:49Z simokawa $ | 33 * $FreeBSD: head/sys/dev/firewire/firewire.c 110195 2003-02-01 15:04:33Z simokawa $ |
34 * 35 */ 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/types.h> 40#include <sys/mbuf.h> 41#include <sys/socket.h> --- 18 unchanged lines hidden (view full) --- 60 61int firewire_debug=0, try_bmr=1; 62SYSCTL_INT(_debug, OID_AUTO, firewire_debug, CTLFLAG_RW, &firewire_debug, 0, 63 "FireWire driver debug flag"); 64SYSCTL_NODE(_hw, OID_AUTO, firewire, CTLFLAG_RD, 0, "FireWire Subsystem"); 65SYSCTL_INT(_hw_firewire, OID_AUTO, try_bmr, CTLFLAG_RW, &try_bmr, 0, 66 "Try to be a bus manager"); 67 | 34 * 35 */ 36 37#include <sys/param.h> 38#include <sys/systm.h> 39#include <sys/types.h> 40#include <sys/mbuf.h> 41#include <sys/socket.h> --- 18 unchanged lines hidden (view full) --- 60 61int firewire_debug=0, try_bmr=1; 62SYSCTL_INT(_debug, OID_AUTO, firewire_debug, CTLFLAG_RW, &firewire_debug, 0, 63 "FireWire driver debug flag"); 64SYSCTL_NODE(_hw, OID_AUTO, firewire, CTLFLAG_RD, 0, "FireWire Subsystem"); 65SYSCTL_INT(_hw_firewire, OID_AUTO, try_bmr, CTLFLAG_RW, &try_bmr, 0, 66 "Try to be a bus manager"); 67 |
68MALLOC_DEFINE(M_FW, "firewire", "FireWire"); 69 |
|
68#define FW_MAXASYRTY 4 69#define FW_MAXDEVRCNT 4 70 71#define XFER_TIMEOUT 0 72 73devclass_t firewire_devclass; 74 75static int firewire_match __P((device_t)); --- 353 unchanged lines hidden (view full) --- 429 destroy_dev(sc->dev[j]); 430 } 431#endif 432 /* XXX xfree_free and untimeout on all xfers */ 433 callout_stop(&sc->fc->timeout_callout); 434 callout_stop(&sc->fc->bmr_callout); 435 callout_stop(&sc->fc->retry_probe_callout); 436 callout_stop(&sc->fc->busprobe_callout); | 70#define FW_MAXASYRTY 4 71#define FW_MAXDEVRCNT 4 72 73#define XFER_TIMEOUT 0 74 75devclass_t firewire_devclass; 76 77static int firewire_match __P((device_t)); --- 353 unchanged lines hidden (view full) --- 431 destroy_dev(sc->dev[j]); 432 } 433#endif 434 /* XXX xfree_free and untimeout on all xfers */ 435 callout_stop(&sc->fc->timeout_callout); 436 callout_stop(&sc->fc->bmr_callout); 437 callout_stop(&sc->fc->retry_probe_callout); 438 callout_stop(&sc->fc->busprobe_callout); |
437 free(sc->fc->topology_map, M_DEVBUF); 438 free(sc->fc->speed_map, M_DEVBUF); | 439 free(sc->fc->topology_map, M_FW); 440 free(sc->fc->speed_map, M_FW); |
439 bus_generic_detach(dev); 440 return(0); 441} 442#if 0 443static int 444firewire_shutdown( device_t dev ) 445{ 446 return 0; --- 158 unchanged lines hidden (view full) --- 605 606 for( i = 0 ; i < fc->nisodma ; i++){ 607 fc->ir[i]->maxq = FWMAXQUEUE; 608 fc->it[i]->maxq = FWMAXQUEUE; 609 } 610/* Initialize csr registers */ 611 fc->topology_map = (struct fw_topology_map *)malloc( 612 sizeof(struct fw_topology_map), | 441 bus_generic_detach(dev); 442 return(0); 443} 444#if 0 445static int 446firewire_shutdown( device_t dev ) 447{ 448 return 0; --- 158 unchanged lines hidden (view full) --- 607 608 for( i = 0 ; i < fc->nisodma ; i++){ 609 fc->ir[i]->maxq = FWMAXQUEUE; 610 fc->it[i]->maxq = FWMAXQUEUE; 611 } 612/* Initialize csr registers */ 613 fc->topology_map = (struct fw_topology_map *)malloc( 614 sizeof(struct fw_topology_map), |
613 M_DEVBUF, M_NOWAIT | M_ZERO); | 615 M_FW, M_NOWAIT | M_ZERO); |
614 fc->speed_map = (struct fw_speed_map *)malloc( 615 sizeof(struct fw_speed_map), | 616 fc->speed_map = (struct fw_speed_map *)malloc( 617 sizeof(struct fw_speed_map), |
616 M_DEVBUF, M_NOWAIT | M_ZERO); | 618 M_FW, M_NOWAIT | M_ZERO); |
617 CSRARC(fc, TOPO_MAP) = 0x3f1 << 16; 618 CSRARC(fc, TOPO_MAP + 4) = 1; 619 CSRARC(fc, SPED_MAP) = 0x3f1 << 16; 620 CSRARC(fc, SPED_MAP + 4) = 1; 621 622 STAILQ_INIT(&fc->devices); 623 STAILQ_INIT(&fc->pending); 624 625/* Initialize csr ROM work space */ 626 SLIST_INIT(&fc->ongocsr); 627 SLIST_INIT(&fc->csrfree); 628 for( i = 0 ; i < FWMAXCSRDIR ; i++){ | 619 CSRARC(fc, TOPO_MAP) = 0x3f1 << 16; 620 CSRARC(fc, TOPO_MAP + 4) = 1; 621 CSRARC(fc, SPED_MAP) = 0x3f1 << 16; 622 CSRARC(fc, SPED_MAP + 4) = 1; 623 624 STAILQ_INIT(&fc->devices); 625 STAILQ_INIT(&fc->pending); 626 627/* Initialize csr ROM work space */ 628 SLIST_INIT(&fc->ongocsr); 629 SLIST_INIT(&fc->csrfree); 630 for( i = 0 ; i < FWMAXCSRDIR ; i++){ |
629 csrd = (struct csrdir *) malloc(sizeof(struct csrdir), M_DEVBUF,M_NOWAIT); | 631 csrd = (struct csrdir *) malloc(sizeof(struct csrdir), M_FW,M_NOWAIT); |
630 if(csrd == NULL) break; 631 SLIST_INSERT_HEAD(&fc->csrfree, csrd, link); 632 } 633 634/* Initialize Async handlers */ 635 STAILQ_INIT(&fc->binds); 636 for( i = 0 ; i < 0x40 ; i++){ 637 STAILQ_INIT(&fc->tlabels[i]); --- 14 unchanged lines hidden (view full) --- 652 } 653#endif 654 655 656#ifdef FW_VMACCESS 657 xfer = fw_xfer_alloc(); 658 if(xfer == NULL) return; 659 | 632 if(csrd == NULL) break; 633 SLIST_INSERT_HEAD(&fc->csrfree, csrd, link); 634 } 635 636/* Initialize Async handlers */ 637 STAILQ_INIT(&fc->binds); 638 for( i = 0 ; i < 0x40 ; i++){ 639 STAILQ_INIT(&fc->tlabels[i]); --- 14 unchanged lines hidden (view full) --- 654 } 655#endif 656 657 658#ifdef FW_VMACCESS 659 xfer = fw_xfer_alloc(); 660 if(xfer == NULL) return; 661 |
660 fwb = (struct fw_bind *)malloc(sizeof (struct fw_bind), M_DEVBUF, M_NOWAIT); | 662 fwb = (struct fw_bind *)malloc(sizeof (struct fw_bind), M_FW, M_NOWAIT); |
661 if(fwb == NULL){ 662 fw_xfer_free(xfer); 663 } 664 xfer->act.hand = fw_vmaccess; 665 xfer->act_type = FWACT_XFER; 666 xfer->fc = fc; 667 xfer->sc = NULL; 668 --- 98 unchanged lines hidden (view full) --- 767{ 768 struct tlabel *tl; 769 int s = splfw(); 770 771 for( tl = STAILQ_FIRST(&fc->tlabels[xfer->tl]); tl != NULL; 772 tl = STAILQ_NEXT(tl, link)){ 773 if(tl->xfer == xfer){ 774 STAILQ_REMOVE(&fc->tlabels[xfer->tl], tl, tlabel, link); | 663 if(fwb == NULL){ 664 fw_xfer_free(xfer); 665 } 666 xfer->act.hand = fw_vmaccess; 667 xfer->act_type = FWACT_XFER; 668 xfer->fc = fc; 669 xfer->sc = NULL; 670 --- 98 unchanged lines hidden (view full) --- 769{ 770 struct tlabel *tl; 771 int s = splfw(); 772 773 for( tl = STAILQ_FIRST(&fc->tlabels[xfer->tl]); tl != NULL; 774 tl = STAILQ_NEXT(tl, link)){ 775 if(tl->xfer == xfer){ 776 STAILQ_REMOVE(&fc->tlabels[xfer->tl], tl, tlabel, link); |
775 free(tl, M_DEVBUF); | 777 free(tl, M_FW); |
776 splx(s); 777 return; 778 } 779 } 780 splx(s); 781 return; 782} 783 --- 22 unchanged lines hidden (view full) --- 806/* 807 * To allocate IEEE1394 XFER structure. 808 */ 809struct fw_xfer * 810fw_xfer_alloc() 811{ 812 struct fw_xfer *xfer; 813 | 778 splx(s); 779 return; 780 } 781 } 782 splx(s); 783 return; 784} 785 --- 22 unchanged lines hidden (view full) --- 808/* 809 * To allocate IEEE1394 XFER structure. 810 */ 811struct fw_xfer * 812fw_xfer_alloc() 813{ 814 struct fw_xfer *xfer; 815 |
814 xfer = malloc(sizeof(struct fw_xfer), M_DEVBUF, M_NOWAIT | M_ZERO); | 816 xfer = malloc(sizeof(struct fw_xfer), M_FW, M_NOWAIT | M_ZERO); |
815 if (xfer == NULL) 816 return xfer; 817 818 xfer->time = time_second; 819 xfer->sub = -1; 820 821 return xfer; 822} --- 43 unchanged lines hidden (view full) --- 866 printf("fw_xfer_free FWXF_START\n"); 867#endif 868 s = splfw(); 869 xfer->q->drain(xfer->fc, xfer); 870 splx(s); 871 } 872 } 873 if(xfer->send.buf != NULL){ | 817 if (xfer == NULL) 818 return xfer; 819 820 xfer->time = time_second; 821 xfer->sub = -1; 822 823 return xfer; 824} --- 43 unchanged lines hidden (view full) --- 868 printf("fw_xfer_free FWXF_START\n"); 869#endif 870 s = splfw(); 871 xfer->q->drain(xfer->fc, xfer); 872 splx(s); 873 } 874 } 875 if(xfer->send.buf != NULL){ |
874 free(xfer->send.buf, M_DEVBUF); | 876 free(xfer->send.buf, M_FW); |
875 } 876 if(xfer->recv.buf != NULL){ | 877 } 878 if(xfer->recv.buf != NULL){ |
877 free(xfer->recv.buf, M_DEVBUF); | 879 free(xfer->recv.buf, M_FW); |
878 } 879 if(xfer->fc != NULL){ 880 fw_tl_free(xfer->fc, xfer); 881 } | 880 } 881 if(xfer->fc != NULL){ 882 fw_tl_free(xfer->fc, xfer); 883 } |
882 free(xfer, M_DEVBUF); | 884 free(xfer, M_FW); |
883} 884 885static void 886fw_asy_callback_free(struct fw_xfer *xfer) 887{ 888#if 0 889 printf("asyreq done state=%d resp=%d\n", 890 xfer->state, xfer->resp); --- 18 unchanged lines hidden (view full) --- 909 xfer = fw_xfer_alloc(); 910 xfer->send.len = 12; 911 xfer->send.off = 0; 912 xfer->fc = fc; 913 xfer->retry_req = fw_asybusy; 914 xfer->act.hand = fw_asy_callback_free; 915 916 xfer->send.buf = malloc(sizeof(u_int32_t), | 885} 886 887static void 888fw_asy_callback_free(struct fw_xfer *xfer) 889{ 890#if 0 891 printf("asyreq done state=%d resp=%d\n", 892 xfer->state, xfer->resp); --- 18 unchanged lines hidden (view full) --- 911 xfer = fw_xfer_alloc(); 912 xfer->send.len = 12; 913 xfer->send.off = 0; 914 xfer->fc = fc; 915 xfer->retry_req = fw_asybusy; 916 xfer->act.hand = fw_asy_callback_free; 917 918 xfer->send.buf = malloc(sizeof(u_int32_t), |
917 M_DEVBUF, M_NOWAIT | M_ZERO); | 919 M_FW, M_NOWAIT | M_ZERO); |
918 fp = (struct fw_pkt *)xfer->send.buf; 919 fp->mode.ld[1] = 0; 920 if (root_node >= 0) 921 fp->mode.ld[1] |= htonl((root_node & 0x3f) << 24 | 1 << 23); 922 if (gap_count >= 0) 923 fp->mode.ld[1] |= htonl(1 << 22 | (gap_count & 0x3f) << 16); 924 fp->mode.ld[2] = ~fp->mode.ld[1]; 925/* XXX Dangerous, how to pass PHY packet to device driver */ --- 135 unchanged lines hidden (view full) --- 1061 } 1062 } else { 1063 fc->status = FWBUSMGRDONE; 1064#if 0 1065 device_printf(fc->bdev, "BMR = %x\n", 1066 CSRARC(fc, BUS_MGR_ID)); 1067#endif 1068 } | 920 fp = (struct fw_pkt *)xfer->send.buf; 921 fp->mode.ld[1] = 0; 922 if (root_node >= 0) 923 fp->mode.ld[1] |= htonl((root_node & 0x3f) << 24 | 1 << 23); 924 if (gap_count >= 0) 925 fp->mode.ld[1] |= htonl(1 << 22 | (gap_count & 0x3f) << 16); 926 fp->mode.ld[2] = ~fp->mode.ld[1]; 927/* XXX Dangerous, how to pass PHY packet to device driver */ --- 135 unchanged lines hidden (view full) --- 1063 } 1064 } else { 1065 fc->status = FWBUSMGRDONE; 1066#if 0 1067 device_printf(fc->bdev, "BMR = %x\n", 1068 CSRARC(fc, BUS_MGR_ID)); 1069#endif 1070 } |
1069 free(buf, M_DEVBUF); | 1071 free(buf, M_FW); |
1070 if(fc->irm == ((CSRARC(fc, NODE_IDS) >> 16 ) & 0x3f)){ 1071 /* I am BMGR */ 1072 fw_bmr(fc); 1073 } 1074 callout_reset(&fc->busprobe_callout, hz/4, 1075 (void *)fw_bus_probe, (void *)fc); 1076} 1077 --- 18 unchanged lines hidden (view full) --- 1096 next = STAILQ_NEXT(fwdev, link); 1097 if (fwdev->status != FWDEVINVAL) { 1098 fwdev->status = FWDEVINVAL; 1099 fwdev->rcnt = 0; 1100 } else if(fwdev->rcnt < FW_MAXDEVRCNT) { 1101 fwdev->rcnt ++; 1102 } else { 1103 STAILQ_REMOVE(&fc->devices, fwdev, fw_device, link); | 1072 if(fc->irm == ((CSRARC(fc, NODE_IDS) >> 16 ) & 0x3f)){ 1073 /* I am BMGR */ 1074 fw_bmr(fc); 1075 } 1076 callout_reset(&fc->busprobe_callout, hz/4, 1077 (void *)fw_bus_probe, (void *)fc); 1078} 1079 --- 18 unchanged lines hidden (view full) --- 1098 next = STAILQ_NEXT(fwdev, link); 1099 if (fwdev->status != FWDEVINVAL) { 1100 fwdev->status = FWDEVINVAL; 1101 fwdev->rcnt = 0; 1102 } else if(fwdev->rcnt < FW_MAXDEVRCNT) { 1103 fwdev->rcnt ++; 1104 } else { 1105 STAILQ_REMOVE(&fc->devices, fwdev, fw_device, link); |
1104 free(fwdev, M_DEVBUF); | 1106 free(fwdev, M_FW); |
1105 } 1106 } 1107 fc->ongonode = 0; 1108 fc->ongoaddr = CSRROMOFF; 1109 fc->ongodev = NULL; 1110 fc->ongoeui.hi = 0xffffffff; fc->ongoeui.lo = 0xffffffff; 1111 fw_bus_explore(fc); 1112 splx(s); --- 47 unchanged lines hidden (view full) --- 1160 fwdev->dst = fc->ongonode; 1161 fwdev->status = FWDEVATTACHED; 1162 fc->ongonode++; 1163 fc->ongoaddr = CSRROMOFF; 1164 fc->ongodev = NULL; 1165 fc->ongoeui.hi = 0xffffffff; fc->ongoeui.lo = 0xffffffff; 1166 goto loop; 1167 } | 1107 } 1108 } 1109 fc->ongonode = 0; 1110 fc->ongoaddr = CSRROMOFF; 1111 fc->ongodev = NULL; 1112 fc->ongoeui.hi = 0xffffffff; fc->ongoeui.lo = 0xffffffff; 1113 fw_bus_explore(fc); 1114 splx(s); --- 47 unchanged lines hidden (view full) --- 1162 fwdev->dst = fc->ongonode; 1163 fwdev->status = FWDEVATTACHED; 1164 fc->ongonode++; 1165 fc->ongoaddr = CSRROMOFF; 1166 fc->ongodev = NULL; 1167 fc->ongoeui.hi = 0xffffffff; fc->ongoeui.lo = 0xffffffff; 1168 goto loop; 1169 } |
1168 fwdev = malloc(sizeof(struct fw_device), M_DEVBUF, M_NOWAIT); | 1170 fwdev = malloc(sizeof(struct fw_device), M_FW, M_NOWAIT); |
1169 if(fwdev == NULL) 1170 return; 1171 fwdev->fc = fc; 1172 fwdev->rommax = 0; 1173 fwdev->dst = fc->ongonode; 1174 fwdev->eui.hi = fc->ongoeui.hi; fwdev->eui.lo = fc->ongoeui.lo; 1175 fwdev->status = FWDEVINIT; 1176#if 0 --- 33 unchanged lines hidden (view full) --- 1210 if(xfer == NULL) goto done; 1211#else 1212 xfer = fw_xfer_alloc(); 1213 if(xfer == NULL){ 1214 goto done; 1215 } 1216 xfer->send.len = 16; 1217 xfer->spd = 0; | 1171 if(fwdev == NULL) 1172 return; 1173 fwdev->fc = fc; 1174 fwdev->rommax = 0; 1175 fwdev->dst = fc->ongonode; 1176 fwdev->eui.hi = fc->ongoeui.hi; fwdev->eui.lo = fc->ongoeui.lo; 1177 fwdev->status = FWDEVINIT; 1178#if 0 --- 33 unchanged lines hidden (view full) --- 1212 if(xfer == NULL) goto done; 1213#else 1214 xfer = fw_xfer_alloc(); 1215 if(xfer == NULL){ 1216 goto done; 1217 } 1218 xfer->send.len = 16; 1219 xfer->spd = 0; |
1218 xfer->send.buf = malloc(16, M_DEVBUF, M_NOWAIT); | 1220 xfer->send.buf = malloc(16, M_FW, M_NOWAIT); |
1219 if(xfer->send.buf == NULL){ 1220 fw_xfer_free( xfer); 1221 return; 1222 } 1223 1224 xfer->send.off = 0; 1225 fp = (struct fw_pkt *)xfer->send.buf; 1226 fp->mode.rreqq.dest_hi = htons(0xffff); --- 34 unchanged lines hidden (view full) --- 1261 int err; 1262 1263 xfer = fw_xfer_alloc(); 1264 if(xfer == NULL){ 1265 return NULL; 1266 } 1267 xfer->send.len = 16; 1268 xfer->spd = spd; /* XXX:min(spd, fc->spd) */ | 1221 if(xfer->send.buf == NULL){ 1222 fw_xfer_free( xfer); 1223 return; 1224 } 1225 1226 xfer->send.off = 0; 1227 fp = (struct fw_pkt *)xfer->send.buf; 1228 fp->mode.rreqq.dest_hi = htons(0xffff); --- 34 unchanged lines hidden (view full) --- 1263 int err; 1264 1265 xfer = fw_xfer_alloc(); 1266 if(xfer == NULL){ 1267 return NULL; 1268 } 1269 xfer->send.len = 16; 1270 xfer->spd = spd; /* XXX:min(spd, fc->spd) */ |
1269 xfer->send.buf = malloc(16, M_DEVBUF, M_NOWAIT); | 1271 xfer->send.buf = malloc(16, M_FW, M_NOWAIT); |
1270 if(xfer->send.buf == NULL){ 1271 fw_xfer_free( xfer); 1272 return NULL; 1273 } 1274 1275 xfer->send.off = 0; 1276 fp = (struct fw_pkt *)xfer->send.buf; 1277 fp->mode.rreqq.dest_hi = htons(addr_hi & 0xffff); --- 312 unchanged lines hidden (view full) --- 1590 s = splfw(); 1591 for( i = 0 ; i < 0x40 ; i ++){ 1592 label = (label + 1) & 0x3f; 1593 for(tmptl = STAILQ_FIRST(&fc->tlabels[label]); 1594 tmptl != NULL; tmptl = STAILQ_NEXT(tmptl, link)){ 1595 if(tmptl->xfer->dst == xfer->dst) break; 1596 } 1597 if(tmptl == NULL) { | 1272 if(xfer->send.buf == NULL){ 1273 fw_xfer_free( xfer); 1274 return NULL; 1275 } 1276 1277 xfer->send.off = 0; 1278 fp = (struct fw_pkt *)xfer->send.buf; 1279 fp->mode.rreqq.dest_hi = htons(addr_hi & 0xffff); --- 312 unchanged lines hidden (view full) --- 1592 s = splfw(); 1593 for( i = 0 ; i < 0x40 ; i ++){ 1594 label = (label + 1) & 0x3f; 1595 for(tmptl = STAILQ_FIRST(&fc->tlabels[label]); 1596 tmptl != NULL; tmptl = STAILQ_NEXT(tmptl, link)){ 1597 if(tmptl->xfer->dst == xfer->dst) break; 1598 } 1599 if(tmptl == NULL) { |
1598 tl = malloc(sizeof(struct tlabel),M_DEVBUF,M_NOWAIT); | 1600 tl = malloc(sizeof(struct tlabel),M_FW,M_NOWAIT); |
1599 if (tl == NULL) { 1600 splx(s); 1601 return (-1); 1602 } 1603 tl->xfer = xfer; 1604 STAILQ_INSERT_TAIL(&fc->tlabels[label], tl, link); 1605 splx(s); 1606 return(label); --- 98 unchanged lines hidden (view full) --- 1705 printf("fw_rcv: cannot response(bus reset)!\n"); 1706 goto err; 1707 } 1708 xfer = fw_xfer_alloc(); 1709 if(xfer == NULL){ 1710 return; 1711 } 1712 xfer->spd = spd; | 1601 if (tl == NULL) { 1602 splx(s); 1603 return (-1); 1604 } 1605 tl->xfer = xfer; 1606 STAILQ_INSERT_TAIL(&fc->tlabels[label], tl, link); 1607 splx(s); 1608 return(label); --- 98 unchanged lines hidden (view full) --- 1707 printf("fw_rcv: cannot response(bus reset)!\n"); 1708 goto err; 1709 } 1710 xfer = fw_xfer_alloc(); 1711 if(xfer == NULL){ 1712 return; 1713 } 1714 xfer->spd = spd; |
1713 xfer->send.buf = malloc(16, M_DEVBUF, M_NOWAIT); | 1715 xfer->send.buf = malloc(16, M_FW, M_NOWAIT); |
1714 resfp = (struct fw_pkt *)xfer->send.buf; 1715 switch(fp->mode.common.tcode){ 1716 case FWTCODE_WREQQ: 1717 case FWTCODE_WREQB: 1718 resfp->mode.hdr.tcode = FWTCODE_WRES; 1719 xfer->send.len = 12; 1720 break; 1721 case FWTCODE_RREQQ: --- 111 unchanged lines hidden (view full) --- 1833 return; 1834 break; 1835 } 1836 default: 1837 printf("fw_rcv: unknow tcode\n"); 1838 break; 1839 } 1840err: | 1716 resfp = (struct fw_pkt *)xfer->send.buf; 1717 switch(fp->mode.common.tcode){ 1718 case FWTCODE_WREQQ: 1719 case FWTCODE_WREQB: 1720 resfp->mode.hdr.tcode = FWTCODE_WRES; 1721 xfer->send.len = 12; 1722 break; 1723 case FWTCODE_RREQQ: --- 111 unchanged lines hidden (view full) --- 1835 return; 1836 break; 1837 } 1838 default: 1839 printf("fw_rcv: unknow tcode\n"); 1840 break; 1841 } 1842err: |
1841 free(buf, M_DEVBUF); | 1843 free(buf, M_FW); |
1842} 1843 1844/* 1845 * Post process for Bus Manager election process. 1846 */ 1847static void 1848fw_try_bmr_callback(struct fw_xfer *xfer) 1849{ --- 43 unchanged lines hidden (view full) --- 1893 int err = 0; 1894 1895 xfer = fw_xfer_alloc(); 1896 if(xfer == NULL){ 1897 return; 1898 } 1899 xfer->send.len = 24; 1900 xfer->spd = 0; | 1844} 1845 1846/* 1847 * Post process for Bus Manager election process. 1848 */ 1849static void 1850fw_try_bmr_callback(struct fw_xfer *xfer) 1851{ --- 43 unchanged lines hidden (view full) --- 1895 int err = 0; 1896 1897 xfer = fw_xfer_alloc(); 1898 if(xfer == NULL){ 1899 return; 1900 } 1901 xfer->send.len = 24; 1902 xfer->spd = 0; |
1901 xfer->send.buf = malloc(24, M_DEVBUF, M_NOWAIT); | 1903 xfer->send.buf = malloc(24, M_FW, M_NOWAIT); |
1902 if(xfer->send.buf == NULL){ 1903 fw_xfer_free( xfer); 1904 return; 1905 } 1906 1907 fc->status = FWBUSMGRELECT; 1908 1909 xfer->send.off = 0; --- 41 unchanged lines hidden (view full) --- 1951 if(xfer->recv.buf == NULL){ 1952 fw_xfer_free( xfer); 1953 return; 1954 } 1955 rfp = (struct fw_pkt *)xfer->recv.buf; 1956 switch(rfp->mode.hdr.tcode){ 1957 /* XXX need fix for 64bit arch */ 1958 case FWTCODE_WREQB: | 1904 if(xfer->send.buf == NULL){ 1905 fw_xfer_free( xfer); 1906 return; 1907 } 1908 1909 fc->status = FWBUSMGRELECT; 1910 1911 xfer->send.off = 0; --- 41 unchanged lines hidden (view full) --- 1953 if(xfer->recv.buf == NULL){ 1954 fw_xfer_free( xfer); 1955 return; 1956 } 1957 rfp = (struct fw_pkt *)xfer->recv.buf; 1958 switch(rfp->mode.hdr.tcode){ 1959 /* XXX need fix for 64bit arch */ 1960 case FWTCODE_WREQB: |
1959 xfer->send.buf = malloc(12, M_DEVBUF, M_NOWAIT); | 1961 xfer->send.buf = malloc(12, M_FW, M_NOWAIT); |
1960 xfer->send.len = 12; 1961 sfp = (struct fw_pkt *)xfer->send.buf; 1962 bcopy(rfp->mode.wreqb.payload, 1963 (caddr_t)ntohl(rfp->mode.wreqb.dest_lo), ntohs(rfp->mode.wreqb.len)); 1964 sfp->mode.wres.tcode = FWTCODE_WRES; 1965 sfp->mode.wres.rtcode = 0; 1966 break; 1967 case FWTCODE_WREQQ: | 1962 xfer->send.len = 12; 1963 sfp = (struct fw_pkt *)xfer->send.buf; 1964 bcopy(rfp->mode.wreqb.payload, 1965 (caddr_t)ntohl(rfp->mode.wreqb.dest_lo), ntohs(rfp->mode.wreqb.len)); 1966 sfp->mode.wres.tcode = FWTCODE_WRES; 1967 sfp->mode.wres.rtcode = 0; 1968 break; 1969 case FWTCODE_WREQQ: |
1968 xfer->send.buf = malloc(12, M_DEVBUF, M_NOWAIT); | 1970 xfer->send.buf = malloc(12, M_FW, M_NOWAIT); |
1969 xfer->send.len = 12; 1970 sfp->mode.wres.tcode = FWTCODE_WRES; 1971 *((u_int32_t *)(ntohl(rfp->mode.wreqb.dest_lo))) = rfp->mode.wreqq.data; 1972 sfp->mode.wres.rtcode = 0; 1973 break; 1974 case FWTCODE_RREQB: | 1971 xfer->send.len = 12; 1972 sfp->mode.wres.tcode = FWTCODE_WRES; 1973 *((u_int32_t *)(ntohl(rfp->mode.wreqb.dest_lo))) = rfp->mode.wreqq.data; 1974 sfp->mode.wres.rtcode = 0; 1975 break; 1976 case FWTCODE_RREQB: |
1975 xfer->send.buf = malloc(16 + rfp->mode.rreqb.len, M_DEVBUF, M_NOWAIT); | 1977 xfer->send.buf = malloc(16 + rfp->mode.rreqb.len, M_FW, M_NOWAIT); |
1976 xfer->send.len = 16 + ntohs(rfp->mode.rreqb.len); 1977 sfp = (struct fw_pkt *)xfer->send.buf; 1978 bcopy((caddr_t)ntohl(rfp->mode.rreqb.dest_lo), 1979 sfp->mode.rresb.payload, (u_int16_t)ntohs(rfp->mode.rreqb.len)); 1980 sfp->mode.rresb.tcode = FWTCODE_RRESB; 1981 sfp->mode.rresb.len = rfp->mode.rreqb.len; 1982 sfp->mode.rresb.rtcode = 0; 1983 sfp->mode.rresb.extcode = 0; 1984 break; 1985 case FWTCODE_RREQQ: | 1978 xfer->send.len = 16 + ntohs(rfp->mode.rreqb.len); 1979 sfp = (struct fw_pkt *)xfer->send.buf; 1980 bcopy((caddr_t)ntohl(rfp->mode.rreqb.dest_lo), 1981 sfp->mode.rresb.payload, (u_int16_t)ntohs(rfp->mode.rreqb.len)); 1982 sfp->mode.rresb.tcode = FWTCODE_RRESB; 1983 sfp->mode.rresb.len = rfp->mode.rreqb.len; 1984 sfp->mode.rresb.rtcode = 0; 1985 sfp->mode.rresb.extcode = 0; 1986 break; 1987 case FWTCODE_RREQQ: |
1986 xfer->send.buf = malloc(16, M_DEVBUF, M_NOWAIT); | 1988 xfer->send.buf = malloc(16, M_FW, M_NOWAIT); |
1987 xfer->send.len = 16; 1988 sfp = (struct fw_pkt *)xfer->send.buf; 1989 sfp->mode.rresq.data = *(u_int32_t *)(ntohl(rfp->mode.rreqq.dest_lo)); 1990 sfp->mode.wres.tcode = FWTCODE_RRESQ; 1991 sfp->mode.rresb.rtcode = 0; 1992 break; 1993 default: 1994 fw_xfer_free( xfer); --- 68 unchanged lines hidden --- | 1989 xfer->send.len = 16; 1990 sfp = (struct fw_pkt *)xfer->send.buf; 1991 sfp->mode.rresq.data = *(u_int32_t *)(ntohl(rfp->mode.rreqq.dest_lo)); 1992 sfp->mode.wres.tcode = FWTCODE_RRESQ; 1993 sfp->mode.rresb.rtcode = 0; 1994 break; 1995 default: 1996 fw_xfer_free( xfer); --- 68 unchanged lines hidden --- |