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