Author: will
Date: Wed Jun 22 21:43:10 2011
New Revision: 223443
URL: http://svn.freebsd.org/changeset/base/223443

Log:
  Plumb support for the device advanced information CCB in the ATA XPT.
  
  This was previously done only for SCSI XPT in r223081, on which the change
  in r223089 depended in order to respond to serial number requests.  As a
  result of r223089, da(4) and ada(4) devices register a d_getattr for geom to
  use to obtain the information.
  
  Reported by:  ache
  Reviewed by:  ken

Modified:
  head/sys/cam/ata/ata_xpt.c

Modified: head/sys/cam/ata/ata_xpt.c
==============================================================================
--- head/sys/cam/ata/ata_xpt.c  Wed Jun 22 21:18:37 2011        (r223442)
+++ head/sys/cam/ata/ata_xpt.c  Wed Jun 22 21:43:10 2011        (r223443)
@@ -1601,6 +1601,34 @@ ata_device_transport(struct cam_path *pa
 }
 
 static void
+ata_dev_advinfo(union ccb *start_ccb)
+{
+       struct cam_ed *device;
+       struct ccb_dev_advinfo *cdai;
+       off_t amt; 
+
+       start_ccb->ccb_h.status = CAM_REQ_INVALID;
+       device = start_ccb->ccb_h.path->device;
+       cdai = &start_ccb->cdai;
+       switch(cdai->buftype) {
+       case CDAI_TYPE_SERIAL_NUM:
+               if (cdai->flags & CDAI_FLAG_STORE)
+                       break;
+               start_ccb->ccb_h.status = CAM_REQ_CMP;
+               cdai->provsiz = device->serial_num_len;
+               if (device->serial_num_len == 0)
+                       break;
+               amt = device->serial_num_len;
+               if (cdai->provsiz > cdai->bufsiz)
+                       amt = cdai->bufsiz;
+               memcpy(cdai->buf, device->serial_num, amt);
+               break;
+       default:
+               break;
+       }
+}
+
+static void
 ata_action(union ccb *start_ccb)
 {
 
@@ -1652,6 +1680,11 @@ ata_action(union ccb *start_ccb)
                }
                /* FALLTHROUGH */
        }
+       case XPT_DEV_ADVINFO:
+       {
+               ata_dev_advinfo(start_ccb);
+               break;
+       }
        default:
                xpt_action_default(start_ccb);
                break;
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to