Annotation of Gnu-Mach/i386/i386at/gpl/linux/block/ide_modes.h, revision 1.1.1.1

1.1       root        1: #ifndef _IDE_MODES_H
                      2: #define _IDE_MODES_H
                      3: /*
                      4:  *  linux/drivers/block/ide_modes.h
                      5:  *
                      6:  *  Copyright (C) 1996  Linus Torvalds, Igor Abramov, and Mark Lord
                      7:  */
                      8: 
                      9: /*
                     10:  * Shared data/functions for determining best PIO mode for an IDE drive.
                     11:  * Most of this stuff originally lived in cmd640.c, and changes to the
                     12:  * ide_pio_blacklist[] table should be made with EXTREME CAUTION to avoid
                     13:  * breaking the fragile cmd640.c support.
                     14:  */
                     15: 
                     16: #if defined(CONFIG_BLK_DEV_CMD640) || defined(CONFIG_IDE_CHIPSETS)
                     17: 
                     18: #ifndef _IDE_C
                     19: 
                     20: int ide_scan_pio_blacklist (char *model);
                     21: unsigned int ide_get_best_pio_mode (ide_drive_t *drive);
                     22: 
                     23: #else /* _IDE_C */
                     24: 
                     25: /*
                     26:  * Black list. Some drives incorrectly report their maximal PIO mode,
                     27:  * at least in respect to CMD640. Here we keep info on some known drives.
                     28:  */
                     29: static struct ide_pio_info {
                     30:        const char      *name;
                     31:        int             pio;
                     32: } ide_pio_blacklist [] = {
                     33: /*     { "Conner Peripherals 1275MB - CFS1275A", 4 }, */
                     34: 
                     35:        { "WDC AC2700",  3 },
                     36:        { "WDC AC2540",  3 },
                     37:        { "WDC AC2420",  3 },
                     38:        { "WDC AC2340",  3 },
                     39:        { "WDC AC2250",  0 },
                     40:        { "WDC AC2200",  0 },
                     41:        { "WDC AC2120",  0 },
                     42:        { "WDC AC2850",  3 },
                     43:        { "WDC AC1270",  3 },
                     44:        { "WDC AC1170",  3 },
                     45:        { "WDC AC1210",  1 },
                     46:        { "WDC AC280",   0 },
                     47: /*     { "WDC AC21000", 4 }, */
                     48:        { "WDC AC31000", 3 },
                     49: /*     { "WDC AC21200", 4 }, */
                     50:        { "WDC AC31200", 3 },
                     51: /*     { "WDC AC31600", 4 }, */
                     52: 
                     53:        { "Maxtor 7131 AT", 1 },
                     54:        { "Maxtor 7171 AT", 1 },
                     55:        { "Maxtor 7213 AT", 1 },
                     56:        { "Maxtor 7245 AT", 1 },
                     57:        { "Maxtor 7345 AT", 1 },
                     58:        { "Maxtor 7546 AT", 3 },
                     59:        { "Maxtor 7540 AV", 3 },
                     60: 
                     61:        { "SAMSUNG SHD-3121A", 1 },
                     62:        { "SAMSUNG SHD-3122A", 1 },
                     63:        { "SAMSUNG SHD-3172A", 1 },
                     64: 
                     65: /*     { "ST51080A", 4 },
                     66:  *     { "ST51270A", 4 },
                     67:  *     { "ST31220A", 4 },
                     68:  *     { "ST31640A", 4 },
                     69:  *     { "ST32140A", 4 },
                     70:  *     { "ST3780A",  4 },
                     71:  */
                     72:        { "ST5660A",  3 },
                     73:        { "ST3660A",  3 },
                     74:        { "ST3630A",  3 },
                     75:        { "ST3655A",  3 },
                     76:        { "ST3391A",  3 },
                     77:        { "ST3390A",  1 },
                     78:        { "ST3600A",  1 },
                     79:        { "ST3290A",  0 },
                     80:        { "ST3144A",  0 },
                     81: 
                     82:        { "QUANTUM ELS127A", 0 },
                     83:        { "QUANTUM ELS170A", 0 },
                     84:        { "QUANTUM LPS240A", 0 },
                     85:        { "QUANTUM LPS210A", 3 },
                     86:        { "QUANTUM LPS270A", 3 },
                     87:        { "QUANTUM LPS365A", 3 },
                     88:        { "QUANTUM LPS540A", 3 },
                     89:        { "QUANTUM FIREBALL", 3 }, /* For models 540/640/1080/1280 */
                     90:                                   /* 1080A works fine in mode4 with triton */
                     91:        { NULL, 0 }
                     92: };
                     93: 
                     94: /*
                     95:  * This routine searches the ide_pio_blacklist for an entry
                     96:  * matching the start/whole of the supplied model name.
                     97:  *
                     98:  * Returns -1 if no match found.
                     99:  * Otherwise returns the recommended PIO mode from ide_pio_blacklist[].
                    100:  */
                    101: int ide_scan_pio_blacklist (char *model)
                    102: {
                    103:        struct ide_pio_info *p;
                    104: 
                    105:        for (p = ide_pio_blacklist; p->name != NULL; p++) {
                    106:                if (strncmp(p->name, model, strlen(p->name)) == 0)
                    107:                        return p->pio;
                    108:        }
                    109:        return -1;
                    110: }
                    111: 
                    112: /*
                    113:  * This routine returns the recommended PIO mode for a given drive,
                    114:  * based on the drive->id information and the ide_pio_blacklist[].
                    115:  * This is used by most chipset support modules when "auto-tuning".
                    116:  */
                    117: unsigned int ide_get_best_pio_mode (ide_drive_t *drive)
                    118: {
                    119:        unsigned int pio = 0;
                    120:        struct hd_driveid *id = drive->id;
                    121: 
                    122:        if (id != NULL) {
                    123:                if (HWIF(drive)->chipset != ide_cmd640 && !strcmp("QUANTUM FIREBALL1080A", id->model))
                    124:                        pio = 4;
                    125:                else
                    126:                        pio = ide_scan_pio_blacklist(id->model);
                    127:                if (pio == -1) {
                    128:                        pio = (id->tPIO < 2) ? id->tPIO : 2;
                    129:                        if (id->field_valid & 2) {
                    130:                                byte modes = id->eide_pio_modes;
                    131:                                if      (modes & 4)     pio = 5;
                    132:                                else if (modes & 2)     pio = 4;
                    133:                                else if (modes & 1)     pio = 3;
                    134:                        }
                    135:                }
                    136:        }
                    137:        return pio;
                    138: }
                    139: 
                    140: #endif /* _IDE_C */
                    141: #endif /* defined(CONFIG_BLK_DEV_CMD640) || defined(CONFIG_IDE_CHIPSETS) */
                    142: #endif /* _IDE_MODES_H */

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.