diff options
author | njl <njl@FreeBSD.org> | 2003-06-14 22:17:41 +0000 |
---|---|---|
committer | njl <njl@FreeBSD.org> | 2003-06-14 22:17:41 +0000 |
commit | ea1ca84312e2a8d2a9c99abe3678a2f10ea13fab (patch) | |
tree | 366938aa2e5b41ac39ddf11517f3ef5a83c02a20 /sys | |
parent | b184633199beba93ad13f46cf12a67fbaa20ad06 (diff) | |
download | FreeBSD-src-ea1ca84312e2a8d2a9c99abe3678a2f10ea13fab.zip FreeBSD-src-ea1ca84312e2a8d2a9c99abe3678a2f10ea13fab.tar.gz |
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.
Looked over by: scottl
Diffstat (limited to 'sys')
-rw-r--r-- | sys/cam/scsi/scsi_low.c | 21 | ||||
-rw-r--r-- | sys/dev/advansys/advansys.c | 18 | ||||
-rw-r--r-- | sys/dev/advansys/adwcam.c | 21 | ||||
-rw-r--r-- | sys/dev/ahb/ahb.c | 19 | ||||
-rw-r--r-- | sys/dev/aic/aic.c | 20 | ||||
-rw-r--r-- | sys/dev/aic7xxx/aic79xx_osm.c | 18 | ||||
-rw-r--r-- | sys/dev/aic7xxx/aic7xxx_osm.c | 18 | ||||
-rw-r--r-- | sys/dev/amd/amd.c | 17 | ||||
-rw-r--r-- | sys/dev/amr/amr_cam.c | 17 | ||||
-rw-r--r-- | sys/dev/ata/atapi-cam.c | 20 | ||||
-rw-r--r-- | sys/dev/dpt/dpt_scsi.c | 21 | ||||
-rw-r--r-- | sys/dev/firewire/sbp.c | 19 | ||||
-rw-r--r-- | sys/dev/isp/isp_freebsd.c | 14 | ||||
-rw-r--r-- | sys/dev/mpt/mpt_freebsd.c | 14 | ||||
-rw-r--r-- | sys/dev/sym/sym_hipd.c | 23 | ||||
-rw-r--r-- | sys/dev/trm/trm.c | 23 | ||||
-rw-r--r-- | sys/pci/ncr.c | 21 |
17 files changed, 19 insertions, 305 deletions
diff --git a/sys/cam/scsi/scsi_low.c b/sys/cam/scsi/scsi_low.c index aeca873..0d9b3b4 100644 --- a/sys/cam/scsi/scsi_low.c +++ b/sys/cam/scsi/scsi_low.c @@ -1285,26 +1285,7 @@ settings_out: } 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; } diff --git a/sys/dev/advansys/advansys.c b/sys/dev/advansys/advansys.c index ed820aa..3a50c3e 100644 --- a/sys/dev/advansys/advansys.c +++ b/sys/dev/advansys/advansys.c @@ -431,26 +431,10 @@ adv_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/advansys/adwcam.c b/sys/dev/advansys/adwcam.c index 4085f3b..74bd9ce 100644 --- a/sys/dev/advansys/adwcam.c +++ b/sys/dev/advansys/adwcam.c @@ -724,30 +724,11 @@ adw_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/ahb/ahb.c b/sys/dev/ahb/ahb.c index e6d715b..a3902ae 100644 --- a/sys/dev/ahb/ahb.c +++ b/sys/dev/ahb/ahb.c @@ -1171,24 +1171,7 @@ ahbaction(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/aic/aic.c b/sys/dev/aic/aic.c index 355968e..7824df1 100644 --- a/sys/dev/aic/aic.c +++ b/sys/dev/aic/aic.c @@ -254,25 +254,7 @@ aic_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/aic7xxx/aic79xx_osm.c b/sys/dev/aic7xxx/aic79xx_osm.c index dceff7d..2b42e2d 100644 --- a/sys/dev/aic7xxx/aic79xx_osm.c +++ b/sys/dev/aic7xxx/aic79xx_osm.c @@ -550,26 +550,10 @@ ahd_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/aic7xxx/aic7xxx_osm.c b/sys/dev/aic7xxx/aic7xxx_osm.c index 86ae22a..82120eb 100644 --- a/sys/dev/aic7xxx/aic7xxx_osm.c +++ b/sys/dev/aic7xxx/aic7xxx_osm.c @@ -819,28 +819,12 @@ ahc_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/amd/amd.c b/sys/dev/amd/amd.c index 64cc2e9..6267ce0 100644 --- a/sys/dev/amd/amd.c +++ b/sys/dev/amd/amd.c @@ -680,25 +680,10 @@ amd_action(struct cam_sim * psim, union ccb * pccb) } 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; } diff --git a/sys/dev/amr/amr_cam.c b/sys/dev/amr/amr_cam.c index d30c964..400a87e 100644 --- a/sys/dev/amr/amr_cam.c +++ b/sys/dev/amr/amr_cam.c @@ -265,22 +265,7 @@ amr_cam_action(struct cam_sim *sim, union ccb *ccb) 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; } diff --git a/sys/dev/ata/atapi-cam.c b/sys/dev/ata/atapi-cam.c index 2a3f787..cbac5ee 100644 --- a/sys/dev/ata/atapi-cam.c +++ b/sys/dev/ata/atapi-cam.c @@ -330,26 +330,8 @@ atapi_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/dpt/dpt_scsi.c b/sys/dev/dpt/dpt_scsi.c index 33420aa..913578f 100644 --- a/sys/dev/dpt/dpt_scsi.c +++ b/sys/dev/dpt/dpt_scsi.c @@ -1034,30 +1034,11 @@ dpt_action(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/firewire/sbp.c b/sys/dev/firewire/sbp.c index 7bb8370..43323e9 100644 --- a/sys/dev/firewire/sbp.c +++ b/sys/dev/firewire/sbp.c @@ -2291,11 +2291,8 @@ printf("ORB %08x %08x %08x %08x\n", ntohl(ocb->orb[4]), ntohl(ocb->orb[5]), ntoh 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; @@ -2318,19 +2315,7 @@ SBP_DEBUG(1) 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; } diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c index d425166..45c54f3 100644 --- a/sys/dev/isp/isp_freebsd.c +++ b/sys/dev/isp/isp_freebsd.c @@ -2532,8 +2532,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb) 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 @@ isp_action(struct cam_sim *sim, union ccb *ccb) 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; } diff --git a/sys/dev/mpt/mpt_freebsd.c b/sys/dev/mpt/mpt_freebsd.c index 4b370b9..980f115 100644 --- a/sys/dev/mpt/mpt_freebsd.c +++ b/sys/dev/mpt/mpt_freebsd.c @@ -1400,8 +1400,6 @@ mpt_action(struct cam_sim *sim, union ccb *ccb) 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) { @@ -1410,17 +1408,7 @@ mpt_action(struct cam_sim *sim, union ccb *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; } diff --git a/sys/dev/sym/sym_hipd.c b/sys/dev/sym/sym_hipd.c index e378168..6454f50 100644 --- a/sys/dev/sym/sym_hipd.c +++ b/sys/dev/sym/sym_hipd.c @@ -8554,28 +8554,7 @@ static void sym_action2(struct cam_sim *sim, union ccb *ccb) } 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; } diff --git a/sys/dev/trm/trm.c b/sys/dev/trm/trm.c index 6e3fb7a..dda9e87 100644 --- a/sys/dev/trm/trm.c +++ b/sys/dev/trm/trm.c @@ -984,29 +984,10 @@ trm_action(struct cam_sim *psim, union ccb *pccb) * 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"); diff --git a/sys/pci/ncr.c b/sys/pci/ncr.c index df616c1..ca121f2 100644 --- a/sys/pci/ncr.c +++ b/sys/pci/ncr.c @@ -4334,30 +4334,11 @@ ncr_action (struct cam_sim *sim, union ccb *ccb) } case XPT_CALC_GEOMETRY: { - struct ccb_calc_geometry *ccg; - u_int32_t size_mb; - u_int32_t secs_per_cylinder; - int extended; - /* XXX JGibbs - I'm sure the NCR uses a different strategy, * but it should be able to deal with Adaptec * geometry too. */ - 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; } |