Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

ide: factor out device type classifying from do_identify()

Factor out device type classifying from do_identify()
to ide_classify_ata_dev() and ide_classify_atapi_dev().

There should be no functional changes caused by this patch.

Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>

+81 -73
+81 -73
drivers/ide/ide-probe.c
··· 101 101 } 102 102 } 103 103 104 + static void ide_classify_ata_dev(ide_drive_t *drive) 105 + { 106 + u16 *id = drive->id; 107 + char *m = (char *)&id[ATA_ID_PROD]; 108 + int is_cfa = ata_id_is_cfa(id); 109 + 110 + /* CF devices are *not* removable in Linux definition of the term */ 111 + if (is_cfa == 0 && (id[ATA_ID_CONFIG] & (1 << 7))) 112 + drive->dev_flags |= IDE_DFLAG_REMOVABLE; 113 + 114 + drive->media = ide_disk; 115 + 116 + if (!ata_id_has_unload(drive->id)) 117 + drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; 118 + 119 + printk(KERN_INFO "%s: %s, %s DISK drive\n", drive->name, m, 120 + is_cfa ? "CFA" : "ATA"); 121 + } 122 + 123 + static void ide_classify_atapi_dev(ide_drive_t *drive) 124 + { 125 + u16 *id = drive->id; 126 + char *m = (char *)&id[ATA_ID_PROD]; 127 + u8 type = (id[ATA_ID_CONFIG] >> 8) & 0x1f; 128 + 129 + printk(KERN_INFO "%s: %s, ATAPI ", drive->name, m); 130 + switch (type) { 131 + case ide_floppy: 132 + if (!strstr(m, "CD-ROM")) { 133 + if (!strstr(m, "oppy") && 134 + !strstr(m, "poyp") && 135 + !strstr(m, "ZIP")) 136 + printk(KERN_CONT "cdrom or floppy?, assuming "); 137 + if (drive->media != ide_cdrom) { 138 + printk(KERN_CONT "FLOPPY"); 139 + drive->dev_flags |= IDE_DFLAG_REMOVABLE; 140 + break; 141 + } 142 + } 143 + /* Early cdrom models used zero */ 144 + type = ide_cdrom; 145 + case ide_cdrom: 146 + drive->dev_flags |= IDE_DFLAG_REMOVABLE; 147 + #ifdef CONFIG_PPC 148 + /* kludge for Apple PowerBook internal zip */ 149 + if (!strstr(m, "CD-ROM") && strstr(m, "ZIP")) { 150 + printk(KERN_CONT "FLOPPY"); 151 + type = ide_floppy; 152 + break; 153 + } 154 + #endif 155 + printk(KERN_CONT "CD/DVD-ROM"); 156 + break; 157 + case ide_tape: 158 + printk(KERN_CONT "TAPE"); 159 + break; 160 + case ide_optical: 161 + printk(KERN_CONT "OPTICAL"); 162 + drive->dev_flags |= IDE_DFLAG_REMOVABLE; 163 + break; 164 + default: 165 + printk(KERN_CONT "UNKNOWN (type %d)", type); 166 + break; 167 + } 168 + 169 + printk(KERN_CONT " drive\n"); 170 + drive->media = type; 171 + /* an ATAPI device ignores DRDY */ 172 + drive->ready_stat = 0; 173 + if (ata_id_cdb_intr(id)) 174 + drive->atapi_flags |= IDE_AFLAG_DRQ_INTERRUPT; 175 + drive->dev_flags |= IDE_DFLAG_DOORLOCKING; 176 + /* we don't do head unloading on ATAPI devices */ 177 + drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; 178 + } 179 + 104 180 /** 105 181 * do_identify - identify a drive 106 182 * @drive: drive to identify ··· 193 117 u16 *id = drive->id; 194 118 char *m = (char *)&id[ATA_ID_PROD]; 195 119 unsigned long flags; 196 - int bswap = 1, is_cfa; 120 + int bswap = 1; 197 121 198 122 /* local CPU only; some systems need this */ 199 123 local_irq_save(flags); ··· 230 154 if (strstr(m, "E X A B Y T E N E S T")) 231 155 goto err_misc; 232 156 233 - printk(KERN_INFO "%s: %s, ", drive->name, m); 234 - 235 157 drive->dev_flags |= IDE_DFLAG_PRESENT; 236 158 drive->dev_flags &= ~IDE_DFLAG_DEAD; 237 159 238 160 /* 239 161 * Check for an ATAPI device 240 162 */ 241 - if (cmd == ATA_CMD_ID_ATAPI) { 242 - u8 type = (id[ATA_ID_CONFIG] >> 8) & 0x1f; 243 - 244 - printk(KERN_CONT "ATAPI "); 245 - switch (type) { 246 - case ide_floppy: 247 - if (!strstr(m, "CD-ROM")) { 248 - if (!strstr(m, "oppy") && 249 - !strstr(m, "poyp") && 250 - !strstr(m, "ZIP")) 251 - printk(KERN_CONT "cdrom or floppy?, assuming "); 252 - if (drive->media != ide_cdrom) { 253 - printk(KERN_CONT "FLOPPY"); 254 - drive->dev_flags |= IDE_DFLAG_REMOVABLE; 255 - break; 256 - } 257 - } 258 - /* Early cdrom models used zero */ 259 - type = ide_cdrom; 260 - case ide_cdrom: 261 - drive->dev_flags |= IDE_DFLAG_REMOVABLE; 262 - #ifdef CONFIG_PPC 263 - /* kludge for Apple PowerBook internal zip */ 264 - if (!strstr(m, "CD-ROM") && strstr(m, "ZIP")) { 265 - printk(KERN_CONT "FLOPPY"); 266 - type = ide_floppy; 267 - break; 268 - } 269 - #endif 270 - printk(KERN_CONT "CD/DVD-ROM"); 271 - break; 272 - case ide_tape: 273 - printk(KERN_CONT "TAPE"); 274 - break; 275 - case ide_optical: 276 - printk(KERN_CONT "OPTICAL"); 277 - drive->dev_flags |= IDE_DFLAG_REMOVABLE; 278 - break; 279 - default: 280 - printk(KERN_CONT "UNKNOWN (type %d)", type); 281 - break; 282 - } 283 - printk(KERN_CONT " drive\n"); 284 - drive->media = type; 285 - /* an ATAPI device ignores DRDY */ 286 - drive->ready_stat = 0; 287 - if (ata_id_cdb_intr(id)) 288 - drive->atapi_flags |= IDE_AFLAG_DRQ_INTERRUPT; 289 - drive->dev_flags |= IDE_DFLAG_DOORLOCKING; 290 - /* we don't do head unloading on ATAPI devices */ 291 - drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; 292 - return; 293 - } 294 - 163 + if (cmd == ATA_CMD_ID_ATAPI) 164 + ide_classify_atapi_dev(drive); 165 + else 295 166 /* 296 167 * Not an ATAPI device: looks like a "regular" hard disk 297 168 */ 298 - 299 - is_cfa = ata_id_is_cfa(id); 300 - 301 - /* CF devices are *not* removable in Linux definition of the term */ 302 - if (is_cfa == 0 && (id[ATA_ID_CONFIG] & (1 << 7))) 303 - drive->dev_flags |= IDE_DFLAG_REMOVABLE; 304 - 305 - drive->media = ide_disk; 306 - 307 - if (!ata_id_has_unload(drive->id)) 308 - drive->dev_flags |= IDE_DFLAG_NO_UNLOAD; 309 - 310 - printk(KERN_CONT "%s DISK drive\n", is_cfa ? "CFA" : "ATA"); 311 - 169 + ide_classify_ata_dev(drive); 312 170 return; 313 - 314 171 err_misc: 315 172 kfree(id); 316 173 drive->dev_flags &= ~IDE_DFLAG_PRESENT; 317 - return; 318 174 } 319 175 320 176 /**