diff options
| -rw-r--r-- | drivers/block/Kconfig | 13 | ||||
| -rw-r--r-- | drivers/block/Makefile | 1 | ||||
| -rw-r--r-- | drivers/block/xd.c | 1123 | ||||
| -rw-r--r-- | drivers/block/xd.h | 134 |
4 files changed, 0 insertions, 1271 deletions
diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig index 824e09c4d0d7..e29a44e78e15 100644 --- a/drivers/block/Kconfig +++ b/drivers/block/Kconfig | |||
| @@ -63,19 +63,6 @@ config AMIGA_Z2RAM | |||
| 63 | To compile this driver as a module, choose M here: the | 63 | To compile this driver as a module, choose M here: the |
| 64 | module will be called z2ram. | 64 | module will be called z2ram. |
| 65 | 65 | ||
| 66 | config BLK_DEV_XD | ||
| 67 | tristate "XT hard disk support" | ||
| 68 | depends on ISA && ISA_DMA_API | ||
| 69 | select CHECK_SIGNATURE | ||
| 70 | help | ||
| 71 | Very old 8 bit hard disk controllers used in the IBM XT computer | ||
| 72 | will be supported if you say Y here. | ||
| 73 | |||
| 74 | To compile this driver as a module, choose M here: the | ||
| 75 | module will be called xd. | ||
| 76 | |||
| 77 | It's pretty unlikely that you have one of these: say N. | ||
| 78 | |||
| 79 | config GDROM | 66 | config GDROM |
| 80 | tristate "SEGA Dreamcast GD-ROM drive" | 67 | tristate "SEGA Dreamcast GD-ROM drive" |
| 81 | depends on SH_DREAMCAST | 68 | depends on SH_DREAMCAST |
diff --git a/drivers/block/Makefile b/drivers/block/Makefile index 17e82df3df74..5195c1f61b2a 100644 --- a/drivers/block/Makefile +++ b/drivers/block/Makefile | |||
| @@ -15,7 +15,6 @@ obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o | |||
| 15 | obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o | 15 | obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o |
| 16 | obj-$(CONFIG_BLK_DEV_RAM) += brd.o | 16 | obj-$(CONFIG_BLK_DEV_RAM) += brd.o |
| 17 | obj-$(CONFIG_BLK_DEV_LOOP) += loop.o | 17 | obj-$(CONFIG_BLK_DEV_LOOP) += loop.o |
| 18 | obj-$(CONFIG_BLK_DEV_XD) += xd.o | ||
| 19 | obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o | 18 | obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o |
| 20 | obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o | 19 | obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o |
| 21 | obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o | 20 | obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o |
diff --git a/drivers/block/xd.c b/drivers/block/xd.c deleted file mode 100644 index ff540520bada..000000000000 --- a/drivers/block/xd.c +++ /dev/null | |||
| @@ -1,1123 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * This file contains the driver for an XT hard disk controller | ||
| 3 | * (at least the DTC 5150X) for Linux. | ||
| 4 | * | ||
| 5 | * Author: Pat Mackinlay, pat@it.com.au | ||
| 6 | * Date: 29/09/92 | ||
| 7 | * | ||
| 8 | * Revised: 01/01/93, ... | ||
| 9 | * | ||
| 10 | * Ref: DTC 5150X Controller Specification (thanks to Kevin Fowler, | ||
| 11 | * kevinf@agora.rain.com) | ||
| 12 | * Also thanks to: Salvador Abreu, Dave Thaler, Risto Kankkunen and | ||
| 13 | * Wim Van Dorst. | ||
| 14 | * | ||
| 15 | * Revised: 04/04/94 by Risto Kankkunen | ||
| 16 | * Moved the detection code from xd_init() to xd_geninit() as it needed | ||
| 17 | * interrupts enabled and Linus didn't want to enable them in that first | ||
| 18 | * phase. xd_geninit() is the place to do these kinds of things anyway, | ||
| 19 | * he says. | ||
| 20 | * | ||
| 21 | * Modularized: 04/10/96 by Todd Fries, tfries@umr.edu | ||
| 22 | * | ||
| 23 | * Revised: 13/12/97 by Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl | ||
| 24 | * Fixed some problems with disk initialization and module initiation. | ||
| 25 | * Added support for manual geometry setting (except Seagate controllers) | ||
| 26 | * in form: | ||
| 27 | * xd_geo=<cyl_xda>,<head_xda>,<sec_xda>[,<cyl_xdb>,<head_xdb>,<sec_xdb>] | ||
| 28 | * Recovered DMA access. Abridged messages. Added support for DTC5051CX, | ||
| 29 | * WD1002-27X & XEBEC controllers. Driver uses now some jumper settings. | ||
| 30 | * Extended ioctl() support. | ||
| 31 | * | ||
| 32 | * Bugfix: 15/02/01, Paul G. - inform queue layer of tiny xd_maxsect. | ||
| 33 | * | ||
| 34 | */ | ||
| 35 | |||
| 36 | #include <linux/module.h> | ||
| 37 | #include <linux/errno.h> | ||
| 38 | #include <linux/interrupt.h> | ||
| 39 | #include <linux/mm.h> | ||
| 40 | #include <linux/fs.h> | ||
| 41 | #include <linux/kernel.h> | ||
| 42 | #include <linux/timer.h> | ||
| 43 | #include <linux/genhd.h> | ||
| 44 | #include <linux/hdreg.h> | ||
| 45 | #include <linux/ioport.h> | ||
| 46 | #include <linux/init.h> | ||
| 47 | #include <linux/wait.h> | ||
| 48 | #include <linux/blkdev.h> | ||
| 49 | #include <linux/mutex.h> | ||
| 50 | #include <linux/blkpg.h> | ||
| 51 | #include <linux/delay.h> | ||
| 52 | #include <linux/io.h> | ||
| 53 | #include <linux/gfp.h> | ||
| 54 | |||
| 55 | #include <asm/uaccess.h> | ||
| 56 | #include <asm/dma.h> | ||
| 57 | |||
| 58 | #include "xd.h" | ||
| 59 | |||
| 60 | static DEFINE_MUTEX(xd_mutex); | ||
| 61 | static void __init do_xd_setup (int *integers); | ||
| 62 | #ifdef MODULE | ||
| 63 | static int xd[5] = { -1,-1,-1,-1, }; | ||
| 64 | #endif | ||
| 65 | |||
| 66 | #define XD_DONT_USE_DMA 0 /* Initial value. may be overriden using | ||
| 67 | "nodma" module option */ | ||
| 68 | #define XD_INIT_DISK_DELAY (30) /* 30 ms delay during disk initialization */ | ||
| 69 | |||
| 70 | /* Above may need to be increased if a problem with the 2nd drive detection | ||
| 71 | (ST11M controller) or resetting a controller (WD) appears */ | ||
| 72 | |||
| 73 | static XD_INFO xd_info[XD_MAXDRIVES]; | ||
| 74 | |||
| 75 | /* If you try this driver and find that your card is not detected by the driver at bootup, you need to add your BIOS | ||
| 76 | signature and details to the following list of signatures. A BIOS signature is a string embedded into the first | ||
| 77 | few bytes of your controller's on-board ROM BIOS. To find out what yours is, use something like MS-DOS's DEBUG | ||
| 78 | command. Run DEBUG, and then you can examine your BIOS signature with: | ||
| 79 | |||
| 80 | d xxxx:0000 | ||
| 81 | |||
| 82 | where xxxx is the segment of your controller (like C800 or D000 or something). On the ASCII dump at the right, you should | ||
| 83 | be able to see a string mentioning the manufacturer's copyright etc. Add this string into the table below. The parameters | ||
| 84 | in the table are, in order: | ||
| 85 | |||
| 86 | offset ; this is the offset (in bytes) from the start of your ROM where the signature starts | ||
| 87 | signature ; this is the actual text of the signature | ||
| 88 | xd_?_init_controller ; this is the controller init routine used by your controller | ||
| 89 | xd_?_init_drive ; this is the drive init routine used by your controller | ||
| 90 | |||
| 91 | The controllers directly supported at the moment are: DTC 5150x, WD 1004A27X, ST11M/R and override. If your controller is | ||
| 92 | made by the same manufacturer as one of these, try using the same init routines as they do. If that doesn't work, your | ||
| 93 | best bet is to use the "override" routines. These routines use a "portable" method of getting the disk's geometry, and | ||
| 94 | may work with your card. If none of these seem to work, try sending me some email and I'll see what I can do <grin>. | ||
| 95 | |||
| 96 | NOTE: You can now specify your XT controller's parameters from the command line in the form xd=TYPE,IRQ,IO,DMA. The driver | ||
| 97 | should be able to detect your drive's geometry from this info. (eg: xd=0,5,0x320,3 is the "standard"). */ | ||
| 98 | |||
| 99 | #include <asm/page.h> | ||
| 100 | #define xd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL,get_order(size)) | ||
| 101 | #define xd_dma_mem_free(addr, size) free_pages(addr, get_order(size)) | ||
| 102 | static char *xd_dma_buffer; | ||
| 103 | |||
| 104 | static XD_SIGNATURE xd_sigs[] __initdata = { | ||
| 105 | { 0x0000,"Override geometry handler",NULL,xd_override_init_drive,"n unknown" }, /* Pat Mackinlay, pat@it.com.au */ | ||
| 106 | { 0x0008,"[BXD06 (C) DTC 17-MAY-1985]",xd_dtc_init_controller,xd_dtc5150cx_init_drive," DTC 5150CX" }, /* Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl */ | ||
| 107 | { 0x000B,"CRD18A Not an IBM rom. (C) Copyright Data Technology Corp. 05/31/88",xd_dtc_init_controller,xd_dtc_init_drive," DTC 5150X" }, /* Todd Fries, tfries@umr.edu */ | ||
| 108 | { 0x000B,"CXD23A Not an IBM ROM (C)Copyright Data Technology Corp 12/03/88",xd_dtc_init_controller,xd_dtc_init_drive," DTC 5150X" }, /* Pat Mackinlay, pat@it.com.au */ | ||
| 109 | { 0x0008,"07/15/86(C) Copyright 1986 Western Digital Corp.",xd_wd_init_controller,xd_wd_init_drive," Western Dig. 1002-27X" }, /* Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl */ | ||
| 110 | { 0x0008,"06/24/88(C) Copyright 1988 Western Digital Corp.",xd_wd_init_controller,xd_wd_init_drive," Western Dig. WDXT-GEN2" }, /* Dan Newcombe, newcombe@aa.csc.peachnet.edu */ | ||
| 111 | { 0x0015,"SEAGATE ST11 BIOS REVISION",xd_seagate_init_controller,xd_seagate_init_drive," Seagate ST11M/R" }, /* Salvador Abreu, spa@fct.unl.pt */ | ||
| 112 | { 0x0010,"ST11R BIOS",xd_seagate_init_controller,xd_seagate_init_drive," Seagate ST11M/R" }, /* Risto Kankkunen, risto.kankkunen@cs.helsinki.fi */ | ||
| 113 | { 0x0010,"ST11 BIOS v1.7",xd_seagate_init_controller,xd_seagate_init_drive," Seagate ST11R" }, /* Alan Hourihane, alanh@fairlite.demon.co.uk */ | ||
| 114 | { 0x1000,"(c)Copyright 1987 SMS",xd_omti_init_controller,xd_omti_init_drive,"n OMTI 5520" }, /* Dirk Melchers, dirk@merlin.nbg.sub.org */ | ||
| 115 | { 0x0006,"COPYRIGHT XEBEC (C) 1984",xd_xebec_init_controller,xd_xebec_init_drive," XEBEC" }, /* Andrzej Krzysztofowicz, ankry@mif.pg.gda.pl */ | ||
| 116 | { 0x0008,"(C) Copyright 1984 Western Digital Corp", xd_wd_init_controller, xd_wd_init_drive," Western Dig. 1002s-wx2" }, | ||
| 117 | { 0x0008,"(C) Copyright 1986 Western Digital Corporation", xd_wd_init_controller, xd_wd_init_drive," 1986 Western Digital" }, /* jfree@sovereign.org */ | ||
| 118 | }; | ||
| 119 | |||
| 120 | static unsigned int xd_bases[] __initdata = | ||
| 121 | { | ||
| 122 | 0xC8000, 0xCA000, 0xCC000, | ||
| 123 | 0xCE000, 0xD0000, 0xD2000, | ||
| 124 | 0xD4000, 0xD6000, 0xD8000, | ||
| 125 | 0xDA000, 0xDC000, 0xDE000, | ||
| 126 | 0xE0000 | ||
| 127 | }; | ||
| 128 | |||
| 129 | static DEFINE_SPINLOCK(xd_lock); | ||
| 130 | |||
| 131 | static struct gendisk *xd_gendisk[2]; | ||
| 132 | |||
| 133 | static int xd_getgeo(struct block_device *bdev, struct hd_geometry *geo); | ||
| 134 | |||
| 135 | static const struct block_device_operations xd_fops = { | ||
| 136 | .owner = THIS_MODULE, | ||
| 137 | .ioctl = xd_ioctl, | ||
| 138 | .getgeo = xd_getgeo, | ||
| 139 | }; | ||
| 140 | static DECLARE_WAIT_QUEUE_HEAD(xd_wait_int); | ||
| 141 | static u_char xd_drives, xd_irq = 5, xd_dma = 3, xd_maxsectors; | ||
| 142 | static u_char xd_override __initdata = 0, xd_type __initdata = 0; | ||
| 143 | static u_short xd_iobase = 0x320; | ||
| 144 | static int xd_geo[XD_MAXDRIVES*3] __initdata = { 0, }; | ||
| 145 | |||
| 146 | static volatile int xdc_busy; | ||
| 147 | static struct timer_list xd_watchdog_int; | ||
| 148 | |||
| 149 | static volatile u_char xd_error; | ||
| 150 | static bool nodma = XD_DONT_USE_DMA; | ||
| 151 | |||
| 152 | static struct request_queue *xd_queue; | ||
| 153 | |||
| 154 | /* xd_init: register the block device number and set up pointer tables */ | ||
| 155 | static int __init xd_init(void) | ||
| 156 | { | ||
| 157 | u_char i,controller; | ||
| 158 | unsigned int address; | ||
