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
...@@ -230,6 +230,10 @@ Summary of ide driver parameters for kernel command line ...@@ -230,6 +230,10 @@ Summary of ide driver parameters for kernel command line
"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=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,
......
...@@ -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