Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/ide/ide-cd.c
15109 views
1
/*
2
* ATAPI CD-ROM driver.
3
*
4
* Copyright (C) 1994-1996 Scott Snyder <[email protected]>
5
* Copyright (C) 1996-1998 Erik Andersen <[email protected]>
6
* Copyright (C) 1998-2000 Jens Axboe <[email protected]>
7
* Copyright (C) 2005, 2007-2009 Bartlomiej Zolnierkiewicz
8
*
9
* May be copied or modified under the terms of the GNU General Public
10
* License. See linux/COPYING for more information.
11
*
12
* See Documentation/cdrom/ide-cd for usage information.
13
*
14
* Suggestions are welcome. Patches that work are more welcome though. ;-)
15
*
16
* Documentation:
17
* Mt. Fuji (SFF8090 version 4) and ATAPI (SFF-8020i rev 2.6) standards.
18
*
19
* For historical changelog please see:
20
* Documentation/ide/ChangeLog.ide-cd.1994-2004
21
*/
22
23
#define DRV_NAME "ide-cd"
24
#define PFX DRV_NAME ": "
25
26
#define IDECD_VERSION "5.00"
27
28
#include <linux/module.h>
29
#include <linux/types.h>
30
#include <linux/kernel.h>
31
#include <linux/delay.h>
32
#include <linux/timer.h>
33
#include <linux/seq_file.h>
34
#include <linux/slab.h>
35
#include <linux/interrupt.h>
36
#include <linux/errno.h>
37
#include <linux/cdrom.h>
38
#include <linux/ide.h>
39
#include <linux/completion.h>
40
#include <linux/mutex.h>
41
#include <linux/bcd.h>
42
43
/* For SCSI -> ATAPI command conversion */
44
#include <scsi/scsi.h>
45
46
#include <linux/irq.h>
47
#include <linux/io.h>
48
#include <asm/byteorder.h>
49
#include <linux/uaccess.h>
50
#include <asm/unaligned.h>
51
52
#include "ide-cd.h"
53
54
static DEFINE_MUTEX(ide_cd_mutex);
55
static DEFINE_MUTEX(idecd_ref_mutex);
56
57
static void ide_cd_release(struct device *);
58
59
static struct cdrom_info *ide_cd_get(struct gendisk *disk)
60
{
61
struct cdrom_info *cd = NULL;
62
63
mutex_lock(&idecd_ref_mutex);
64
cd = ide_drv_g(disk, cdrom_info);
65
if (cd) {
66
if (ide_device_get(cd->drive))
67
cd = NULL;
68
else
69
get_device(&cd->dev);
70
71
}
72
mutex_unlock(&idecd_ref_mutex);
73
return cd;
74
}
75
76
static void ide_cd_put(struct cdrom_info *cd)
77
{
78
ide_drive_t *drive = cd->drive;
79
80
mutex_lock(&idecd_ref_mutex);
81
put_device(&cd->dev);
82
ide_device_put(drive);
83
mutex_unlock(&idecd_ref_mutex);
84
}
85
86
/*
87
* Generic packet command support and error handling routines.
88
*/
89
90
/* Mark that we've seen a media change and invalidate our internal buffers. */
91
static void cdrom_saw_media_change(ide_drive_t *drive)
92
{
93
drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED;
94
drive->atapi_flags &= ~IDE_AFLAG_TOC_VALID;
95
}
96
97
static int cdrom_log_sense(ide_drive_t *drive, struct request *rq)
98
{
99
struct request_sense *sense = &drive->sense_data;
100
int log = 0;
101
102
if (!sense || !rq || (rq->cmd_flags & REQ_QUIET))
103
return 0;
104
105
ide_debug_log(IDE_DBG_SENSE, "sense_key: 0x%x", sense->sense_key);
106
107
switch (sense->sense_key) {
108
case NO_SENSE:
109
case RECOVERED_ERROR:
110
break;
111
case NOT_READY:
112
/*
113
* don't care about tray state messages for e.g. capacity
114
* commands or in-progress or becoming ready
115
*/
116
if (sense->asc == 0x3a || sense->asc == 0x04)
117
break;
118
log = 1;
119
break;
120
case ILLEGAL_REQUEST:
121
/*
122
* don't log START_STOP unit with LoEj set, since we cannot
123
* reliably check if drive can auto-close
124
*/
125
if (rq->cmd[0] == GPCMD_START_STOP_UNIT && sense->asc == 0x24)
126
break;
127
log = 1;
128
break;
129
case UNIT_ATTENTION:
130
/*
131
* Make good and sure we've seen this potential media change.
132
* Some drives (i.e. Creative) fail to present the correct sense
133
* key in the error register.
134
*/
135
cdrom_saw_media_change(drive);
136
break;
137
default:
138
log = 1;
139
break;
140
}
141
return log;
142
}
143
144
static void cdrom_analyze_sense_data(ide_drive_t *drive,
145
struct request *failed_command)
146
{
147
struct request_sense *sense = &drive->sense_data;
148
struct cdrom_info *info = drive->driver_data;
149
unsigned long sector;
150
unsigned long bio_sectors;
151
152
ide_debug_log(IDE_DBG_SENSE, "error_code: 0x%x, sense_key: 0x%x",
153
sense->error_code, sense->sense_key);
154
155
if (failed_command)
156
ide_debug_log(IDE_DBG_SENSE, "failed cmd: 0x%x",
157
failed_command->cmd[0]);
158
159
if (!cdrom_log_sense(drive, failed_command))
160
return;
161
162
/*
163
* If a read toc is executed for a CD-R or CD-RW medium where the first
164
* toc has not been recorded yet, it will fail with 05/24/00 (which is a
165
* confusing error)
166
*/
167
if (failed_command && failed_command->cmd[0] == GPCMD_READ_TOC_PMA_ATIP)
168
if (sense->sense_key == 0x05 && sense->asc == 0x24)
169
return;
170
171
/* current error */
172
if (sense->error_code == 0x70) {
173
switch (sense->sense_key) {
174
case MEDIUM_ERROR:
175
case VOLUME_OVERFLOW:
176
case ILLEGAL_REQUEST:
177
if (!sense->valid)
178
break;
179
if (failed_command == NULL ||
180
failed_command->cmd_type != REQ_TYPE_FS)
181
break;
182
sector = (sense->information[0] << 24) |
183
(sense->information[1] << 16) |
184
(sense->information[2] << 8) |
185
(sense->information[3]);
186
187
if (queue_logical_block_size(drive->queue) == 2048)
188
/* device sector size is 2K */
189
sector <<= 2;
190
191
bio_sectors = max(bio_sectors(failed_command->bio), 4U);
192
sector &= ~(bio_sectors - 1);
193
194
/*
195
* The SCSI specification allows for the value
196
* returned by READ CAPACITY to be up to 75 2K
197
* sectors past the last readable block.
198
* Therefore, if we hit a medium error within the
199
* last 75 2K sectors, we decrease the saved size
200
* value.
201
*/
202
if (sector < get_capacity(info->disk) &&
203
drive->probed_capacity - sector < 4 * 75)
204
set_capacity(info->disk, sector);
205
}
206
}
207
208
ide_cd_log_error(drive->name, failed_command, sense);
209
}
210
211
static void ide_cd_complete_failed_rq(ide_drive_t *drive, struct request *rq)
212
{
213
/*
214
* For REQ_TYPE_SENSE, "rq->special" points to the original
215
* failed request. Also, the sense data should be read
216
* directly from rq which might be different from the original
217
* sense buffer if it got copied during mapping.
218
*/
219
struct request *failed = (struct request *)rq->special;
220
void *sense = bio_data(rq->bio);
221
222
if (failed) {
223
if (failed->sense) {
224
/*
225
* Sense is always read into drive->sense_data.
226
* Copy back if the failed request has its
227
* sense pointer set.
228
*/
229
memcpy(failed->sense, sense, 18);
230
failed->sense_len = rq->sense_len;
231
}
232
cdrom_analyze_sense_data(drive, failed);
233
234
if (ide_end_rq(drive, failed, -EIO, blk_rq_bytes(failed)))
235
BUG();
236
} else
237
cdrom_analyze_sense_data(drive, NULL);
238
}
239
240
241
/*
242
* Allow the drive 5 seconds to recover; some devices will return NOT_READY
243
* while flushing data from cache.
244
*
245
* returns: 0 failed (write timeout expired)
246
* 1 success
247
*/
248
static int ide_cd_breathe(ide_drive_t *drive, struct request *rq)
249
{
250
251
struct cdrom_info *info = drive->driver_data;
252
253
if (!rq->errors)
254
info->write_timeout = jiffies + ATAPI_WAIT_WRITE_BUSY;
255
256
rq->errors = 1;
257
258
if (time_after(jiffies, info->write_timeout))
259
return 0;
260
else {
261
/*
262
* take a breather
263
*/
264
blk_delay_queue(drive->queue, 1);
265
return 1;
266
}
267
}
268
269
/**
270
* Returns:
271
* 0: if the request should be continued.
272
* 1: if the request will be going through error recovery.
273
* 2: if the request should be ended.
274
*/
275
static int cdrom_decode_status(ide_drive_t *drive, u8 stat)
276
{
277
ide_hwif_t *hwif = drive->hwif;
278
struct request *rq = hwif->rq;
279
int err, sense_key, do_end_request = 0;
280
281
/* get the IDE error register */
282
err = ide_read_error(drive);
283
sense_key = err >> 4;
284
285
ide_debug_log(IDE_DBG_RQ, "cmd: 0x%x, rq->cmd_type: 0x%x, err: 0x%x, "
286
"stat 0x%x",
287
rq->cmd[0], rq->cmd_type, err, stat);
288
289
if (rq->cmd_type == REQ_TYPE_SENSE) {
290
/*
291
* We got an error trying to get sense info from the drive
292
* (probably while trying to recover from a former error).
293
* Just give up.
294
*/
295
rq->cmd_flags |= REQ_FAILED;
296
return 2;
297
}
298
299
/* if we have an error, pass CHECK_CONDITION as the SCSI status byte */
300
if (rq->cmd_type == REQ_TYPE_BLOCK_PC && !rq->errors)
301
rq->errors = SAM_STAT_CHECK_CONDITION;
302
303
if (blk_noretry_request(rq))
304
do_end_request = 1;
305
306
switch (sense_key) {
307
case NOT_READY:
308
if (rq->cmd_type == REQ_TYPE_FS && rq_data_dir(rq) == WRITE) {
309
if (ide_cd_breathe(drive, rq))
310
return 1;
311
} else {
312
cdrom_saw_media_change(drive);
313
314
if (rq->cmd_type == REQ_TYPE_FS &&
315
!(rq->cmd_flags & REQ_QUIET))
316
printk(KERN_ERR PFX "%s: tray open\n",
317
drive->name);
318
}
319
do_end_request = 1;
320
break;
321
case UNIT_ATTENTION:
322
cdrom_saw_media_change(drive);
323
324
if (rq->cmd_type != REQ_TYPE_FS)
325
return 0;
326
327
/*
328
* Arrange to retry the request but be sure to give up if we've
329
* retried too many times.
330
*/
331
if (++rq->errors > ERROR_MAX)
332
do_end_request = 1;
333
break;
334
case ILLEGAL_REQUEST:
335
/*
336
* Don't print error message for this condition -- SFF8090i
337
* indicates that 5/24/00 is the correct response to a request
338
* to close the tray if the drive doesn't have that capability.
339
*
340
* cdrom_log_sense() knows this!
341
*/
342
if (rq->cmd[0] == GPCMD_START_STOP_UNIT)
343
break;
344
/* fall-through */
345
case DATA_PROTECT:
346
/*
347
* No point in retrying after an illegal request or data
348
* protect error.
349
*/
350
if (!(rq->cmd_flags & REQ_QUIET))
351
ide_dump_status(drive, "command error", stat);
352
do_end_request = 1;
353
break;
354
case MEDIUM_ERROR:
355
/*
356
* No point in re-trying a zillion times on a bad sector.
357
* If we got here the error is not correctable.
358
*/
359
if (!(rq->cmd_flags & REQ_QUIET))
360
ide_dump_status(drive, "media error "
361
"(bad sector)", stat);
362
do_end_request = 1;
363
break;
364
case BLANK_CHECK:
365
/* disk appears blank? */
366
if (!(rq->cmd_flags & REQ_QUIET))
367
ide_dump_status(drive, "media error (blank)",
368
stat);
369
do_end_request = 1;
370
break;
371
default:
372
if (rq->cmd_type != REQ_TYPE_FS)
373
break;
374
if (err & ~ATA_ABORTED) {
375
/* go to the default handler for other errors */
376
ide_error(drive, "cdrom_decode_status", stat);
377
return 1;
378
} else if (++rq->errors > ERROR_MAX)
379
/* we've racked up too many retries, abort */
380
do_end_request = 1;
381
}
382
383
if (rq->cmd_type != REQ_TYPE_FS) {
384
rq->cmd_flags |= REQ_FAILED;
385
do_end_request = 1;
386
}
387
388
/*
389
* End a request through request sense analysis when we have sense data.
390
* We need this in order to perform end of media processing.
391
*/
392
if (do_end_request)
393
goto end_request;
394
395
/* if we got a CHECK_CONDITION status, queue a request sense command */
396
if (stat & ATA_ERR)
397
return ide_queue_sense_rq(drive, NULL) ? 2 : 1;
398
return 1;
399
400
end_request:
401
if (stat & ATA_ERR) {
402
hwif->rq = NULL;
403
return ide_queue_sense_rq(drive, rq) ? 2 : 1;
404
} else
405
return 2;
406
}
407
408
static void ide_cd_request_sense_fixup(ide_drive_t *drive, struct ide_cmd *cmd)
409
{
410
struct request *rq = cmd->rq;
411
412
ide_debug_log(IDE_DBG_FUNC, "rq->cmd[0]: 0x%x", rq->cmd[0]);
413
414
/*
415
* Some of the trailing request sense fields are optional,
416
* and some drives don't send them. Sigh.
417
*/
418
if (rq->cmd[0] == GPCMD_REQUEST_SENSE &&
419
cmd->nleft > 0 && cmd->nleft <= 5)
420
cmd->nleft = 0;
421
}
422
423
int ide_cd_queue_pc(ide_drive_t *drive, const unsigned char *cmd,
424
int write, void *buffer, unsigned *bufflen,
425
struct request_sense *sense, int timeout,
426
unsigned int cmd_flags)
427
{
428
struct cdrom_info *info = drive->driver_data;
429
struct request_sense local_sense;
430
int retries = 10;
431
unsigned int flags = 0;
432
433
if (!sense)
434
sense = &local_sense;
435
436
ide_debug_log(IDE_DBG_PC, "cmd[0]: 0x%x, write: 0x%x, timeout: %d, "
437
"cmd_flags: 0x%x",
438
cmd[0], write, timeout, cmd_flags);
439
440
/* start of retry loop */
441
do {
442
struct request *rq;
443
int error;
444
445
rq = blk_get_request(drive->queue, write, __GFP_WAIT);
446
447
memcpy(rq->cmd, cmd, BLK_MAX_CDB);
448
rq->cmd_type = REQ_TYPE_ATA_PC;
449
rq->sense = sense;
450
rq->cmd_flags |= cmd_flags;
451
rq->timeout = timeout;
452
if (buffer) {
453
error = blk_rq_map_kern(drive->queue, rq, buffer,
454
*bufflen, GFP_NOIO);
455
if (error) {
456
blk_put_request(rq);
457
return error;
458
}
459
}
460
461
error = blk_execute_rq(drive->queue, info->disk, rq, 0);
462
463
if (buffer)
464
*bufflen = rq->resid_len;
465
466
flags = rq->cmd_flags;
467
blk_put_request(rq);
468
469
/*
470
* FIXME: we should probably abort/retry or something in case of
471
* failure.
472
*/
473
if (flags & REQ_FAILED) {
474
/*
475
* The request failed. Retry if it was due to a unit
476
* attention status (usually means media was changed).
477
*/
478
struct request_sense *reqbuf = sense;
479
480
if (reqbuf->sense_key == UNIT_ATTENTION)
481
cdrom_saw_media_change(drive);
482
else if (reqbuf->sense_key == NOT_READY &&
483
reqbuf->asc == 4 && reqbuf->ascq != 4) {
484
/*
485
* The drive is in the process of loading
486
* a disk. Retry, but wait a little to give
487
* the drive time to complete the load.
488
*/
489
ssleep(2);
490
} else {
491
/* otherwise, don't retry */
492
retries = 0;
493
}
494
--retries;
495
}
496
497
/* end of retry loop */
498
} while ((flags & REQ_FAILED) && retries >= 0);
499
500
/* return an error if the command failed */
501
return (flags & REQ_FAILED) ? -EIO : 0;
502
}
503
504
/*
505
* returns true if rq has been completed
506
*/
507
static bool ide_cd_error_cmd(ide_drive_t *drive, struct ide_cmd *cmd)
508
{
509
unsigned int nr_bytes = cmd->nbytes - cmd->nleft;
510
511
if (cmd->tf_flags & IDE_TFLAG_WRITE)
512
nr_bytes -= cmd->last_xfer_len;
513
514
if (nr_bytes > 0) {
515
ide_complete_rq(drive, 0, nr_bytes);
516
return true;
517
}
518
519
return false;
520
}
521
522
static ide_startstop_t cdrom_newpc_intr(ide_drive_t *drive)
523
{
524
ide_hwif_t *hwif = drive->hwif;
525
struct ide_cmd *cmd = &hwif->cmd;
526
struct request *rq = hwif->rq;
527
ide_expiry_t *expiry = NULL;
528
int dma_error = 0, dma, thislen, uptodate = 0;
529
int write = (rq_data_dir(rq) == WRITE) ? 1 : 0, rc = 0;
530
int sense = (rq->cmd_type == REQ_TYPE_SENSE);
531
unsigned int timeout;
532
u16 len;
533
u8 ireason, stat;
534
535
ide_debug_log(IDE_DBG_PC, "cmd: 0x%x, write: 0x%x", rq->cmd[0], write);
536
537
/* check for errors */
538
dma = drive->dma;
539
if (dma) {
540
drive->dma = 0;
541
drive->waiting_for_dma = 0;
542
dma_error = hwif->dma_ops->dma_end(drive);
543
ide_dma_unmap_sg(drive, cmd);
544
if (dma_error) {
545
printk(KERN_ERR PFX "%s: DMA %s error\n", drive->name,
546
write ? "write" : "read");
547
ide_dma_off(drive);
548
}
549
}
550
551
/* check status */
552
stat = hwif->tp_ops->read_status(hwif);
553
554
if (!OK_STAT(stat, 0, BAD_R_STAT)) {
555
rc = cdrom_decode_status(drive, stat);
556
if (rc) {
557
if (rc == 2)
558
goto out_end;
559
return ide_stopped;
560
}
561
}
562
563
/* using dma, transfer is complete now */
564
if (dma) {
565
if (dma_error)
566
return ide_error(drive, "dma error", stat);
567
uptodate = 1;
568
goto out_end;
569
}
570
571
ide_read_bcount_and_ireason(drive, &len, &ireason);
572
573
thislen = (rq->cmd_type == REQ_TYPE_FS) ? len : cmd->nleft;
574
if (thislen > len)
575
thislen = len;
576
577
ide_debug_log(IDE_DBG_PC, "DRQ: stat: 0x%x, thislen: %d",
578
stat, thislen);
579
580
/* If DRQ is clear, the command has completed. */
581
if ((stat & ATA_DRQ) == 0) {
582
if (rq->cmd_type == REQ_TYPE_FS) {
583
/*
584
* If we're not done reading/writing, complain.
585
* Otherwise, complete the command normally.
586
*/
587
uptodate = 1;
588
if (cmd->nleft > 0) {
589
printk(KERN_ERR PFX "%s: %s: data underrun "
590
"(%u bytes)\n", drive->name, __func__,
591
cmd->nleft);
592
if (!write)
593
rq->cmd_flags |= REQ_FAILED;
594
uptodate = 0;
595
}
596
} else if (rq->cmd_type != REQ_TYPE_BLOCK_PC) {
597
ide_cd_request_sense_fixup(drive, cmd);
598
599
uptodate = cmd->nleft ? 0 : 1;
600
601
/*
602
* suck out the remaining bytes from the drive in an
603
* attempt to complete the data xfer. (see BZ#13399)
604
*/
605
if (!(stat & ATA_ERR) && !uptodate && thislen) {
606
ide_pio_bytes(drive, cmd, write, thislen);
607
uptodate = cmd->nleft ? 0 : 1;
608
}
609
610
if (!uptodate)
611
rq->cmd_flags |= REQ_FAILED;
612
}
613
goto out_end;
614
}
615
616
rc = ide_check_ireason(drive, rq, len, ireason, write);
617
if (rc)
618
goto out_end;
619
620
cmd->last_xfer_len = 0;
621
622
ide_debug_log(IDE_DBG_PC, "data transfer, rq->cmd_type: 0x%x, "
623
"ireason: 0x%x",
624
rq->cmd_type, ireason);
625
626
/* transfer data */
627
while (thislen > 0) {
628
int blen = min_t(int, thislen, cmd->nleft);
629
630
if (cmd->nleft == 0)
631
break;
632
633
ide_pio_bytes(drive, cmd, write, blen);
634
cmd->last_xfer_len += blen;
635
636
thislen -= blen;
637
len -= blen;
638
639
if (sense && write == 0)
640
rq->sense_len += blen;
641
}
642
643
/* pad, if necessary */
644
if (len > 0) {
645
if (rq->cmd_type != REQ_TYPE_FS || write == 0)
646
ide_pad_transfer(drive, write, len);
647
else {
648
printk(KERN_ERR PFX "%s: confused, missing data\n",
649
drive->name);
650
blk_dump_rq_flags(rq, "cdrom_newpc_intr");
651
}
652
}
653
654
if (rq->cmd_type == REQ_TYPE_BLOCK_PC) {
655
timeout = rq->timeout;
656
} else {
657
timeout = ATAPI_WAIT_PC;
658
if (rq->cmd_type != REQ_TYPE_FS)
659
expiry = ide_cd_expiry;
660
}
661
662
hwif->expiry = expiry;
663
ide_set_handler(drive, cdrom_newpc_intr, timeout);
664
return ide_started;
665
666
out_end:
667
if (rq->cmd_type == REQ_TYPE_BLOCK_PC && rc == 0) {
668
rq->resid_len = 0;
669
blk_end_request_all(rq, 0);
670
hwif->rq = NULL;
671
} else {
672
if (sense && uptodate)
673
ide_cd_complete_failed_rq(drive, rq);
674
675
if (rq->cmd_type == REQ_TYPE_FS) {
676
if (cmd->nleft == 0)
677
uptodate = 1;
678
} else {
679
if (uptodate <= 0 && rq->errors == 0)
680
rq->errors = -EIO;
681
}
682
683
if (uptodate == 0 && rq->bio)
684
if (ide_cd_error_cmd(drive, cmd))
685
return ide_stopped;
686
687
/* make sure it's fully ended */
688
if (rq->cmd_type != REQ_TYPE_FS) {
689
rq->resid_len -= cmd->nbytes - cmd->nleft;
690
if (uptodate == 0 && (cmd->tf_flags & IDE_TFLAG_WRITE))
691
rq->resid_len += cmd->last_xfer_len;
692
}
693
694
ide_complete_rq(drive, uptodate ? 0 : -EIO, blk_rq_bytes(rq));
695
696
if (sense && rc == 2)
697
ide_error(drive, "request sense failure", stat);
698
}
699
return ide_stopped;
700
}
701
702
static ide_startstop_t cdrom_start_rw(ide_drive_t *drive, struct request *rq)
703
{
704
struct cdrom_info *cd = drive->driver_data;
705
struct request_queue *q = drive->queue;
706
int write = rq_data_dir(rq) == WRITE;
707
unsigned short sectors_per_frame =
708
queue_logical_block_size(q) >> SECTOR_BITS;
709
710
ide_debug_log(IDE_DBG_RQ, "rq->cmd[0]: 0x%x, rq->cmd_flags: 0x%x, "
711
"secs_per_frame: %u",
712
rq->cmd[0], rq->cmd_flags, sectors_per_frame);
713
714
if (write) {
715
/* disk has become write protected */
716
if (get_disk_ro(cd->disk))
717
return ide_stopped;
718
} else {
719
/*
720
* We may be retrying this request after an error. Fix up any
721
* weirdness which might be present in the request packet.
722
*/
723
q->prep_rq_fn(q, rq);
724
}
725
726
/* fs requests *must* be hardware frame aligned */
727
if ((blk_rq_sectors(rq) & (sectors_per_frame - 1)) ||
728
(blk_rq_pos(rq) & (sectors_per_frame - 1)))
729
return ide_stopped;
730
731
/* use DMA, if possible */
732
drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA);
733
734
if (write)
735
cd->devinfo.media_written = 1;
736
737
rq->timeout = ATAPI_WAIT_PC;
738
739
return ide_started;
740
}
741
742
static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq)
743
{
744
745
ide_debug_log(IDE_DBG_PC, "rq->cmd[0]: 0x%x, rq->cmd_type: 0x%x",
746
rq->cmd[0], rq->cmd_type);
747
748
if (rq->cmd_type == REQ_TYPE_BLOCK_PC)
749
rq->cmd_flags |= REQ_QUIET;
750
else
751
rq->cmd_flags &= ~REQ_FAILED;
752
753
drive->dma = 0;
754
755
/* sg request */
756
if (rq->bio) {
757
struct request_queue *q = drive->queue;
758
char *buf = bio_data(rq->bio);
759
unsigned int alignment;
760
761
drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA);
762
763
/*
764
* check if dma is safe
765
*
766
* NOTE! The "len" and "addr" checks should possibly have
767
* separate masks.
768
*/
769
alignment = queue_dma_alignment(q) | q->dma_pad_mask;
770
if ((unsigned long)buf & alignment
771
|| blk_rq_bytes(rq) & q->dma_pad_mask
772
|| object_is_on_stack(buf))
773
drive->dma = 0;
774
}
775
}
776
777
static ide_startstop_t ide_cd_do_request(ide_drive_t *drive, struct request *rq,
778
sector_t block)
779
{
780
struct ide_cmd cmd;
781
int uptodate = 0;
782
unsigned int nsectors;
783
784
ide_debug_log(IDE_DBG_RQ, "cmd: 0x%x, block: %llu",
785
rq->cmd[0], (unsigned long long)block);
786
787
if (drive->debug_mask & IDE_DBG_RQ)
788
blk_dump_rq_flags(rq, "ide_cd_do_request");
789
790
switch (rq->cmd_type) {
791
case REQ_TYPE_FS:
792
if (cdrom_start_rw(drive, rq) == ide_stopped)
793
goto out_end;
794
break;
795
case REQ_TYPE_SENSE:
796
case REQ_TYPE_BLOCK_PC:
797
case REQ_TYPE_ATA_PC:
798
if (!rq->timeout)
799
rq->timeout = ATAPI_WAIT_PC;
800
801
cdrom_do_block_pc(drive, rq);
802
break;
803
case REQ_TYPE_SPECIAL:
804
/* right now this can only be a reset... */
805
uptodate = 1;
806
goto out_end;
807
default:
808
BUG();
809
}
810
811
/* prepare sense request for this command */
812
ide_prep_sense(drive, rq);
813
814
memset(&cmd, 0, sizeof(cmd));
815
816
if (rq_data_dir(rq))
817
cmd.tf_flags |= IDE_TFLAG_WRITE;
818
819
cmd.rq = rq;
820
821
if (rq->cmd_type == REQ_TYPE_FS || blk_rq_bytes(rq)) {
822
ide_init_sg_cmd(&cmd, blk_rq_bytes(rq));
823
ide_map_sg(drive, &cmd);
824
}
825
826
return ide_issue_pc(drive, &cmd);
827
out_end:
828
nsectors = blk_rq_sectors(rq);
829
830
if (nsectors == 0)
831
nsectors = 1;
832
833
ide_complete_rq(drive, uptodate ? 0 : -EIO, nsectors << 9);
834
835
return ide_stopped;
836
}
837
838
/*
839
* Ioctl handling.
840
*
841
* Routines which queue packet commands take as a final argument a pointer to a
842
* request_sense struct. If execution of the command results in an error with a
843
* CHECK CONDITION status, this structure will be filled with the results of the
844
* subsequent request sense command. The pointer can also be NULL, in which case
845
* no sense information is returned.
846
*/
847
static void msf_from_bcd(struct atapi_msf *msf)
848
{
849
msf->minute = bcd2bin(msf->minute);
850
msf->second = bcd2bin(msf->second);
851
msf->frame = bcd2bin(msf->frame);
852
}
853
854
int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense)
855
{
856
struct cdrom_info *info = drive->driver_data;
857
struct cdrom_device_info *cdi = &info->devinfo;
858
unsigned char cmd[BLK_MAX_CDB];
859
860
ide_debug_log(IDE_DBG_FUNC, "enter");
861
862
memset(cmd, 0, BLK_MAX_CDB);
863
cmd[0] = GPCMD_TEST_UNIT_READY;
864
865
/*
866
* Sanyo 3 CD changer uses byte 7 of TEST_UNIT_READY to switch CDs
867
* instead of supporting the LOAD_UNLOAD opcode.
868
*/
869
cmd[7] = cdi->sanyo_slot % 3;
870
871
return ide_cd_queue_pc(drive, cmd, 0, NULL, NULL, sense, 0, REQ_QUIET);
872
}
873
874
static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity,
875
unsigned long *sectors_per_frame,
876
struct request_sense *sense)
877
{
878
struct {
879
__be32 lba;
880
__be32 blocklen;
881
} capbuf;
882
883
int stat;
884
unsigned char cmd[BLK_MAX_CDB];
885
unsigned len = sizeof(capbuf);
886
u32 blocklen;
887
888
ide_debug_log(IDE_DBG_FUNC, "enter");
889
890
memset(cmd, 0, BLK_MAX_CDB);
891
cmd[0] = GPCMD_READ_CDVD_CAPACITY;
892
893
stat = ide_cd_queue_pc(drive, cmd, 0, &capbuf, &len, sense, 0,
894
REQ_QUIET);
895
if (stat)
896
return stat;
897
898
/*
899
* Sanity check the given block size, in so far as making
900
* sure the sectors_per_frame we give to the caller won't
901
* end up being bogus.
902
*/
903
blocklen = be32_to_cpu(capbuf.blocklen);
904
blocklen = (blocklen >> SECTOR_BITS) << SECTOR_BITS;
905
switch (blocklen) {
906
case 512:
907
case 1024:
908
case 2048:
909
case 4096:
910
break;
911
default:
912
printk_once(KERN_ERR PFX "%s: weird block size %u; "
913
"setting default block size to 2048\n",
914
drive->name, blocklen);
915
blocklen = 2048;
916
break;
917
}
918
919
*capacity = 1 + be32_to_cpu(capbuf.lba);
920
*sectors_per_frame = blocklen >> SECTOR_BITS;
921
922
ide_debug_log(IDE_DBG_PROBE, "cap: %lu, sectors_per_frame: %lu",
923
*capacity, *sectors_per_frame);
924
925
return 0;
926
}
927
928
static int cdrom_read_tocentry(ide_drive_t *drive, int trackno, int msf_flag,
929
int format, char *buf, int buflen,
930
struct request_sense *sense)
931
{
932
unsigned char cmd[BLK_MAX_CDB];
933
934
ide_debug_log(IDE_DBG_FUNC, "enter");
935
936
memset(cmd, 0, BLK_MAX_CDB);
937
938
cmd[0] = GPCMD_READ_TOC_PMA_ATIP;
939
cmd[6] = trackno;
940
cmd[7] = (buflen >> 8);
941
cmd[8] = (buflen & 0xff);
942
cmd[9] = (format << 6);
943
944
if (msf_flag)
945
cmd[1] = 2;
946
947
return ide_cd_queue_pc(drive, cmd, 0, buf, &buflen, sense, 0, REQ_QUIET);
948
}
949
950
/* Try to read the entire TOC for the disk into our internal buffer. */
951
int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense)
952
{
953
int stat, ntracks, i;
954
struct cdrom_info *info = drive->driver_data;
955
struct cdrom_device_info *cdi = &info->devinfo;
956
struct atapi_toc *toc = info->toc;
957
struct {
958
struct atapi_toc_header hdr;
959
struct atapi_toc_entry ent;
960
} ms_tmp;
961
long last_written;
962
unsigned long sectors_per_frame = SECTORS_PER_FRAME;
963
964
ide_debug_log(IDE_DBG_FUNC, "enter");
965
966
if (toc == NULL) {
967
/* try to allocate space */
968
toc = kmalloc(sizeof(struct atapi_toc), GFP_KERNEL);
969
if (toc == NULL) {
970
printk(KERN_ERR PFX "%s: No cdrom TOC buffer!\n",
971
drive->name);
972
return -ENOMEM;
973
}
974
info->toc = toc;
975
}
976
977
/*
978
* Check to see if the existing data is still valid. If it is,
979
* just return.
980
*/
981
(void) cdrom_check_status(drive, sense);
982
983
if (drive->atapi_flags & IDE_AFLAG_TOC_VALID)
984
return 0;
985
986
/* try to get the total cdrom capacity and sector size */
987
stat = cdrom_read_capacity(drive, &toc->capacity, &sectors_per_frame,
988
sense);
989
if (stat)
990
toc->capacity = 0x1fffff;
991
992
set_capacity(info->disk, toc->capacity * sectors_per_frame);
993
/* save a private copy of the TOC capacity for error handling */
994
drive->probed_capacity = toc->capacity * sectors_per_frame;
995
996
blk_queue_logical_block_size(drive->queue,
997
sectors_per_frame << SECTOR_BITS);
998
999
/* first read just the header, so we know how long the TOC is */
1000
stat = cdrom_read_tocentry(drive, 0, 1, 0, (char *) &toc->hdr,
1001
sizeof(struct atapi_toc_header), sense);
1002
if (stat)
1003
return stat;
1004
1005
if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) {
1006
toc->hdr.first_track = bcd2bin(toc->hdr.first_track);
1007
toc->hdr.last_track = bcd2bin(toc->hdr.last_track);
1008
}
1009
1010
ntracks = toc->hdr.last_track - toc->hdr.first_track + 1;
1011
if (ntracks <= 0)
1012
return -EIO;
1013
if (ntracks > MAX_TRACKS)
1014
ntracks = MAX_TRACKS;
1015
1016
/* now read the whole schmeer */
1017
stat = cdrom_read_tocentry(drive, toc->hdr.first_track, 1, 0,
1018
(char *)&toc->hdr,
1019
sizeof(struct atapi_toc_header) +
1020
(ntracks + 1) *
1021
sizeof(struct atapi_toc_entry), sense);
1022
1023
if (stat && toc->hdr.first_track > 1) {
1024
/*
1025
* Cds with CDI tracks only don't have any TOC entries, despite
1026
* of this the returned values are
1027
* first_track == last_track = number of CDI tracks + 1,
1028
* so that this case is indistinguishable from the same layout
1029
* plus an additional audio track. If we get an error for the
1030
* regular case, we assume a CDI without additional audio
1031
* tracks. In this case the readable TOC is empty (CDI tracks
1032
* are not included) and only holds the Leadout entry.
1033
*
1034
* Heiko Eißfeldt.
1035
*/
1036
ntracks = 0;
1037
stat = cdrom_read_tocentry(drive, CDROM_LEADOUT, 1, 0,
1038
(char *)&toc->hdr,
1039
sizeof(struct atapi_toc_header) +
1040
(ntracks + 1) *
1041
sizeof(struct atapi_toc_entry),
1042
sense);
1043
if (stat)
1044
return stat;
1045
1046
if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) {
1047
toc->hdr.first_track = (u8)bin2bcd(CDROM_LEADOUT);
1048
toc->hdr.last_track = (u8)bin2bcd(CDROM_LEADOUT);
1049
} else {
1050
toc->hdr.first_track = CDROM_LEADOUT;
1051
toc->hdr.last_track = CDROM_LEADOUT;
1052
}
1053
}
1054
1055
if (stat)
1056
return stat;
1057
1058
toc->hdr.toc_length = be16_to_cpu(toc->hdr.toc_length);
1059
1060
if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) {
1061
toc->hdr.first_track = bcd2bin(toc->hdr.first_track);
1062
toc->hdr.last_track = bcd2bin(toc->hdr.last_track);
1063
}
1064
1065
for (i = 0; i <= ntracks; i++) {
1066
if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) {
1067
if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD)
1068
toc->ent[i].track = bcd2bin(toc->ent[i].track);
1069
msf_from_bcd(&toc->ent[i].addr.msf);
1070
}
1071
toc->ent[i].addr.lba = msf_to_lba(toc->ent[i].addr.msf.minute,
1072
toc->ent[i].addr.msf.second,
1073
toc->ent[i].addr.msf.frame);
1074
}
1075
1076
if (toc->hdr.first_track != CDROM_LEADOUT) {
1077
/* read the multisession information */
1078
stat = cdrom_read_tocentry(drive, 0, 0, 1, (char *)&ms_tmp,
1079
sizeof(ms_tmp), sense);
1080
if (stat)
1081
return stat;
1082
1083
toc->last_session_lba = be32_to_cpu(ms_tmp.ent.addr.lba);
1084
} else {
1085
ms_tmp.hdr.last_track = CDROM_LEADOUT;
1086
ms_tmp.hdr.first_track = ms_tmp.hdr.last_track;
1087
toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */
1088
}
1089
1090
if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) {
1091
/* re-read multisession information using MSF format */
1092
stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp,
1093
sizeof(ms_tmp), sense);
1094
if (stat)
1095
return stat;
1096
1097
msf_from_bcd(&ms_tmp.ent.addr.msf);
1098
toc->last_session_lba = msf_to_lba(ms_tmp.ent.addr.msf.minute,
1099
ms_tmp.ent.addr.msf.second,
1100
ms_tmp.ent.addr.msf.frame);
1101
}
1102
1103
toc->xa_flag = (ms_tmp.hdr.first_track != ms_tmp.hdr.last_track);
1104
1105
/* now try to get the total cdrom capacity */
1106
stat = cdrom_get_last_written(cdi, &last_written);
1107
if (!stat && (last_written > toc->capacity)) {
1108
toc->capacity = last_written;
1109
set_capacity(info->disk, toc->capacity * sectors_per_frame);
1110
drive->probed_capacity = toc->capacity * sectors_per_frame;
1111
}
1112
1113
/* Remember that we've read this stuff. */
1114
drive->atapi_flags |= IDE_AFLAG_TOC_VALID;
1115
1116
return 0;
1117
}
1118
1119
int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf)
1120
{
1121
struct cdrom_info *info = drive->driver_data;
1122
struct cdrom_device_info *cdi = &info->devinfo;
1123
struct packet_command cgc;
1124
int stat, attempts = 3, size = ATAPI_CAPABILITIES_PAGE_SIZE;
1125
1126
ide_debug_log(IDE_DBG_FUNC, "enter");
1127
1128
if ((drive->atapi_flags & IDE_AFLAG_FULL_CAPS_PAGE) == 0)
1129
size -= ATAPI_CAPABILITIES_PAGE_PAD_SIZE;
1130
1131
init_cdrom_command(&cgc, buf, size, CGC_DATA_UNKNOWN);
1132
do {
1133
/* we seem to get stat=0x01,err=0x00 the first time (??) */
1134
stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CAPABILITIES_PAGE, 0);
1135
if (!stat)
1136
break;
1137
} while (--attempts);
1138
return stat;
1139
}
1140
1141
void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf)
1142
{
1143
struct cdrom_info *cd = drive->driver_data;
1144
u16 curspeed, maxspeed;
1145
1146
ide_debug_log(IDE_DBG_FUNC, "enter");
1147
1148
if (drive->atapi_flags & IDE_AFLAG_LE_SPEED_FIELDS) {
1149
curspeed = le16_to_cpup((__le16 *)&buf[8 + 14]);
1150
maxspeed = le16_to_cpup((__le16 *)&buf[8 + 8]);
1151
} else {
1152
curspeed = be16_to_cpup((__be16 *)&buf[8 + 14]);
1153
maxspeed = be16_to_cpup((__be16 *)&buf[8 + 8]);
1154
}
1155
1156
ide_debug_log(IDE_DBG_PROBE, "curspeed: %u, maxspeed: %u",
1157
curspeed, maxspeed);
1158
1159
cd->current_speed = DIV_ROUND_CLOSEST(curspeed, 176);
1160
cd->max_speed = DIV_ROUND_CLOSEST(maxspeed, 176);
1161
}
1162
1163
#define IDE_CD_CAPABILITIES \
1164
(CDC_CLOSE_TRAY | CDC_OPEN_TRAY | CDC_LOCK | CDC_SELECT_SPEED | \
1165
CDC_SELECT_DISC | CDC_MULTI_SESSION | CDC_MCN | CDC_MEDIA_CHANGED | \
1166
CDC_PLAY_AUDIO | CDC_RESET | CDC_DRIVE_STATUS | CDC_CD_R | \
1167
CDC_CD_RW | CDC_DVD | CDC_DVD_R | CDC_DVD_RAM | CDC_GENERIC_PACKET | \
1168
CDC_MO_DRIVE | CDC_MRW | CDC_MRW_W | CDC_RAM)
1169
1170
static struct cdrom_device_ops ide_cdrom_dops = {
1171
.open = ide_cdrom_open_real,
1172
.release = ide_cdrom_release_real,
1173
.drive_status = ide_cdrom_drive_status,
1174
.check_events = ide_cdrom_check_events_real,
1175
.tray_move = ide_cdrom_tray_move,
1176
.lock_door = ide_cdrom_lock_door,
1177
.select_speed = ide_cdrom_select_speed,
1178
.get_last_session = ide_cdrom_get_last_session,
1179
.get_mcn = ide_cdrom_get_mcn,
1180
.reset = ide_cdrom_reset,
1181
.audio_ioctl = ide_cdrom_audio_ioctl,
1182
.capability = IDE_CD_CAPABILITIES,
1183
.generic_packet = ide_cdrom_packet,
1184
};
1185
1186
static int ide_cdrom_register(ide_drive_t *drive, int nslots)
1187
{
1188
struct cdrom_info *info = drive->driver_data;
1189
struct cdrom_device_info *devinfo = &info->devinfo;
1190
1191
ide_debug_log(IDE_DBG_PROBE, "nslots: %d", nslots);
1192
1193
devinfo->ops = &ide_cdrom_dops;
1194
devinfo->speed = info->current_speed;
1195
devinfo->capacity = nslots;
1196
devinfo->handle = drive;
1197
strcpy(devinfo->name, drive->name);
1198
1199
if (drive->atapi_flags & IDE_AFLAG_NO_SPEED_SELECT)
1200
devinfo->mask |= CDC_SELECT_SPEED;
1201
1202
devinfo->disk = info->disk;
1203
return register_cdrom(devinfo);
1204
}
1205
1206
static int ide_cdrom_probe_capabilities(ide_drive_t *drive)
1207
{
1208
struct cdrom_info *cd = drive->driver_data;
1209
struct cdrom_device_info *cdi = &cd->devinfo;
1210
u8 buf[ATAPI_CAPABILITIES_PAGE_SIZE];
1211
mechtype_t mechtype;
1212
int nslots = 1;
1213
1214
ide_debug_log(IDE_DBG_PROBE, "media: 0x%x, atapi_flags: 0x%lx",
1215
drive->media, drive->atapi_flags);
1216
1217
cdi->mask = (CDC_CD_R | CDC_CD_RW | CDC_DVD | CDC_DVD_R |
1218
CDC_DVD_RAM | CDC_SELECT_DISC | CDC_PLAY_AUDIO |
1219
CDC_MO_DRIVE | CDC_RAM);
1220
1221
if (drive->media == ide_optical) {
1222
cdi->mask &= ~(CDC_MO_DRIVE | CDC_RAM);
1223
printk(KERN_ERR PFX "%s: ATAPI magneto-optical drive\n",
1224
drive->name);
1225
return nslots;
1226
}
1227
1228
if (drive->atapi_flags & IDE_AFLAG_PRE_ATAPI12) {
1229
drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT;
1230
cdi->mask &= ~CDC_PLAY_AUDIO;
1231
return nslots;
1232
}
1233
1234
/*
1235
* We have to cheat a little here. the packet will eventually be queued
1236
* with ide_cdrom_packet(), which extracts the drive from cdi->handle.
1237
* Since this device hasn't been registered with the Uniform layer yet,
1238
* it can't do this. Same goes for cdi->ops.
1239
*/
1240
cdi->handle = drive;
1241
cdi->ops = &ide_cdrom_dops;
1242
1243
if (ide_cdrom_get_capabilities(drive, buf))
1244
return 0;
1245
1246
if ((buf[8 + 6] & 0x01) == 0)
1247
drive->dev_flags &= ~IDE_DFLAG_DOORLOCKING;
1248
if (buf[8 + 6] & 0x08)
1249
drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT;
1250
if (buf[8 + 3] & 0x01)
1251
cdi->mask &= ~CDC_CD_R;
1252
if (buf[8 + 3] & 0x02)
1253
cdi->mask &= ~(CDC_CD_RW | CDC_RAM);
1254
if (buf[8 + 2] & 0x38)
1255
cdi->mask &= ~CDC_DVD;
1256
if (buf[8 + 3] & 0x20)
1257
cdi->mask &= ~(CDC_DVD_RAM | CDC_RAM);
1258
if (buf[8 + 3] & 0x10)
1259
cdi->mask &= ~CDC_DVD_R;
1260
if ((buf[8 + 4] & 0x01) || (drive->atapi_flags & IDE_AFLAG_PLAY_AUDIO_OK))
1261
cdi->mask &= ~CDC_PLAY_AUDIO;
1262
1263
mechtype = buf[8 + 6] >> 5;
1264
if (mechtype == mechtype_caddy ||
1265
mechtype == mechtype_popup ||
1266
(drive->atapi_flags & IDE_AFLAG_NO_AUTOCLOSE))
1267
cdi->mask |= CDC_CLOSE_TRAY;
1268
1269
if (cdi->sanyo_slot > 0) {
1270
cdi->mask &= ~CDC_SELECT_DISC;
1271
nslots = 3;
1272
} else if (mechtype == mechtype_individual_changer ||
1273
mechtype == mechtype_cartridge_changer) {
1274
nslots = cdrom_number_of_slots(cdi);
1275
if (nslots > 1)
1276
cdi->mask &= ~CDC_SELECT_DISC;
1277
}
1278
1279
ide_cdrom_update_speed(drive, buf);
1280
1281
printk(KERN_INFO PFX "%s: ATAPI", drive->name);
1282
1283
/* don't print speed if the drive reported 0 */
1284
if (cd->max_speed)
1285
printk(KERN_CONT " %dX", cd->max_speed);
1286
1287
printk(KERN_CONT " %s", (cdi->mask & CDC_DVD) ? "CD-ROM" : "DVD-ROM");
1288
1289
if ((cdi->mask & CDC_DVD_R) == 0 || (cdi->mask & CDC_DVD_RAM) == 0)
1290
printk(KERN_CONT " DVD%s%s",
1291
(cdi->mask & CDC_DVD_R) ? "" : "-R",
1292
(cdi->mask & CDC_DVD_RAM) ? "" : "/RAM");
1293
1294
if ((cdi->mask & CDC_CD_R) == 0 || (cdi->mask & CDC_CD_RW) == 0)
1295
printk(KERN_CONT " CD%s%s",
1296
(cdi->mask & CDC_CD_R) ? "" : "-R",
1297
(cdi->mask & CDC_CD_RW) ? "" : "/RW");
1298
1299
if ((cdi->mask & CDC_SELECT_DISC) == 0)
1300
printk(KERN_CONT " changer w/%d slots", nslots);
1301
else
1302
printk(KERN_CONT " drive");
1303
1304
printk(KERN_CONT ", %dkB Cache\n",
1305
be16_to_cpup((__be16 *)&buf[8 + 12]));
1306
1307
return nslots;
1308
}
1309
1310
/* standard prep_rq_fn that builds 10 byte cmds */
1311
static int ide_cdrom_prep_fs(struct request_queue *q, struct request *rq)
1312
{
1313
int hard_sect = queue_logical_block_size(q);
1314
long block = (long)blk_rq_pos(rq) / (hard_sect >> 9);
1315
unsigned long blocks = blk_rq_sectors(rq) / (hard_sect >> 9);
1316
1317
memset(rq->cmd, 0, BLK_MAX_CDB);
1318
1319
if (rq_data_dir(rq) == READ)
1320
rq->cmd[0] = GPCMD_READ_10;
1321
else
1322
rq->cmd[0] = GPCMD_WRITE_10;
1323
1324
/*
1325
* fill in lba
1326
*/
1327
rq->cmd[2] = (block >> 24) & 0xff;
1328
rq->cmd[3] = (block >> 16) & 0xff;
1329
rq->cmd[4] = (block >> 8) & 0xff;
1330
rq->cmd[5] = block & 0xff;
1331
1332
/*
1333
* and transfer length
1334
*/
1335
rq->cmd[7] = (blocks >> 8) & 0xff;
1336
rq->cmd[8] = blocks & 0xff;
1337
rq->cmd_len = 10;
1338
return BLKPREP_OK;
1339
}
1340
1341
/*
1342
* Most of the SCSI commands are supported directly by ATAPI devices.
1343
* This transform handles the few exceptions.
1344
*/
1345
static int ide_cdrom_prep_pc(struct request *rq)
1346
{
1347
u8 *c = rq->cmd;
1348
1349
/* transform 6-byte read/write commands to the 10-byte version */
1350
if (c[0] == READ_6 || c[0] == WRITE_6) {
1351
c[8] = c[4];
1352
c[5] = c[3];
1353
c[4] = c[2];
1354
c[3] = c[1] & 0x1f;
1355
c[2] = 0;
1356
c[1] &= 0xe0;
1357
c[0] += (READ_10 - READ_6);
1358
rq->cmd_len = 10;
1359
return BLKPREP_OK;
1360
}
1361
1362
/*
1363
* it's silly to pretend we understand 6-byte sense commands, just
1364
* reject with ILLEGAL_REQUEST and the caller should take the
1365
* appropriate action
1366
*/
1367
if (c[0] == MODE_SENSE || c[0] == MODE_SELECT) {
1368
rq->errors = ILLEGAL_REQUEST;
1369
return BLKPREP_KILL;
1370
}
1371
1372
return BLKPREP_OK;
1373
}
1374
1375
static int ide_cdrom_prep_fn(struct request_queue *q, struct request *rq)
1376
{
1377
if (rq->cmd_type == REQ_TYPE_FS)
1378
return ide_cdrom_prep_fs(q, rq);
1379
else if (rq->cmd_type == REQ_TYPE_BLOCK_PC)
1380
return ide_cdrom_prep_pc(rq);
1381
1382
return 0;
1383
}
1384
1385
struct cd_list_entry {
1386
const char *id_model;
1387
const char *id_firmware;
1388
unsigned int cd_flags;
1389
};
1390
1391
#ifdef CONFIG_IDE_PROC_FS
1392
static sector_t ide_cdrom_capacity(ide_drive_t *drive)
1393
{
1394
unsigned long capacity, sectors_per_frame;
1395
1396
if (cdrom_read_capacity(drive, &capacity, &sectors_per_frame, NULL))
1397
return 0;
1398
1399
return capacity * sectors_per_frame;
1400
}
1401
1402
static int idecd_capacity_proc_show(struct seq_file *m, void *v)
1403
{
1404
ide_drive_t *drive = m->private;
1405
1406
seq_printf(m, "%llu\n", (long long)ide_cdrom_capacity(drive));
1407
return 0;
1408
}
1409
1410
static int idecd_capacity_proc_open(struct inode *inode, struct file *file)
1411
{
1412
return single_open(file, idecd_capacity_proc_show, PDE(inode)->data);
1413
}
1414
1415
static const struct file_operations idecd_capacity_proc_fops = {
1416
.owner = THIS_MODULE,
1417
.open = idecd_capacity_proc_open,
1418
.read = seq_read,
1419
.llseek = seq_lseek,
1420
.release = single_release,
1421
};
1422
1423
static ide_proc_entry_t idecd_proc[] = {
1424
{ "capacity", S_IFREG|S_IRUGO, &idecd_capacity_proc_fops },
1425
{}
1426
};
1427
1428
static ide_proc_entry_t *ide_cd_proc_entries(ide_drive_t *drive)
1429
{
1430
return idecd_proc;
1431
}
1432
1433
static const struct ide_proc_devset *ide_cd_proc_devsets(ide_drive_t *drive)
1434
{
1435
return NULL;
1436
}
1437
#endif
1438
1439
static const struct cd_list_entry ide_cd_quirks_list[] = {
1440
/* SCR-3231 doesn't support the SET_CD_SPEED command. */
1441
{ "SAMSUNG CD-ROM SCR-3231", NULL, IDE_AFLAG_NO_SPEED_SELECT },
1442
/* Old NEC260 (not R) was released before ATAPI 1.2 spec. */
1443
{ "NEC CD-ROM DRIVE:260", "1.01", IDE_AFLAG_TOCADDR_AS_BCD |
1444
IDE_AFLAG_PRE_ATAPI12, },
1445
/* Vertos 300, some versions of this drive like to talk BCD. */
1446
{ "V003S0DS", NULL, IDE_AFLAG_VERTOS_300_SSD, },
1447
/* Vertos 600 ESD. */
1448
{ "V006E0DS", NULL, IDE_AFLAG_VERTOS_600_ESD, },
1449
/*
1450
* Sanyo 3 CD changer uses a non-standard command for CD changing
1451
* (by default standard ATAPI support for CD changers is used).
1452
*/
1453
{ "CD-ROM CDR-C3 G", NULL, IDE_AFLAG_SANYO_3CD },
1454
{ "CD-ROM CDR-C3G", NULL, IDE_AFLAG_SANYO_3CD },
1455
{ "CD-ROM CDR_C36", NULL, IDE_AFLAG_SANYO_3CD },
1456
/* Stingray 8X CD-ROM. */
1457
{ "STINGRAY 8422 IDE 8X CD-ROM 7-27-95", NULL, IDE_AFLAG_PRE_ATAPI12 },
1458
/*
1459
* ACER 50X CD-ROM and WPI 32X CD-ROM require the full spec length
1460
* mode sense page capabilities size, but older drives break.
1461
*/
1462
{ "ATAPI CD ROM DRIVE 50X MAX", NULL, IDE_AFLAG_FULL_CAPS_PAGE },
1463
{ "WPI CDS-32X", NULL, IDE_AFLAG_FULL_CAPS_PAGE },
1464
/* ACER/AOpen 24X CD-ROM has the speed fields byte-swapped. */
1465
{ "", "241N", IDE_AFLAG_LE_SPEED_FIELDS },
1466
/*
1467
* Some drives used by Apple don't advertise audio play
1468
* but they do support reading TOC & audio datas.
1469
*/
1470
{ "MATSHITADVD-ROM SR-8187", NULL, IDE_AFLAG_PLAY_AUDIO_OK },
1471
{ "MATSHITADVD-ROM SR-8186", NULL, IDE_AFLAG_PLAY_AUDIO_OK },
1472
{ "MATSHITADVD-ROM SR-8176", NULL, IDE_AFLAG_PLAY_AUDIO_OK },
1473
{ "MATSHITADVD-ROM SR-8174", NULL, IDE_AFLAG_PLAY_AUDIO_OK },
1474
{ "Optiarc DVD RW AD-5200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK },
1475
{ "Optiarc DVD RW AD-7200A", NULL, IDE_AFLAG_PLAY_AUDIO_OK },
1476
{ "Optiarc DVD RW AD-7543A", NULL, IDE_AFLAG_NO_AUTOCLOSE },
1477
{ "TEAC CD-ROM CD-224E", NULL, IDE_AFLAG_NO_AUTOCLOSE },
1478
{ NULL, NULL, 0 }
1479
};
1480
1481
static unsigned int ide_cd_flags(u16 *id)
1482
{
1483
const struct cd_list_entry *cle = ide_cd_quirks_list;
1484
1485
while (cle->id_model) {
1486
if (strcmp(cle->id_model, (char *)&id[ATA_ID_PROD]) == 0 &&
1487
(cle->id_firmware == NULL ||
1488
strstr((char *)&id[ATA_ID_FW_REV], cle->id_firmware)))
1489
return cle->cd_flags;
1490
cle++;
1491
}
1492
1493
return 0;
1494
}
1495
1496
static int ide_cdrom_setup(ide_drive_t *drive)
1497
{
1498
struct cdrom_info *cd = drive->driver_data;
1499
struct cdrom_device_info *cdi = &cd->devinfo;
1500
struct request_queue *q = drive->queue;
1501
u16 *id = drive->id;
1502
char *fw_rev = (char *)&id[ATA_ID_FW_REV];
1503
int nslots;
1504
1505
ide_debug_log(IDE_DBG_PROBE, "enter");
1506
1507
blk_queue_prep_rq(q, ide_cdrom_prep_fn);
1508
blk_queue_dma_alignment(q, 31);
1509
blk_queue_update_dma_pad(q, 15);
1510
1511
drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED;
1512
drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id);
1513
1514
if ((drive->atapi_flags & IDE_AFLAG_VERTOS_300_SSD) &&
1515
fw_rev[4] == '1' && fw_rev[6] <= '2')
1516
drive->atapi_flags |= (IDE_AFLAG_TOCTRACKS_AS_BCD |
1517
IDE_AFLAG_TOCADDR_AS_BCD);
1518
else if ((drive->atapi_flags & IDE_AFLAG_VERTOS_600_ESD) &&
1519
fw_rev[4] == '1' && fw_rev[6] <= '2')
1520
drive->atapi_flags |= IDE_AFLAG_TOCTRACKS_AS_BCD;
1521
else if (drive->atapi_flags & IDE_AFLAG_SANYO_3CD)
1522
/* 3 => use CD in slot 0 */
1523
cdi->sanyo_slot = 3;
1524
1525
nslots = ide_cdrom_probe_capabilities(drive);
1526
1527
blk_queue_logical_block_size(q, CD_FRAMESIZE);
1528
1529
if (ide_cdrom_register(drive, nslots)) {
1530
printk(KERN_ERR PFX "%s: %s failed to register device with the"
1531
" cdrom driver.\n", drive->name, __func__);
1532
cd->devinfo.handle = NULL;
1533
return 1;
1534
}
1535
1536
ide_proc_register_driver(drive, cd->driver);
1537
return 0;
1538
}
1539
1540
static void ide_cd_remove(ide_drive_t *drive)
1541
{
1542
struct cdrom_info *info = drive->driver_data;
1543
1544
ide_debug_log(IDE_DBG_FUNC, "enter");
1545
1546
ide_proc_unregister_driver(drive, info->driver);
1547
device_del(&info->dev);
1548
del_gendisk(info->disk);
1549
1550
mutex_lock(&idecd_ref_mutex);
1551
put_device(&info->dev);
1552
mutex_unlock(&idecd_ref_mutex);
1553
}
1554
1555
static void ide_cd_release(struct device *dev)
1556
{
1557
struct cdrom_info *info = to_ide_drv(dev, cdrom_info);
1558
struct cdrom_device_info *devinfo = &info->devinfo;
1559
ide_drive_t *drive = info->drive;
1560
struct gendisk *g = info->disk;
1561
1562
ide_debug_log(IDE_DBG_FUNC, "enter");
1563
1564
kfree(info->toc);
1565
if (devinfo->handle == drive)
1566
unregister_cdrom(devinfo);
1567
drive->driver_data = NULL;
1568
blk_queue_prep_rq(drive->queue, NULL);
1569
g->private_data = NULL;
1570
put_disk(g);
1571
kfree(info);
1572
}
1573
1574
static int ide_cd_probe(ide_drive_t *);
1575
1576
static struct ide_driver ide_cdrom_driver = {
1577
.gen_driver = {
1578
.owner = THIS_MODULE,
1579
.name = "ide-cdrom",
1580
.bus = &ide_bus_type,
1581
},
1582
.probe = ide_cd_probe,
1583
.remove = ide_cd_remove,
1584
.version = IDECD_VERSION,
1585
.do_request = ide_cd_do_request,
1586
#ifdef CONFIG_IDE_PROC_FS
1587
.proc_entries = ide_cd_proc_entries,
1588
.proc_devsets = ide_cd_proc_devsets,
1589
#endif
1590
};
1591
1592
static int idecd_open(struct block_device *bdev, fmode_t mode)
1593
{
1594
struct cdrom_info *info;
1595
int rc = -ENXIO;
1596
1597
mutex_lock(&ide_cd_mutex);
1598
info = ide_cd_get(bdev->bd_disk);
1599
if (!info)
1600
goto out;
1601
1602
rc = cdrom_open(&info->devinfo, bdev, mode);
1603
if (rc < 0)
1604
ide_cd_put(info);
1605
out:
1606
mutex_unlock(&ide_cd_mutex);
1607
return rc;
1608
}
1609
1610
static int idecd_release(struct gendisk *disk, fmode_t mode)
1611
{
1612
struct cdrom_info *info = ide_drv_g(disk, cdrom_info);
1613
1614
mutex_lock(&ide_cd_mutex);
1615
cdrom_release(&info->devinfo, mode);
1616
1617
ide_cd_put(info);
1618
mutex_unlock(&ide_cd_mutex);
1619
1620
return 0;
1621
}
1622
1623
static int idecd_set_spindown(struct cdrom_device_info *cdi, unsigned long arg)
1624
{
1625
struct packet_command cgc;
1626
char buffer[16];
1627
int stat;
1628
char spindown;
1629
1630
if (copy_from_user(&spindown, (void __user *)arg, sizeof(char)))
1631
return -EFAULT;
1632
1633
init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
1634
1635
stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
1636
if (stat)
1637
return stat;
1638
1639
buffer[11] = (buffer[11] & 0xf0) | (spindown & 0x0f);
1640
return cdrom_mode_select(cdi, &cgc);
1641
}
1642
1643
static int idecd_get_spindown(struct cdrom_device_info *cdi, unsigned long arg)
1644
{
1645
struct packet_command cgc;
1646
char buffer[16];
1647
int stat;
1648
char spindown;
1649
1650
init_cdrom_command(&cgc, buffer, sizeof(buffer), CGC_DATA_UNKNOWN);
1651
1652
stat = cdrom_mode_sense(cdi, &cgc, GPMODE_CDROM_PAGE, 0);
1653
if (stat)
1654
return stat;
1655
1656
spindown = buffer[11] & 0x0f;
1657
if (copy_to_user((void __user *)arg, &spindown, sizeof(char)))
1658
return -EFAULT;
1659
return 0;
1660
}
1661
1662
static int idecd_locked_ioctl(struct block_device *bdev, fmode_t mode,
1663
unsigned int cmd, unsigned long arg)
1664
{
1665
struct cdrom_info *info = ide_drv_g(bdev->bd_disk, cdrom_info);
1666
int err;
1667
1668
switch (cmd) {
1669
case CDROMSETSPINDOWN:
1670
return idecd_set_spindown(&info->devinfo, arg);
1671
case CDROMGETSPINDOWN:
1672
return idecd_get_spindown(&info->devinfo, arg);
1673
default:
1674
break;
1675
}
1676
1677
err = generic_ide_ioctl(info->drive, bdev, cmd, arg);
1678
if (err == -EINVAL)
1679
err = cdrom_ioctl(&info->devinfo, bdev, mode, cmd, arg);
1680
1681
return err;
1682
}
1683
1684
static int idecd_ioctl(struct block_device *bdev, fmode_t mode,
1685
unsigned int cmd, unsigned long arg)
1686
{
1687
int ret;
1688
1689
mutex_lock(&ide_cd_mutex);
1690
ret = idecd_locked_ioctl(bdev, mode, cmd, arg);
1691
mutex_unlock(&ide_cd_mutex);
1692
1693
return ret;
1694
}
1695
1696
1697
static unsigned int idecd_check_events(struct gendisk *disk,
1698
unsigned int clearing)
1699
{
1700
struct cdrom_info *info = ide_drv_g(disk, cdrom_info);
1701
return cdrom_check_events(&info->devinfo, clearing);
1702
}
1703
1704
static int idecd_revalidate_disk(struct gendisk *disk)
1705
{
1706
struct cdrom_info *info = ide_drv_g(disk, cdrom_info);
1707
struct request_sense sense;
1708
1709
ide_cd_read_toc(info->drive, &sense);
1710
1711
return 0;
1712
}
1713
1714
static const struct block_device_operations idecd_ops = {
1715
.owner = THIS_MODULE,
1716
.open = idecd_open,
1717
.release = idecd_release,
1718
.ioctl = idecd_ioctl,
1719
.check_events = idecd_check_events,
1720
.revalidate_disk = idecd_revalidate_disk
1721
};
1722
1723
/* module options */
1724
static unsigned long debug_mask;
1725
module_param(debug_mask, ulong, 0644);
1726
1727
MODULE_DESCRIPTION("ATAPI CD-ROM Driver");
1728
1729
static int ide_cd_probe(ide_drive_t *drive)
1730
{
1731
struct cdrom_info *info;
1732
struct gendisk *g;
1733
struct request_sense sense;
1734
1735
ide_debug_log(IDE_DBG_PROBE, "driver_req: %s, media: 0x%x",
1736
drive->driver_req, drive->media);
1737
1738
if (!strstr("ide-cdrom", drive->driver_req))
1739
goto failed;
1740
1741
if (drive->media != ide_cdrom && drive->media != ide_optical)
1742
goto failed;
1743
1744
drive->debug_mask = debug_mask;
1745
drive->irq_handler = cdrom_newpc_intr;
1746
1747
info = kzalloc(sizeof(struct cdrom_info), GFP_KERNEL);
1748
if (info == NULL) {
1749
printk(KERN_ERR PFX "%s: Can't allocate a cdrom structure\n",
1750
drive->name);
1751
goto failed;
1752
}
1753
1754
g = alloc_disk(1 << PARTN_BITS);
1755
if (!g)
1756
goto out_free_cd;
1757
1758
ide_init_disk(g, drive);
1759
1760
info->dev.parent = &drive->gendev;
1761
info->dev.release = ide_cd_release;
1762
dev_set_name(&info->dev, dev_name(&drive->gendev));
1763
1764
if (device_register(&info->dev))
1765
goto out_free_disk;
1766
1767
info->drive = drive;
1768
info->driver = &ide_cdrom_driver;
1769
info->disk = g;
1770
1771
g->private_data = &info->driver;
1772
1773
drive->driver_data = info;
1774
1775
g->minors = 1;
1776
g->driverfs_dev = &drive->gendev;
1777
g->flags = GENHD_FL_CD | GENHD_FL_REMOVABLE;
1778
if (ide_cdrom_setup(drive)) {
1779
put_device(&info->dev);
1780
goto failed;
1781
}
1782
1783
ide_cd_read_toc(drive, &sense);
1784
g->fops = &idecd_ops;
1785
g->flags |= GENHD_FL_REMOVABLE | GENHD_FL_BLOCK_EVENTS_ON_EXCL_WRITE;
1786
add_disk(g);
1787
return 0;
1788
1789
out_free_disk:
1790
put_disk(g);
1791
out_free_cd:
1792
kfree(info);
1793
failed:
1794
return -ENODEV;
1795
}
1796
1797
static void __exit ide_cdrom_exit(void)
1798
{
1799
driver_unregister(&ide_cdrom_driver.gen_driver);
1800
}
1801
1802
static int __init ide_cdrom_init(void)
1803
{
1804
printk(KERN_INFO DRV_NAME " driver " IDECD_VERSION "\n");
1805
return driver_register(&ide_cdrom_driver.gen_driver);
1806
}
1807
1808
MODULE_ALIAS("ide:*m-cdrom*");
1809
MODULE_ALIAS("ide-cd");
1810
module_init(ide_cdrom_init);
1811
module_exit(ide_cdrom_exit);
1812
MODULE_LICENSE("GPL");
1813
1814