[BACK]Return to uhareg.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/uhareg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: uhareg.h,v 1.4 2003/11/16 20:30:06 avsm Exp $ */
                      2: /*     $NetBSD: uhareg.h,v 1.2 1996/09/01 00:54:41 mycroft Exp $       */
                      3:
                      4: /*
                      5:  * Copyright (c) 1994, 1996 Charles M. Hannum.  All rights reserved.
                      6:  *
                      7:  * Redistribution and use in source and binary forms, with or without
                      8:  * modification, are permitted provided that the following conditions
                      9:  * are met:
                     10:  * 1. Redistributions of source code must retain the above copyright
                     11:  *    notice, this list of conditions and the following disclaimer.
                     12:  * 2. Redistributions in binary form must reproduce the above copyright
                     13:  *    notice, this list of conditions and the following disclaimer in the
                     14:  *    documentation and/or other materials provided with the distribution.
                     15:  * 3. All advertising materials mentioning features or use of this software
                     16:  *    must display the following acknowledgement:
                     17:  *     This product includes software developed by Charles M. Hannum.
                     18:  * 4. The name of the author may not be used to endorse or promote products
                     19:  *    derived from this software without specific prior written permission.
                     20:  *
                     21:  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
                     22:  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
                     23:  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
                     24:  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
                     25:  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
                     26:  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
                     27:  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
                     28:  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
                     29:  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
                     30:  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
                     31:  */
                     32:
                     33: /*
                     34:  * Ported for use with the UltraStor 14f by Gary Close (gclose@wvnvms.wvnet.edu)
                     35:  * Slight fixes to timeouts to run with the 34F
                     36:  * Thanks to Julian Elischer for advice and help with this port.
                     37:  *
                     38:  * Originally written by Julian Elischer (julian@tfs.com)
                     39:  * for TRW Financial Systems for use under the MACH(2.5) operating system.
                     40:  *
                     41:  * TRW Financial Systems, in accordance with their agreement with Carnegie
                     42:  * Mellon University, makes this software available to CMU to distribute
                     43:  * or use in any manner that they see fit as long as this message is kept with
                     44:  * the software. For this reason TFS also grants any other persons or
                     45:  * organisations permission to use or modify this software.
                     46:  *
                     47:  * TFS supplies this software to be publicly redistributed
                     48:  * on the understanding that TFS is not responsible for the correct
                     49:  * functioning of this software in any circumstances.
                     50:  *
                     51:  * commenced: Sun Sep 27 18:14:01 PDT 1992
                     52:  * slight mod to make work with 34F as well: Wed Jun  2 18:05:48 WST 1993
                     53:  */
                     54:
                     55: typedef u_long physaddr;
                     56: typedef u_long physlen;
                     57:
                     58: /************************** board definitions *******************************/
                     59: /*
                     60:  * I/O Port Interface
                     61:  */
                     62: #define U14_LMASK              0x0000  /* local doorbell mask reg */
                     63: #define U14_LINT               0x0001  /* local doorbell int/stat reg */
                     64: #define U14_SMASK              0x0002  /* system doorbell mask reg */
                     65: #define U14_SINT               0x0003  /* system doorbell int/stat reg */
                     66: #define U14_ID                 0x0004  /* product id reg (2 ports) */
                     67: #define U14_CONFIG             0x0006  /* config reg (2 ports) */
                     68: #define U14_OGMPTR             0x0008  /* outgoing mail ptr (4 ports) */
                     69: #define U14_ICMPTR             0x000c  /* incoming mail ptr (4 ports) */
                     70:
                     71: #define        U24_CONFIG              0x0005  /* config reg (3 ports) */
                     72: #define        U24_LMASK               0x000c  /* local doorbell mask reg */
                     73: #define        U24_LINT                0x000d  /* local doorbell int/stat reg */
                     74: #define        U24_SMASK               0x000e  /* system doorbell mask reg */
                     75: #define        U24_SINT                0x000f  /* system doorbell int/stat reg */
                     76: #define        U24_OGMCMD              0x0016  /* outgoing commands */
                     77: #define        U24_OGMPTR              0x0017  /* outgoing mail ptr (4 ports) */
                     78: #define        U24_ICMCMD              0x001b  /* incoming commands */
                     79: #define        U24_ICMPTR              0x001c  /* incoming mail ptr (4 ports) */
                     80:
                     81: /*
                     82:  * UHA_LMASK bits (read only)
                     83:  */
                     84: #define UHA_LDIE               0x80    /* local doorbell int enabled */
                     85: #define UHA_SRSTE              0x40    /* soft reset enabled */
                     86: #define UHA_ABORTEN            0x10    /* abort MSCP enabled */
                     87: #define UHA_OGMINTEN           0x01    /* outgoing mail interrupt enabled */
                     88:
                     89: /*
                     90:  * UHA_LINT bits (read only)
                     91:  */
                     92: #define U14_LDIP               0x80    /* local doorbell int pending */
                     93: #define        U24_LDIP                0x02    /* local doorbell int pending */
                     94:
                     95: /*
                     96:  * UHA_LINT bits (write only)
                     97:  */
                     98: #define U14_OGMFULL            0x01    /* outgoing mailbox is full */
                     99: #define U14_ABORT              0x10    /* abort MSCP */
                    100:
                    101: #define        U24_OGMFULL             0x02    /* outgoing mailbox is full */
                    102:
                    103: #define        UHA_SBRST               0x40    /* scsi bus reset */
                    104: #define        UHA_ADRST               0x80    /* adapter soft reset */
                    105: #define        UHA_ASRST               0xc0    /* adapter and scsi reset */
                    106:
                    107: /*
                    108:  * UHA_SMASK bits (read/write)
                    109:  */
                    110: #define UHA_ENSINT             0x80    /* enable system doorbell interrupt */
                    111: #define UHA_EN_ABORT_COMPLETE   0x10   /* enable abort MSCP complete int */
                    112: #define UHA_ENICM              0x01    /* enable ICM interrupt */
                    113:
                    114: /*
                    115:  * UHA_SINT bits (read)
                    116:  */
                    117: #define U14_SDIP               0x80    /* system doorbell int pending */
                    118: #define        U24_SDIP                0x02    /* system doorbell int pending */
                    119:
                    120: #define UHA_ABORT_SUCC         0x10    /* abort MSCP successful */
                    121: #define UHA_ABORT_FAIL         0x18    /* abort MSCP failed */
                    122:
                    123: /*
                    124:  * UHA_SINT bits (write)
                    125:  */
                    126: #define U14_ICM_ACK            0x01    /* acknowledge ICM and clear */
                    127: #define        U24_ICM_ACK             0x02    /* acknowledge ICM and clear */
                    128:
                    129: #define        UHA_ABORT_ACK           0x18    /* acknowledge status and clear */
                    130:
                    131: /*
                    132:  * U14_CONFIG bits (read only)
                    133:  */
                    134: #define U14_DMA_CH5            0x0000  /* DMA channel 5 */
                    135: #define U14_DMA_CH6            0x4000  /* 6 */
                    136: #define U14_DMA_CH7            0x8000  /* 7 */
                    137: #define        U14_DMA_MASK            0xc000
                    138: #define U14_IRQ15              0x0000  /* IRQ 15 */
                    139: #define U14_IRQ14              0x1000  /* 14 */
                    140: #define U14_IRQ11              0x2000  /* 11 */
                    141: #define U14_IRQ10              0x3000  /* 10 */
                    142: #define        U14_IRQ_MASK            0x3000
                    143: #define        U14_HOSTID_MASK         0x0007
                    144:
                    145: /*
                    146:  * U24_CONFIG bits (read only)
                    147:  */
                    148: #define        U24_MAGIC1              0x08
                    149: #define        U24_IRQ15               0x10
                    150: #define        U24_IRQ14               0x20
                    151: #define        U24_IRQ11               0x40
                    152: #define        U24_IRQ10               0x80
                    153: #define        U24_IRQ_MASK            0xf0
                    154:
                    155: #define        U24_MAGIC2              0x04
                    156:
                    157: #define        U24_HOSTID_MASK         0x07
                    158:
                    159: /*
                    160:  * EISA registers (offset from slot base)
                    161:  */
                    162: #define        EISA_VENDOR             0x0c80  /* vendor ID (2 ports) */
                    163: #define        EISA_MODEL              0x0c82  /* model number (2 ports) */
                    164: #define        EISA_CONTROL            0x0c84
                    165: #define         EISA_RESET             0x04
                    166: #define         EISA_ERROR             0x02
                    167: #define         EISA_ENABLE            0x01
                    168:
                    169: /*
                    170:  * host_stat error codes
                    171:  */
                    172: #define UHA_NO_ERR             0x00    /* No error supposedly */
                    173: #define UHA_SBUS_ABORT_ERR     0x84    /* scsi bus abort error */
                    174: #define UHA_SBUS_TIMEOUT       0x91    /* scsi bus selection timeout */
                    175: #define UHA_SBUS_OVER_UNDER    0x92    /* scsi bus over/underrun */
                    176: #define UHA_BAD_SCSI_CMD       0x96    /* illegal scsi command */
                    177: #define UHA_AUTO_SENSE_ERR     0x9b    /* auto request sense err */
                    178: #define UHA_SBUS_RES_ERR       0xa3    /* scsi bus reset error */
                    179: #define UHA_BAD_SG_LIST                0xff    /* invalid scatter gath list */
                    180:
                    181: #define UHA_NSEG       33      /* number of dma segments supported */
                    182:
                    183: struct uha_dma_seg {
                    184:        physaddr seg_addr;
                    185:        physlen seg_len;
                    186: };
                    187:
                    188: struct uha_mscp {
                    189:        u_char opcode:3;
                    190: #define UHA_HAC                0x01    /* host adapter command */
                    191: #define UHA_TSP                0x02    /* target scsi pass through command */
                    192: #define UHA_SDR                0x04    /* scsi device reset */
                    193:        u_char xdir:2;          /* xfer direction */
                    194: #define UHA_SDET       0x00    /* determined by scsi command */
                    195: #define UHA_SDIN       0x01    /* scsi data in */
                    196: #define UHA_SDOUT      0x02    /* scsi data out */
                    197: #define UHA_NODATA     0x03    /* no data xfer */
                    198:        u_char dcn:1;           /* disable disconnect for this command */
                    199:        u_char ca:1;            /* cache control */
                    200:        u_char sgth:1;          /* scatter gather flag */
                    201:        u_char target:3;
                    202:        u_char chan:2;          /* scsi channel (always 0 for 14f) */
                    203:        u_char lun:3;
                    204:        physaddr data_addr;
                    205:        physlen data_length;
                    206:        physaddr link_addr;
                    207:        u_char link_id;
                    208:        u_char sg_num;          /* number of scat gath segs */
                    209:        /*in s-g list if sg flag is */
                    210:        /*set. starts at 1, 8bytes per */
                    211:        u_char req_sense_length;
                    212:        u_char scsi_cmd_length;
                    213:        struct scsi_generic scsi_cmd;
                    214:        u_char host_stat;
                    215:        u_char target_stat;
                    216:        physaddr sense_ptr;     /* if 0 no auto sense */
                    217:
                    218:        struct uha_dma_seg uha_dma[UHA_NSEG];
                    219:        struct scsi_sense_data mscp_sense;
                    220:        /*-----------------end of hardware supported fields----------------*/
                    221:        TAILQ_ENTRY(uha_mscp) chain;
                    222:        struct uha_mscp *nexthash;
                    223:        long hashkey;
                    224:        struct scsi_xfer *xs;   /* the scsi_xfer for this cmd */
                    225:        int flags;
                    226: #define MSCP_ALLOC     0x01
                    227: #define MSCP_ABORT     0x02
                    228:        int timeout;
                    229: } __packed;
                    230:

CVSweb