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
33extern "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
72typedef 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