Annotation of ntddk/src/scsi/atdisk/i386/atd_plat.h, revision 1.1

1.1     ! root        1: /*++
        !             2: 
        !             3: Copyright (c) 1991  Microsoft Corporation
        !             4: 
        !             5: Module Name:
        !             6: 
        !             7:     i386\atd_plat.h
        !             8: 
        !             9: Abstract:
        !            10: 
        !            11:     This file includes ix86 platform-dependent declarations for the AT
        !            12:     disk (aka ST506, ISA, and ix86 standard hard disk) driver for NT.
        !            13: 
        !            14:     If this driver is ported to a different platform, this file (and
        !            15:     atd_conf.h) will need to be modified extensively.  The build
        !            16:     procedure should make sure that the proper version of this file is
        !            17:     available as atd_plat.h (which is included by atdisk.c) when
        !            18:     building for a specific platform.
        !            19: 
        !            20: Author:
        !            21: 
        !            22:     Chad Schwitters (chads) 21-Feb-1991.
        !            23: 
        !            24: Environment:
        !            25: 
        !            26:     Kernel mode only.
        !            27: 
        !            28: Notes:
        !            29: 
        !            30: Revision History:
        !            31: 
        !            32: --*/
        !            33: 
        !            34: //
        !            35: // Macros to access the controller, which on the ix86 is in I/O space.
        !            36: //
        !            37: 
        !            38: #define READ_CONTROLLER( Address )                                    \
        !            39:     READ_PORT_UCHAR( (Address) )
        !            40: 
        !            41: #define READ_CONTROLLER_BUFFER( Address, Value, Length )              \
        !            42:     READ_PORT_BUFFER_USHORT(                                          \
        !            43:         ( PUSHORT )(Address),                                         \
        !            44:         ( PUSHORT )(Value),                                           \
        !            45:         ( ULONG )(Length) / 2 )
        !            46: 
        !            47: #define WRITE_CONTROLLER( Address, Value )                            \
        !            48:     WRITE_PORT_UCHAR( (Address), ( UCHAR )(Value) )
        !            49: 
        !            50: #define WRITE_CONTROLLER_BUFFER( Address, Value, Length )             \
        !            51:     WRITE_PORT_BUFFER_USHORT(                                         \
        !            52:         ( PUSHORT )(Address),                                         \
        !            53:         ( PUSHORT )(Value),                                           \
        !            54:         ( ULONG )(Length) / 2 )
        !            55: 
        !            56: //
        !            57: // ST506 register definitions, as offsets from a base (which should be
        !            58: // passed in by configuration management).
        !            59: //
        !            60: 
        !            61: #define DATA_REGISTER                0
        !            62: #define WRITE_PRECOMP_REGISTER       1
        !            63: #define ERROR_REGISTER               1
        !            64: #define SECTOR_COUNT_REGISTER        2
        !            65: #define SECTOR_NUMBER_REGISTER       3
        !            66: #define CYLINDER_LOW_REGISTER        4
        !            67: #define CYLINDER_HIGH_REGISTER       5
        !            68: #define DRIVE_HEAD_REGISTER          6
        !            69: #define COMMAND_REGISTER             7
        !            70: #define STATUS_REGISTER              7
        !            71: 
        !            72: //
        !            73: // In addition to I/O space access to the controller registers, ISA defines
        !            74: // a separate "drive control" register.  Here's commands to send to that
        !            75: // register.
        !            76: //
        !            77: 
        !            78: #define RESET_CONTROLLER    0x04
        !            79: #define ENABLE_INTERRUPTS   0x00
        !            80: 
        !            81: //
        !            82: // We know some tricks we can use on Compaq machines.  Here's some
        !            83: // things we need to identify and exploit them.
        !            84: //
        !            85: 
        !            86: #define PTR_TO_NAME_STRING          0xfffea
        !            87: #define DRIVE_PARAMETER_TABLE_OFFSET 0xfe401
        !            88: #define DRIVE_PARAMETER_TABLE_LENGTH 0x01bfe
        !            89: #define NAME_STRING_LENGTH          6
        !            90: #define SECOND_CONTROLLER_IRQ_PORT  ( PUCHAR )0x1171
        !            91: #define IRQ_PORT_DISABLED_MASK      0xf0
        !            92: #define IRQ_PORT_DISABLED           0xf0
        !            93: 
        !            94: //
        !            95: // Configuration Memory equates.  These are used to determine how many
        !            96: // drives are attached to the system (you send a query, ie
        !            97: // CFGMEM_HARD_DRIVES_TYPE, out the CFGMEM_QUERY_PORT, and then read the
        !            98: // type in from CFGMEM_DATA_PORT - if the type is 0, then there is no disk
        !            99: // attached).
        !           100: //
        !           101: 
        !           102: #define CFGMEM_QUERY_PORT                    ( PUCHAR )0x70
        !           103: #define CFGMEM_DATA_PORT                     ( PUCHAR )0x71
        !           104: #define CFGMEM_FIRST_CONTROLLER_DRIVE_TYPES  ( UCHAR )0x12
        !           105: #define CFGMEM_DRIVES_FIRST_DRIVE_MASK       0xf0
        !           106: #define CFGMEM_DRIVES_SECOND_DRIVE_MASK      0x0f
        !           107: #define CFGMEM_HARD_DRIVE_TYPE_ONE           ( UCHAR )0x19
        !           108: #define CFGMEM_HARD_DRIVE_TYPE_TWO           ( UCHAR )0x1a
        !           109: 
        !           110: //
        !           111: // The following are only known to work on Compaq machines.
        !           112: //
        !           113: 
        !           114: #define CFGMEM_SECOND_CONTROLLER_DRIVE_TYPES ( UCHAR )0x16
        !           115: #define CFGMEM_HARD_DRIVE_TYPE_THREE         ( UCHAR )0x1b
        !           116: #define CFGMEM_HARD_DRIVE_TYPE_FOUR          ( UCHAR )0x1c
        !           117: 
        !           118: //
        !           119: // ISA defines the following vectors to hold pointers to fixed disk
        !           120: // parameter tables - this allows us to determine the types of drives
        !           121: // on the system.
        !           122: //
        !           123: 
        !           124: #define PTR_TO_FDPT0_ADDRESS   0x41 * sizeof (ULONG)
        !           125: #define PTR_TO_FDPT1_ADDRESS   0x46 * sizeof (ULONG)
        !           126: 

unix.superglobalmegacorp.com

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