[BACK]Return to aicasm_insformat.h CVS log [TXT][DIR] Up to [local] / sys / dev / microcode / aic7xxx

Annotation of sys/dev/microcode/aic7xxx/aicasm_insformat.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: aicasm_insformat.h,v 1.4 2003/12/24 23:27:55 krw Exp $        */
                      2: /*     $NetBSD: aicasm_insformat.h,v 1.1 2003/04/19 19:26:11 fvdl Exp $        */
                      3:
                      4: /*
                      5:  * Instruction formats for the sequencer program downloaded to
                      6:  * Aic7xxx SCSI host adapters
                      7:  *
                      8:  * Copyright (c) 1997, 1998, 2000 Justin T. Gibbs.
                      9:  * All rights reserved.
                     10:  *
                     11:  * Redistribution and use in source and binary forms, with or without
                     12:  * modification, are permitted provided that the following conditions
                     13:  * are met:
                     14:  * 1. Redistributions of source code must retain the above copyright
                     15:  *    notice, this list of conditions, and the following disclaimer,
                     16:  *    without modification.
                     17:  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
                     18:  *    substantially similar to the "NO WARRANTY" disclaimer below
                     19:  *    ("Disclaimer") and any redistribution must be conditioned upon
                     20:  *    including a substantially similar Disclaimer requirement for further
                     21:  *    binary redistribution.
                     22:  * 3. Neither the names of the above-listed copyright holders nor the names
                     23:  *    of any contributors may be used to endorse or promote products derived
                     24:  *    from this software without specific prior written permission.
                     25:  *
                     26:  * Alternatively, this software may be distributed under the terms of the
                     27:  * GNU General Public License ("GPL") version 2 as published by the Free
                     28:  * Software Foundation.
                     29:  *
                     30:  * NO WARRANTY
                     31:  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
                     32:  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
                     33:  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
                     34:  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
                     35:  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     36:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     37:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     38:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
                     39:  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
                     40:  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
                     41:  * POSSIBILITY OF SUCH DAMAGES.
                     42:  *
                     43:  * $FreeBSD: src/sys/dev/aic7xxx/aicasm/aicasm_insformat.h,v 1.8 2002/11/27 07:06:43 scottl Exp $
                     44:  */
                     45:
                     46: struct ins_format1 {
                     47: #if BYTE_ORDER == LITTLE_ENDIAN
                     48:        uint32_t        immediate       : 8,
                     49:                        source          : 9,
                     50:                        destination     : 9,
                     51:                        ret             : 1,
                     52:                        opcode          : 4,
                     53:                        parity          : 1;
                     54: #else
                     55:        uint32_t        parity          : 1,
                     56:                        opcode          : 4,
                     57:                        ret             : 1,
                     58:                        destination     : 9,
                     59:                        source          : 9,
                     60:                        immediate       : 8;
                     61: #endif
                     62: };
                     63:
                     64: struct ins_format2 {
                     65: #if BYTE_ORDER == LITTLE_ENDIAN
                     66:        uint32_t        shift_control   : 8,
                     67:                        source          : 9,
                     68:                        destination     : 9,
                     69:                        ret             : 1,
                     70:                        opcode          : 4,
                     71:                        parity          : 1;
                     72: #else
                     73:        uint32_t        parity          : 1,
                     74:                        opcode          : 4,
                     75:                        ret             : 1,
                     76:                        destination     : 9,
                     77:                        source          : 9,
                     78:                        shift_control   : 8;
                     79: #endif
                     80: };
                     81:
                     82: struct ins_format3 {
                     83: #if BYTE_ORDER == LITTLE_ENDIAN
                     84:        uint32_t        immediate       : 8,
                     85:                        source          : 9,
                     86:                        address         : 10,
                     87:                        opcode          : 4,
                     88:                        parity          : 1;
                     89: #else
                     90:        uint32_t        parity          : 1,
                     91:                        opcode          : 4,
                     92:                        address         : 10,
                     93:                        source          : 9,
                     94:                        immediate       : 8;
                     95: #endif
                     96: };
                     97:
                     98: union ins_formats {
                     99:                struct ins_format1 format1;
                    100:                struct ins_format2 format2;
                    101:                struct ins_format3 format3;
                    102:                uint8_t            bytes[4];
                    103:                uint32_t           integer;
                    104: };
                    105: struct instruction {
                    106:        union   ins_formats format;
                    107:        u_int   srcline;
                    108:        struct symbol *patch_label;
                    109:        TAILQ_ENTRY(instruction) links;
                    110: };
                    111:
                    112: #define        AIC_OP_OR       0x0
                    113: #define        AIC_OP_AND      0x1
                    114: #define AIC_OP_XOR     0x2
                    115: #define        AIC_OP_ADD      0x3
                    116: #define        AIC_OP_ADC      0x4
                    117: #define        AIC_OP_ROL      0x5
                    118: #define        AIC_OP_BMOV     0x6
                    119:
                    120: #define        AIC_OP_JMP      0x8
                    121: #define AIC_OP_JC      0x9
                    122: #define AIC_OP_JNC     0xa
                    123: #define AIC_OP_CALL    0xb
                    124: #define        AIC_OP_JNE      0xc
                    125: #define        AIC_OP_JNZ      0xd
                    126: #define        AIC_OP_JE       0xe
                    127: #define        AIC_OP_JZ       0xf
                    128:
                    129: /* Pseudo Ops */
                    130: #define        AIC_OP_SHL      0x10
                    131: #define        AIC_OP_SHR      0x20
                    132: #define        AIC_OP_ROR      0x30

CVSweb