Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 16 May 2003 10:57:07 -0700 (PDT)
From:      Nate Lawson <nate@root.org>
To:        scsi@freebsd.org
Subject:   PATCH: merge calc geometry calls into convenience function
Message-ID:  <20030516105356.E82960@root.org>

next in thread | raw e-mail | index | archive | help
Left out of this are aha(4) and bt(4) although they probably should be
added.  They use a 2G/1G/<1G scheme.

---
Merge common XPT_CALC_GEOMETRY functions into a single convenience function.
Devices below may experience a change in geometry.

* Due to a bug, aic(4) never used extended geometry.  Changes all drives
  >1G to now use extended translation.
* sbp(4) drives exactly 1 GB in size now no longer use extended geometry.
* umass(4) drives exactly 1 GB in size now no longer use extended geometry.

For all other controllers in this commit, this should be a no-op.
---

Index: sys/cam/cam.c
===================================================================
RCS file: /home/ncvs/src/sys/cam/cam.c,v
retrieving revision 1.5
diff -u -r1.5 cam.c
--- sys/cam/cam.c	9 Jan 2002 03:38:58 -0000	1.5
+++ sys/cam/cam.c	14 May 2003 22:16:17 -0000
@@ -358,3 +358,28 @@
 }

 #endif /* _KERNEL/!_KERNEL */
+
+/*
+ * Common calculate geometry fuction
+ *
+ * Caller should set ccg->volume_size and block_size.
+ * The extended parameter should be zero if extended translation
+ * should not be used.
+ */
+void
+cam_calc_geometry(struct ccb_calc_geometry *ccg, int extended)
+{
+	uint32_t size_mb, secs_per_cylinder;
+
+	size_mb = ccg->volume_size / ((1024L * 1024L) / ccg->block_size);
+	if (size_mb > 1024 && extended) {
+		ccg->heads = 255;
+		ccg->secs_per_track = 63;
+	} else {
+		ccg->heads = 64;
+		ccg->secs_per_track = 32;
+	}
+	secs_per_cylinder = ccg->heads * ccg->secs_per_track;
+	ccg->cylinders = ccg->volume_size / secs_per_cylinder;
+	ccg->ccb_h.status = CAM_REQ_CMP;
+}
Index: sys/cam/cam_ccb.h
===================================================================
RCS file: /home/ncvs/src/sys/cam/cam_ccb.h,v
retrieving revision 1.23
diff -u -r1.23 cam_ccb.h
--- sys/cam/cam_ccb.h	29 Apr 2003 13:35:58 -0000	1.23
+++ sys/cam/cam_ccb.h	14 May 2003 22:46:49 -0000
@@ -794,6 +794,7 @@
 	u_int8_t  heads;
 	u_int8_t  secs_per_track;
 };
+void	cam_calc_geometry(struct ccb_calc_geometry *ccg, int extended);

 /*
  * Rescan the given bus, or bus/target/lun
Index: sys/cam/scsi/scsi_low.c
===================================================================
RCS file: /home/ncvs/src/sys/cam/scsi/scsi_low.c,v
retrieving revision 1.19
diff -u -r1.19 scsi_low.c
--- sys/cam/scsi/scsi_low.c	8 Mar 2003 08:01:26 -0000	1.19
+++ sys/cam/scsi/scsi_low.c	16 May 2003 01:45:45 -0000
@@ -1282,26 +1282,7 @@
 	}

 	case XPT_CALC_GEOMETRY: { /* not yet HN2 */
-		struct	  ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-		int       extended;
-
-		extended = 1;
-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-
-		if (size_mb > 1024 && extended) {
-		        ccg->heads = 255;
-		        ccg->secs_per_track = 63;
-		} else {
-		        ccg->heads = 64;
-		        ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/advansys/advansys.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/advansys/advansys.c,v
retrieving revision 1.23
diff -u -r1.23 advansys.c
--- sys/dev/advansys/advansys.c	10 Apr 2003 23:50:05 -0000	1.23
+++ sys/dev/advansys/advansys.c	16 May 2003 01:46:37 -0000
@@ -431,26 +431,10 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
 		int	  extended;

-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
 		extended = (adv->control & ADV_CNTL_BIOS_GT_1GB) != 0;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, extended);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/advansys/adwcam.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/advansys/adwcam.c,v
