> Since it is not a lot of modified lines and the change is rather > straightforward it could as well be done in a single patch... here's version 2: -- From: Borislav Petkov <petkovbb@xxxxxxxxx> Date: Mon, 23 Feb 2009 07:58:23 +0100 Subject: [PATCH] ide: flags query macros Add drive->atapi_flags and drive->dev_flags macro wrappers v2: - use static inlines for better typechecking - use macro indirection for convenience Signed-off-by: Borislav Petkov <petkovbb@xxxxxxxxx> --- drivers/ide/cmd640.c | 2 +- drivers/ide/ht6560b.c | 3 +- drivers/ide/ide-atapi.c | 15 ++++----- drivers/ide/ide-cd.c | 40 ++++++++++++----------- drivers/ide/ide-cd_ioctl.c | 18 +++++------ drivers/ide/ide-devsets.c | 8 ++--- drivers/ide/ide-disk.c | 32 +++++++++--------- drivers/ide/ide-disk_proc.c | 2 +- drivers/ide/ide-dma.c | 3 +- drivers/ide/ide-eh.c | 17 +++++----- drivers/ide/ide-floppy.c | 6 ++-- drivers/ide/ide-floppy_ioctl.c | 2 +- drivers/ide/ide-gd.c | 14 ++++---- drivers/ide/ide-io.c | 9 ++--- drivers/ide/ide-ioctls.c | 6 ++-- drivers/ide/ide-iops.c | 6 ++-- drivers/ide/ide-lib.c | 2 +- drivers/ide/ide-park.c | 11 +++--- drivers/ide/ide-pm.c | 2 +- drivers/ide/ide-probe.c | 36 +++++++++++---------- drivers/ide/ide-proc.c | 2 +- drivers/ide/ide-tape.c | 12 +++--- drivers/ide/ide-taskfile.c | 16 +++------ drivers/ide/ns87415.c | 5 +-- drivers/ide/pdc202xx_old.c | 4 +- drivers/ide/sc1200.c | 2 +- drivers/ide/trm290.c | 4 +- include/linux/ide.h | 68 ++++++++++++++++++++++++++++++++++++++++ 28 files changed, 202 insertions(+), 145 deletions(-) diff --git a/drivers/ide/cmd640.c b/drivers/ide/cmd640.c index 8890276..61cd602 100644 --- a/drivers/ide/cmd640.c +++ b/drivers/ide/cmd640.c @@ -625,7 +625,7 @@ static void cmd640_init_dev(ide_drive_t *drive) */ check_prefetch(drive, i); printk(KERN_INFO DRV_NAME ": drive%d timings/prefetch(%s) preserved\n", - i, (drive->dev_flags & IDE_DFLAG_NO_IO_32BIT) ? "off" : "on"); + i, ide_dev_no_32bit_io(drive) ? "off" : "on"); #endif /* CONFIG_BLK_DEV_CMD640_ENHANCED */ } diff --git a/drivers/ide/ht6560b.c b/drivers/ide/ht6560b.c index c7e5c22..6da6bfd 100644 --- a/drivers/ide/ht6560b.c +++ b/drivers/ide/ht6560b.c @@ -120,8 +120,7 @@ static void ht6560b_selectproc (ide_drive_t *drive) * Need to enforce prefetch sometimes because otherwise * it'll hang (hard). */ - if (drive->media != ide_disk || - (drive->dev_flags & IDE_DFLAG_PRESENT) == 0) + if (drive->media != ide_disk || !ide_dev_present(drive)) select |= HT_PREFETCH_MODE; if (select != current_select || timing != current_timing) { diff --git a/drivers/ide/ide-atapi.c b/drivers/ide/ide-atapi.c index c807515..d9e71b8 100644 --- a/drivers/ide/ide-atapi.c +++ b/drivers/ide/ide-atapi.c @@ -202,7 +202,7 @@ int ide_set_media_lock(ide_drive_t *drive, struct gendisk *disk, int on) { struct ide_atapi_pc pc; - if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) + if (!ide_dev_doorlocking(drive)) return 0; ide_init_pc(&pc); @@ -547,7 +547,7 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive) return startstop; } - if (drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT) { + if (ide_dev_drq_int(drive)) { if (drive->dma) drive->waiting_for_dma = 1; } @@ -570,7 +570,7 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive) * miliseconds later in ide_delayed_transfer_pc() after the * device says it's ready for a packet. */ - if (drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) { + if (ide_dev_zip(drive)) { timeout = drive->pc_delay; expiry = &ide_delayed_transfer_pc; } else { @@ -611,7 +611,7 @@ static ide_startstop_t ide_transfer_pc(ide_drive_t *drive) } /* Send the actual packet */ - if ((drive->atapi_flags & IDE_AFLAG_ZIP_DRIVE) == 0) + if (!ide_dev_zip(drive)) hwif->tp_ops->output_data(drive, NULL, rq->cmd, cmd_len); return ide_started; @@ -627,7 +627,6 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) unsigned int timeout; u32 tf_flags; u16 bcount; - u8 drq_int = !!(drive->atapi_flags & IDE_AFLAG_DRQ_INTERRUPT); if (dev_is_idecd(drive)) { tf_flags = IDE_TFLAG_OUT_NSECT | IDE_TFLAG_OUT_LBAL; @@ -659,7 +658,7 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) } if ((pc->flags & PC_FLAG_DMA_OK) && - (drive->dev_flags & IDE_DFLAG_USING_DMA)) { + ide_dev_using_dma(drive)) { if (ide_build_sglist(drive, cmd)) drive->dma = !dma_ops->dma_setup(drive, cmd); else @@ -677,7 +676,7 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) (void)do_rw_taskfile(drive, cmd); - if (drq_int) { + if (ide_dev_drq_int(drive)) { if (drive->dma) drive->waiting_for_dma = 0; hwif->expiry = expiry; @@ -685,6 +684,6 @@ ide_startstop_t ide_issue_pc(ide_drive_t *drive, struct ide_cmd *cmd) ide_execute_command(drive, cmd, ide_transfer_pc, timeout); - return drq_int ? ide_started : ide_transfer_pc(drive); + return ide_dev_drq_int(drive) ? ide_started : ide_transfer_pc(drive); } EXPORT_SYMBOL_GPL(ide_issue_pc); diff --git a/drivers/ide/ide-cd.c b/drivers/ide/ide-cd.c index ee082ce..01d18ca 100644 --- a/drivers/ide/ide-cd.c +++ b/drivers/ide/ide-cd.c @@ -859,7 +859,7 @@ static void cdrom_do_block_pc(ide_drive_t *drive, struct request *rq) else buf = rq->data; - drive->dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); + drive->dma = ide_dev_using_dma(drive); /* * check if dma is safe @@ -1073,7 +1073,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) */ (void) cdrom_check_status(drive, sense); - if (drive->atapi_flags & IDE_AFLAG_TOC_VALID) + if (ide_dev_toc_valid(drive)) return 0; /* try to get the total cdrom capacity and sector size */ @@ -1095,7 +1095,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) if (stat) return stat; - if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { + if (ide_dev_toctracks_bcd(drive)) { toc->hdr.first_track = bcd2bin(toc->hdr.first_track); toc->hdr.last_track = bcd2bin(toc->hdr.last_track); } @@ -1136,7 +1136,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) if (stat) return stat; - if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { + if (ide_dev_toctracks_bcd(drive)) { toc->hdr.first_track = (u8)bin2bcd(CDROM_LEADOUT); toc->hdr.last_track = (u8)bin2bcd(CDROM_LEADOUT); } else { @@ -1150,14 +1150,14 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) toc->hdr.toc_length = be16_to_cpu(toc->hdr.toc_length); - if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) { + if (ide_dev_toctracks_bcd(drive)) { toc->hdr.first_track = bcd2bin(toc->hdr.first_track); toc->hdr.last_track = bcd2bin(toc->hdr.last_track); } for (i = 0; i <= ntracks; i++) { - if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { - if (drive->atapi_flags & IDE_AFLAG_TOCTRACKS_AS_BCD) + if (ide_dev_tocaddr_bcd(drive)) { + if (ide_dev_toctracks_bcd(drive)) toc->ent[i].track = bcd2bin(toc->ent[i].track); msf_from_bcd(&toc->ent[i].addr.msf); } @@ -1180,7 +1180,7 @@ int ide_cd_read_toc(ide_drive_t *drive, struct request_sense *sense) toc->last_session_lba = msf_to_lba(0, 2, 0); /* 0m 2s 0f */ } - if (drive->atapi_flags & IDE_AFLAG_TOCADDR_AS_BCD) { + if (ide_dev_tocaddr_bcd(drive)) { /* re-read multisession information using MSF format */ stat = cdrom_read_tocentry(drive, 0, 1, 1, (char *)&ms_tmp, sizeof(ms_tmp), sense); @@ -1218,7 +1218,7 @@ int ide_cdrom_get_capabilities(ide_drive_t *drive, u8 *buf) ide_debug_log(IDE_DBG_FUNC, "enter"); - if ((drive->atapi_flags & IDE_AFLAG_FULL_CAPS_PAGE) == 0) + if (!ide_dev_full_caps(drive)) size -= ATAPI_CAPABILITIES_PAGE_PAD_SIZE; init_cdrom_command(&cgc, buf, size, CGC_DATA_UNKNOWN); @@ -1238,7 +1238,7 @@ void ide_cdrom_update_speed(ide_drive_t *drive, u8 *buf) ide_debug_log(IDE_DBG_FUNC, "enter"); - if (drive->atapi_flags & IDE_AFLAG_LE_SPEED_FIELDS) { + if (ide_dev_le_speed_fields(drive)) { curspeed = le16_to_cpup((__le16 *)&buf[8 + 14]); maxspeed = le16_to_cpup((__le16 *)&buf[8 + 8]); } else { @@ -1289,7 +1289,7 @@ static int ide_cdrom_register(ide_drive_t *drive, int nslots) devinfo->handle = drive; strcpy(devinfo->name, drive->name); - if (drive->atapi_flags & IDE_AFLAG_NO_SPEED_SELECT) + if (ide_dev_no_speed_select(drive)) devinfo->mask |= CDC_SELECT_SPEED; devinfo->disk = info->disk; @@ -1318,7 +1318,7 @@ static int ide_cdrom_probe_capabilities(ide_drive_t *drive) return nslots; } - if (drive->atapi_flags & IDE_AFLAG_PRE_ATAPI12) { + if (ide_dev_pre_atapi12(drive)) { drive->atapi_flags &= ~IDE_AFLAG_NO_EJECT; cdi->mask &= ~CDC_PLAY_AUDIO; return nslots; @@ -1350,13 +1350,13 @@ static int ide_cdrom_probe_capabilities(ide_drive_t *drive) cdi->mask &= ~(CDC_DVD_RAM | CDC_RAM); if (buf[8 + 3] & 0x10) cdi->mask &= ~CDC_DVD_R; - if ((buf[8 + 4] & 0x01) || (drive->atapi_flags & IDE_AFLAG_PLAY_AUDIO_OK)) + if ((buf[8 + 4] & 0x01) || ide_dev_can_play_audio(drive)) cdi->mask &= ~CDC_PLAY_AUDIO; mechtype = buf[8 + 6] >> 5; if (mechtype == mechtype_caddy || mechtype == mechtype_popup || - (drive->atapi_flags & IDE_AFLAG_NO_AUTOCLOSE)) + ide_dev_no_autoclose(drive)) cdi->mask |= CDC_CLOSE_TRAY; if (cdi->sanyo_slot > 0) { @@ -1595,14 +1595,16 @@ static int ide_cdrom_setup(ide_drive_t *drive) drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; drive->atapi_flags = IDE_AFLAG_NO_EJECT | ide_cd_flags(id); - if ((drive->atapi_flags & IDE_AFLAG_VERTOS_300_SSD) && - fw_rev[4] == '1' && fw_rev[6] <= '2') + if (ide_dev_vertos_300_ssd(drive) && + fw_rev[4] == '1' && + fw_rev[6] <= '2') drive->atapi_flags |= (IDE_AFLAG_TOCTRACKS_AS_BCD | IDE_AFLAG_TOCADDR_AS_BCD); - else if ((drive->atapi_flags & IDE_AFLAG_VERTOS_600_ESD) && - fw_rev[4] == '1' && fw_rev[6] <= '2') + else if (ide_dev_vertos_600_esd(drive) && + fw_rev[4] == '1' && + fw_rev[6] <= '2') drive->atapi_flags |= IDE_AFLAG_TOCTRACKS_AS_BCD; - else if (drive->atapi_flags & IDE_AFLAG_SANYO_3CD) + else if (ide_dev_sanyo_3cd(drive)) /* 3 => use CD in slot 0 */ cdi->sanyo_slot = 3; diff --git a/drivers/ide/ide-cd_ioctl.c b/drivers/ide/ide-cd_ioctl.c index df3df00..3553759 100644 --- a/drivers/ide/ide-cd_ioctl.c +++ b/drivers/ide/ide-cd_ioctl.c @@ -86,7 +86,7 @@ int ide_cdrom_check_media_change_real(struct cdrom_device_info *cdi, if (slot_nr == CDSL_CURRENT) { (void) cdrom_check_status(drive, NULL); - retval = (drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED) ? 1 : 0; + retval = ide_dev_media_changed(drive) ? 1 : 0; drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED; return retval; } else { @@ -105,11 +105,11 @@ int cdrom_eject(ide_drive_t *drive, int ejectflag, char loej = 0x02; unsigned char cmd[BLK_MAX_CDB]; - if ((drive->atapi_flags & IDE_AFLAG_NO_EJECT) && !ejectflag) + if (ide_dev_no_eject(drive) && !ejectflag) return -EDRIVE_CANT_DO_THIS; /* reload fails on some drives, if the tray is locked */ - if ((drive->atapi_flags & IDE_AFLAG_DOOR_LOCKED) && ejectflag) + if (ide_dev_door_locked(drive) && ejectflag) return 0; /* only tell drive to close tray if open, if it can do that */ @@ -136,7 +136,7 @@ int ide_cd_lockdoor(ide_drive_t *drive, int lockflag, sense = &my_sense; /* If the drive cannot lock the door, just pretend. */ - if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) { + if (!ide_dev_doorlocking(drive)) { stat = 0; } else { unsigned char cmd[BLK_MAX_CDB]; @@ -247,7 +247,7 @@ int ide_cdrom_get_last_session(struct cdrom_device_info *cdi, struct request_sense sense; int ret; - if ((drive->atapi_flags & IDE_AFLAG_TOC_VALID) == 0 || !info->toc) { + if (!ide_dev_toc_valid(drive) || !info->toc) { ret = ide_cd_read_toc(drive, &sense); if (ret) return ret; @@ -305,7 +305,7 @@ int ide_cdrom_reset(struct cdrom_device_info *cdi) * A reset will unlock the door. If it was previously locked, * lock it again. */ - if (drive->atapi_flags & IDE_AFLAG_DOOR_LOCKED) + if (ide_dev_door_locked(drive)) (void)ide_cd_lockdoor(drive, 1, &sense); return ret; @@ -318,10 +318,8 @@ static int ide_cd_get_toc_entry(ide_drive_t *drive, int track, struct atapi_toc *toc = info->toc; int ntracks; - /* - * don't serve cached data, if the toc isn't valid - */ - if ((drive->atapi_flags & IDE_AFLAG_TOC_VALID) == 0) + /* don't serve cached data, if the toc isn't valid */ + if (!ide_dev_toc_valid(drive)) return -EINVAL; /* Check validity of requested track number. */ diff --git a/drivers/ide/ide-devsets.c b/drivers/ide/ide-devsets.c index 5bf958e..b9156de 100644 --- a/drivers/ide/ide-devsets.c +++ b/drivers/ide/ide-devsets.c @@ -8,7 +8,7 @@ ide_devset_get(io_32bit, io_32bit); static int set_io_32bit(ide_drive_t *drive, int arg) { - if (drive->dev_flags & IDE_DFLAG_NO_IO_32BIT) + if (ide_dev_no_32bit_io(drive)) return -EPERM; if (arg < 0 || arg > 1 + (SUPPORT_VLB_SYNC << 1)) @@ -115,12 +115,10 @@ static int set_pio_mode(ide_drive_t *drive, int arg) } else port_ops->set_pio_mode(drive, arg); } else { - int keep_dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); - ide_set_pio(drive, arg); if (hwif->host_flags & IDE_HFLAG_SET_PIO_MODE_KEEP_DMA) { - if (keep_dma) + if (ide_dev_using_dma(drive)) ide_dma_on(drive); } } @@ -132,7 +130,7 @@ ide_devset_get_flag(unmaskirq, IDE_DFLAG_UNMASK); static int set_unmaskirq(ide_drive_t *drive, int arg) { - if (drive->dev_flags & IDE_DFLAG_NO_UNMASK) + if (ide_dev_no_unmask(drive)) return -EPERM; if (arg < 0 || arg > 1) diff --git a/drivers/ide/ide-disk.c b/drivers/ide/ide-disk.c index ca934c8..9cd9a52 100644 --- a/drivers/ide/ide-disk.c +++ b/drivers/ide/ide-disk.c @@ -83,8 +83,8 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, { ide_hwif_t *hwif = drive->hwif; u16 nsectors = (u16)rq->nr_sectors; - u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48); - u8 dma = !!(drive->dev_flags & IDE_DFLAG_USING_DMA); + u8 lba48 = ide_dev_lba48(drive); + u8 dma = ide_dev_using_dma(drive); struct ide_cmd cmd; struct ide_taskfile *tf = &cmd.tf; ide_startstop_t rc; @@ -99,7 +99,7 @@ static ide_startstop_t __ide_do_rw_disk(ide_drive_t *drive, struct request *rq, memset(&cmd, 0, sizeof(cmd)); cmd.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE; - if (drive->dev_flags & IDE_DFLAG_LBA) { + if (ide_dev_does_lba(drive)) { if (lba48) { pr_debug("%s: LBA=0x%012llx\n", drive->name, (unsigned long long)block); @@ -180,7 +180,7 @@ static ide_startstop_t ide_do_rw_disk(ide_drive_t *drive, struct request *rq, { ide_hwif_t *hwif = drive->hwif; - BUG_ON(drive->dev_flags & IDE_DFLAG_BLOCKED); + BUG_ON(ide_dev_blocked(drive)); if (!blk_fs_request(rq)) { blk_dump_rq_flags(rq, "ide_do_rw_disk - bad command"); @@ -359,7 +359,7 @@ static int ide_disk_get_capacity(ide_drive_t *drive) } /* limit drive capacity to 137GB if LBA48 cannot be used */ - if ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 && + if (!ide_dev_lba48(drive) && drive->capacity64 > 1ULL << 28) { printk(KERN_WARNING "%s: cannot use LBA48 - full capacity " "%llu sectors (%llu MB)\n", @@ -369,7 +369,7 @@ static int ide_disk_get_capacity(ide_drive_t *drive) } if ((drive->hwif->host_flags & IDE_HFLAG_NO_LBA48_DMA) && - (drive->dev_flags & IDE_DFLAG_LBA48)) { + ide_dev_lba48(drive)) { if (drive->capacity64 > 1ULL << 28) { printk(KERN_INFO "%s: cannot use LBA48 DMA - PIO mode" " will be used for accessing sectors " @@ -468,7 +468,7 @@ static void update_ordered(ide_drive_t *drive) unsigned ordered = QUEUE_ORDERED_NONE; prepare_flush_fn *prep_fn = NULL; - if (drive->dev_flags & IDE_DFLAG_WCACHE) { + if (ide_dev_wcache_enabled(drive)) { unsigned long long capacity; int barrier; /* @@ -481,8 +481,8 @@ static void update_ordered(ide_drive_t *drive) */ capacity = ide_gd_capacity(drive); barrier = ata_id_flush_enabled(id) && - (drive->dev_flags & IDE_DFLAG_NOFLUSH) == 0 && - ((drive->dev_flags & IDE_DFLAG_LBA48) == 0 || + !ide_dev_noflush(drive) && + (!ide_dev_lba48(drive) || capacity <= (1ULL << 28) || ata_id_flush_ext_enabled(id)); @@ -604,10 +604,10 @@ static void ide_disk_setup(ide_drive_t *drive) ide_proc_register_driver(drive, idkp->driver); - if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) + if (!ide_dev_id_read(drive)) return; - if (drive->dev_flags & IDE_DFLAG_REMOVABLE) { + if (ide_dev_removable(drive)) { /* * Removable disks (eg. SYQUEST); ignore 'WD' drives */ @@ -617,7 +617,7 @@ static void ide_disk_setup(ide_drive_t *drive) (void)set_addressing(drive, 1); - if (drive->dev_flags & IDE_DFLAG_LBA48) { + if (ide_dev_lba48(drive)) { int max_s = 2048; if (max_s > hwif->rqsize) @@ -641,7 +641,7 @@ static void ide_disk_setup(ide_drive_t *drive) */ capacity = ide_gd_capacity(drive); - if ((drive->dev_flags & IDE_DFLAG_FORCED_GEOM) == 0) { + if (!ide_dev_forced_geom(drive)) { if (ata_id_lba48_enabled(drive->id)) { /* compatibility */ drive->bios_sect = 63; @@ -680,7 +680,7 @@ static void ide_disk_setup(ide_drive_t *drive) set_wcache(drive, 1); - if ((drive->dev_flags & IDE_DFLAG_LBA) == 0 && + if (!ide_dev_does_lba(drive) && (drive->head == 0 || drive->head > 16)) { printk(KERN_ERR "%s: invalid geometry: %d physical heads?\n", drive->name, drive->head); @@ -692,7 +692,7 @@ static void ide_disk_setup(ide_drive_t *drive) static void ide_disk_flush(ide_drive_t *drive) { if (ata_id_flush_enabled(drive->id) == 0 || - (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) + !ide_dev_wcache_enabled(drive)) return; if (do_idedisk_flushcache(drive)) @@ -710,7 +710,7 @@ static int ide_disk_set_doorlock(ide_drive_t *drive, struct gendisk *disk, struct ide_cmd cmd; int ret; - if ((drive->dev_flags & IDE_DFLAG_DOORLOCKING) == 0) + if (!ide_dev_doorlocking(drive)) return 0; memset(&cmd, 0, sizeof(cmd)); diff --git a/drivers/ide/ide-disk_proc.c b/drivers/ide/ide-disk_proc.c index 3f2a078..540fe00 100644 --- a/drivers/ide/ide-disk_proc.c +++ b/drivers/ide/ide-disk_proc.c @@ -42,7 +42,7 @@ static int proc_idedisk_read_cache char *out = page; int len; - if (drive->dev_flags & IDE_DFLAG_ID_READ) + if (ide_dev_id_read(drive)) len = sprintf(out, "%i\n", drive->id[ATA_ID_BUF_SIZE] / 2); else len = sprintf(out, "(none)\n"); diff --git a/drivers/ide/ide-dma.c b/drivers/ide/ide-dma.c index 3dbf80c..bf4d55f 100644 --- a/drivers/ide/ide-dma.c +++ b/drivers/ide/ide-dma.c @@ -353,8 +353,7 @@ static int ide_tune_dma(ide_drive_t *drive) ide_hwif_t *hwif = drive->hwif; u8 speed; - if (ata_id_has_dma(drive->id) == 0 || - (drive->dev_flags & IDE_DFLAG_NODMA)) + if (ata_id_has_dma(drive->id) == 0 || ide_dev_nodma(drive)) return 0; /* consult the list of known "bad" drives */ diff --git a/drivers/ide/ide-eh.c b/drivers/ide/ide-eh.c index 1166497..cc9c223 100644 --- a/drivers/ide/ide-eh.c +++ b/drivers/ide/ide-eh.c @@ -9,13 +9,13 @@ static ide_startstop_t ide_ata_error(ide_drive_t *drive, struct request *rq, ide_hwif_t *hwif = drive->hwif; if ((stat & ATA_BUSY) || - ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) { + ((stat & ATA_DF) && !ide_dev_ignore_write_err(drive))) { /* other bits are useless when BUSY */ rq->errors |= ERROR_RESET; } else if (stat & ATA_ERR) { /* err has different meaning on cdrom and tape */ if (err == ATA_ABORTED) { - if ((drive->dev_flags & IDE_DFLAG_LBA) && + if (ide_dev_does_lba(drive) && /* some newer drives don't support ATA_CMD_INIT_DEV_PARAMS */ hwif->tp_ops->read_status(hwif) == ATA_CMD_INIT_DEV_PARAMS) return ide_stopped; @@ -65,7 +65,7 @@ static ide_startstop_t ide_atapi_error(ide_drive_t *drive, struct request *rq, ide_hwif_t *hwif = drive->hwif; if ((stat & ATA_BUSY) || - ((stat & ATA_DF) && (drive->dev_flags & IDE_DFLAG_NOWERR) == 0)) { + ((stat & ATA_DF) && !ide_dev_ignore_write_err(drive))) { /* other bits are useless when BUSY */ rq->errors |= ERROR_RESET; } else { @@ -274,8 +274,7 @@ static void ide_disk_pre_reset(ide_drive_t *drive) drive->mult_count = 0; drive->dev_flags &= ~IDE_DFLAG_PARKED; - if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0 && - (drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) + if (!(ide_dev_keep_settings(drive) || ide_dev_using_dma(drive))) drive->mult_req = 0; if (drive->mult_req != drive->mult_count) @@ -291,15 +290,15 @@ static void pre_reset(ide_drive_t *drive) else drive->dev_flags |= IDE_DFLAG_POST_RESET; - if (drive->dev_flags & IDE_DFLAG_USING_DMA) { + if (ide_dev_using_dma(drive)) { if (drive->crc_count) ide_check_dma_crc(drive); else ide_dma_off(drive); } - if ((drive->dev_flags & IDE_DFLAG_KEEP_SETTINGS) == 0) { - if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0) { + if (!ide_dev_keep_settings(drive)) { + if (!ide_dev_using_dma(drive)) { drive->dev_flags &= ~IDE_DFLAG_UNMASK; drive->io_32bit = 0; } @@ -366,7 +365,7 @@ static ide_startstop_t do_reset1(ide_drive_t *drive, int do_not_try_atapi) prepare_to_wait(&ide_park_wq, &wait, TASK_UNINTERRUPTIBLE); timeout = jiffies; ide_port_for_each_present_dev(i, tdrive, hwif) { - if ((tdrive->dev_flags & IDE_DFLAG_PARKED) && + if (ide_dev_heads_parked(tdrive) && time_after(tdrive->sleep, timeout)) timeout = tdrive->sleep; } diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c index b7f0206..1192f5d 100644 --- a/drivers/ide/ide-floppy.c +++ b/drivers/ide/ide-floppy.c @@ -336,7 +336,7 @@ static int ide_floppy_get_flexible_disk_page(ide_drive_t *drive, else drive->dev_flags &= ~IDE_DFLAG_WP; - set_disk_ro(disk, !!(drive->dev_flags & IDE_DFLAG_WP)); + set_disk_ro(disk, ide_dev_write_protected(drive)); page = &pc->buf[8]; @@ -421,7 +421,7 @@ static int ide_floppy_get_capacity(ide_drive_t *drive) switch (pc.buf[desc_start + 4] & 0x03) { /* Clik! drive returns this instead of CAPACITY_CURRENT */ case CAPACITY_UNFORMATTED: - if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) + if (!ide_dev_clik(drive)) /* * If it is not a clik drive, break out * (maintains previous driver behaviour) @@ -471,7 +471,7 @@ static int ide_floppy_get_capacity(ide_drive_t *drive) } /* Clik! disk does not support get_flexible_disk_page */ - if (!(drive->atapi_flags & IDE_AFLAG_CLIK_DRIVE)) + if (!ide_dev_clik(drive)) (void) ide_floppy_get_flexible_disk_page(drive, &pc); return rc; diff --git a/drivers/ide/ide-floppy_ioctl.c b/drivers/ide/ide-floppy_ioctl.c index 8f8be85..8362ad6 100644 --- a/drivers/ide/ide-floppy_ioctl.c +++ b/drivers/ide/ide-floppy_ioctl.c @@ -195,7 +195,7 @@ static int ide_floppy_get_format_progress(ide_drive_t *drive, struct ide_disk_obj *floppy = drive->driver_data; int progress_indication = 0x10000; - if (drive->atapi_flags & IDE_AFLAG_SRFP) { + if (ide_dev_srfp(drive)) { ide_create_request_sense_cmd(drive, pc); if (ide_queue_pc_tail(drive, floppy->disk, pc)) return -EIO; diff --git a/drivers/ide/ide-gd.c b/drivers/ide/ide-gd.c index d0573aa..ccef390 100644 --- a/drivers/ide/ide-gd.c +++ b/drivers/ide/ide-gd.c @@ -179,7 +179,7 @@ static int ide_gd_open(struct block_device *bdev, fmode_t mode) idkp->openers++; - if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) { + if (ide_dev_removable(drive) && idkp->openers == 1) { drive->dev_flags &= ~IDE_DFLAG_FORMAT_IN_PROGRESS; /* Just in case */ @@ -195,7 +195,7 @@ static int ide_gd_open(struct block_device *bdev, fmode_t mode) goto out_put_idkp; } - if ((drive->dev_flags & IDE_DFLAG_WP) && (mode & FMODE_WRITE)) { + if (ide_dev_write_protected(drive) && (mode & FMODE_WRITE)) { ret = -EROFS; goto out_put_idkp; } @@ -208,7 +208,7 @@ static int ide_gd_open(struct block_device *bdev, fmode_t mode) drive->disk_ops->set_doorlock(drive, disk, 1); drive->dev_flags |= IDE_DFLAG_MEDIA_CHANGED; check_disk_change(bdev); - } else if (drive->dev_flags & IDE_DFLAG_FORMAT_IN_PROGRESS) { + } else if (ide_dev_format_in_progress(drive)) { ret = -EBUSY; goto out_put_idkp; } @@ -230,7 +230,7 @@ static int ide_gd_release(struct gendisk *disk, fmode_t mode) if (idkp->openers == 1) drive->disk_ops->flush(drive); - if ((drive->dev_flags & IDE_DFLAG_REMOVABLE) && idkp->openers == 1) { + if (ide_dev_removable(drive) && idkp->openers == 1) { drive->disk_ops->set_doorlock(drive, disk, 0); drive->dev_flags &= ~IDE_DFLAG_FORMAT_IN_PROGRESS; } @@ -260,12 +260,12 @@ static int ide_gd_media_changed(struct gendisk *disk) int ret; /* do not scan partitions twice if this is a removable device */ - if (drive->dev_flags & IDE_DFLAG_ATTACH) { + if (ide_dev_attach(drive)) { drive->dev_flags &= ~IDE_DFLAG_ATTACH; return 0; } - ret = !!(drive->dev_flags & IDE_DFLAG_MEDIA_CHANGED); + ret = ide_dev_media_changed(drive); drive->dev_flags &= ~IDE_DFLAG_MEDIA_CHANGED; return ret; @@ -361,7 +361,7 @@ static int ide_gd_probe(ide_drive_t *drive) g->minors = IDE_DISK_MINORS; g->driverfs_dev = &drive->gendev; g->flags |= GENHD_FL_EXT_DEVT; - if (drive->dev_flags & IDE_DFLAG_REMOVABLE) + if (ide_dev_removable(drive)) g->flags = GENHD_FL_REMOVABLE; g->fops = &ide_gd_ops; add_disk(g); diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c index 481fb1b..d161ebf 100644 --- a/drivers/ide/ide-io.c +++ b/drivers/ide/ide-io.c @@ -61,8 +61,7 @@ int ide_end_rq(ide_drive_t *drive, struct request *rq, int error, * decide whether to reenable DMA -- 3 is a random magic for now, * if we DMA timeout more than 3 times, just stay in PIO */ - if ((drive->dev_flags & IDE_DFLAG_DMA_PIO_RETRY) && - drive->retry_pio <= 3) { + if (ide_dev_dma_retry_pio(drive) && drive->retry_pio <= 3) { drive->dev_flags &= ~IDE_DFLAG_DMA_PIO_RETRY; ide_dma_on(drive); } @@ -481,7 +480,7 @@ repeat: prev_port = hwif->host->cur_port; hwif->rq = NULL; - if (drive->dev_flags & IDE_DFLAG_SLEEPING) { + if (ide_dev_sleeping(drive)) { if (time_before(drive->sleep, jiffies)) { ide_unlock_port(hwif); goto plug_device; @@ -530,7 +529,7 @@ repeat: * unless the subdriver triggers such a thing in its own PM * state machine. */ - if ((drive->dev_flags & IDE_DFLAG_BLOCKED) && + if (ide_dev_blocked(drive) && blk_pm_request(rq) == 0 && (rq->cmd_flags & REQ_PREEMPT) == 0) { /* there should be no pending command at this point */ @@ -839,7 +838,7 @@ irqreturn_t ide_intr (int irq, void *dev_id) if (hwif->port_ops && hwif->port_ops->clear_irq) hwif->port_ops->clear_irq(drive); - if (drive->dev_flags & IDE_DFLAG_UNMASK) + if (ide_dev_unmask_irqs(drive)) local_irq_enable_in_hardirq(); /* service this interrupt, may set handler for next interrupt */ diff --git a/drivers/ide/ide-ioctls.c b/drivers/ide/ide-ioctls.c index 7701427..8c6e076 100644 --- a/drivers/ide/ide-ioctls.c +++ b/drivers/ide/ide-ioctls.c @@ -59,7 +59,7 @@ static int ide_get_identity_ioctl(ide_drive_t *drive, unsigned int cmd, int size = (cmd == HDIO_GET_IDENTITY) ? (ATA_ID_WORDS * 2) : 142; int rc = 0; - if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) { + if (!ide_dev_id_read(drive)) { rc = -ENOMSG; goto out; } @@ -83,9 +83,9 @@ out: static int ide_get_nice_ioctl(ide_drive_t *drive, unsigned long arg) { - return put_user((!!(drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) + return put_user((ide_dev_dsc_overlap(drive) << IDE_NICE_DSC_OVERLAP) | - (!!(drive->dev_flags & IDE_DFLAG_NICE1) + (ide_dev_nice1(drive) << IDE_NICE_1), (long __user *)arg); } diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c index 5403e4a..7353cf9 100644 --- a/drivers/ide/ide-iops.c +++ b/drivers/ide/ide-iops.c @@ -274,7 +274,7 @@ u8 eighty_ninty_three(ide_drive_t *drive) return 1; no_80w: - if (drive->dev_flags & IDE_DFLAG_UDMA33_WARNED) + if (ide_dev_udma33_warned(drive)) return 0; printk(KERN_WARNING "%s: %s side 80-wire cable detection failed, " @@ -310,7 +310,7 @@ int ide_driveid_update(ide_drive_t *drive) kfree(id); - if ((drive->dev_flags & IDE_DFLAG_USING_DMA) && ide_id_dma_bug(drive)) + if (ide_dev_using_dma(drive) && ide_id_dma_bug(drive)) ide_dma_off(drive); return 1; @@ -392,7 +392,7 @@ int ide_config_drive_speed(ide_drive_t *drive, u8 speed) skip: #ifdef CONFIG_BLK_DEV_IDEDMA - if (speed >= XFER_SW_DMA_0 && (drive->dev_flags & IDE_DFLAG_USING_DMA)) + if (speed >= XFER_SW_DMA_0 && ide_dev_using_dma(drive)) hwif->dma_ops->dma_host_set(drive, 1); else if (hwif->dma_ops) /* check if host supports DMA */ ide_dma_off_quietly(drive); diff --git a/drivers/ide/ide-lib.c b/drivers/ide/ide-lib.c index 217b7fd..dc2ff8b 100644 --- a/drivers/ide/ide-lib.c +++ b/drivers/ide/ide-lib.c @@ -68,7 +68,7 @@ static void ide_dump_sector(ide_drive_t *drive) { struct ide_cmd cmd; struct ide_taskfile *tf = &cmd.tf; - u8 lba48 = !!(drive->dev_flags & IDE_DFLAG_LBA48); + u8 lba48 = ide_dev_lba48(drive); memset(&cmd, 0, sizeof(cmd)); if (lba48) diff --git a/drivers/ide/ide-park.c b/drivers/ide/ide-park.c index 9490b44..a2ebba0 100644 --- a/drivers/ide/ide-park.c +++ b/drivers/ide/ide-park.c @@ -14,7 +14,7 @@ static void issue_park_cmd(ide_drive_t *drive, unsigned long timeout) timeout += jiffies; spin_lock_irq(&hwif->lock); - if (drive->dev_flags & IDE_DFLAG_PARKED) { + if (ide_dev_heads_parked(drive)) { int reset_timer = time_before(timeout, drive->sleep); int start_queue = 0; @@ -94,13 +94,12 @@ ssize_t ide_park_show(struct device *dev, struct device_attribute *attr, unsigned long now; unsigned int msecs; - if (drive->dev_flags & IDE_DFLAG_NO_UNLOAD) + if (ide_dev_no_unload_feature(drive)) return -EOPNOTSUPP; spin_lock_irq(&hwif->lock); now = jiffies; - if (drive->dev_flags & IDE_DFLAG_PARKED && - time_after(drive->sleep, now)) + if (ide_dev_heads_parked(drive) && time_after(drive->sleep, now)) msecs = jiffies_to_msecs(drive->sleep - now); else msecs = 0; @@ -127,9 +126,9 @@ ssize_t ide_park_store(struct device *dev, struct device_attribute *attr, mutex_lock(&ide_setting_mtx); if (input >= 0) { - if (drive->dev_flags & IDE_DFLAG_NO_UNLOAD) + if (ide_dev_no_unload_feature(drive)) rc = -EOPNOTSUPP; - else if (input || drive->dev_flags & IDE_DFLAG_PARKED) + else if (input || ide_dev_heads_parked(drive)) issue_park_cmd(drive, msecs_to_jiffies(input)); } else { if (drive->media == ide_disk) diff --git a/drivers/ide/ide-pm.c b/drivers/ide/ide-pm.c index ebf2d21..ce28e16 100644 --- a/drivers/ide/ide-pm.c +++ b/drivers/ide/ide-pm.c @@ -118,7 +118,7 @@ ide_startstop_t ide_start_power_step(ide_drive_t *drive, struct request *rq) break; /* Not supported? Switch to next step now. */ if (ata_id_flush_enabled(drive->id) == 0 || - (drive->dev_flags & IDE_DFLAG_WCACHE) == 0) { + !ide_dev_wcache_enabled(drive)) { ide_complete_power_step(drive, rq); return ide_stopped; } diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c index 203224c..18fd6ac 100644 --- a/drivers/ide/ide-probe.c +++ b/drivers/ide/ide-probe.c @@ -374,7 +374,7 @@ static int do_probe (ide_drive_t *drive, u8 cmd) const struct ide_tp_ops *tp_ops = hwif->tp_ops; u16 *id = drive->id; int rc; - u8 present = !!(drive->dev_flags & IDE_DFLAG_PRESENT), stat; + u8 present = ide_dev_present(drive), stat; /* avoid waiting for inappropriate probes */ if (present && drive->media != ide_disk && cmd == ATA_CMD_ID_ATA) @@ -488,7 +488,7 @@ static u8 probe_for_drive(ide_drive_t *drive) strcpy(m, "UNKNOWN"); /* skip probing? */ - if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0) { + if (!ide_dev_noprobe(drive)) { /* if !(success||timed-out) */ cmd = ATA_CMD_ID_ATA; rc = do_probe(drive, cmd); @@ -498,20 +498,22 @@ static u8 probe_for_drive(ide_drive_t *drive) rc = do_probe(drive, cmd); } - if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) + if (!ide_dev_present(drive)) goto out_free; /* identification failed? */ - if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) { + if (!ide_dev_id_read(drive)) { if (drive->media == ide_disk) { - printk(KERN_INFO "%s: non-IDE drive, CHS=%d/%d/%d\n", + pr_info("%s: non-IDE drive, CHS=%d/%d/%d\n", drive->name, drive->cyl, drive->head, drive->sect); } else if (drive->media == ide_cdrom) { - printk(KERN_INFO "%s: ATAPI cdrom (?)\n", drive->name); + pr_info("%s: ATAPI cdrom (?)\n", drive->name); } else { /* nuke it */ - printk(KERN_WARNING "%s: Unknown device on bus refused identification. Ignoring.\n", drive->name); + pr_warning("%s: Unknown device on bus refused " + "identification, ignoring.\n", + drive->name); drive->dev_flags &= ~IDE_DFLAG_PRESENT; } } else { @@ -522,11 +524,11 @@ static u8 probe_for_drive(ide_drive_t *drive) } } - if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) + if (!ide_dev_present(drive)) goto out_free; /* The drive wasn't being helpful. Add generic info only */ - if ((drive->dev_flags & IDE_DFLAG_ID_READ) == 0) { + if (!ide_dev_id_read(drive)) { generic_id(drive); return 1; } @@ -625,8 +627,7 @@ static int ide_port_wait_ready(ide_hwif_t *hwif) /* Now make sure both master & slave are ready */ ide_port_for_each_dev(i, drive, hwif) { /* Ignore disks that we will not probe for later. */ - if ((drive->dev_flags & IDE_DFLAG_NOPROBE) == 0 || - (drive->dev_flags & IDE_DFLAG_PRESENT)) { + if (!ide_dev_noprobe(drive) || ide_dev_present(drive)) { SELECT_DRIVE(drive); hwif->tp_ops->set_irq(hwif, 1); mdelay(2); @@ -658,7 +659,7 @@ void ide_undecoded_slave(ide_drive_t *dev1) { ide_drive_t *dev0 = dev1->hwif->devices[0]; - if ((dev1->dn & 1) == 0 || (dev0->dev_flags & IDE_DFLAG_PRESENT) == 0) + if ((dev1->dn & 1) == 0 || !ide_dev_present(dev0)) return; /* If the models don't match they are not the same product */ @@ -691,8 +692,8 @@ static int ide_probe_port(ide_hwif_t *hwif) BUG_ON(hwif->present); - if ((hwif->devices[0]->dev_flags & IDE_DFLAG_NOPROBE) && - (hwif->devices[1]->dev_flags & IDE_DFLAG_NOPROBE)) + if (ide_dev_noprobe(hwif->devices[0]) && + ide_dev_noprobe(hwif->devices[1])) return -EACCES; /* @@ -704,7 +705,8 @@ static int ide_probe_port(ide_hwif_t *hwif) disable_irq(hwif->irq); if (ide_port_wait_ready(hwif) == -EBUSY) - printk(KERN_DEBUG "%s: Wait for ready failed before probe !\n", hwif->name); + pr_debug("%s: Wait for ready failed before probe!\n", + hwif->name); /* * Second drive should only exist if first drive was found, @@ -712,7 +714,7 @@ static int ide_probe_port(ide_hwif_t *hwif) */ ide_port_for_each_dev(i, drive, hwif) { (void) probe_for_drive(drive); - if (drive->dev_flags & IDE_DFLAG_PRESENT) + if (ide_dev_present(drive)) rc = 0; } @@ -874,7 +876,7 @@ static struct kobject *ata_probe(dev_t dev, int *part, void *data) int unit = *part >> PARTN_BITS; ide_drive_t *drive = hwif->devices[unit]; - if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) + if (!ide_dev_present(drive)) return NULL; if (drive->media == ide_disk) diff --git a/drivers/ide/ide-proc.c b/drivers/ide/ide-proc.c index 0ee8887..cc05db0 100644 --- a/drivers/ide/ide-proc.c +++ b/drivers/ide/ide-proc.c @@ -600,7 +600,7 @@ void ide_proc_port_register_devices(ide_hwif_t *hwif) int i; ide_port_for_each_dev(i, drive, hwif) { - if ((drive->dev_flags & IDE_DFLAG_PRESENT) == 0) + if (!ide_dev_present(drive)) continue; drive->proc = proc_mkdir(drive->name, parent); diff --git a/drivers/ide/ide-tape.c b/drivers/ide/ide-tape.c index 1b97d7a..7323ead 100644 --- a/drivers/ide/ide-tape.c +++ b/drivers/ide/ide-tape.c @@ -792,11 +792,11 @@ static ide_startstop_t idetape_do_request(ide_drive_t *drive, */ stat = hwif->tp_ops->read_status(hwif); - if ((drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) == 0 && + if (!ide_dev_dsc_overlap(drive) && (rq->cmd[13] & REQ_IDETAPE_PC2) == 0) set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags); - if (drive->dev_flags & IDE_DFLAG_POST_RESET) { + if (ide_dev_post_reset(drive)) { set_bit(IDE_AFLAG_IGNORE_DSC, &drive->atapi_flags); drive->dev_flags &= ~IDE_DFLAG_POST_RESET; } @@ -1328,7 +1328,7 @@ static int idetape_init_read(ide_drive_t *drive) * No point in issuing this if DSC overlap isn't supported, some * drives (Seagate STT3401A) will return an error. */ - if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) { + if (ide_dev_dsc_overlap(drive)) { bytes_read = idetape_queue_rw_tail(drive, REQ_IDETAPE_READ, 0, tape->merge_bh); @@ -1604,7 +1604,7 @@ static ssize_t idetape_chrdev_write(struct file *file, const char __user *buf, * point in issuing this if DSC overlap isn't supported, some * drives (Seagate STT3401A) will return an error. */ - if (drive->dev_flags & IDE_DFLAG_DSC_OVERLAP) { + if (ide_dev_dsc_overlap(drive)) { ssize_t retval = idetape_queue_rw_tail(drive, REQ_IDETAPE_WRITE, 0, tape->merge_bh); @@ -2216,7 +2216,7 @@ static void idetape_setup(ide_drive_t *drive, idetape_tape_t *tape, int minor) (*(u16 *)&tape->caps[16] * 512) / tape->buffer_size, tape->buffer_size / 1024, tape->best_dsc_rw_freq * 1000 / HZ, - (drive->dev_flags & IDE_DFLAG_USING_DMA) ? ", DMA" : ""); + ide_dev_using_dma(drive) ? ", DMA" : ""); ide_proc_register_driver(drive, tape->driver); } @@ -2357,7 +2357,7 @@ static int ide_tape_probe(ide_drive_t *drive) if (drive->media != ide_tape) goto failed; - if ((drive->dev_flags & IDE_DFLAG_ID_READ) && + if (ide_dev_id_read(drive) && ide_check_atapi_device(drive, DRV_NAME) == 0) { printk(KERN_ERR "ide-tape: %s: not supported by this version of" " the driver\n", drive->name); diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c index a3b7a50..6015ac1 100644 --- a/drivers/ide/ide-taskfile.c +++ b/drivers/ide/ide-taskfile.c @@ -100,7 +100,7 @@ ide_startstop_t do_rw_taskfile(ide_drive_t *drive, struct ide_cmd *orig_cmd) ide_execute_command(drive, cmd, handler, WAIT_WORSTCASE); return ide_started; case ATA_PROT_DMA: - if ((drive->dev_flags & IDE_DFLAG_USING_DMA) == 0 || + if (!ide_dev_using_dma(drive) || ide_build_sglist(drive, cmd) == 0 || dma_ops->dma_setup(drive, cmd)) return ide_stopped; @@ -370,11 +370,11 @@ static ide_startstop_t pre_task_out_intr(ide_drive_t *drive, printk(KERN_ERR "%s: no DRQ after issuing %sWRITE%s\n", drive->name, (cmd->tf_flags & IDE_TFLAG_MULTI_PIO) ? "MULT" : "", - (drive->dev_flags & IDE_DFLAG_LBA48) ? "_EXT" : ""); + ide_dev_lba48(drive) ? "_EXT" : ""); return startstop; } - if ((drive->dev_flags & IDE_DFLAG_UNMASK) == 0) + if (!ide_dev_unmask_irqs(drive)) local_irq_disable(); ide_set_handler(drive, &task_pio_intr, WAIT_WORSTCASE); @@ -440,8 +440,6 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) u16 nsect = 0; char __user *buf = (char __user *)arg; -// printk("IDE Taskfile ...\n"); - req_task = kzalloc(tasksize, GFP_KERNEL); if (req_task == NULL) return -ENOMEM; if (copy_from_user(req_task, buf, tasksize)) { @@ -451,7 +449,7 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) taskout = req_task->out_size; taskin = req_task->in_size; - + if (taskin > 65536 || taskout > 65536) { err = -EINVAL; goto abort; @@ -493,7 +491,7 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) cmd.tf_flags = IDE_TFLAG_IO_16BIT | IDE_TFLAG_DEVICE | IDE_TFLAG_IN_TF; - if (drive->dev_flags & IDE_DFLAG_LBA48) + if (ide_dev_lba48(drive)) cmd.tf_flags |= (IDE_TFLAG_LBA48 | IDE_TFLAG_IN_HOB); if (req_task->out_flags.all) { @@ -610,7 +608,7 @@ int ide_taskfile_ioctl(ide_drive_t *drive, unsigned long arg) if ((cmd.ftf_flags & IDE_FTFLAG_SET_IN_FLAGS) && req_task->in_flags.all == 0) { req_task->in_flags.all = IDE_TASKFILE_STD_IN_FLAGS; - if (drive->dev_flags & IDE_DFLAG_LBA48) + if (ide_dev_lba48(drive)) req_task->in_flags.all |= (IDE_HOB_STD_IN_FLAGS << 8); } @@ -637,8 +635,6 @@ abort: kfree(outbuf); kfree(inbuf); -// printk("IDE Taskfile ioctl ended. rc = %i\n", err); - return err; } #endif diff --git a/drivers/ide/ns87415.c b/drivers/ide/ns87415.c index 7b65fe5..a10b6fc 100644 --- a/drivers/ide/ns87415.c +++ b/drivers/ide/ns87415.c @@ -155,7 +155,7 @@ static void ns87415_prepare_drive (ide_drive_t *drive, unsigned int use_dma) /* Adjust IRQ enable bit */ bit = 1 << (8 + hwif->channel); - if (drive->dev_flags & IDE_DFLAG_PRESENT) + if (ide_dev_present(drive)) new &= ~bit; else new |= bit; @@ -192,8 +192,7 @@ static void ns87415_prepare_drive (ide_drive_t *drive, unsigned int use_dma) static void ns87415_selectproc (ide_drive_t *drive) { - ns87415_prepare_drive(drive, - !!(drive->dev_flags & IDE_DFLAG_USING_DMA)); + ns87415_prepare_drive(drive, ide_dev_using_dma(drive)); } static int ns87415_dma_end(ide_drive_t *drive) diff --git a/drivers/ide/pdc202xx_old.c b/drivers/ide/pdc202xx_old.c index f7536d1..f5bfa8a 100644 --- a/drivers/ide/pdc202xx_old.c +++ b/drivers/ide/pdc202xx_old.c @@ -168,7 +168,7 @@ static void pdc202xx_dma_start(ide_drive_t *drive) { if (drive->current_speed > XFER_UDMA_2) pdc_old_enable_66MHz_clock(drive->hwif); - if (drive->media != ide_disk || (drive->dev_flags & IDE_DFLAG_LBA48)) { + if (drive->media != ide_disk || ide_dev_lba48(drive)) { ide_hwif_t *hwif = drive->hwif; struct request *rq = hwif->rq; unsigned long high_16 = hwif->extra_base - 16; @@ -188,7 +188,7 @@ static void pdc202xx_dma_start(ide_drive_t *drive) static int pdc202xx_dma_end(ide_drive_t *drive) { - if (drive->media != ide_disk || (drive->dev_flags & IDE_DFLAG_LBA48)) { + if (drive->media != ide_disk || ide_dev_lba48(drive)) { ide_hwif_t *hwif = drive->hwif; unsigned long high_16 = hwif->extra_base - 16; unsigned long atapi_reg = high_16 + (hwif->channel ? 0x24 : 0x20); diff --git a/drivers/ide/sc1200.c b/drivers/ide/sc1200.c index 1c3a829..2305cfb 100644 --- a/drivers/ide/sc1200.c +++ b/drivers/ide/sc1200.c @@ -217,7 +217,7 @@ static void sc1200_set_pio_mode(ide_drive_t *drive, const u8 pio) printk("SC1200: %s: changing (U)DMA mode\n", drive->name); ide_dma_off_quietly(drive); if (ide_set_dma_mode(drive, mode) == 0 && - (drive->dev_flags & IDE_DFLAG_USING_DMA)) + ide_dev_using_dma(drive)) hwif->dma_ops->dma_host_set(drive, 1); return; } diff --git a/drivers/ide/trm290.c b/drivers/ide/trm290.c index ed14968..9bd3617 100644 --- a/drivers/ide/trm290.c +++ b/drivers/ide/trm290.c @@ -161,7 +161,7 @@ static void trm290_prepare_drive (ide_drive_t *drive, unsigned int use_dma) } /* enable IRQ if not probing */ - if (drive->dev_flags & IDE_DFLAG_PRESENT) { + if (ide_dev_present(drive)) { reg = inw(hwif->config_data + 3); reg &= 0x13; reg &= ~(1 << hwif->channel); @@ -173,7 +173,7 @@ static void trm290_prepare_drive (ide_drive_t *drive, unsigned int use_dma) static void trm290_selectproc (ide_drive_t *drive) { - trm290_prepare_drive(drive, !!(drive->dev_flags & IDE_DFLAG_USING_DMA)); + trm290_prepare_drive(drive, ide_dev_using_dma(drive)); } static int trm290_dma_setup(ide_drive_t *drive, struct ide_cmd *cmd) diff --git a/include/linux/ide.h b/include/linux/ide.h index 5e03b22..cd41502 100644 --- a/include/linux/ide.h +++ b/include/linux/ide.h @@ -652,6 +652,74 @@ typedef struct ide_drive_s ide_drive_t; #define ide_drv_g(disk, cont_type) \ container_of((disk)->private_data, struct cont_type, driver) +#define IDE_AFLAG_CHECK(name, flag) \ +static inline int ide_dev_##name(ide_drive_t *drive) \ +{ \ + return !!(drive->atapi_flags & flag); \ +} + +IDE_AFLAG_CHECK(drq_int, IDE_AFLAG_DRQ_INTERRUPT); +IDE_AFLAG_CHECK(no_eject, IDE_AFLAG_NO_EJECT); +IDE_AFLAG_CHECK(pre_atapi12, IDE_AFLAG_PRE_ATAPI12); +IDE_AFLAG_CHECK(tocaddr_bcd, IDE_AFLAG_TOCADDR_AS_BCD); +IDE_AFLAG_CHECK(toctracks_bcd, IDE_AFLAG_TOCTRACKS_AS_BCD); +IDE_AFLAG_CHECK(toc_valid, IDE_AFLAG_TOC_VALID); +IDE_AFLAG_CHECK(door_locked, IDE_AFLAG_DOOR_LOCKED); +IDE_AFLAG_CHECK(no_speed_select, IDE_AFLAG_NO_SPEED_SELECT); +IDE_AFLAG_CHECK(vertos_300_ssd, IDE_AFLAG_VERTOS_300_SSD); +IDE_AFLAG_CHECK(vertos_600_esd, IDE_AFLAG_VERTOS_600_ESD); +IDE_AFLAG_CHECK(sanyo_3cd, IDE_AFLAG_SANYO_3CD); +IDE_AFLAG_CHECK(full_caps, IDE_AFLAG_FULL_CAPS_PAGE); +IDE_AFLAG_CHECK(can_play_audio, IDE_AFLAG_PLAY_AUDIO_OK); +IDE_AFLAG_CHECK(le_speed_fields, IDE_AFLAG_LE_SPEED_FIELDS); +IDE_AFLAG_CHECK(clik, IDE_AFLAG_CLIK_DRIVE); +IDE_AFLAG_CHECK(zip, IDE_AFLAG_ZIP_DRIVE); +IDE_AFLAG_CHECK(srfp, IDE_AFLAG_SRFP); +IDE_AFLAG_CHECK(ignore_dsc, IDE_AFLAG_IGNORE_DSC); +IDE_AFLAG_CHECK(address_valid, IDE_AFLAG_ADDRESS_VALID); +IDE_AFLAG_CHECK(busy, IDE_AFLAG_BUSY); +IDE_AFLAG_CHECK(detect_bs, IDE_AFLAG_DETECT_BS); +IDE_AFLAG_CHECK(filemark, IDE_AFLAG_FILEMARK); +IDE_AFLAG_CHECK(medium_present, IDE_AFLAG_MEDIUM_PRESENT); +IDE_AFLAG_CHECK(no_autoclose, IDE_AFLAG_NO_AUTOCLOSE); + +#define IDE_DFLAG_CHECK(name, flag) \ +static inline int ide_dev_##name(ide_drive_t *drive) \ +{ \ + return !!(drive->dev_flags & flag); \ +} + +IDE_DFLAG_CHECK(keep_settings, IDE_DFLAG_KEEP_SETTINGS); +IDE_DFLAG_CHECK(using_dma, IDE_DFLAG_USING_DMA); +IDE_DFLAG_CHECK(unmask_irqs, IDE_DFLAG_UNMASK); +IDE_DFLAG_CHECK(noflush, IDE_DFLAG_NOFLUSH); +IDE_DFLAG_CHECK(dsc_overlap, IDE_DFLAG_DSC_OVERLAP); +IDE_DFLAG_CHECK(nice1, IDE_DFLAG_NICE1); +IDE_DFLAG_CHECK(present, IDE_DFLAG_PRESENT); +IDE_DFLAG_CHECK(id_read, IDE_DFLAG_ID_READ); +IDE_DFLAG_CHECK(noprobe, IDE_DFLAG_NOPROBE); +IDE_DFLAG_CHECK(removable, IDE_DFLAG_REMOVABLE); +IDE_DFLAG_CHECK(attach, IDE_DFLAG_ATTACH); +IDE_DFLAG_CHECK(forced_geom, IDE_DFLAG_FORCED_GEOM); +IDE_DFLAG_CHECK(no_unmask, IDE_DFLAG_NO_UNMASK); +IDE_DFLAG_CHECK(no_32bit_io, IDE_DFLAG_NO_IO_32BIT); +IDE_DFLAG_CHECK(doorlocking, IDE_DFLAG_DOORLOCKING); +IDE_DFLAG_CHECK(nodma, IDE_DFLAG_NODMA); +IDE_DFLAG_CHECK(blocked, IDE_DFLAG_BLOCKED); +IDE_DFLAG_CHECK(sleeping, IDE_DFLAG_SLEEPING); +IDE_DFLAG_CHECK(post_reset, IDE_DFLAG_POST_RESET); +IDE_DFLAG_CHECK(udma33_warned, IDE_DFLAG_UDMA33_WARNED); +IDE_DFLAG_CHECK(lba48, IDE_DFLAG_LBA48); +IDE_DFLAG_CHECK(wcache_enabled, IDE_DFLAG_WCACHE); +IDE_DFLAG_CHECK(ignore_write_err, IDE_DFLAG_NOWERR); +IDE_DFLAG_CHECK(dma_retry_pio, IDE_DFLAG_DMA_PIO_RETRY); +IDE_DFLAG_CHECK(does_lba, IDE_DFLAG_LBA); +IDE_DFLAG_CHECK(no_unload_feature, IDE_DFLAG_NO_UNLOAD); +IDE_DFLAG_CHECK(heads_parked, IDE_DFLAG_PARKED); +IDE_DFLAG_CHECK(media_changed, IDE_DFLAG_MEDIA_CHANGED); +IDE_DFLAG_CHECK(write_protected, IDE_DFLAG_WP); +IDE_DFLAG_CHECK(format_in_progress, IDE_DFLAG_FORMAT_IN_PROGRESS); + struct ide_port_info; struct ide_tp_ops { -- 1.6.1.3 -- Regards/Gruss, Boris. -- To unsubscribe from this list: send the line "unsubscribe linux-ide" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html