Commit 5cbc39a7 authored by Linus Torvalds's avatar Linus Torvalds

Merge branch 'trivial-2.6.23' of git://git.kernel.dk/data/git/linux-2.6-block

* 'trivial-2.6.23' of git://git.kernel.dk/data/git/linux-2.6-block:
  Documentation/block/barrier.txt is not in sync with the actual code: - blk_queue_ordered() no longer has a gfp_mask parameter - blk_queue_ordered_locked() no longer exists - sd_prepare_flush() looks slightly different
  Use list_for_each_entry() instead of list_for_each() in the block device
  Make a "menuconfig" out of the Kconfig objects "menu, ..., endmenu",
  block/Kconfig already has its own "menuconfig" so remove these
  Use menuconfigs instead of menus, so the whole menu can be disabled at once
  cfq-iosched: fix async queue behaviour
  unexport bio_{,un}map_user
  Remove legacy CDROM drivers
  [PATCH] fix request->cmd == INT cases
  cciss: add new controller support for P700m
  [PATCH] Remove acsi.c
  [BLOCK] drop unnecessary bvec rewinding from flush_dry_bio_endio
  [PATCH] cdrom_sysctl_info fix
  blk_hw_contig_segment(): bad segment size checks
  [TRIVIAL PATCH] Kill blk_congestion_wait() stub for !CONFIG_BLOCK
