diff options
author | simokawa <simokawa@FreeBSD.org> | 2003-02-27 12:51:24 +0000 |
---|---|---|
committer | simokawa <simokawa@FreeBSD.org> | 2003-02-27 12:51:24 +0000 |
commit | 15b70bcd2e4f67772c1a7611a7f17d291acbff3f (patch) | |
tree | 9dc6d0572414885de0d9b6a17ee7854130b3e2e9 /sys/dev/firewire/firewire.c | |
parent | 6eb790939b8d733c0cad2a9b724d11fb1c5c344e (diff) | |
download | FreeBSD-src-15b70bcd2e4f67772c1a7611a7f17d291acbff3f.zip FreeBSD-src-15b70bcd2e4f67772c1a7611a7f17d291acbff3f.tar.gz |
MFp4(simokawa_sbp branch)
Improve SBP device probeing:
- Wait 2 sec before issuing LOGIN ORB expecting the reconnection
hold timer expires.
- Serialize management ORB and scanning LUN by CAM on each target.
This should fix the problem for devices which have multiple LUNs.
Test device is donated by: Jaye Mathisen <mrcpu@internetcds.com>
- Freeze SIM queue for 2 sec after BUS RESET.
- Retry with LOGIN rather than RECONNECT after LOGIN is not completed for
BUS RESET.
- Use appropriate CAM status for BUS RESET and DEVICE RESET.
- Let CAM to scan targets after BUS REST.
- Implement CAM scan target function.
- Keep our own devq freeze count.
- Let CAM to know that SBP does tagged queuing.
These should be merged to RELENG_4 before 4.8-RELEASE.
Diffstat (limited to 'sys/dev/firewire/firewire.c')
-rw-r--r-- | sys/dev/firewire/firewire.c | 12 |
1 files changed, 4 insertions, 8 deletions
diff --git a/sys/dev/firewire/firewire.c b/sys/dev/firewire/firewire.c index b25ede6..afd65e5 100644 --- a/sys/dev/firewire/firewire.c +++ b/sys/dev/firewire/firewire.c @@ -423,11 +423,6 @@ firewire_attach( device_t dev ) #else sc->dev[i] = d; #endif -#if __FreeBSD_version >= 500000 -#define CALLOUT_INIT(x) callout_init(x, 0 /* mpsafe */) -#else -#define CALLOUT_INIT(x) callout_init(x) -#endif CALLOUT_INIT(&sc->fc->timeout_callout); CALLOUT_INIT(&sc->fc->bmr_callout); CALLOUT_INIT(&sc->fc->retry_probe_callout); @@ -1787,13 +1782,14 @@ fw_rcv(struct firewire_comm* fc, caddr_t buf, u_int len, u_int sub, u_int off, u ntohl(fp->mode.rreqq.dest_lo)); if(bind == NULL){ #if __FreeBSD_version >= 500000 - printf("Unknown service addr 0x%08x:0x%08x tcode=%x\n", + printf("Unknown service addr 0x%08x:0x%08x tcode=%x\n src=0x%x", #else - printf("Unknown service addr 0x%08x:0x%08lx tcode=%x\n", + printf("Unknown service addr 0x%08x:0x%08lx tcode=%x src=0x%x\n", #endif ntohs(fp->mode.rreqq.dest_hi), ntohl(fp->mode.rreqq.dest_lo), - fp->mode.common.tcode); + fp->mode.common.tcode, + fp->mode.hdr.src); if (fc->status == FWBUSRESET) { printf("fw_rcv: cannot respond(bus reset)!\n"); goto err; |