Commit 3ad6776c authored by Borislav Petkov's avatar Borislav Petkov Committed by Bartlomiej Zolnierkiewicz

ide-floppy: remove struct idefloppy_id_gcw

Bart:
- minor fixups
Signed-off-by: default avatarBorislav Petkov <petkovbb@gmail.com>
Signed-off-by: default avatarBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
parent 3d53ba87
...@@ -194,32 +194,6 @@ enum { ...@@ -194,32 +194,6 @@ enum {
/* Error code returned in rq->errors to the higher part of the driver. */ /* Error code returned in rq->errors to the higher part of the driver. */
#define IDEFLOPPY_ERROR_GENERAL 101 #define IDEFLOPPY_ERROR_GENERAL 101
/*
* The following is used to format the general configuration word of the
* ATAPI IDENTIFY DEVICE command.
*/
struct idefloppy_id_gcw {
#if defined(__LITTLE_ENDIAN_BITFIELD)
unsigned packet_size :2; /* Packet Size */
unsigned reserved234 :3; /* Reserved */
unsigned drq_type :2; /* Command packet DRQ type */
unsigned removable :1; /* Removable media */
unsigned device_type :5; /* Device type */
unsigned reserved13 :1; /* Reserved */
unsigned protocol :2; /* Protocol type */
#elif defined(__BIG_ENDIAN_BITFIELD)
unsigned protocol :2; /* Protocol type */
unsigned reserved13 :1; /* Reserved */
unsigned device_type :5; /* Device type */
unsigned removable :1; /* Removable media */
unsigned drq_type :2; /* Command packet DRQ type */
unsigned reserved234 :3; /* Reserved */
unsigned packet_size :2; /* Packet Size */
#else
#error "Bitfield endianness not defined! Check your byteorder.h"
#endif
};
/* /*
* Pages of the SELECT SENSE / MODE SENSE packet commands. * Pages of the SELECT SENSE / MODE SENSE packet commands.
* See SFF-8070i spec. * See SFF-8070i spec.
...@@ -1271,33 +1245,39 @@ static sector_t idefloppy_capacity(ide_drive_t *drive) ...@@ -1271,33 +1245,39 @@ static sector_t idefloppy_capacity(ide_drive_t *drive)
*/ */
static int idefloppy_identify_device(ide_drive_t *drive, struct hd_driveid *id) static int idefloppy_identify_device(ide_drive_t *drive, struct hd_driveid *id)
{ {
struct idefloppy_id_gcw gcw; u8 gcw[2];
u8 device_type, protocol, removable, drq_type, packet_size;
*((u16 *) &gcw) = id->config; *((u16 *) &gcw) = id->config;
device_type = gcw[1] & 0x1F;
removable = (gcw[0] & 0x80) >> 7;
protocol = (gcw[1] & 0xC0) >> 6;
drq_type = (gcw[0] & 0x60) >> 5;
packet_size = gcw[0] & 0x03;
#ifdef CONFIG_PPC #ifdef CONFIG_PPC
/* kludge for Apple PowerBook internal zip */ /* kludge for Apple PowerBook internal zip */
if ((gcw.device_type == 5) && if (device_type == 5 &&
!strstr(id->model, "CD-ROM") && !strstr(id->model, "CD-ROM") && strstr(id->model, "ZIP"))
strstr(id->model, "ZIP")) device_type = 0;
gcw.device_type = 0;
#endif #endif
if (gcw.protocol != 2) if (protocol != 2)
printk(KERN_ERR "ide-floppy: Protocol (0x%02x) is not ATAPI\n", printk(KERN_ERR "ide-floppy: Protocol (0x%02x) is not ATAPI\n",
gcw.protocol); protocol);
else if (gcw.device_type != 0) else if (device_type != 0)
printk(KERN_ERR "ide-floppy: Device type (0x%02x) is not set " printk(KERN_ERR "ide-floppy: Device type (0x%02x) is not set "
"to floppy\n", gcw.device_type); "to floppy\n", device_type);
else if (!gcw.removable) else if (!removable)
printk(KERN_ERR "ide-floppy: The removable flag is not set\n"); printk(KERN_ERR "ide-floppy: The removable flag is not set\n");
else if (gcw.drq_type == 3) { else if (drq_type == 3)
printk(KERN_ERR "ide-floppy: Sorry, DRQ type (0x%02x) not " printk(KERN_ERR "ide-floppy: Sorry, DRQ type (0x%02x) not "
"supported\n", gcw.drq_type); "supported\n", drq_type);
} else if (gcw.packet_size != 0) { else if (packet_size != 0)
printk(KERN_ERR "ide-floppy: Packet size (0x%02x) is not 12 " printk(KERN_ERR "ide-floppy: Packet size (0x%02x) is not 12 "
"bytes long\n", gcw.packet_size); "bytes\n", packet_size);
} else else
return 1; return 1;
return 0; return 0;
} }
...@@ -1322,11 +1302,12 @@ static inline void idefloppy_add_settings(ide_drive_t *drive) { ; } ...@@ -1322,11 +1302,12 @@ static inline void idefloppy_add_settings(ide_drive_t *drive) { ; }
static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy) static void idefloppy_setup(ide_drive_t *drive, idefloppy_floppy_t *floppy)
{ {
struct idefloppy_id_gcw gcw; u8 gcw[2];
*((u16 *) &gcw) = drive->id->config; *((u16 *) &gcw) = drive->id->config;
floppy->pc = floppy->pc_stack; floppy->pc = floppy->pc_stack;
if (gcw.drq_type == 1)
if (((gcw[0] & 0x60) >> 5) == 1)
floppy->flags |= IDEFLOPPY_FLAG_DRQ_INTERRUPT; floppy->flags |= IDEFLOPPY_FLAG_DRQ_INTERRUPT;
/* /*
* We used to check revisions here. At this point however I'm giving up. * We used to check revisions here. At this point however I'm giving up.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment