Commit 4bb71656 authored by Andries E. Brouwer's avatar Andries E. Brouwer Committed by Linus Torvalds

[PATCH] kill ide-geometry

I consider myself the maintainer of this code, created the file,
want to destroy it again. It is unused and incorrect today.
parent 2e06448d
...@@ -231,6 +231,10 @@ Summary of ide driver parameters for kernel command line ...@@ -231,6 +231,10 @@ Summary of ide driver parameters for kernel command line
"hdx=cyl,head,sect" : disk drive is present, with specified geometry "hdx=cyl,head,sect" : disk drive is present, with specified geometry
"hdx=remap" : remap access of sector 0 to sector 1 (for EZD)
"hdx=remap63" : remap the drive: shift all by 63 sectors (for DM)
"hdx=autotune" : driver will attempt to tune interface speed "hdx=autotune" : driver will attempt to tune interface speed
to the fastest PIO mode supported, to the fastest PIO mode supported,
if possible for this drive only. if possible for this drive only.
......
...@@ -12,7 +12,7 @@ obj-$(CONFIG_BLK_DEV_IDEPCI) += pci/ ...@@ -12,7 +12,7 @@ obj-$(CONFIG_BLK_DEV_IDEPCI) += pci/
# Core IDE code - must come before legacy # Core IDE code - must come before legacy
obj-$(CONFIG_BLK_DEV_IDE) += ide-io.o ide-probe.o ide-geometry.o ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-default.o obj-$(CONFIG_BLK_DEV_IDE) += ide-io.o ide-probe.o ide-iops.o ide-taskfile.o ide.o ide-lib.o ide-default.o
obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk.o obj-$(CONFIG_BLK_DEV_IDEDISK) += ide-disk.o
obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd.o obj-$(CONFIG_BLK_DEV_IDECD) += ide-cd.o
obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o obj-$(CONFIG_BLK_DEV_IDETAPE) += ide-tape.o
......
/*
* linux/drivers/ide/ide-geometry.c
*/
#include <linux/config.h>
#include <linux/ide.h>
#include <linux/mc146818rtc.h>
#include <asm/io.h>
extern unsigned long current_capacity (ide_drive_t *);
/*
* If heads is nonzero: find a translation with this many heads and S=63.
* Otherwise: find out how OnTrack Disk Manager would translate the disk.
*/
static void ontrack(ide_drive_t *drive, int heads, unsigned int *c, int *h, int *s)
{
static const u8 dm_head_vals[] = {4, 8, 16, 32, 64, 128, 255, 0};
const u8 *headp = dm_head_vals;
unsigned long total;
/*
* The specs say: take geometry as obtained from Identify,
* compute total capacity C*H*S from that, and truncate to
* 1024*255*63. Now take S=63, H the first in the sequence
* 4, 8, 16, 32, 64, 128, 255 such that 63*H*1024 >= total.
* [Please tell aeb@cwi.nl in case this computes a
* geometry different from what OnTrack uses.]
*/
total = DRIVER(drive)->capacity(drive);
*s = 63;
if (heads) {
*h = heads;
*c = total / (63 * heads);
return;
}
while (63 * headp[0] * 1024 < total && headp[1] != 0)
headp++;
*h = headp[0];
*c = total / (63 * headp[0]);
}
/*
* This routine is called from the partition-table code in pt/msdos.c.
* It has two tasks:
* (i) to handle Ontrack DiskManager by offsetting everything by 63 sectors,
* or to handle EZdrive by remapping sector 0 to sector 1.
* (ii) to invent a translated geometry.
* Part (i) is suppressed if the user specifies the "noremap" option
* on the command line.
* Part (ii) is suppressed if the user specifies an explicit geometry.
*
* The ptheads parameter is either 0 or tells about the number of
* heads shown by the end of the first nonempty partition.
* If this is either 16, 32, 64, 128, 240 or 255 we'll believe it.
*
* The xparm parameter has the following meaning:
* 0 = convert to CHS with fewer than 1024 cyls
* using the same method as Ontrack DiskManager.
* 1 = same as "0", plus offset everything by 63 sectors.
* -1 = similar to "0", plus redirect sector 0 to sector 1.
* 2 = convert to a CHS geometry with "ptheads" heads.
*
* Returns 0 if the translation was not possible, if the device was not
* an IDE disk drive, or if a geometry was "forced" on the commandline.
* Returns 1 if the geometry translation was successful.
*/
int ide_xlate_1024 (struct block_device *bdev, int xparm, int ptheads, const char *msg)
{
ide_drive_t *drive = bdev->bd_disk->private_data;
const char *msg1 = "";
int heads = 0;
int c, h, s;
int transl = 1; /* try translation */
int ret = 0;
/* remap? */
if (drive->remap_0_to_1 != 2) {
if (xparm == 1) { /* DM */
drive->sect0 = 63;
msg1 = " [remap +63]";
ret = 1;
} else if (xparm == -1) { /* EZ-Drive */
if (drive->remap_0_to_1 == 0) {
drive->remap_0_to_1 = 1;
msg1 = " [remap 0->1]";
ret = 1;
}
}
}
/* There used to be code here that assigned drive->id->CHS
to drive->CHS and that to drive->bios_CHS. However,
some disks have id->C/H/S = 4092/16/63 but are larger than 2.1 GB.
In such cases that code was wrong. Moreover,
there seems to be no reason to do any of these things. */
/* translate? */
if (drive->forced_geom)
transl = 0;
/* does ptheads look reasonable? */
if (ptheads == 32 || ptheads == 64 || ptheads == 128 ||
ptheads == 240 || ptheads == 255)
heads = ptheads;
if (xparm == 2) {
if (!heads ||
(drive->bios_head >= heads && drive->bios_sect == 63))
transl = 0;
}
if (xparm == -1) {
if (drive->bios_head > 16)
transl = 0; /* we already have a translation */
}
if (transl) {
ontrack(drive, heads, &c, &h, &s);
drive->bios_cyl = c;
drive->bios_head = h;
drive->bios_sect = s;
ret = 1;
}
set_capacity(drive->disk, current_capacity(drive));
if (ret)
printk("%s%s [%d/%d/%d]", msg, msg1,
drive->bios_cyl, drive->bios_head, drive->bios_sect);
return ret;
}
...@@ -1443,8 +1443,6 @@ int ideprobe_init (void) ...@@ -1443,8 +1443,6 @@ int ideprobe_init (void)
} }
#ifdef MODULE #ifdef MODULE
extern int (*ide_xlate_1024_hook)(struct block_device *, int, int, const char *);
int init_module (void) int init_module (void)
{ {
unsigned int index; unsigned int index;
...@@ -1453,14 +1451,12 @@ int init_module (void) ...@@ -1453,14 +1451,12 @@ int init_module (void)
ide_unregister(index); ide_unregister(index);
ideprobe_init(); ideprobe_init();
create_proc_ide_interfaces(); create_proc_ide_interfaces();
ide_xlate_1024_hook = ide_xlate_1024;
return 0; return 0;
} }
void cleanup_module (void) void cleanup_module (void)
{ {
ide_probe = NULL; ide_probe = NULL;
ide_xlate_1024_hook = 0;
} }
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
#endif /* MODULE */ #endif /* MODULE */
...@@ -1735,6 +1735,8 @@ static int __initdata is_chipset_set[MAX_HWIFS]; ...@@ -1735,6 +1735,8 @@ static int __initdata is_chipset_set[MAX_HWIFS];
* "hdx=nowerr" : ignore the WRERR_STAT bit on this drive * "hdx=nowerr" : ignore the WRERR_STAT bit on this drive
* "hdx=cdrom" : drive is present, and is a cdrom drive * "hdx=cdrom" : drive is present, and is a cdrom drive
* "hdx=cyl,head,sect" : disk drive is present, with specified geometry * "hdx=cyl,head,sect" : disk drive is present, with specified geometry
* "hdx=remap63" : add 63 to all sector numbers (for OnTrack DM)
* "hdx=remap" : remap 0->1 (for EZDrive)
* "hdx=noremap" : do not remap 0->1 even though EZD was detected * "hdx=noremap" : do not remap 0->1 even though EZD was detected
* "hdx=autotune" : driver will attempt to tune interface speed * "hdx=autotune" : driver will attempt to tune interface speed
* to the fastest PIO mode supported, * to the fastest PIO mode supported,
...@@ -1854,11 +1856,11 @@ int __init ide_setup (char *s) ...@@ -1854,11 +1856,11 @@ int __init ide_setup (char *s)
* Look for drive options: "hdx=" * Look for drive options: "hdx="
*/ */
if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) { if (s[0] == 'h' && s[1] == 'd' && s[2] >= 'a' && s[2] <= max_drive) {
const char *hd_words[] = {"none", "noprobe", "nowerr", "cdrom", const char *hd_words[] = {
"serialize", "autotune", "noautotune", "none", "noprobe", "nowerr", "cdrom", "serialize",
"slow", "swapdata", "bswap", "flash", "autotune", "noautotune", "slow", "swapdata", "bswap",
"remap", "noremap", "scsi", "biostimings", "flash", "remap", "noremap", "scsi", "biostimings",
NULL}; "remap63", NULL };
unit = s[2] - 'a'; unit = s[2] - 'a';
hw = unit / MAX_DRIVES; hw = unit / MAX_DRIVES;
unit = unit % MAX_DRIVES; unit = unit % MAX_DRIVES;
...@@ -1908,8 +1910,8 @@ int __init ide_setup (char *s) ...@@ -1908,8 +1910,8 @@ int __init ide_setup (char *s)
case -8: /* "slow" */ case -8: /* "slow" */
drive->slow = 1; drive->slow = 1;
goto done; goto done;
case -9: /* "swapdata" or "bswap" */ case -9: /* "swapdata" */
case -10: case -10: /* "bswap" */
drive->bswap = 1; drive->bswap = 1;
goto done; goto done;
case -11: /* "flash" */ case -11: /* "flash" */
...@@ -1932,6 +1934,9 @@ int __init ide_setup (char *s) ...@@ -1932,6 +1934,9 @@ int __init ide_setup (char *s)
case -15: /* "biostimings" */ case -15: /* "biostimings" */
drive->autotune = IDE_TUNE_BIOS; drive->autotune = IDE_TUNE_BIOS;
goto done; goto done;
case -16: /* "remap63" */
drive->sect0 = 63;
goto done;
case 3: /* cyl,head,sect */ case 3: /* cyl,head,sect */
drive->media = ide_disk; drive->media = ide_disk;
drive->cyl = drive->bios_cyl = vals[0]; drive->cyl = drive->bios_cyl = vals[0];
......
...@@ -20,27 +20,15 @@ ...@@ -20,27 +20,15 @@
*/ */
#include <linux/config.h> #include <linux/config.h>
#include <linux/buffer_head.h> /* for invalidate_bdev() */
#ifdef CONFIG_BLK_DEV_IDE
#include <linux/hdreg.h>
#include <linux/ide.h> /* IDE xlate */
#elif defined(CONFIG_BLK_DEV_IDE_MODULE)
#include <linux/module.h>
int (*ide_xlate_1024_hook)(struct block_device *, int, int, const char *);
EXPORT_SYMBOL(ide_xlate_1024_hook);
#define ide_xlate_1024 ide_xlate_1024_hook
#endif
#include "check.h" #include "check.h"
#include "msdos.h" #include "msdos.h"
#include "efi.h" #include "efi.h"
/* /*
* Many architectures don't like unaligned accesses, which is * Many architectures don't like unaligned accesses, while
* frequently the case with the nr_sects and start_sect partition * the nr_sects and start_sect partition table entries are
* table entries. * at a 2 (mod 4) address.
*/ */
#include <asm/unaligned.h> #include <asm/unaligned.h>
......
...@@ -1298,12 +1298,6 @@ extern void ide_fixstring(u8 *, const int, const int); ...@@ -1298,12 +1298,6 @@ extern void ide_fixstring(u8 *, const int, const int);
*/ */
extern int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long); extern int ide_wait_stat(ide_startstop_t *, ide_drive_t *, u8, u8, unsigned long);
/*
* This routine is called from the partition-table code in genhd.c
* to "convert" a drive to a logical geometry with fewer than 1024 cyls.
*/
extern int ide_xlate_1024(struct block_device *, int, int, const char *);
/* /*
* Return the current idea about the total capacity of this drive. * Return the current idea about the total capacity of this drive.
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment