1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License (the "License").
* You may not use this file except in compliance with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2010 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_OPENPROMIO_H
#define _SYS_OPENPROMIO_H
/* From SunOS 4.1.1 <sundev/openpromio.h> */
#ifdef __cplusplus
extern "C" {
#endif
/*
* XXX HACK ALERT
*
* You might think that this interface could support setting non-ASCII
* property values. Unfortunately the 4.0.3c openprom driver SETOPT
* code ignores oprom_size and uses strlen() to compute the length of
* the value. The 4.0.3c openprom eeprom command makes its contribution
* by not setting oprom_size to anything meaningful. So, if we want the
* driver to trust oprom_size we have to use SETOPT2. XXX.
*/
struct openpromio {
uint_t oprom_size; /* real size of following array */
union {
char b[1]; /* For property names and values */
/* NB: Adjacent, Null terminated */
int i;
} opio_u;
};
#define oprom_array opio_u.b
#define oprom_node opio_u.i
#define oprom_len opio_u.i
/*
* OPROMMAXPARAM is used as a limit by the driver, and it has been
* increased to be 4 times the largest possible size of a property,
* which is 8K (nvramrc property).
*/
#define OPROMMAXPARAM 32768 /* max size of array */
/*
* Note that all OPROM ioctl codes are type void. Since the amount
* of data copied in/out may (and does) vary, the openprom driver
* handles the copyin/copyout itself.
*/
#define OIOC ('O'<<8)
#define OPROMGETOPT (OIOC | 1)
#define OPROMSETOPT (OIOC | 2)
#define OPROMNXTOPT (OIOC | 3)
#define OPROMSETOPT2 (OIOC | 4) /* working OPROMSETOPT */
#define OPROMNEXT (OIOC | 5) /* interface to raw config_ops */
#define OPROMCHILD (OIOC | 6) /* interface to raw config_ops */
#define OPROMGETPROP (OIOC | 7) /* interface to raw config_ops */
#define OPROMNXTPROP (OIOC | 8) /* interface to raw config_ops */
#define OPROMU2P (OIOC | 9) /* NOT SUPPORTED after 4.x */
#define OPROMGETCONS (OIOC | 10) /* enquire which console device */
#define OPROMGETFBNAME (OIOC | 11) /* Frame buffer OBP pathname */
#define OPROMGETBOOTARGS (OIOC | 12) /* Get boot arguments */
#define OPROMGETVERSION (OIOC | 13) /* Get OpenProm Version string */
#define OPROMPATH2DRV (OIOC | 14) /* Convert prom path to driver name */
#define OPROMDEV2PROMNAME (OIOC | 15) /* Convert devfs path to prom path */
#define OPROMPROM2DEVNAME (OIOC | 16) /* Convert devfs path to prom path */
#define OPROMGETPROPLEN (OIOC | 17) /* interface to raw config_ops */
#define OPROMREADY64 (OIOC | 18) /* is prom 64-bit ready? */
#define OPROMSETNODEID (OIOC | 19) /* set current node_id */
#define OPROMSNAPSHOT (OIOC | 20) /* create a snapshot */
#define OPROMCOPYOUT (OIOC | 21) /* copyout and free snapshot */
#define OPROMLISTKEYS (OIOC | 22) /* asr-list-keys */
#define OPROMLISTKEYSLEN (OIOC | 23) /* asr-list-keys-len */
#define OPROMEXPORT (OIOC | 24) /* asr-export */
#define OPROMEXPORTLEN (OIOC | 25) /* asr-export-len */
#define OPROMGETBOOTPATH (OIOC | 26) /* Get bootpath */
/*
* Return values from OPROMGETCONS:
*/
#define OPROMCONS_NOT_WSCONS 0
#define OPROMCONS_STDIN_IS_KBD 0x1 /* stdin device is kbd */
#define OPROMCONS_STDOUT_IS_FB 0x2 /* stdout is a framebuffer */
#define OPROMCONS_OPENPROM 0x4 /* supports openboot */
#if defined(__sparc)
/*
* Data structure returned in oprom_array, from OPROMREADY64:
*
* With return codes 1 and 2, also returns nodeid, a nodeid
* of a flashprom node, and a message string with the minimum version
* requirement for this platform.
*/
struct openprom_opr64 {
int return_code; /* See below */
int nodeid; /* Valid with positive return codes */
char message[1]; /* NULL terminated message string */
};
/*
* return_code values from OPROMREADY64:
*/
#define OP64R_READY 0 /* ready or not applicable */
#define OP64R_UPGRADE_REQUIRED 1 /* Upgrade required */
#define OP64R_UPGRADE_RECOMMENDED 2 /* Upgrade recommended */
#endif
#ifdef __cplusplus
}
#endif
#endif /* _SYS_OPENPROMIO_H */
|