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