parents 65f88f89 c0613c1c
...@@ -82,23 +82,12 @@ including draining and flushing. ...@@ -82,23 +82,12 @@ including draining and flushing.
typedef void (prepare_flush_fn)(request_queue_t *q, struct request *rq); typedef void (prepare_flush_fn)(request_queue_t *q, struct request *rq);
int blk_queue_ordered(request_queue_t *q, unsigned ordered, int blk_queue_ordered(request_queue_t *q, unsigned ordered,
prepare_flush_fn *prepare_flush_fn, prepare_flush_fn *prepare_flush_fn);
unsigned gfp_mask);
int blk_queue_ordered_locked(request_queue_t *q, unsigned ordered,
prepare_flush_fn *prepare_flush_fn,
unsigned gfp_mask);
The only difference between the two functions is whether or not the
caller is holding q->queue_lock on entry. The latter expects the
caller is holding the lock.
@q : the queue in question @q : the queue in question
@ordered : the ordered mode the driver/device supports @ordered : the ordered mode the driver/device supports
@prepare_flush_fn : this function should prepare @rq such that it @prepare_flush_fn : this function should prepare @rq such that it
flushes cache to physical medium when executed flushes cache to physical medium when executed
@gfp_mask : gfp_mask used when allocating data structures
for ordered processing
For example, SCSI disk driver's prepare_flush_fn looks like the For example, SCSI disk driver's prepare_flush_fn looks like the
following. following.
...@@ -106,9 +95,10 @@ following. ...@@ -106,9 +95,10 @@ following.
static void sd_prepare_flush(request_queue_t *q, struct request *rq) static void sd_prepare_flush(request_queue_t *q, struct request *rq)
{ {
memset(rq->cmd, 0, sizeof(rq->cmd)); memset(rq->cmd, 0, sizeof(rq->cmd));
rq->flags |= REQ_BLOCK_PC; rq->cmd_type = REQ_TYPE_BLOCK_PC;
rq->timeout = SD_TIMEOUT; rq->timeout = SD_TIMEOUT;
rq->cmd[0] = SYNCHRONIZE_CACHE; rq->cmd[0] = SYNCHRONIZE_CACHE;
rq->cmd_len = 10;
} }
The following seven ordered modes are supported. The following table The following seven ordered modes are supported. The following table
......
# #
# Block layer core configuration # Block layer core configuration
# #
config BLOCK menuconfig BLOCK
bool "Enable the block layer" if EMBEDDED bool "Enable the block layer" if EMBEDDED
default y default y
help help
...@@ -49,6 +49,6 @@ config LSF ...@@ -49,6 +49,6 @@ config LSF
If unsure, say Y. If unsure, say Y.
endif endif # BLOCK
source block/Kconfig.iosched source block/Kconfig.iosched
...@@ -92,6 +92,8 @@ struct cfq_data { ...@@ -92,6 +92,8 @@ struct cfq_data {
struct cfq_queue *active_queue; struct cfq_queue *active_queue;
struct cfq_io_context *active_cic; struct cfq_io_context *active_cic;
struct cfq_queue *async_cfqq[IOPRIO_BE_NR];
struct timer_list idle_class_timer; struct timer_list idle_class_timer;
sector_t last_position; sector_t last_position;
...@@ -1351,8 +1353,8 @@ static void cfq_ioc_set_ioprio(struct io_context *ioc) ...@@ -1351,8 +1353,8 @@ static void cfq_ioc_set_ioprio(struct io_context *ioc)
} }
static struct cfq_queue * static struct cfq_queue *
cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct task_struct *tsk, cfq_find_alloc_queue(struct cfq_data *cfqd, int is_sync,
gfp_t gfp_mask) struct task_struct *tsk, gfp_t gfp_mask)
{ {
struct cfq_queue *cfqq, *new_cfqq = NULL; struct cfq_queue *cfqq, *new_cfqq = NULL;
struct cfq_io_context *cic; struct cfq_io_context *cic;
...@@ -1405,12 +1407,35 @@ cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct task_struct *tsk, ...@@ -1405,12 +1407,35 @@ cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct task_struct *tsk,
if (new_cfqq) if (new_cfqq)
kmem_cache_free(cfq_pool, new_cfqq); kmem_cache_free(cfq_pool, new_cfqq);
atomic_inc(&cfqq->ref);
out: out:
WARN_ON((gfp_mask & __GFP_WAIT) && !cfqq); WARN_ON((gfp_mask & __GFP_WAIT) && !cfqq);
return cfqq; return cfqq;
} }
static struct cfq_queue *
cfq_get_queue(struct cfq_data *cfqd, int is_sync, struct task_struct *tsk,
gfp_t gfp_mask)
{
const int ioprio = task_ioprio(tsk);
struct cfq_queue *cfqq = NULL;
if (!is_sync)
cfqq = cfqd->async_cfqq[ioprio];
if (!cfqq)
cfqq = cfq_find_alloc_queue(cfqd, is_sync, tsk, gfp_mask);
/*
* pin the queue now that it's allocated, scheduler exit will prune it
*/
if (!is_sync && !cfqd->async_cfqq[ioprio]) {
atomic_inc(&cfqq->ref);
cfqd->async_cfqq[ioprio] = cfqq;
}
atomic_inc(&cfqq->ref);
return cfqq;
}
/* /*
* We drop cfq io contexts lazily, so we may find a dead one. * We drop cfq io contexts lazily, so we may find a dead one.
*/ */
...@@ -2019,6 +2044,7 @@ static void cfq_exit_queue(elevator_t *e) ...@@ -2019,6 +2044,7 @@ static void cfq_exit_queue(elevator_t *e)
{ {
struct cfq_data *cfqd = e->elevator_data; struct cfq_data *cfqd = e->elevator_data;
request_queue_t *q = cfqd->queue; request_queue_t *q = cfqd->queue;
int i;
cfq_shutdown_timer_wq(cfqd); cfq_shutdown_timer_wq(cfqd);
...@@ -2035,6 +2061,13 @@ static void cfq_exit_queue(elevator_t *e) ...@@ -2035,6 +2061,13 @@ static void cfq_exit_queue(elevator_t *e)
__cfq_exit_single_io_context(cfqd, cic); __cfq_exit_single_io_context(cfqd, cic);
} }
/*
* Put the async queues
*/
for (i = 0; i < IOPRIO_BE_NR; i++)
if (cfqd->async_cfqq[i])
cfq_put_queue(cfqd->async_cfqq[i]);
spin_unlock_irq(q->queue_lock); spin_unlock_irq(q->queue_lock);
cfq_shutdown_timer_wq(cfqd); cfq_shutdown_timer_wq(cfqd);
......
...@@ -112,12 +112,8 @@ static inline int elv_try_merge(struct request *__rq, struct bio *bio) ...@@ -112,12 +112,8 @@ static inline int elv_try_merge(struct request *__rq, struct bio *bio)
static struct elevator_type *elevator_find(const char *name) static struct elevator_type *elevator_find(const char *name)
{ {
struct elevator_type *e; struct elevator_type *e;
struct list_head *entry;
list_for_each(entry, &elv_list) {
e = list_entry(entry, struct elevator_type, list);
list_for_each_entry(e, &elv_list, list) {
if (!strcmp(e->elevator_name, name)) if (!strcmp(e->elevator_name, name))
return e; return e;
} }
...@@ -1116,14 +1112,11 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name) ...@@ -1116,14 +1112,11 @@ ssize_t elv_iosched_show(request_queue_t *q, char *name)
{ {
elevator_t *e = q->elevator; elevator_t *e = q->elevator;
struct elevator_type *elv = e->elevator_type; struct elevator_type *elv = e->elevator_type;
struct list_head *entry; struct elevator_type *__e;
int len = 0; int len = 0;
spin_lock(&elv_list_lock); spin_lock(&elv_list_lock);
list_for_each(entry, &elv_list) { list_for_each_entry(__e, &elv_list, list) {
struct elevator_type *__e;
__e = list_entry(entry, struct elevator_type, list);
if (!strcmp(elv->elevator_name, __e->elevator_name)) if (!strcmp(elv->elevator_name, __e->elevator_name))
len += sprintf(name+len, "[%s] ", elv->elevator_name); len += sprintf(name+len, "[%s] ", elv->elevator_name);
else else
......
...@@ -527,8 +527,6 @@ int blk_do_ordered(request_queue_t *q, struct request **rqp) ...@@ -527,8 +527,6 @@ int blk_do_ordered(request_queue_t *q, struct request **rqp)
static int flush_dry_bio_endio(struct bio *bio, unsigned int bytes, int error) static int flush_dry_bio_endio(struct bio *bio, unsigned int bytes, int error)
{ {
request_queue_t *q = bio->bi_private; request_queue_t *q = bio->bi_private;
struct bio_vec *bvec;
int i;
/* /*
* This is dry run, restore bio_sector and size. We'll finish * This is dry run, restore bio_sector and size. We'll finish
...@@ -540,13 +538,6 @@ static int flush_dry_bio_endio(struct bio *bio, unsigned int bytes, int error) ...@@ -540,13 +538,6 @@ static int flush_dry_bio_endio(struct bio *bio, unsigned int bytes, int error)
if (bio->bi_size) if (bio->bi_size)
return 1; return 1;
/* Rewind bvec's */
bio->bi_idx = 0;
bio_for_each_segment(bvec, bio, i) {
bvec->bv_len += bvec->bv_offset;
bvec->bv_offset = 0;
}
/* Reset bio */ /* Reset bio */
set_bit(BIO_UPTODATE, &bio->bi_flags); set_bit(BIO_UPTODATE, &bio->bi_flags);
bio->bi_size = q->bi_size; bio->bi_size = q->bi_size;
...@@ -1304,9 +1295,9 @@ static int blk_hw_contig_segment(request_queue_t *q, struct bio *bio, ...@@ -1304,9 +1295,9 @@ static int blk_hw_contig_segment(request_queue_t *q, struct bio *bio,
if (unlikely(!bio_flagged(nxt, BIO_SEG_VALID))) if (unlikely(!bio_flagged(nxt, BIO_SEG_VALID)))
blk_recount_segments(q, nxt); blk_recount_segments(q, nxt);
if (!BIOVEC_VIRT_MERGEABLE(__BVEC_END(bio), __BVEC_START(nxt)) || if (!BIOVEC_VIRT_MERGEABLE(__BVEC_END(bio), __BVEC_START(nxt)) ||
BIOVEC_VIRT_OVERSIZE(bio->bi_hw_front_size + bio->bi_hw_back_size)) BIOVEC_VIRT_OVERSIZE(bio->bi_hw_back_size + nxt->bi_hw_front_size))
return 0; return 0;
if (bio->bi_size + nxt->bi_size > q->max_segment_size) if (bio->bi_hw_back_size + nxt->bi_hw_front_size > q->max_segment_size)
return 0; return 0;
return 1; return 1;
......
...@@ -24,8 +24,6 @@ source "drivers/scsi/Kconfig" ...@@ -24,8 +24,6 @@ source "drivers/scsi/Kconfig"
source "drivers/ata/Kconfig" source "drivers/ata/Kconfig"
source "drivers/cdrom/Kconfig"
source "drivers/md/Kconfig" source "drivers/md/Kconfig"
source "drivers/message/fusion/Kconfig" source "drivers/message/fusion/Kconfig"
......
...@@ -1246,7 +1246,7 @@ static void redo_fd_request(void) ...@@ -1246,7 +1246,7 @@ static void redo_fd_request(void)
del_timer(&motor_off_timer); del_timer(&motor_off_timer);
ReqCnt = 0; ReqCnt = 0;
ReqCmd = CURRENT->cmd; ReqCmd = rq_data_dir(CURRENT);
ReqBlock = CURRENT->sector; ReqBlock = CURRENT->sector;
ReqBuffer = CURRENT->buffer; ReqBuffer = CURRENT->buffer;
setup_req_params(drive); setup_req_params(drive);
......
...@@ -439,7 +439,7 @@ static void mfm_rw_intr(void) ...@@ -439,7 +439,7 @@ static void mfm_rw_intr(void)
a choice of command end or some data which is ready to be collected */ a choice of command end or some data which is ready to be collected */
/* I think we have to transfer data while the interrupt line is on and its /* I think we have to transfer data while the interrupt line is on and its
not any other type of interrupt */ not any other type of interrupt */
if (CURRENT->cmd == WRITE) { if (rq_data_dir(CURRENT) == WRITE) {
extern void hdc63463_writedma(void); extern void hdc63463_writedma(void);
if ((hdc63463_dataleft <= 0) && (!(mfm_status & STAT_CED))) { if ((hdc63463_dataleft <= 0) && (!(mfm_status & STAT_CED))) {
printk("mfm_rw_intr: Apparent DMA write request when no more to DMA\n"); printk("mfm_rw_intr: Apparent DMA write request when no more to DMA\n");
...@@ -799,7 +799,7 @@ static void issue_request(unsigned int block, unsigned int nsect, ...@@ -799,7 +799,7 @@ static void issue_request(unsigned int block, unsigned int nsect,
raw_cmd.head = start_head; raw_cmd.head = start_head;
raw_cmd.cylinder = track / p->heads; raw_cmd.cylinder = track / p->heads;
raw_cmd.cmdtype = CURRENT->cmd; raw_cmd.cmdtype = CURRENT->cmd;
raw_cmd.cmdcode = CURRENT->cmd == WRITE ? CMD_WD : CMD_RD; raw_cmd.cmdcode = rq_data_dir(CURRENT) == WRITE ? CMD_WD : CMD_RD;
raw_cmd.cmddata[0] = dev + 1; /* DAG: +1 to get US */ raw_cmd.cmddata[0] = dev + 1; /* DAG: +1 to get US */
raw_cmd.cmddata[1] = raw_cmd.head; raw_cmd.cmddata[1] = raw_cmd.head;
raw_cmd.cmddata[2] = raw_cmd.cylinder >> 8; raw_cmd.cmddata[2] = raw_cmd.cylinder >> 8;
...@@ -830,7 +830,7 @@ static void issue_request(unsigned int block, unsigned int nsect, ...@@ -830,7 +830,7 @@ static void issue_request(unsigned int block, unsigned int nsect,
hdc63463_dataleft = nsect * 256; /* Better way? */ hdc63463_dataleft = nsect * 256; /* Better way? */
DBG("mfm%c: %sing: CHS=%d/%d/%d, sectors=%d, buffer=0x%08lx (%p)\n", DBG("mfm%c: %sing: CHS=%d/%d/%d, sectors=%d, buffer=0x%08lx (%p)\n",
raw_cmd.dev + 'a', (CURRENT->cmd == READ) ? "read" : "writ", raw_cmd.dev + 'a', rq_data_dir(CURRENT) == READ ? "read" : "writ",
raw_cmd.cylinder, raw_cmd.cylinder,
raw_cmd.head, raw_cmd.head,
raw_cmd.sector, nsect, (unsigned long) Copy_buffer, CURRENT); raw_cmd.sector, nsect, (unsigned long) Copy_buffer, CURRENT);
...@@ -917,13 +917,6 @@ static void mfm_request(void) ...@@ -917,13 +917,6 @@ static void mfm_request(void)
DBG("mfm_request: block after offset=%d\n", block); DBG("mfm_request: block after offset=%d\n", block);
if (CURRENT->cmd != READ && CURRENT->cmd != WRITE) {
printk("unknown mfm-command %d\n", CURRENT->cmd);
end_request(CURRENT, 0);
Busy = 0;
printk("mfm: continue 4\n");
continue;
}
issue_request(block, nsect, CURRENT); issue_request(block, nsect, CURRENT);
break; break;
......
...@@ -2,9 +2,12 @@ ...@@ -2,9 +2,12 @@
# Block device driver configuration # Block device driver configuration
# #
if BLOCK menuconfig BLK_DEV
bool "Block devices"
depends on BLOCK
default y
menu "Block devices" if BLK_DEV
config BLK_DEV_FD config BLK_DEV_FD
tristate "Normal floppy disk support" tristate "Normal floppy disk support"
...@@ -56,40 +59,9 @@ config AMIGA_Z2RAM ...@@ -56,40 +59,9 @@ config AMIGA_Z2RAM
To compile this driver as a module, choose M here: the To compile this driver as a module, choose M here: the
module will be called z2ram. module will be called z2ram.
config ATARI_ACSI
tristate "Atari ACSI support"
depends on ATARI && BROKEN
---help---
This enables support for the Atari ACSI interface. The driver
supports hard disks and CD-ROMs, which have 512-byte sectors, or can
be switched to that mode. Due to the ACSI command format, only disks
up to 1 GB are supported. Special support for certain ACSI to SCSI
adapters, which could relax that, isn't included yet. The ACSI
driver is also the basis for certain other drivers for devices
attached to the ACSI bus: Atari SLM laser printer, BioNet-100
Ethernet, and PAMsNet Ethernet. If you want to use one of these
devices, you need ACSI support, too.
To compile this driver as a module, choose M here: the
module will be called acsi.
comment "Some devices (e.g. CD jukebox) support multiple LUNs"
depends on ATARI && ATARI_ACSI
config ACSI_MULTI_LUN
bool "Probe all LUNs on each ACSI device"
depends on ATARI_ACSI
help
If you have a ACSI device that supports more than one LUN (Logical
Unit Number), e.g. a CD jukebox, you should say Y here so that all
will be found by the ACSI driver. An ACSI device with multiple LUNs
acts logically like multiple ACSI devices. The vast majority of ACSI
devices have only one LUN, and so most people can say N here and
should in fact do so, because it is safer.
config ATARI_SLM config ATARI_SLM
tristate "Atari SLM laser printer support" tristate "Atari SLM laser printer support"
depends on ATARI && ATARI_ACSI!=n depends on ATARI
help help
If you have an Atari SLM laser printer, say Y to include support for If you have an Atari SLM laser printer, say Y to include support for
it in the kernel. Otherwise, say N. This driver is also available as it in the kernel. Otherwise, say N. This driver is also available as
...@@ -453,6 +425,4 @@ config ATA_OVER_ETH ...@@ -453,6 +425,4 @@ config ATA_OVER_ETH
source "drivers/s390/block/Kconfig" source "drivers/s390/block/Kconfig"
endmenu endif # BLK_DEV
endif
...@@ -9,7 +9,6 @@ obj-$(CONFIG_MAC_FLOPPY) += swim3.o ...@@ -9,7 +9,6 @@ obj-$(CONFIG_MAC_FLOPPY) += swim3.o
obj-$(CONFIG_BLK_DEV_FD) += floppy.o obj-$(CONFIG_BLK_DEV_FD) += floppy.o
obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o
obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o
obj-$(CONFIG_ATARI_ACSI) += acsi.o
obj-$(CONFIG_ATARI_SLM) += acsi_slm.o obj-$(CONFIG_ATARI_SLM) += acsi_slm.o
obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o
obj-$(CONFIG_BLK_DEV_RAM) += rd.o obj-$(CONFIG_BLK_DEV_RAM) += rd.o
......
This diff is collapsed.
...@@ -1363,7 +1363,7 @@ static void redo_fd_request(void) ...@@ -1363,7 +1363,7 @@ static void redo_fd_request(void)
#ifdef DEBUG #ifdef DEBUG
printk("fd: sector %ld + %d requested for %s\n", printk("fd: sector %ld + %d requested for %s\n",
CURRENT->sector,cnt, CURRENT->sector,cnt,
(CURRENT->cmd==READ)?"read":"write"); (rq_data_dir(CURRENT) == READ) ? "read" : "write");
#endif #endif
block = CURRENT->sector + cnt; block = CURRENT->sector + cnt;
if ((int)block > floppy->blocks) { if ((int)block > floppy->blocks) {
......
...@@ -87,6 +87,7 @@ static const struct pci_device_id cciss_pci_device_id[] = { ...@@ -87,6 +87,7 @@ static const struct pci_device_id cciss_pci_device_id[] = {
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3214}, {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3214},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3215}, {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSD, 0x103C, 0x3215},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC, 0x103C, 0x3237}, {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC, 0x103C, 0x3237},
{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSC, 0x103C, 0x323D},
{PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
{0,} {0,}
...@@ -119,6 +120,7 @@ static struct board_type products[] = { ...@@ -119,6 +120,7 @@ static struct board_type products[] = {
{0x3214103C, "Smart Array E200i", &SA5_access, 120}, {0x3214103C, "Smart Array E200i", &SA5_access, 120},
{0x3215103C, "Smart Array E200i", &SA5_access, 120}, {0x3215103C, "Smart Array E200i", &SA5_access, 120},
{0x3237103C, "Smart Array E500", &SA5_access, 512}, {0x3237103C, "Smart Array E500", &SA5_access, 512},
{0x323D103C, "Smart Array P700m", &SA5_access, 512},
{0xFFFF103C, "Unknown Smart Array", &SA5_access, 120}, {0xFFFF103C, "Unknown Smart Array", &SA5_access, 120},
}; };
......
...@@ -416,7 +416,7 @@ static void nbd_clear_que(struct nbd_device *lo) ...@@ -416,7 +416,7 @@ static void nbd_clear_que(struct nbd_device *lo)
/* /*
* We always wait for result of write, for now. It would be nice to make it optional * We always wait for result of write, for now. It would be nice to make it optional
* in future * in future
* if ((req->cmd == WRITE) && (lo->flags & NBD_WRITE_NOCHK)) * if ((rq_data_dir(req) == WRITE) && (lo->flags & NBD_WRITE_NOCHK))
* { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); } * { printk( "Warning: Ignoring result!\n"); nbd_end_request( req ); }
*/ */
......
#
# CDROM driver configuration
#
menu "Old CD-ROM drivers (not SCSI, not IDE)"
depends on ISA && BLOCK
config CD_NO_IDESCSI
bool "Support non-SCSI/IDE/ATAPI CDROM drives"
---help---
If you have a CD-ROM drive that is neither SCSI nor IDE/ATAPI, say Y
here, otherwise N. Read the CD-ROM-HOWTO, available from
<http://www.tldp.org/docs.html#howto>.
Note that the answer to this question doesn't directly affect the
kernel: saying N will just cause the configurator to skip all
the questions about these CD-ROM drives. If you are unsure what you
have, say Y and find out whether you have one of the following
drives.
For each of these drivers, a <file:Documentation/cdrom/{driver_name}>
exists. Especially in cases where you do not know exactly which kind
of drive you have you should read there. Most of these drivers use a
file drivers/cdrom/{driver_name}.h where you can define your
interface parameters and switch some internal goodies.
To compile these CD-ROM drivers as a module, choose M instead of Y.
If you want to use any of these CD-ROM drivers, you also have to
answer Y or M to "ISO 9660 CD-ROM file system support" below (this
answer will get "defaulted" for you if you enable any of the Linux
CD-ROM drivers).
config AZTCD
tristate "Aztech/Orchid/Okano/Wearnes/TXC/CyDROM CDROM support"
depends on CD_NO_IDESCSI
---help---
This is your driver if you have an Aztech CDA268-01A, Orchid
CD-3110, Okano or Wearnes CDD110, Conrad TXC, or CyCD-ROM CR520 or
CR540 CD-ROM drive. This driver -- just like all these CD-ROM
drivers -- is NOT for CD-ROM drives with IDE/ATAPI interfaces, such
as Aztech CDA269-031SE. Please read the file
<file:Documentation/cdrom/aztcd>.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called aztcd.
config GSCD
tristate "Goldstar R420 CDROM support"
depends on CD_NO_IDESCSI
---help---
If this is your CD-ROM drive, say Y here. As described in the file
<file:Documentation/cdrom/gscd>, you might have to change a setting
in the file <file:drivers/cdrom/gscd.h> before compiling the
kernel. Please read the file <file:Documentation/cdrom/gscd>.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called gscd.
config SBPCD
tristate "Matsushita/Panasonic/Creative, Longshine, TEAC CDROM support"
depends on CD_NO_IDESCSI && BROKEN_ON_SMP
---help---
This driver supports most of the drives which use the Panasonic or
Sound Blaster interface. Please read the file
<file:Documentation/cdrom/sbpcd>.
The Matsushita CR-521, CR-522, CR-523, CR-562, CR-563 drives
(sometimes labeled "Creative"), the Creative Labs CD200, the
Longshine LCS-7260, the "IBM External ISA CD-ROM" (in fact a CR-56x
model), the TEAC CD-55A fall under this category. Some other
"electrically compatible" drives (Vertos, Genoa, some Funai models)
are currently not supported; for the Sanyo H94A drive currently a
separate driver (asked later) is responsible. Most drives have a
uniquely shaped faceplate, with a caddyless motorized drawer, but
without external brand markings. The older CR-52x drives have a
caddy and manual loading/eject, but still no external markings. The
driver is able to do an extended auto-probing for interface
addresses and drive types; this can help to find facts in cases you
are not sure, but can consume some time during the boot process if
none of the supported drives gets found. Once your drive got found,
you should enter the reported parameters into
<file:drivers/cdrom/sbpcd.h> and set "DISTRIBUTION 0" there.
This driver can support up to four CD-ROM controller cards, and each
card can support up to four CD-ROM drives; if you say Y here, you
will be asked how many controller cards you have. If compiled as a
module, only one controller card (but with up to four drives) is
usable.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called sbpcd.
config MCDX
tristate "Mitsumi CDROM support"
depends on CD_NO_IDESCSI
---help---
Use this driver if you want to be able to use your Mitsumi LU-005,
FX-001 or FX-001D CD-ROM drive.
Please read the file <file:Documentation/cdrom/mcdx>.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called mcdx.
config OPTCD
tristate "Optics Storage DOLPHIN 8000AT CDROM support"
depends on CD_NO_IDESCSI
---help---
This is the driver for the 'DOLPHIN' drive with a 34-pin Sony
compatible interface. It also works with the Lasermate CR328A. If
you have one of those, say Y. This driver does not work for the
Optics Storage 8001 drive; use the IDE-ATAPI CD-ROM driver for that
one. Please read the file <file:Documentation/cdrom/optcd>.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called optcd.
config CM206
tristate "Philips/LMS CM206 CDROM support"
depends on CD_NO_IDESCSI && BROKEN_ON_SMP
---help---
If you have a Philips/LMS CD-ROM drive cm206 in combination with a
cm260 host adapter card, say Y here. Please also read the file
<file:Documentation/cdrom/cm206>.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called cm206.
config SJCD
tristate "Sanyo CDR-H94A CDROM support"
depends on CD_NO_IDESCSI
help
If this is your CD-ROM drive, say Y here and read the file
<file:Documentation/cdrom/sjcd>. You should then also say Y or M to
"ISO 9660 CD-ROM file system support" below, because that's the
file system used on CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called sjcd.
config ISP16_CDI
tristate "ISP16/MAD16/Mozart soft configurable cdrom interface support"
depends on CD_NO_IDESCSI
---help---
These are sound cards with built-in cdrom interfaces using the OPTi
82C928 or 82C929 chips. Say Y here to have them detected and
possibly configured at boot time. In addition, You'll have to say Y
to a driver for the particular cdrom drive you have attached to the
card. Read <file:Documentation/cdrom/isp16> for details.
To compile this driver as a module, choose M here: the
module will be called isp16.
config CDU31A
tristate "Sony CDU31A/CDU33A CDROM support"
depends on CD_NO_IDESCSI && BROKEN_ON_SMP
---help---
These CD-ROM drives have a spring-pop-out caddyless drawer, and a
rectangular green LED centered beneath it. NOTE: these CD-ROM
drives will not be auto detected by the kernel at boot time; you
have to provide the interface address as an option to the kernel at
boot time as described in <file:Documentation/cdrom/cdu31a> or fill
in your parameters into <file:drivers/cdrom/cdu31a.c>. Try "man
bootparam" or see the documentation of your boot loader (lilo or
loadlin) about how to pass options to the kernel.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called cdu31a.
config CDU535
tristate "Sony CDU535 CDROM support"
depends on CD_NO_IDESCSI
---help---
This is the driver for the older Sony CDU-535 and CDU-531 CD-ROM
drives. Please read the file <file:Documentation/cdrom/sonycd535>.
If you say Y here, you should also say Y or M to "ISO 9660 CD-ROM
file system support" below, because that's the file system used on
CD-ROMs.
To compile this driver as a module, choose M here: the
module will be called sonycd535.
endmenu
...@@ -10,14 +10,4 @@ obj-$(CONFIG_BLK_DEV_SR) += cdrom.o ...@@ -10,14 +10,4 @@ obj-$(CONFIG_BLK_DEV_SR) += cdrom.o
obj-$(CONFIG_PARIDE_PCD) += cdrom.o obj-$(CONFIG_PARIDE_PCD) += cdrom.o
obj-$(CONFIG_CDROM_PKTCDVD) += cdrom.o obj-$(CONFIG_CDROM_PKTCDVD) += cdrom.o
obj-$(CONFIG_AZTCD) += aztcd.o
obj-$(CONFIG_CDU31A) += cdu31a.o cdrom.o
obj-$(CONFIG_CM206) += cm206.o cdrom.o
obj-$(CONFIG_GSCD) += gscd.o
obj-$(CONFIG_ISP16_CDI) += isp16.o
obj-$(CONFIG_MCDX) += mcdx.o cdrom.o
obj-$(CONFIG_OPTCD) += optcd.o
obj-$(CONFIG_SBPCD) += sbpcd.o cdrom.o
obj-$(CONFIG_SJCD) += sjcd.o
obj-$(CONFIG_CDU535) += sonycd535.o
obj-$(CONFIG_VIOCD) += viocd.o cdrom.o obj-$(CONFIG_VIOCD) += viocd.o cdrom.o
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
/*
* Definitions for a GoldStar R420 CD-ROM interface
*
* Copyright (C) 1995 Oliver Raupach <raupach@nwfs1.rz.fh-hannover.de>
* Eberhard Moenkeberg <emoenke@gwdg.de>
*
* Published under the GPL.
*
*/
/* The Interface Card default address is 0x340. This will work for most
applications. Address selection is accomplished by jumpers PN801-1 to
PN801-4 on the GoldStar Interface Card.
Appropriate settings are: 0x300, 0x310, 0x320, 0x330, 0x340, 0x350, 0x360
0x370, 0x380, 0x390, 0x3A0, 0x3B0, 0x3C0, 0x3D0, 0x3E0, 0x3F0 */
/* insert here the I/O port address and extent */
#define GSCD_BASE_ADDR 0x340
#define GSCD_IO_EXTENT 4
/************** nothing to set up below here *********************/
/* port access macro */
#define GSCDPORT(x) (gscd_port + (x))
/*
* commands
* the lower nibble holds the command length
*/
#define CMD_STATUS 0x01
#define CMD_READSUBQ 0x02 /* 1: ?, 2: UPC, 5: ? */
#define CMD_SEEK 0x05 /* read_mode M-S-F */
#define CMD_READ 0x07 /* read_mode M-S-F nsec_h nsec_l */
#define CMD_RESET 0x11
#define CMD_SETMODE 0x15
#define CMD_PLAY 0x17 /* M-S-F M-S-F */
#define CMD_LOCK_CTL 0x22 /* 0: unlock, 1: lock */
#define CMD_IDENT 0x31
#define CMD_SETSPEED 0x32 /* 0: auto */ /* ??? */
#define CMD_GETMODE 0x41
#define CMD_PAUSE 0x51
#define CMD_READTOC 0x61
#define CMD_DISKINFO 0x71
#define CMD_TRAY_CTL 0x81
/*
* disk_state:
*/
#define ST_PLAYING 0x80
#define ST_UNLOCKED 0x40
#define ST_NO_DISK 0x20
#define ST_DOOR_OPEN 0x10
#define ST_x08 0x08
#define ST_x04 0x04
#define ST_INVALID 0x02
#define ST_x01 0x01
/*
* cmd_type:
*/
#define TYPE_INFO 0x01
#define TYPE_DATA 0x02
/*
* read_mode:
*/
#define MOD_POLLED 0x80
#define MOD_x08 0x08
#define MOD_RAW 0x04
#define READ_DATA(port, buf, nr) insb(port, buf, nr)
#define SET_TIMER(func, jifs) \
((mod_timer(&gscd_timer, jiffies + jifs)), \
(gscd_timer.function = func))
#define CLEAR_TIMER del_timer_sync(&gscd_timer)
#define MAX_TRACKS 104
struct msf {
unsigned char min;
unsigned char sec;
unsigned char frame;
};
struct gscd_Play_msf {
struct msf start;
struct msf end;
};
struct gscd_DiskInfo {
unsigned char first;
unsigned char last;
struct msf diskLength;
struct msf firstTrack;
};
struct gscd_Toc {
unsigned char ctrl_addr;
unsigned char track;
unsigned char pointIndex;
struct msf trackTime;
struct msf diskTime;
};
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
...@@ -623,7 +623,8 @@ static void hd_request(void) ...@@ -623,7 +623,8 @@ static void hd_request(void)
cyl = track / disk->head; cyl = track / disk->head;
#ifdef DEBUG #ifdef DEBUG
printk("%s: %sing: CHS=%d/%d/%d, sectors=%d, buffer=%p\n", printk("%s: %sing: CHS=%d/%d/%d, sectors=%d, buffer=%p\n",
req->rq_disk->disk_name, (req->cmd == READ)?"read":"writ", req->rq_disk->disk_name,
req_data_dir(req) == READ ? "read" : "writ",
cyl, head, sec, nsect, req->buffer); cyl, head, sec, nsect, req->buffer);
#endif #endif
if (blk_fs_request(req)) { if (blk_fs_request(req)) {
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
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