firewire.c (277507) | firewire.c (277508) |
---|---|
1/*- 2 * Copyright (c) 2003 Hidetoshi Shimokawa 3 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 19 unchanged lines hidden (view full) --- 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 30 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 * POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35#include <sys/cdefs.h> | 1/*- 2 * Copyright (c) 2003 Hidetoshi Shimokawa 3 * Copyright (c) 1998-2002 Katsushi Kobayashi and Hidetoshi Shimokawa 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: --- 19 unchanged lines hidden (view full) --- 28 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 29 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 30 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 31 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 32 * POSSIBILITY OF SUCH DAMAGE. 33 */ 34 35#include <sys/cdefs.h> |
36__FBSDID("$FreeBSD: head/sys/dev/firewire/firewire.c 277507 2015-01-21 20:02:16Z will $"); | 36__FBSDID("$FreeBSD: head/sys/dev/firewire/firewire.c 277508 2015-01-21 20:03:46Z will $"); |
37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/types.h> 41 42#include <sys/jail.h> 43#include <sys/kernel.h> 44#include <sys/module.h> --- 711 unchanged lines hidden (view full) --- 756 * does not change it's Bus Info Block or 757 * Configuration ROM. 758 */ 759#define FW_MAX_GENERATION 0xF 760 newrom = malloc(CROMSIZE, M_FW, M_NOWAIT | M_ZERO); 761 src = &fc->crom_src_buf->src; 762 crom_load(src, newrom, CROMSIZE); 763 if (bcmp(newrom, fc->config_rom, CROMSIZE) != 0) { | 37 38#include <sys/param.h> 39#include <sys/systm.h> 40#include <sys/types.h> 41 42#include <sys/jail.h> 43#include <sys/kernel.h> 44#include <sys/module.h> --- 711 unchanged lines hidden (view full) --- 756 * does not change it's Bus Info Block or 757 * Configuration ROM. 758 */ 759#define FW_MAX_GENERATION 0xF 760 newrom = malloc(CROMSIZE, M_FW, M_NOWAIT | M_ZERO); 761 src = &fc->crom_src_buf->src; 762 crom_load(src, newrom, CROMSIZE); 763 if (bcmp(newrom, fc->config_rom, CROMSIZE) != 0) { |
764 if (src->businfo.generation++ > FW_MAX_GENERATION) | 764 /* Bump generation and reload. */ 765 src->businfo.generation++; 766 767 /* Handle generation count wraps. */ 768 if (src->businfo.generation < FW_GENERATION_CHANGEABLE) |
765 src->businfo.generation = FW_GENERATION_CHANGEABLE; | 769 src->businfo.generation = FW_GENERATION_CHANGEABLE; |
770 771 /* Recalculate CRC to account for generation change. */ 772 crom_load(src, newrom, CROMSIZE); |
|
766 bcopy(newrom, fc->config_rom, CROMSIZE); 767 } 768 free(newrom, M_FW); 769} 770 771/* Call once after reboot */ 772void fw_init(struct firewire_comm *fc) 773{ --- 377 unchanged lines hidden (view full) --- 1151} 1152 1153void 1154fw_xfer_unload(struct fw_xfer *xfer) 1155{ 1156 1157 if (xfer == NULL) 1158 return; | 773 bcopy(newrom, fc->config_rom, CROMSIZE); 774 } 775 free(newrom, M_FW); 776} 777 778/* Call once after reboot */ 779void fw_init(struct firewire_comm *fc) 780{ --- 377 unchanged lines hidden (view full) --- 1158} 1159 1160void 1161fw_xfer_unload(struct fw_xfer *xfer) 1162{ 1163 1164 if (xfer == NULL) 1165 return; |
1159 FW_GLOCK(xfer->fc); 1160 if (xfer->flag & FWXF_INQ) { 1161 STAILQ_REMOVE(&xfer->q->q, xfer, fw_xfer, link); 1162 xfer->flag &= ~FWXF_INQ; 1163#if 0 1164 xfer->q->queued--; 1165#endif 1166 } 1167 FW_GUNLOCK(xfer->fc); | 1166 |
1168 if (xfer->fc != NULL) { | 1167 if (xfer->fc != NULL) { |
1168 FW_GLOCK(xfer->fc); 1169 if (xfer->flag & FWXF_INQ) { 1170 STAILQ_REMOVE(&xfer->q->q, xfer, fw_xfer, link); 1171 xfer->flag &= ~FWXF_INQ; 1172 #if 0 1173 xfer->q->queued--; 1174 #endif 1175 } 1176 FW_GUNLOCK(xfer->fc); 1177 |
|
1169 /* 1170 * Ensure that any tlabel owner can't access this 1171 * xfer after it's freed. 1172 */ 1173 fw_tl_free(xfer->fc, xfer); 1174#if 1 1175 if (xfer->flag & FWXF_START) 1176 /* --- 1205 unchanged lines hidden --- | 1178 /* 1179 * Ensure that any tlabel owner can't access this 1180 * xfer after it's freed. 1181 */ 1182 fw_tl_free(xfer->fc, xfer); 1183#if 1 1184 if (xfer->flag & FWXF_START) 1185 /* --- 1205 unchanged lines hidden --- |