retrieving revision 1.14
diff -u -r1.14 adwcam.c
--- sys/dev/advansys/adwcam.c	10 Apr 2003 23:50:05 -0000	1.14
+++ sys/dev/advansys/adwcam.c	16 May 2003 01:47:03 -0000
@@ -724,30 +724,11 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-		int	  extended;
-
 		/*
 		 * XXX Use Adaptec translation until I find out how to
 		 *     get this information from the card.
 		 */
-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-		extended = 1;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/ahb/ahb.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ahb/ahb.c,v
retrieving revision 1.27
diff -u -r1.27 ahb.c
--- sys/dev/ahb/ahb.c	10 Apr 2003 23:50:05 -0000	1.27
+++ sys/dev/ahb/ahb.c	16 May 2003 07:36:31 -0000
@@ -1171,24 +1171,7 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-
-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-
-		if (size_mb > 1024 && (ahb->extended_trans != 0)) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, ahb->extended_trans);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/aic/aic.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/aic/aic.c,v
retrieving revision 1.18
diff -u -r1.18 aic.c
--- sys/dev/aic/aic.c	28 Sep 2002 17:14:21 -0000	1.18
+++ sys/dev/aic/aic.c	16 May 2003 07:53:15 -0000
@@ -254,25 +254,7 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-		int extended = 0;
-
-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-
-		if (size_mb >= 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/aic7xxx/aic79xx_osm.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/aic7xxx/aic79xx_osm.c,v
retrieving revision 1.10
diff -u -r1.10 aic79xx_osm.c
--- sys/dev/aic7xxx/aic79xx_osm.c	10 Apr 2003 23:50:05 -0000	1.10
+++ sys/dev/aic7xxx/aic79xx_osm.c	16 May 2003 01:49:46 -0000
@@ -550,26 +550,10 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
-		uint32_t size_mb;
-		uint32_t secs_per_cylinder;
 		int	  extended;

-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
 		extended = ahd->flags & AHD_EXTENDED_TRANS_A;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, extended);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/aic7xxx/aic7xxx_osm.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/aic7xxx/aic7xxx_osm.c,v
retrieving revision 1.33
diff -u -r1.33 aic7xxx_osm.c
--- sys/dev/aic7xxx/aic7xxx_osm.c	10 Apr 2003 23:50:05 -0000	1.33
+++ sys/dev/aic7xxx/aic7xxx_osm.c	14 May 2003 22:16:43 -0000
@@ -819,28 +819,12 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
-		uint32_t size_mb;
-		uint32_t secs_per_cylinder;
 		int	  extended;

-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
 		extended = SIM_IS_SCSIBUS_B(ahc, sim)
 			? ahc->flags & AHC_EXTENDED_TRANS_B
 			: ahc->flags & AHC_EXTENDED_TRANS_A;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, extended);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/amr/amr_cam.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/amr/amr_cam.c,v
retrieving revision 1.7
diff -u -r1.7 amr_cam.c
--- sys/dev/amr/amr_cam.c	1 Apr 2003 15:06:22 -0000	1.7
+++ sys/dev/amr/amr_cam.c	16 May 2003 01:51:17 -0000
@@ -265,22 +265,7 @@

     case XPT_CALC_GEOMETRY:
     {
-	struct    ccb_calc_geometry *ccg = &ccb->ccg;
-	u_int32_t size_in_mb;
-	u_int32_t secs_per_cylinder;
-
-	size_in_mb = ccg->volume_size / ((1024L * 1024L) / ccg->block_size);
-
-	if (size_in_mb > 1024) {
-	    ccg->heads = 255;
-	    ccg->secs_per_track = 63;
-	} else {
-	    ccg->heads = 64;
-	    ccg->secs_per_track = 32;
-	}
-	secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-	ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-	ccb->ccb_h.status = CAM_REQ_CMP;
+	cam_calc_geometry(&ccb->ccg, /*extended*/1);
 	break;
     }

Index: sys/dev/ata/atapi-cam.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ata/atapi-cam.c,v
retrieving revision 1.15
diff -u -r1.15 atapi-cam.c
--- sys/dev/ata/atapi-cam.c	8 Mar 2003 08:01:28 -0000	1.15
+++ sys/dev/ata/atapi-cam.c	16 May 2003 01:52:04 -0000
@@ -323,26 +323,8 @@
     }

     case XPT_CALC_GEOMETRY: {
-	struct ccb_calc_geometry *ccg;
-	unsigned int size_mb;
-	unsigned int secs_per_cylinder;
-	int extended;
-
 	CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_SUBTRACE, ("CALC_GEOMETRY\n"));
