Annotation of Gnu-Mach/i386/i386at/nhdreg.h, revision 1.1

1.1     ! root        1: /* 
        !             2:  * Copyright (c) 1994 Shantanu Goel
        !             3:  * All Rights Reserved.
        !             4:  * 
        !             5:  * Permission to use, copy, modify and distribute this software and its
        !             6:  * documentation is hereby granted, provided that both the copyright
        !             7:  * notice and this permission notice appear in all copies of the
        !             8:  * software, derivative works or modified versions, and any portions
        !             9:  * thereof, and that both notices appear in supporting documentation.
        !            10:  * 
        !            11:  * THE AUTHOR ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
        !            12:  * CONDITION.  THE AUTHOR DISCLAIMS ANY LIABILITY OF ANY KIND FOR
        !            13:  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
        !            14:  */
        !            15: 
        !            16: /*
        !            17:  * Hard disk controller.
        !            18:  */
        !            19: 
        !            20: #define HD_DATA(p)     (p)             /* data register */
        !            21: #define HD_ERROR(p)    ((p) + 1)       /* error register */
        !            22: #define HD_PRECOMP(p)  ((p) + 1)       /* precomp register */
        !            23: #define HD_SECTCNT(p)  ((p) + 2)       /* sector count register */
        !            24: #define HD_SECT(p)     ((p) + 3)       /* sector number register */
        !            25: #define HD_CYLLO(p)    ((p) + 4)       /* cylinder number low */
        !            26: #define HD_CYLHI(p)    ((p) + 5)       /* cylinder number high */
        !            27: #define HD_DRVHD(p)    ((p) + 6)       /* drive head register */
        !            28: #define HD_STATUS(p)   ((p) + 7)       /* status register */
        !            29: #define HD_CMD(p)      ((p) + 7)       /* command register */
        !            30: 
        !            31: /*
        !            32:  * Status register
        !            33:  */
        !            34: #define ST_BUSY                0x80            /* controller is busy */
        !            35: #define ST_READY       0x40            /* drive is ready */
        !            36: #define ST_WRTFLT      0x20            /* write fault */
        !            37: #define ST_SEEK                0x10            /* seek complete */
        !            38: #define ST_DREQ                0x08            /* data request */
        !            39: #define ST_ECC         0x04            /* ECC corrected data */
        !            40: #define ST_INDEX       0x02            /* index pulse */
        !            41: #define ST_ERROR       0x01            /* an operation resulted in error */
        !            42: 
        !            43: /*
        !            44:  * Error register
        !            45:  */
        !            46: #define ERR_DAM                0x01            /* data address mark not found */
        !            47: #define ERR_TR0                0x02            /* track 0 not found */
        !            48: #define ERR_ABORT      0x04            /* command aborted */
        !            49: #define ERR_ID         0x10            /* sector not found */
        !            50: #define ERR_ECC                0x40            /* uncorrectable ECC error */
        !            51: #define ERR_BADBLK     0x80            /* bad block detected */
        !            52: 
        !            53: /*
        !            54:  * Commands
        !            55:  */
        !            56: #define CMD_RESTORE    0x10
        !            57: #define CMD_READ       0x20
        !            58: #define CMD_WRITE      0x30
        !            59: #define CMD_SETPARAM   0x91
        !            60: #define CMD_READMULTI  0xc4
        !            61: #define CMD_WRITEMULTI 0xc5
        !            62: #define CMD_SETMULTI   0xc6
        !            63: #define CMD_IDENTIFY   0xec
        !            64: 
        !            65: #if 0
        !            66: #define PDLOCATION     29      /* XXX: belongs in <i386at/disk.h> */
        !            67: #endif
        !            68: 
        !            69: #define BAD_BLK                0x80
        !            70: #define SECSIZE                512
        !            71: 
        !            72: /*
        !            73:  * Information returned by IDENTIFY command.
        !            74:  */
        !            75: struct hdident {
        !            76:        u_short id_config;      /* flags */
        !            77:        u_short id_npcyl;       /* # physical cylinders */
        !            78:        u_short id_rsvd2;       /* reserved (word 2) */
        !            79:        u_short id_nptrk;       /* # physical tracks */
        !            80:        u_short id_bptrk;       /* unformatted bytes/track */
        !            81:        u_short id_bpsect;      /* unformatted bytes/sector */
        !            82:        u_short id_npsect;      /* # physical sectors/track */
        !            83:        u_short id_vendor0;     /* vendor unique */
        !            84:        u_short id_vendor1;     /* vendor unique */
        !            85:        u_short id_vendor2;     /* vendor unique */
        !            86:        u_char  id_serno[20];   /* serial #: 0 = unspecified */
        !            87:        u_short id_buftype;     /* ??? */
        !            88:        u_short id_bufsize;     /* 512 byte increments: 0 = unspecified */
        !            89:        u_short id_eccbytes;    /* for R/W LONG commands: 0 = unspecified */
        !            90:        u_char  id_rev[8];      /* firmware revision: 0 = unspecified */
        !            91:        u_char  id_model[40];   /* model name: 0 = unspecified */
        !            92:        u_char  id_multisize;   /* max multiple I/O size: 0 = unsupported */
        !            93:        u_char  id_vendor3;     /* vendor unique */
        !            94:        u_short id_dwordio;     /* 0 = unsupported; 1 = implemented */
        !            95:        u_char  id_vendor4;     /* vendor unique */
        !            96:        u_char  id_capability;  /* 0:DMA 1:LBA 2:IORDYsw 3:IORDY:sup */
        !            97:        u_short id_rsvd50;      /* reserved (word 50) */
        !            98:        u_char  id_vendor5;     /* vendor unique */
        !            99:        u_char  id_pio;         /* 0=slow, 1=medium, 2=fast */
        !           100:        u_char  id_vendor6;     /* vendor unique */
        !           101:        u_char  id_dma;         /* 0=slow, 1=medium, 2=fast */
        !           102:        u_short id_valid;       /* 0:logical 1:eide */
        !           103:        u_short id_nlcyl;       /* # logical cylinders */
        !           104:        u_short id_nltrk;       /* # logical tracks */
        !           105:        u_short id_nlsect;      /* # logical sectors/track */
        !           106:        u_short id_capacity0;   /* logical total sectors on drive */
        !           107:        u_short id_capacity1;   /*  (2 words, misaligned int) */
        !           108:        u_char  id_multisect;   /* current multiple sector count */
        !           109:        u_char  id_multivalid;  /* bit 0=1, multisect field is valid */
        !           110:        u_short id_totsect;     /* total number of sectors */
        !           111:        u_short id_dma1;        /* single word DMA info */
        !           112:        u_short id_dmamulti;    /* multiple word DMA info */
        !           113:        u_short id_eidepiomode; /* 0:mode3 1:mode4 */
        !           114:        u_short id_eidedmamin;  /* min multiple word DMA cycle time (ns) */
        !           115:        u_short id_eidedmatime; /* recomended DMA cycle time (ns) */
        !           116:        u_short id_eidepio;     /* min cycle time (ns), no IORDY */
        !           117:        u_short id_eidepioiordy;/* min cycle time (ns, with IORDY */
        !           118:        u_short id_rsvd69;      /* reserved (word 69) */
        !           119:        u_short id_rsvd70;      /* reserved (word 70) */
        !           120: };

unix.superglobalmegacorp.com

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