Annotation of sys/dev/microcode/aic7xxx/aicasm_insformat.h, Revision 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