[BACK]Return to vxreg.h CVS log [TXT][DIR] Up to [local] / sys / arch / mvme88k / dev

Annotation of sys/arch/mvme88k/dev/vxreg.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: vxreg.h,v 1.9 2006/02/06 17:19:31 jmc Exp $ */
                      2:
                      3: /*
                      4:  * Copyright (c) 1999 Steve Murphree, Jr. All rights reserved.
                      5:  *
                      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 Dale Rahn.
                     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: /* IPC - Intelligent Peripheral Controller */
                     34:
                     35: struct vxreg {
                     36: /*0x0*/volatile u_short ipc_addrh;      /* IPC addr reg, most significant */
                     37: /*0x2*/volatile u_short ipc_addrl;      /* IPC addr reg, least significant */
                     38: /*0x4*/volatile u_char  ipc_amr;         /* IPC address modifier reg */
                     39: /*0x5*/volatile u_char  unused1;
                     40: /*0x6*/volatile u_short ipc_cr;         /* IPC control reg */
                     41: /*0x8*/volatile u_short ipc_sr;         /* IPC status reg */
                     42: /*0xA*/volatile u_char  ipc_mdbp;      /* IPC model data byte pointer */
                     43: /*0xB*/volatile u_char  reserved3;
                     44: /*0xC*/volatile u_char  ipc_avrp;      /* IPC abort vector reg pointer */
                     45: /*0xD*/volatile u_char  unused2;
                     46: /*0xE*/volatile u_short ipc_tas;                /* IPC test and set reg */
                     47: };
                     48:
                     49: #define IPC_CR_SYSFI          0x1000   /* inhibit sysfail */
                     50: #define IPC_CR_ATTEN          0x2000   /* attention bit */
                     51: #define IPC_CR_RESET          0x4000   /* reset bit */
                     52: #define IPC_CR_BUSY           0x8000   /* busy bit */
                     53:
                     54: #define IPC_SR_BUSERROR       0x4000   /* bus error */
                     55: #define IPC_SR_ERROR          0x8000   /* general error */
                     56: #define IPC_SR_INVAL          0xFFFF   /* invalid command */
                     57:
                     58: #define IPC_TAS_COMPLETE      0x1000
                     59: #define IPC_TAS_VALID_STATUS  0x2000
                     60: #define IPC_TAS_VALID_CMD     0x4000
                     61: #define IPC_TAS_TAS           0x8000
                     62:
                     63: #define IPC_CSR_CREATE        0x0001
                     64: #define IPC_CSR_DELETE        0x0002
                     65:
                     66: #define CSW_OFFSET            0x0010
                     67:
                     68: #define CMD_INIT              0x0000
                     69: #define CMD_READW             0x0001
                     70: #define CMD_WRITEW            0x0002
                     71: #define CMD_OPEN              0x0003
                     72: #define CMD_IOCTL             0x0004
                     73: #define CMD_CLOSE             0x0005
                     74: #define CMD_EVENT             0x0006
                     75: #define CMD_PROCESSED         0x00FF
                     76:
                     77: #define IOCTL_LDOPEN          0x4400
                     78: #define IOCTL_LDCLOSE         0x4401
                     79: #define IOCTL_LDCHG           0x4402
                     80: #define IOCTL_LDGETT          0x4408
                     81: #define IOCTL_LDSETT          0x4409
                     82: #define IOCTL_TCGETA          0x5401   /* get dev termio struct */
                     83: #define IOCTL_TCSETA          0x5402   /* set dev termio struct */
                     84: #define IOCTL_TCSETAW         0x5403   /* set dev termio struct - wait */
                     85: #define IOCTL_TCSETAF         0x5404   /* set dev termio struct - wait - flush */
                     86: #define IOCTL_TCSBRK          0x5405   /* transmit a break seq */
                     87: #define IOCTL_TCXONC          0x5406   /* sus or res, xon or xoff, RTS or DTR */
                     88: #define IOCTL_TCFLSH          0x5407   /* Flush */
                     89: #define IOCTL_TCSETHW         0x5440   /* enable/disable HW handshake */
                     90: #define IOCTL_TCGETHW         0x5441   /* get current HW handshake info */
                     91: #define IOCTL_TCGETDL         0x5442   /* get daownloadable addr and mem size */
                     92: #define IOCTL_TCDLOAD         0x5443   /* download code/data to mem */
                     93: #define IOCTL_TCLINE          0x5444   /* copy line discipline */
                     94: #define IOCTL_TCEXEC          0x5445   /* exec code in local mem */
                     95: #define IOCTL_TCGETVR         0x5446   /* get version and revison of firmware */
                     96: #define IOCTL_TCGETDF         0x5447   /* get default termio struct */
                     97: #define IOCTL_TCSETDF         0x5448   /* set default termio struct */
                     98: #define IOCTL_TCGETSYM        0x5449   /* get firmware symbol table */
                     99: #define IOCTL_TCWHAT          0x544A   /* get all SCSI IDs of FW files */
                    100: #define IOCTL_TIOGETP         0x7408   /* get devs curr termio struct by sgttyb */
                    101: #define IOCTL_TIOSETP         0x7409   /* set devs curr termio struct by sgttyb */
                    102:
                    103: #define IPC_EIO               5     /* I/O error */
                    104: #define IPC_ENXIO             6     /* no such device or address */
                    105: #define IPC_ENOMEM            12    /* not enough space */
                    106: #define IPC_EEXIST            17    /* device or address exists */
                    107: #define IPC_EINVAL            22    /* invalid caommand argument */
                    108:
                    109: /*
                    110:  *     Index into c_cc[VNCC];
                    111:  */
                    112: #define  VVINTR   0  /* ISIG */
                    113: #define  VVQUIT   1  /* ISIG */
                    114: #define  VVERASE  2  /* ICANON */
                    115: #define  VVKILL   3  /* ICANON */
                    116: #define  VVEOF    4  /* ICANON */
                    117: #define  VVEOL    5  /* ICANON */
                    118: #define  VVSWTCH  6
                    119:
                    120: /*
                    121:  * Input flags - software input processing
                    122:  */
                    123: #define  VIGNBRK  0000001   /* ignore BREAK condition */
                    124: #define  VBRKINT  0000002   /* map BREAK to SIGINTR */
                    125: #define  VIGNPAR  0000004   /* ignore (discard) parity errors */
                    126: #define  VPARMRK  0000010   /* mark parity and framing errors */
                    127: #define  VINPCK   0000020   /* enable checking of parity errors */
                    128: #define  VISTRIP  0000040   /* strip 8th bit off chars */
                    129: #define  VINLCR   0000100   /* map NL into CR */
                    130: #define  VIGNCR   0000200   /* ignore CR */
                    131: #define  VICRNL   0000400   /* map CR to NL (ala CRMOD) */
                    132: #define  VIUCLC   0001000   /* translate upper to lower case */
                    133: #define  VIXON    0002000   /* enable output flow control */
                    134: #define  VIXANY   0004000   /* any char will restart after stop */
                    135: #define  VIXOFF   0010000   /* enable input flow control */
                    136:
                    137: /*
                    138:  * Output flags - software output processing
                    139:  */
                    140: #define  VOPOST   0000001   /* enable following output processing */
                    141: #define  VOLCUC   0000002   /* translate lower case to upper case */
                    142: #define  VONLCR   0000004   /* map NL to CR-NL (ala CRMOD) */
                    143: #define  VOCRNL   0000010   /* map CR to NL */
                    144: #define  VONOCR   0000020   /* No CR output at column 0 */
                    145: #define  VONLRET  0000040   /* NL performs the CR function */
                    146: #define  VOFILL   0000100
                    147: #define  VOFDEL   0000200
                    148: #define  VOXTABS  0014000   /* expand tabs to spaces */
                    149:
                    150: /*
                    151:  * Control flags - hardware control of terminal
                    152:  */
                    153:
                    154: #define  VCBAUD   0000017   /* baud rate */
                    155: #define  VB0      0000000   /* hang up */
                    156: #define  VB50     0000001
                    157: #define  VB75     0000002
                    158: #define  VB110    0000003
                    159: #define  VB134    0000004
                    160: #define  VB150    0000005
                    161: #define  VB200    0000006
                    162: #define  VB300    0000007
                    163: #define  VB600    0000010
                    164: #define  VB1200   0000011
                    165: #define  VB1800   0000012
                    166: #define  VB2400   0000013
                    167: #define  VB4800   0000014
                    168: #define  VB9600   0000015
                    169: #define  VB19200  0000016
                    170: #define  VB38400  0000017
                    171: #define  VEXTA    0000016
                    172: #define  VEXTB    0000017
                    173: #define  VCSIZE   0000060   /* character size mask */
                    174: #define  VCS5     0000000   /* 5 bits (pseudo) */
                    175: #define  VCS6     0000020   /* 6 bits */
                    176: #define  VCS7     0000040   /* 7 bits */
                    177: #define  VCS8     0000060   /* 8 bits */
                    178: #define  VCSTOPB  0000100   /* send 2 stop bits */
                    179: #define  VCREAD   0000200   /* enable receiver */
                    180: #define  VPARENB  0000400   /* parity enable */
                    181: #define  VPARODD  0001000   /* odd parity, else even */
                    182: #define  VHUPCL   0002000   /* hang up on last close */
                    183: #define  VCLOCAL  0004000   /* ignore modem status lines */
                    184:
                    185: /*
                    186:  * "Local" flags - dumping ground for other state
                    187:  *
                    188:  * Warning: some flags in this structure begin with
                    189:  * the letter "I" and look like they belong in the
                    190:  * input flag.
                    191:  */
                    192:
                    193: #define  VISIG    0000001   /* enable signals INTR, QUIT, [D]SUSP */
                    194: #define  VICANON  0000002   /* canonicalize input lines */
                    195: #define  VXCASE   0000004   /* canonical upper/lower case */
                    196: #define  VECHO    0000010   /* enable echoing */
                    197: #define  VECHOE   0000020   /* visually erase chars */
                    198: #define  VECHOK   0000040   /* echo NL after line kill */
                    199: #define  VECHONL  0000100   /* echo NL even if ECHO is off */
                    200: #define  VNOFLSH  0000200   /* don't flush after interrupt */
                    201:
                    202:
                    203: #define  VNCC     9  /* 18 bytes */
                    204: struct termio {
                    205:        volatile unsigned short c_iflag;
                    206:        volatile unsigned short c_oflag;
                    207:        volatile unsigned short c_cflag;
                    208:        volatile unsigned short c_lflag;
                    209:        volatile char           c_line;
                    210:        volatile unsigned char  c_cc[VNCC];
                    211: };
                    212:
                    213: struct vx_sgttyb {      /* 6 bytes */
                    214:        volatile char  sg_ispeed;
                    215:        volatile char  sg_ospeed;
                    216:        volatile char  sg_erase;
                    217:        volatile char  sg_kill;
                    218:        volatile short  sg_flags;
                    219: };
                    220:
                    221: struct termcb {      /* 6 bytes */
                    222:        volatile char  st_flgs;
                    223:        volatile char  st_termt;
                    224:        volatile char  st_crow;
                    225:        volatile char  st_ccol;
                    226:        volatile char  st_vrow;
                    227:        volatile char  st_lrow;
                    228: };
                    229:
                    230: struct ctdesc {
                    231:        unsigned short csw,
                    232:        resv;
                    233:        unsigned long  magic,
                    234:        lcnt,
                    235:        fatal,
                    236:        error,
                    237:        faddr,
                    238:        expdata,
                    239:        readdata;
                    240: };
                    241:
                    242: struct dl_info {     /* 18 bytes */
                    243:        volatile unsigned long  host_addr;
                    244:        volatile unsigned long  ipc_addr;
                    245:        volatile unsigned long  count;
                    246:        volatile unsigned long  extra_long;
                    247:        volatile unsigned short extra_short;
                    248: };
                    249:
                    250: struct packet {      /* 68 bytes */
                    251:        volatile u_long  link;       /* was eyecatcher */
                    252:        volatile u_char  command_pipe_number;
                    253:        volatile u_char  status_pipe_number;
                    254:        volatile char    filler0[4];
                    255:        volatile short   command;
                    256:        volatile char    filler1[1];
                    257:        volatile char    command_dependent;
                    258:        volatile char    filler2[1];
                    259:        volatile char    interrupt_level;       /* init only */
                    260:        volatile u_char  device_number;
                    261:        volatile char    filler3[1];
                    262:        volatile u_short ioctl_cmd_h;
                    263:        volatile u_short ioctl_cmd_l;
                    264: #define        init_info_ptr_h ioctl_cmd_h
                    265: #define        init_info_ptr_l ioctl_cmd_l
                    266:        volatile u_short ioctl_arg_h;
                    267:        volatile u_short ioctl_arg_l;
                    268:        volatile u_short ioctl_mode_h;
                    269:        volatile u_short ioctl_mode_l;
                    270: #define        interrupt_vec   ioctl_mode_l
                    271:        volatile char    filler4[6];
                    272:        volatile u_short error_h;
                    273:        volatile u_short error_l;
                    274:        volatile short   event_code;
                    275:        volatile char    filler5[6];
                    276:        union {
                    277:                struct  termio  tio;
                    278:                struct  termcb  tcb;
                    279:                struct  vx_sgttyb  sgt;
                    280:                struct  dl_info dl;
                    281:                long    param;
                    282:        } pb;
                    283:        short   reserved;    /* for alignment */
                    284: } packet;
                    285:
                    286: struct envelope {            /* 12 bytes */
                    287:        volatile u_long          link;
                    288:        volatile u_long          packet_ptr;
                    289:        volatile char            valid_flag;
                    290:        volatile char            reserved1;
                    291:        volatile char            reserved[2];
                    292: };
                    293:
                    294: struct channel {        /* 24 bytes */
                    295:        volatile u_short           command_pipe_head_ptr_h;
                    296:        volatile u_short           command_pipe_head_ptr_l;
                    297:        volatile u_short           command_pipe_tail_ptr_h;
                    298:        volatile u_short           command_pipe_tail_ptr_l;
                    299:        volatile u_short           status_pipe_head_ptr_h;
                    300:        volatile u_short           status_pipe_head_ptr_l;
                    301:        volatile u_short           status_pipe_tail_ptr_h;
                    302:        volatile u_short           status_pipe_tail_ptr_l;
                    303:        volatile char              interrupt_level;
                    304:        volatile char              interrupt_vec;
                    305:        volatile char              channel_priority;
                    306:        volatile char              address_modifier;
                    307:        volatile char              channel_number;
                    308:        volatile char              valid;
                    309:        volatile char              datasize;
                    310:        volatile char              reserved;
                    311: };
                    312:
                    313: #define WRING_DATA_SIZE 4096   /* for a total struct size of 4104 (4K + 6 + 2 bytes) */
                    314: #define WRING_BUF_SIZE WRING_DATA_SIZE
                    315: struct wring {
                    316:        volatile unsigned short reserved;
                    317:        volatile unsigned short put;
                    318:        volatile unsigned short get;
                    319:        volatile char           data[WRING_BUF_SIZE];
                    320:    char                    res[2]; /* for alignment */
                    321: };
                    322:
                    323: #define RRING_DATA_SIZE 2048   /* for a total struct size of 2054 (2K + 6 + 2 bytes) */
                    324: #define RRING_BUF_SIZE RRING_DATA_SIZE
                    325: struct rring {
                    326:        volatile unsigned short reserved;
                    327:        volatile unsigned short put;
                    328:        volatile unsigned short get;
                    329:        volatile char           data[RRING_BUF_SIZE];
                    330:    char                    res[2]; /* for alignment */
                    331: };
                    332:
                    333: #define EOFRAME  0xA
                    334: #define DELIMITER  0x1
                    335:
                    336: struct init_info {      /* 88 bytes */
                    337:        volatile u_short        write_ring_ptr_h;
                    338:        volatile u_short        write_ring_ptr_l;
                    339:        volatile u_short        read_ring_ptr_h;
                    340:        volatile u_short        read_ring_ptr_l;
                    341:        volatile unsigned short write_ring_size;
                    342:        volatile unsigned short read_ring_size;
                    343:        volatile struct termio  def_termio;
                    344:        volatile unsigned short reserved1;
                    345:        volatile unsigned short reserved2;
                    346:        volatile unsigned short reserved3;
                    347:        volatile unsigned short reserved4;
                    348:        volatile char           init_data[56];
                    349: };
                    350:
                    351: /* IPC event codes */
                    352: #define  E_INTR      0x0001
                    353: #define  E_QUIT      0x0002
                    354: #define  E_HUP       0x0004
                    355: #define  E_DCD       0x0008
                    356: #define  E_DSR       0x0010
                    357: #define  E_CTS       0x0020
                    358: #define  E_LOST_DCD  0x0040
                    359: #define  E_LOST_DSR  0x0080
                    360: #define  E_LOST_CTS  0x0100
                    361: #define  E_PR_FAULT  0x0200
                    362: #define  E_PR_POUT   0x0400
                    363: #define  E_PR_SELECT 0x0800
                    364: #define  E_SWITCH    0x4000
                    365: #define  E_BREAK     0x8000
                    366:
                    367: /*
                    368:  * All structures must reside in dual port user memory.
                    369:  * ($FFxx0100 to $FFxxFFF0)
                    370:  * All structures must be word aligned (see byte counts above)
                    371:  *
                    372:  *       +--------------------------------+
                    373:  *       |  IPC Control/Status Register   | $FFxx0000
                    374:  *       |          (16 bytes)            |
                    375:  *       |--------------------------------|
                    376:  *       |  Confidence Test Descriptor    | $FFxx0010
                    377:  *       |          (32 bytes)            |
                    378:  *       |--------------------------------|
                    379:  *       |          Dump Area             | $FFxx0030
                    380:  *       |         (208 bytes)            |
                    381:  *       |--------------------------------|
                    382:  *       |                                | $FFxx0100
                    383:  *       |                                |
                    384:  *       :          User Space            :
                    385:  *       :                                :
                    386:  *       :        (65,264 bytes)          :
                    387:  *       |                                |
                    388:  *       |                                |
                    389:  *       |--------------------------------|
                    390:  *       |  Interrupt Vector Registers    | $FFxxFFF0
                    391:  *       |          (16 bytes)            |
                    392:  *       +--------------------------------+
                    393:  */
                    394:
                    395: #define        NVXPORTS        9
                    396:
                    397: #define  NENVELOPES           30
                    398: #define  NPACKETS             NENVELOPES
                    399: #define  USER_AREA            (0x0100)
                    400: #define  CHANNEL_H            (0x0100)
                    401: #define  ENVELOPE_AREA        (CHANNEL_H + sizeof(struct channel))
                    402: #define  ENVELOPE_AREA_SIZE   (NENVELOPES * sizeof(struct envelope))
                    403: #define  PACKET_AREA          (ENVELOPE_AREA + ENVELOPE_AREA_SIZE)
                    404: #define  PACKET_AREA_SIZE     (NPACKETS * sizeof(struct packet))
                    405: #define  INIT_INFO_AREA       (PACKET_AREA + PACKET_AREA_SIZE)
                    406: #define  INIT_INFO_AREA_SIZE  (NVXPORTS * sizeof(struct init_info))
                    407: #define  WRING_AREA           roundup(INIT_INFO_AREA + INIT_INFO_AREA_SIZE, 8)
                    408: #define  WRING_AREA_SIZE      (NVXPORTS * sizeof(struct wring))
                    409: #define  RRING_AREA           (WRING_AREA + WRING_AREA_SIZE)
                    410: #define  RRING_AREA_SIZE      (NVXPORTS * sizeof(struct rring))
                    411: #define  USER_AREA_SIZE       (RRING_AREA + RRING_AREA_SIZE - USER_AREA)
                    412:
                    413: /* Hardware's view of the dual ported memory */
                    414: #define        LOCAL_DPMEM_ADDRESS     0x00f30000

CVSweb