Annotation of ntddk/src/scsi/atdisk/i386/atd_plat.h, revision 1.1.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.