Annotation of qemu/roms/openbios/drivers/ide.h, revision 1.1

1.1     ! root        1: #ifndef IDE_H
        !             2: #define IDE_H
        !             3: 
        !             4: #include "hdreg.h"
        !             5: 
        !             6: /*
        !             7:  * legacy ide ports
        !             8:  */
        !             9: #define IDEREG_DATA    0x00
        !            10: #define IDEREG_ERROR   0x01
        !            11: #define IDEREG_FEATURE IDEREG_ERROR
        !            12: #define IDEREG_NSECTOR 0x02
        !            13: #define IDEREG_SECTOR  0x03
        !            14: #define IDEREG_LCYL    0x04
        !            15: #define IDEREG_HCYL    0x05
        !            16: #define IDEREG_CURRENT 0x06
        !            17: #define IDEREG_STATUS  0x07
        !            18: #define IDEREG_COMMAND IDEREG_STATUS
        !            19: #define IDEREG_CONTROL 0x08
        !            20: #define IDEREG_ASTATUS IDEREG_CONTROL
        !            21: 
        !            22: /*
        !            23:  * device control bits
        !            24:  */
        !            25: #define IDECON_NIEN    0x02
        !            26: #define IDECON_SRST    0x04
        !            27: 
        !            28: /*
        !            29:  * device head bits
        !            30:  */
        !            31: #define IDEHEAD_LBA    0x40
        !            32: #define IDEHEAD_DEV0   0x00
        !            33: #define IDEHEAD_DEV1   0x10
        !            34: 
        !            35: /*
        !            36:  * status bytes
        !            37:  */
        !            38: #define ERR_STAT       0x01
        !            39: #define DRQ_STAT       0x08
        !            40: #define SEEK_STAT      0x10
        !            41: #define WRERR_STAT     0x20
        !            42: #define READY_STAT     0x40
        !            43: #define BUSY_STAT      0x80
        !            44: 
        !            45: #define IREASON_CD     0x01
        !            46: #define IREASON_IO     0x02
        !            47: 
        !            48: /*
        !            49:  * ATA opcodes
        !            50:  */
        !            51: #define WIN_READ               0x20
        !            52: #define WIN_READ_EXT           0x24
        !            53: #define WIN_IDENTIFY           0xEC
        !            54: #define WIN_PACKET             0xA0
        !            55: #define WIN_IDENTIFY_PACKET    0xA1
        !            56: 
        !            57: /*
        !            58:  * ATAPI opcodes
        !            59:  */
        !            60: #define ATAPI_TUR              0x00
        !            61: #define ATAPI_READ_10          0x28
        !            62: #define ATAPI_REQ_SENSE                0x03
        !            63: #define ATAPI_START_STOP_UNIT  0x1b
        !            64: #define ATAPI_READ_CAPACITY    0x25
        !            65: 
        !            66: /*
        !            67:  * atapi sense keys
        !            68:  */
        !            69: #define ATAPI_SENSE_NOT_READY  0x02
        !            70: 
        !            71: /*
        !            72:  * supported device types
        !            73:  */
        !            74: enum {
        !            75:        ide_type_unknown,
        !            76:        ide_type_ata,
        !            77:        ide_type_atapi,
        !            78: };
        !            79: 
        !            80: enum {
        !            81:        ide_media_floppy = 0x00,
        !            82:        ide_media_cdrom = 0x05,
        !            83:        ide_media_optical = 0x07,
        !            84:        ide_media_disk = 0x20,
        !            85: };
        !            86: 
        !            87: /*
        !            88:  * drive addressing
        !            89:  */
        !            90: enum {
        !            91:        ide_chs = 1,
        !            92:        ide_lba28,
        !            93:        ide_lba48,
        !            94: };
        !            95: 
        !            96: /*
        !            97:  * simple ata command that works for everything (except 48-bit lba commands)
        !            98:  */
        !            99: struct ata_command {
        !           100:         unsigned char *buffer;
        !           101:        unsigned int buflen;
        !           102: 
        !           103:        /*
        !           104:         * data register
        !           105:         */
        !           106:        unsigned char data;
        !           107:        unsigned char feature;
        !           108:        unsigned char nsector;
        !           109:        unsigned char sector;
        !           110:        unsigned char lcyl;
        !           111:        unsigned char hcyl;
        !           112:        unsigned char device_head;
        !           113:        unsigned char command;
        !           114:        unsigned char control;
        !           115: 
        !           116:        /*
        !           117:         * or tasklet, just for lba48 for now (above could be scrapped)
        !           118:         */
        !           119:        unsigned char task[10];
        !           120: 
        !           121:        /*
        !           122:         * output
        !           123:         */
        !           124:        unsigned char stat;
        !           125:        unsigned int bytes;
        !           126: };
        !           127: 
        !           128: struct atapi_command {
        !           129:        unsigned char cdb[12];
        !           130:        unsigned char *buffer;
        !           131:        unsigned int buflen;
        !           132:        unsigned char data_direction;
        !           133: 
        !           134:        unsigned char stat;
        !           135:        unsigned char sense_valid;
        !           136:        struct request_sense sense;
        !           137:        unsigned char old_cdb;
        !           138: };
        !           139: 
        !           140: struct ide_channel;
        !           141: 
        !           142: struct ide_drive {
        !           143:        char            unit;           /* 0: master, 1: slave */
        !           144:        char            present;        /* there or not */
        !           145:        char            type;           /* ata or atapi */
        !           146:        char            media;          /* disk, cdrom, etc */
        !           147:        char            addressing;     /* chs/lba28/lba48 */
        !           148: 
        !           149:        char            model[41];      /* name */
        !           150:        int             nr;
        !           151: 
        !           152:        unsigned long   sectors;
        !           153: 
        !           154:        unsigned int    max_sectors;
        !           155: 
        !           156:        /*
        !           157:         * for legacy chs crap
        !           158:         */
        !           159:        unsigned int    cyl;
        !           160:        unsigned int    head;
        !           161:        unsigned int    sect;
        !           162: 
        !           163:        unsigned int bs;                /* block size */
        !           164: 
        !           165:        struct ide_channel *channel;
        !           166: };
        !           167: 
        !           168: struct ide_channel {
        !           169: 
        !           170:        char name[32];
        !           171:        struct ide_channel *next;
        !           172: 
        !           173:        /*
        !           174:         * either mmio or io_regs is set to indicate mmio or not
        !           175:         */
        !           176:        unsigned long mmio;
        !           177:        int io_regs[10];
        !           178: 
        !           179:        /*
        !           180:         * can be set to a mmio hook, default it legacy outb/inb
        !           181:         */
        !           182:        void (*obide_outb)(struct ide_channel *chan,
        !           183:                           unsigned char addr, unsigned int port);
        !           184:        unsigned char (*obide_inb)(struct ide_channel *chan,
        !           185:                                   unsigned int port);
        !           186:        void (*obide_insw)(struct ide_channel *chan,
        !           187:                           unsigned int port, unsigned char *addr,
        !           188:                           unsigned int count);
        !           189:        void (*obide_outsw)(struct ide_channel *chan,
        !           190:                            unsigned int port, unsigned char *addr,
        !           191:                            unsigned int count);
        !           192: 
        !           193:        struct ide_drive drives[2];
        !           194:        char selected;
        !           195:        char present;
        !           196: 
        !           197:        /*
        !           198:         * only one can be busy per channel
        !           199:         */
        !           200:        struct ata_command ata_cmd;
        !           201:        struct atapi_command atapi_cmd;
        !           202: 
        !           203: };
        !           204: 
        !           205: enum {
        !           206:        atapi_ddir_none,
        !           207:        atapi_ddir_read,
        !           208:        atapi_ddir_write,
        !           209: };
        !           210: 
        !           211: static int ob_ide_atapi_request_sense(struct ide_drive *drive);
        !           212: 
        !           213: #endif

unix.superglobalmegacorp.com

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