mirror of
https://github.com/opnsense/src.git
synced 2026-04-01 07:25:10 -04:00
incorporate some notion of which revision the device is. If it's < SCSI2, for example, READ BLOCK LIMITS is not a MANDATORY command. At any rate, the initial state is to try and read block limits to get a notion of the smallest and largest record size as well as the granularity. However, this doesn't mean that the device should actually *in* fixed block mode should the max && min be equal... *That* choice is (for now) determined by whether the device comes up with a blocksize of nonzero. If so, then it's a fixed block preferred device, otherwise not (this will change again soon). When actually doing I/O, and you're in fixed length mode, the block count is *not* the byte count divided by the minimum block size- it's the byte count divided by the current blocksize (or use shift/mask shortcuts if that worked out...). Then when you *change* the blocksize via an ioctl, make sure this actually propagates to the stored notion of blocksize (and update the shift/mask shortcuts). Misc Other: When doing a mode select, only use the SCSI_SAME_DENSITY (0x7f) code if the device is >= SCSI2- otherwise just use the saved density code. Recover from the ripple of ILLEGAL REQUEST not being 'retried' in that RESERVE/RELEASE is not a mandatory command for < SCSI2 (so ignore it if it fails). |
||
|---|---|---|
| .. | ||
| scsi | ||
| cam.c | ||
| cam.h | ||
| cam_ccb.h | ||
| cam_conf.h | ||
| cam_debug.h | ||
| cam_extend.c | ||
| cam_extend.h | ||
| cam_periph.c | ||
| cam_periph.h | ||
| cam_queue.c | ||
| cam_queue.h | ||
| cam_sim.c | ||
| cam_sim.h | ||
| cam_xpt.c | ||
| cam_xpt.h | ||
| cam_xpt_periph.h | ||
| cam_xpt_sim.h | ||