HEADS UP: CAM API change, 2TB device support

Kenneth D. Merry ken at kdm.org
Tue Apr 29 17:40:31 PDT 2003


I have checked in the patches I sent out on Sunday.  We now have (untested)
support for devices larger than 2TB in CAM.

There should be no effect on devices smaller than 2TB.

There are some API changes that went along with this change, so you'll need
to recompile any applications that talk to pass(4) or xpt(4).  (camcontrol,
cdrecord, xmcd, cdda2wav, etc.)

Let me know if you run into any problems with this change.

If you've got an array that is larger than 2TB, please try these changes
out and let me know how they work.

Ken

----- Forwarded message from "Kenneth D. Merry" <ken at FreeBSD.org> -----

From: "Kenneth D. Merry" <ken at FreeBSD.org>
Date: Tue, 29 Apr 2003 17:35:22 -0700 (PDT)
To: src-committers at FreeBSD.org, cvs-src at FreeBSD.org, cvs-all at FreeBSD.org
Subject: cvs commit: src/sys/cam cam_ccb.h src/sys/cam/scsi scsi_all.c
         scsi_all.h scsi_da.c

ken         2003/04/29 17:35:22 PDT

  FreeBSD src repository

  Modified files:
    sys/cam              cam_ccb.h 
    sys/cam/scsi         scsi_all.c scsi_all.h scsi_da.c 
  Log:
  Add support to CAM for devices with more than 2^32 blocks.  (2TB if you're
  using 512 byte blocks).
  
  cam_ccb.h:      Bump up volume_size and cylinders in ccb_calc_geometry to
                  64 bits and 32 bits respectively, so we can hold larger
                  device sizes.  cylinders would overflow at about 500GB.
                  Bump CAM_VERSION for this change.  Note that this will
                  require a recompile of all applications that talk to the
                  pass(4) driver.
  
  scsi_all.c:     Add descriptions for READ/WRITE(16), update READ/WRITE(12)
                  descriptions, add descriptions for SERVICE ACTION IN/OUT.
                  Add a new function, scsi_read_capacity_16(), that issues
                  the read capacity service action.  (Necessary for arrays
                  larger than 2^32 sectors.)  Update scsi_read_write() to use
                  a 64 bit LBA and issue READ(16) or WRITE(16) if necessary.
                  NOTE the API change.  This should be largely transparnet
                  to most userland applications at compile time, but will
                  break binary compatibility.  The CAM_VERSION bump, above,
                  also serves the purpose of forcing a recompile for any
                  applications that talk to CAM.
  
  scsi_all.h:     Add 16 byte READ/WRITE structures, structures for 16 byte
                  READ CAPACITY/SERVICE ACTION IN.  Add scsi_u64to8b() and
                  scsi_8btou64.
  
  scsi_da.c:      The da(4) driver probe now has two stages for devices
                  larger than 2TB.  If a standard READ CAPACITY(10) returns
                  0xffffffff, we issue the 16 byte version of read capacity
                  to determine the true array capacity.  We also do the same
                  thing in daopen() -- use the 16 byte read capacity if the
                  device is large enough.
  
                  The sysctl/loader code has also been updated to accept
                  16 bytes as a minimum command size.
  
  Revision  Changes    Path
  1.24      +3 -3      src/sys/cam/cam_ccb.h
  1.40      +68 -14    src/sys/cam/scsi/scsi_all.c
  1.23      +82 -6     src/sys/cam/scsi/scsi_all.h
  1.139     +194 -65   src/sys/cam/scsi/scsi_da.c

----- End forwarded message -----

-- 
Kenneth Merry
ken at kdm.org


More information about the freebsd-scsi mailing list