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