[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     ! 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