Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 112921
b: refs/heads/master
c: 49cac39
h: refs/heads/master
i:
  112919: 40b92fd
v: v3
  • Loading branch information
Bartlomiej Zolnierkiewicz committed Oct 10, 2008
1 parent 1ffb073 commit 68cd6db
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 18 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 2ac07d920604eeee8966d52e70161f9b31fe90a3
refs/heads/master: 49cac39e71bd6bbcf934c6ba837e21503902c088
24 changes: 14 additions & 10 deletions trunk/drivers/ide/ide-floppy.c
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,6 @@ typedef struct ide_floppy_obj {
u8 cap_desc[8];
/* Copy of the flexible disk page */
u8 flexible_disk_page[32];
/* Write protect */
int wp;
/* Supports format progress report */
int srfp;
} idefloppy_floppy_t;

#define IDEFLOPPY_TICKS_DELAY HZ/20 /* default delay for ZIP 100 (50ms) */
Expand Down Expand Up @@ -574,8 +570,14 @@ static int ide_floppy_get_flexible_disk_page(ide_drive_t *drive)
" parameters\n");
return 1;
}
floppy->wp = !!(pc.buf[3] & 0x80);
set_disk_ro(disk, floppy->wp);

if (pc.buf[3] & 0x80)
drive->atapi_flags |= IDE_AFLAG_WP;
else
drive->atapi_flags &= ~IDE_AFLAG_WP;

set_disk_ro(disk, !!(drive->atapi_flags & IDE_AFLAG_WP));

page = &pc.buf[8];

transfer_rate = be16_to_cpup((__be16 *)&pc.buf[8 + 2]);
Expand Down Expand Up @@ -614,15 +616,17 @@ static int idefloppy_get_sfrp_bit(ide_drive_t *drive)
idefloppy_floppy_t *floppy = drive->driver_data;
struct ide_atapi_pc pc;

floppy->srfp = 0;
drive->atapi_flags &= ~IDE_AFLAG_SRFP;

idefloppy_create_mode_sense_cmd(&pc, IDEFLOPPY_CAPABILITIES_PAGE);
pc.flags |= PC_FLAG_SUPPRESS_ERROR;

if (ide_queue_pc_tail(drive, floppy->disk, &pc))
return 1;

floppy->srfp = pc.buf[8 + 2] & 0x40;
if (pc.buf[8 + 2] & 0x40)
drive->atapi_flags |= IDE_AFLAG_SRFP;

return 0;
}

Expand Down Expand Up @@ -820,7 +824,7 @@ static int ide_floppy_get_format_progress(ide_drive_t *drive, int __user *arg)
struct ide_atapi_pc pc;
int progress_indication = 0x10000;

if (floppy->srfp) {
if (drive->atapi_flags & IDE_AFLAG_SRFP) {
idefloppy_create_request_sense_cmd(&pc);
if (ide_queue_pc_tail(drive, floppy->disk, &pc))
return -EIO;
Expand Down Expand Up @@ -1044,7 +1048,7 @@ static int idefloppy_open(struct inode *inode, struct file *filp)
goto out_put_floppy;
}

if (floppy->wp && (filp->f_mode & 2)) {
if ((drive->atapi_flags & IDE_AFLAG_WP) && (filp->f_mode & 2)) {
ret = -EROFS;
goto out_put_floppy;
}
Expand Down
18 changes: 11 additions & 7 deletions trunk/include/linux/ide.h
Original file line number Diff line number Diff line change
Expand Up @@ -356,21 +356,25 @@ enum {
IDE_AFLAG_CLIK_DRIVE = (1 << 19),
/* Requires BH algorithm for packets */
IDE_AFLAG_ZIP_DRIVE = (1 << 20),
/* Write protect */
IDE_AFLAG_WP = (1 << 21),
/* Supports format progress report */
IDE_AFLAG_SRFP = (1 << 22),

/* ide-tape */
IDE_AFLAG_IGNORE_DSC = (1 << 21),
IDE_AFLAG_IGNORE_DSC = (1 << 23),
/* 0 When the tape position is unknown */
IDE_AFLAG_ADDRESS_VALID = (1 << 22),
IDE_AFLAG_ADDRESS_VALID = (1 << 24),
/* Device already opened */
IDE_AFLAG_BUSY = (1 << 23),
IDE_AFLAG_BUSY = (1 << 25),
/* Attempt to auto-detect the current user block size */
IDE_AFLAG_DETECT_BS = (1 << 24),
IDE_AFLAG_DETECT_BS = (1 << 26),
/* Currently on a filemark */
IDE_AFLAG_FILEMARK = (1 << 25),
IDE_AFLAG_FILEMARK = (1 << 27),
/* 0 = no tape is loaded, so we don't rewind after ejecting */
IDE_AFLAG_MEDIUM_PRESENT = (1 << 26),
IDE_AFLAG_MEDIUM_PRESENT = (1 << 28),

IDE_AFLAG_NO_AUTOCLOSE = (1 << 27),
IDE_AFLAG_NO_AUTOCLOSE = (1 << 29),
};

struct ide_drive_s {
Expand Down

0 comments on commit 68cd6db

Please sign in to comment.