1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2002 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _RMC_COMM_DP_BOOT_H
28 #define	_RMC_COMM_DP_BOOT_H
29 
30 #pragma ident	"%Z%%M%	%I%	%E% SMI"
31 
32 #ifdef __cplusplus
33 extern "C" {
34 #endif
35 
36 /* Boot protocol message types */
37 
38 #define	BP_OBP_TEST		0xC0
39 #define	BP_OBP_INIT		0xC1
40 #define	BP_OBP_ENQUIRE		0xC2
41 #define	BP_OBP_BOOTINIT		0xC3
42 #define	BP_OBP_RESET		0xC4
43 #define	BP_OBP_MACADDR		0xC5
44 #define	BP_OBP_BOOTMODE		0xC6
45 #define	BP_OBP_HOST_MACADDR	0xC7
46 #define	BP_OBP_SOFT_GPIO 	0xC8
47 
48 #define	BP_RSC_TESTACK		0xD0
49 #define	BP_RSC_DIAG		0xD1
50 #define	BP_RSC_OK		0xD2
51 #define	BP_RSC_STATUS		0xD3
52 #define	BP_RSC_MACADDRACK	0xD5
53 #define	BP_RSC_BOOTMODEACK	0xD6
54 #define	BP_RSC_BOOTREQ		0xD8
55 #define	BP_RSC_BOOTACK		0xD9
56 #define	BP_RSC_BOOTFAIL		0xDA
57 #define	BP_RSC_BOOTOK		0xDB
58 #define	BP_RSC_SOFTGPIOACK	0xDD
59 
60 #define	BP_MIN_CMD		0xC0
61 #define	BP_MAX_CMD		0xDF
62 
63 /*
64  * A boot protocol message consists of one (or more) synchronizing
65  * bytes, a command byte, and two data bytes.  The following structure
66  * defines how a boot message is passed around.  Hopefully the C
67  * compiler will be smart enough to pass this in a register...
68  */
69 
70 #define	BP_SYNC		0x80
71 
72 typedef struct bp_msg {
73 	uint8_t pad;	/* make it 4 bytes long */
74 	uint8_t cmd;
75 	uint8_t dat1;
76 	uint8_t dat2;
77 } bp_msg_t;
78 
79 /* Test numbers used in the OBP_TEST message: */
80 #define	BP_DAT1_MIN_TEST	0
81 #define	BP_DAT1_TTYC_ECHO_ON	0
82 #define	BP_DAT1_TTYC_ECHO_OFF	1
83 #define	BP_DAT1_TTYD_ECHO_ON	2
84 #define	BP_DAT1_TTYD_ECHO_OFF	3
85 #define	BP_DAT1_TTYCD_ECHO_ON	4
86 #define	BP_DAT1_TTYCD_ECHO_OFF	5
87 #define	BP_DAT1_ENET_INT_LB	6
88 #define	BP_DAT1_ENET_EXT_LB	7
89 #define	BP_DAT1_TTYU_INT_LB	8
90 #define	BP_DAT1_TTYU_EXT_LB	9
91 #define	BP_DAT1_SEEPROM_CKSUM	10
92 #define	BP_DAT1_DUMMY_TEST	11
93 #define	BP_DAT1_FRU_CKSUM	12
94 #define	BP_DAT1_FLASH_CKSUM	13
95 #define	BP_DAT1_TOD_TEST	14
96 #define	BP_DAT1_MODEM_TEST	15
97 #define	BP_DAT1_MAX_TEST	15
98 
99 /*
100  * This bit should be set in the RSC_STATUS message to indicate to the
101  * host that there is an interesting bootmode.
102  */
103 #define	BP_DAT1_VALID_BOOTMODE	0x40
104 
105 /*
106  * Bit definitions for the OBP_INIT and RSC_OK messages.
107  */
108 
109 #define	BP_DAT1_MENUS	0x80
110 #define	BP_DAT1_MAX	0x40
111 #define	BP_DAT1_MED	0x20
112 #define	BP_DAT1_MIN	0x10
113 #define	BP_DAT1_MBO	0x01
114 
115 #define	BP_DAT2_DIAGSW	0x01
116 
117 /* Bit definitions for OBP_BOOTINIT message. */
118 
119 #define	BP_DAT2_FLASH_PDAT	0x04
120 #define	BP_DAT2_FLASH_MAIN	0x02
121 #define	BP_DAT2_FLASH_BOOT	0x01
122 
123 /*
124  * For bit definitions for the RSC_STATUS message, see the post word bit
125  * definitions in "postword.h".
126  */
127 
128 /* Bit definitions for RSC_BOOTFAIL message. */
129 
130 #define	BP_DAT1_REJECTED	0x40
131 #define	BP_DAT1_RANGE_ERR	0x20
132 #define	BP_DAT1_VERIFY_ERR	0x10
133 #define	BP_DAT1_ERASE_ERR	0x08
134 #define	BP_DAT1_INT_WP_ERR	0x04
135 #define	BP_DAT1_WP_ERR		0x02
136 #define	BP_DAT1_VPP_ERR		0x01
137 
138 /* For lower 8 bits, see the lower 8 bits of the post word in "postword.h". */
139 
140 #define	KANTH_SRECORD_ACK
141 
142 /*
143  * When downloading S-records, a RSC:bootack is sent with the following
144  * value in dat1 to indicate whether the S-record checksum was OK or not.
145  */
146 
147 #define	BP_DAT1_BOOTINIT_ACK	0x00
148 #define	BP_DAT1_SRECORD_ACK	0x01
149 #define	BP_DAT1_SRECORD_NAK	0x02
150 
151 /* Definitions for OBP_BOOTMODE message: */
152 #define	BP_DAT2_BOOTMODE_CLEAR		1
153 
154 /* Definitions for RSC_BOOTMODE message: */
155 #define	BP_BAT1_BOOTMODE_DATAMSB	0x10
156 #define	BP_DAT1_BOOTMODE_OFFSET_MASK	0x07
157 
158 #define	BP_DAT2_BOOTMODE_DATA_MASK	0x7F
159 
160 /* Definitions for RSC_BOOTMODEACK message: */
161 #define	BP_DAT1_BOOTMODE_NORMAL		0
162 #define	BP_DAT1_BOOTMODE_FORTH		1
163 #define	BP_DAT1_BOOTMODE_RESET_NVRAM	2
164 #define	BP_DAT1_BOOTMODE_DIAG		3
165 #define	BP_DAT1_BOOTMODE_SKIP_DIAG	4
166 
167 #define	BP_DAT2_BOOTOPT_CONSOLE_RSC	1
168 
169 /* Definitions for RSC_MACADDRACK message: */
170 #define	BP_DAT2_MACADDRACK_OK		0
171 #define	BP_DAT2_MACADDRACK_DONE		1
172 #define	BP_DAT2_MACADDRACK_BADOFFSET	2
173 #define	BP_DAT2_MACADDRACK_NOTREADY	3
174 #define	BP_DAT2_MACADDRACK_NVERR	4
175 
176 /* Definitions for RSC_SOFTGPIOACK message */
177 #define	BP_DAT2_HOST_TYPE_OK		0
178 #define	BP_DAT2_HOST_TYPE_NVERR		1
179 
180 #ifdef __cplusplus
181 }
182 #endif
183 
184 #endif /* _RMC_COMM_DP_BOOT_H */
185