-	ccg = &ccb->ccg;
-	size_mb = ccg->volume_size / ((1024L * 1024L) / ccg->block_size);
-	extended = 1;
-
-	if (size_mb > 1024 && extended) {
-	    ccg->heads = 255;
-	    ccg->secs_per_track = 63;
-	} else {
-	    ccg->heads = 64;
-	    ccg->secs_per_track = 32;
-	}
-	secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-	ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-	ccb->ccb_h.status = CAM_REQ_CMP;
+	cam_calc_geometry(&ccb->ccg, /*extended*/1);
 	xpt_done(ccb);
 	return;
     }
Index: sys/dev/dpt/dpt_scsi.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/dpt/dpt_scsi.c,v
retrieving revision 1.41
diff -u -r1.41 dpt_scsi.c
--- sys/dev/dpt/dpt_scsi.c	10 Apr 2003 23:50:05 -0000	1.41
+++ sys/dev/dpt/dpt_scsi.c	16 May 2003 01:53:27 -0000
@@ -1034,30 +1034,11 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct	  ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-		int	  extended;
-
 		/*
 		 * XXX Use Adaptec translation until I find out how to
 		 *     get this information from the card.
 		 */
-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-		extended = 1;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&ccb->ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/firewire/sbp.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/firewire/sbp.c,v
retrieving revision 1.43
diff -u -r1.43 sbp.c
--- sys/dev/firewire/sbp.c	24 Apr 2003 15:27:06 -0000	1.43
+++ sys/dev/firewire/sbp.c	16 May 2003 01:54:46 -0000
@@ -2222,11 +2222,8 @@
 	case XPT_CALC_GEOMETRY:
 	{
 		struct ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-		int extended = 1;
-		ccg = &ccb->ccg;

+		ccg = &ccb->ccg;
 		if (ccg->block_size == 0) {
 			printf("sbp_action1: block_size is 0.\n");
 			ccb->ccb_h.status = CAM_REQ_INVALID;
@@ -2241,19 +2238,7 @@
 			ccg->volume_size);
 END_DEBUG

-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-
-		if (size_mb >= 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/isp/isp_freebsd.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/isp/isp_freebsd.c,v
retrieving revision 1.89
diff -u -r1.89 isp_freebsd.c
--- sys/dev/isp/isp_freebsd.c	3 Mar 2003 12:15:42 -0000	1.89
+++ sys/dev/isp/isp_freebsd.c	16 May 2003 07:48:13 -0000
@@ -2532,8 +2532,6 @@
 	case XPT_CALC_GEOMETRY:
 	{
 		struct ccb_calc_geometry *ccg;
-		u_int32_t secs_per_cylinder;
-		u_int32_t size_mb;

 		ccg = &ccb->ccg;
 		if (ccg->block_size == 0) {
@@ -2544,17 +2542,7 @@
 			xpt_done(ccb);
 			break;
 		}
-		size_mb = ccg->volume_size /((1024L * 1024L) / ccg->block_size);
-		if (size_mb > 1024) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/mpt/mpt_freebsd.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/mpt/mpt_freebsd.c,v
retrieving revision 1.9
diff -u -r1.9 mpt_freebsd.c
--- sys/dev/mpt/mpt_freebsd.c	10 Apr 2003 23:50:06 -0000	1.9
+++ sys/dev/mpt/mpt_freebsd.c	16 May 2003 01:55:52 -0000
@@ -1399,8 +1399,6 @@
 	case XPT_CALC_GEOMETRY:
 	{
 		struct ccb_calc_geometry *ccg;
-		u_int32_t secs_per_cylinder;
-		u_int32_t size_mb;

 		ccg = &ccb->ccg;
 		if (ccg->block_size == 0) {
@@ -1409,17 +1407,7 @@
 			break;
 		}

-		size_mb = ccg->volume_size /((1024L * 1024L) / ccg->block_size);
-		if (size_mb > 1024) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}
Index: sys/dev/trm/trm.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/trm/trm.c,v
retrieving revision 1.7
diff -u -r1.7 trm.c
--- sys/dev/trm/trm.c	10 Apr 2003 23:50:06 -0000	1.7
+++ sys/dev/trm/trm.c	16 May 2003 01:57:06 -0000
@@ -984,29 +984,10 @@
 		 * Calculate the geometry parameters for a device give
 		 * the sector size and volume size.
    		 */
-		case XPT_CALC_GEOMETRY:	{
-			struct		ccb_calc_geometry *ccg;
-			u_int32_t	size_mb;
-			u_int32_t	secs_per_cylinder;
-			int		extended;
-
+		case XPT_CALC_GEOMETRY:
 			TRM_DPRINTF(" XPT_CALC_GEOMETRY \n");
-			ccg = &pccb->ccg;
-			size_mb = ccg->volume_size /
-			    ((1024L * 1024L) / ccg->block_size);
-			extended =  1;
-			if (size_mb > 1024 && extended) {
-				ccg->heads = 255;
-				ccg->secs_per_track = 63;
-			} else {
-				ccg->heads = 64;
-				ccg->secs_per_track = 32;
-			}
-			secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-			ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-			pccb->ccb_h.status = CAM_REQ_CMP;
+			cam_calc_geometry(&pccb->ccg, /*extended*/1);
 			xpt_done(pccb);
-					}
 			break;
 		case XPT_ENG_INQ:
 			TRM_DPRINTF(" XPT_ENG_INQ \n");
Index: sys/dev/amd/amd.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/amd/amd.c,v
retrieving revision 1.17
diff -u -r1.17 amd.c
--- sys/dev/amd/amd.c	10 Apr 2003 23:50:05 -0000	1.17
+++ sys/dev/amd/amd.c	16 May 2003 07:39:05 -0000
@@ -680,25 +680,10 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct ccb_calc_geometry *ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
 		int     extended;

-		ccg = &pccb->ccg;
-		size_mb = ccg->volume_size/((1024L * 1024L)/ccg->block_size);
 		extended = (amd->eepromBuf[EE_MODE2] & GREATER_1G) != 0;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		pccb->ccb_h.status = CAM_REQ_CMP;
+		cam_calc_geometry(&pccb->ccg, extended);
 		xpt_done(pccb);
 		break;
 	}
Index: sys/dev/sym/sym_hipd.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/sym/sym_hipd.c,v
retrieving revision 1.40
diff -u -r1.40 sym_hipd.c
--- sys/dev/sym/sym_hipd.c	10 Apr 2003 23:50:06 -0000	1.40
+++ sys/dev/sym/sym_hipd.c	16 May 2003 01:59:46 -0000
@@ -8554,28 +8554,7 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct ccb_calc_geometry *ccg;
-		u32 size_mb;
-		u32 secs_per_cylinder;
-		int extended;
-
-		/*
-		 *  Silly DOS geometry.
-		 */
-		ccg = &ccb->ccg;
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-		extended = 1;
-
-		if (size_mb > 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
+		cam_calc_geometry(&ccb->ccg, /*extended*/1);
 		sym_xpt_done2(np, ccb, CAM_REQ_CMP);
 		break;
 	}
Index: sys/dev/usb/umass.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/usb/umass.c,v
retrieving revision 1.81
diff -u -r1.81 umass.c
--- sys/dev/usb/umass.c	11 May 2003 23:55:27 -0000	1.81
+++ sys/dev/usb/umass.c	16 May 2003 01:59:09 -0000
@@ -2458,25 +2457,7 @@
 	}
 	case XPT_CALC_GEOMETRY:
 	{
-		struct ccb_calc_geometry *ccg = &ccb->ccg;
-		u_int32_t size_mb;
-		u_int32_t secs_per_cylinder;
-		int extended = 1;
-
-		size_mb = ccg->volume_size
-			/ ((1024L * 1024L) / ccg->block_size);
-
-		if (size_mb >= 1024 && extended) {
-			ccg->heads = 255;
-			ccg->secs_per_track = 63;
-		} else {
-			ccg->heads = 64;
-			ccg->secs_per_track = 32;
-		}
-		secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-		ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-		ccb->ccb_h.status = CAM_REQ_CMP;
-
+		cam_calc_geometry(&ccb->ccg, /*extended*/1);
 		xpt_done(ccb);
 		break;
 	}



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20030516105356.E82960>