Re: [PATCH] ide-cd: move the remaining cdrom.c ioctl handling code to ide-cd_ioctl.c
On Wednesday 26 December 2007, Borislav Petkov wrote: > On Wed, Dec 26, 2007 at 09:50:14PM +0100, Borislav Petkov wrote: > > Actually you should drop the previous one for it wasn't incomplete. Here's, > hopefully, a better one :). > -- > From: Borislav Petkov <[EMAIL PROTECTED]> > > There should be no functional changes from this. > > Signed-off-by: Borislav Petkov <[EMAIL PROTECTED]> applied, thanks -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH] ide-cd: move the remaining cdrom.c ioctl handling code to ide-cd_ioctl.c
On Wed, Dec 26, 2007 at 09:50:14PM +0100, Borislav Petkov wrote: Actually you should drop the previous one for it wasn't incomplete. Here's, hopefully, a better one :). -- From: Borislav Petkov <[EMAIL PROTECTED]> There should be no functional changes from this. Signed-off-by: Borislav Petkov <[EMAIL PROTECTED]> --- drivers/ide/ide-cd.c | 217 +--- drivers/ide/ide-cd.h |8 ++- drivers/ide/ide-cd_ioctl.c | 210 ++ 3 files changed, 218 insertions(+), 217 deletions(-) diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 23d4987..07e850d 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -1396,7 +1396,7 @@ void msf_from_bcd (struct atapi_msf *msf) msf->frame = BCD2BIN(msf->frame); } -static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) +int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) { struct request req; struct cdrom_info *info = drive->driver_data; @@ -1417,85 +1417,6 @@ static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) return ide_cd_queue_pc(drive, &req); } -/* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */ -int ide_cd_lockdoor(ide_drive_t *drive, int lockflag, - struct request_sense *sense) -{ - struct cdrom_info *cd = drive->driver_data; - struct request_sense my_sense; - struct request req; - int stat; - - if (sense == NULL) - sense = &my_sense; - - /* If the drive cannot lock the door, just pretend. */ - if (cd->cd_flags & IDE_CD_FLAG_NO_DOORLOCK) { - stat = 0; - } else { - ide_cd_init_rq(drive, &req); - req.sense = sense; - req.cmd[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL; - req.cmd[4] = lockflag ? 1 : 0; - stat = ide_cd_queue_pc(drive, &req); - } - - /* If we got an illegal field error, the drive - probably cannot lock the door. */ - if (stat != 0 && - sense->sense_key == ILLEGAL_REQUEST && - (sense->asc == 0x24 || sense->asc == 0x20)) { - printk (KERN_ERR "%s: door locking not supported\n", - drive->name); - cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK; - stat = 0; - } - - /* no medium, that's alright. */ - if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a) - stat = 0; - - if (stat == 0) { - if (lockflag) - cd->cd_flags |= IDE_CD_FLAG_DOOR_LOCKED; - else - cd->cd_flags &= ~IDE_CD_FLAG_DOOR_LOCKED; - } - - return stat; -} - - -/* Eject the disk if EJECTFLAG is 0. - If EJECTFLAG is 1, try to reload the disk. */ -static int cdrom_eject(ide_drive_t *drive, int ejectflag, - struct request_sense *sense) -{ - struct cdrom_info *cd = drive->driver_data; - struct cdrom_device_info *cdi = &cd->devinfo; - struct request req; - char loej = 0x02; - - if ((cd->cd_flags & IDE_CD_FLAG_NO_EJECT) && !ejectflag) - return -EDRIVE_CANT_DO_THIS; - - /* reload fails on some drives, if the tray is locked */ - if ((cd->cd_flags & IDE_CD_FLAG_DOOR_LOCKED) && ejectflag) - return 0; - - ide_cd_init_rq(drive, &req); - - /* only tell drive to close tray if open, if it can do that */ - if (ejectflag && (cdi->mask & CDC_CLOSE_TRAY)) - loej = 0; - - req.sense = sense; - req.cmd[0] = GPCMD_START_STOP_UNIT; - req.cmd[4] = loej | (ejectflag != 0); - - return ide_cd_queue_pc(drive, &req); -} - static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, unsigned long *sectors_per_frame, struct request_sense *sense) @@ -1711,53 +1632,6 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) return 0; } -/* the generic packet interface to cdrom.c */ -static int ide_cdrom_packet(struct cdrom_device_info *cdi, - struct packet_command *cgc) -{ - struct request req; - ide_drive_t *drive = cdi->handle; - - if (cgc->timeout <= 0) - cgc->timeout = ATAPI_WAIT_PC; - - /* here we queue the commands from the uniform CD-ROM - layer. the packet must be complete, as we do not - touch it at all. */ - ide_cd_init_rq(drive, &req); - memcpy(req.cmd, cgc->cmd, CDROM_PACKET_SIZE); - if (cgc->sense) - memset(cgc->sense, 0, sizeof(struct request_sense)); - req.data = cgc->buffer; - req.data_len = cgc->buflen; - req.timeout = cgc->timeout; - - if (cgc->quiet) - req.cmd_flags |= REQ_QUIET; - -
[PATCH] ide-cd: move the remaining cdrom.c ioctl handling code to ide-cd_ioctl.c
Hi Bart, the following moves the remaining cdrom.c ioctl-related pieces to their proper location. It applies on top of your 63 redux patches and shouldn't be changing anything in the current functionality of the driver. -- From: Borislav Petkov <[EMAIL PROTECTED]> There should be no functional changes caused by this patch. Signed-off-by: Borislav Petkov <[EMAIL PROTECTED]> --- drivers/ide/ide-cd.c | 186 +--- drivers/ide/ide-cd.h |7 ++- drivers/ide/ide-cd_ioctl.c | 179 ++ 3 files changed, 186 insertions(+), 186 deletions(-) diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index 23d4987..b19e713 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -1396,7 +1396,7 @@ void msf_from_bcd (struct atapi_msf *msf) msf->frame = BCD2BIN(msf->frame); } -static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) +int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) { struct request req; struct cdrom_info *info = drive->driver_data; @@ -1417,85 +1417,6 @@ static int cdrom_check_status(ide_drive_t *drive, struct request_sense *sense) return ide_cd_queue_pc(drive, &req); } -/* Lock the door if LOCKFLAG is nonzero; unlock it otherwise. */ -int ide_cd_lockdoor(ide_drive_t *drive, int lockflag, - struct request_sense *sense) -{ - struct cdrom_info *cd = drive->driver_data; - struct request_sense my_sense; - struct request req; - int stat; - - if (sense == NULL) - sense = &my_sense; - - /* If the drive cannot lock the door, just pretend. */ - if (cd->cd_flags & IDE_CD_FLAG_NO_DOORLOCK) { - stat = 0; - } else { - ide_cd_init_rq(drive, &req); - req.sense = sense; - req.cmd[0] = GPCMD_PREVENT_ALLOW_MEDIUM_REMOVAL; - req.cmd[4] = lockflag ? 1 : 0; - stat = ide_cd_queue_pc(drive, &req); - } - - /* If we got an illegal field error, the drive - probably cannot lock the door. */ - if (stat != 0 && - sense->sense_key == ILLEGAL_REQUEST && - (sense->asc == 0x24 || sense->asc == 0x20)) { - printk (KERN_ERR "%s: door locking not supported\n", - drive->name); - cd->cd_flags |= IDE_CD_FLAG_NO_DOORLOCK; - stat = 0; - } - - /* no medium, that's alright. */ - if (stat != 0 && sense->sense_key == NOT_READY && sense->asc == 0x3a) - stat = 0; - - if (stat == 0) { - if (lockflag) - cd->cd_flags |= IDE_CD_FLAG_DOOR_LOCKED; - else - cd->cd_flags &= ~IDE_CD_FLAG_DOOR_LOCKED; - } - - return stat; -} - - -/* Eject the disk if EJECTFLAG is 0. - If EJECTFLAG is 1, try to reload the disk. */ -static int cdrom_eject(ide_drive_t *drive, int ejectflag, - struct request_sense *sense) -{ - struct cdrom_info *cd = drive->driver_data; - struct cdrom_device_info *cdi = &cd->devinfo; - struct request req; - char loej = 0x02; - - if ((cd->cd_flags & IDE_CD_FLAG_NO_EJECT) && !ejectflag) - return -EDRIVE_CANT_DO_THIS; - - /* reload fails on some drives, if the tray is locked */ - if ((cd->cd_flags & IDE_CD_FLAG_DOOR_LOCKED) && ejectflag) - return 0; - - ide_cd_init_rq(drive, &req); - - /* only tell drive to close tray if open, if it can do that */ - if (ejectflag && (cdi->mask & CDC_CLOSE_TRAY)) - loej = 0; - - req.sense = sense; - req.cmd[0] = GPCMD_START_STOP_UNIT; - req.cmd[4] = loej | (ejectflag != 0); - - return ide_cd_queue_pc(drive, &req); -} - static int cdrom_read_capacity(ide_drive_t *drive, unsigned long *capacity, unsigned long *sectors_per_frame, struct request_sense *sense) @@ -1742,22 +1663,6 @@ static int ide_cdrom_packet(struct cdrom_device_info *cdi, return cgc->stat; } -static -int ide_cdrom_tray_move (struct cdrom_device_info *cdi, int position) -{ - ide_drive_t *drive = cdi->handle; - struct request_sense sense; - - if (position) { - int stat = ide_cd_lockdoor(drive, 0, &sense); - - if (stat) - return stat; - } - - return cdrom_eject(drive, !position, &sense); -} - int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf) { struct cdrom_info *info = drive->driver_data; @@ -1797,95 +1702,6 @@ void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf) cd->max_speed = (maxspeed + (176/2)) / 176; } -/* - * add logic to try GET_EVENT command first to check for media and tray - * status. this should be supported by newer cd-r/w and al