Print this page
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
loader: pxe receive cleanup
9475 libefi: Do not return only if ReceiveFilter
installboot: should support efi system partition
8931 boot1.efi: scan all display modes rather than
loader: spinconsole updates
loader: gfx experiment to try GOP Blt() function.
sha1 build test
loader: add sha1 hash calculation
common/sha1: update for loader build
loader: biosdisk rework
uts: 32-bit kernel FB needs mapping in low memory
uts: add diag-device
uts: boot console mirror with diag-device
uts: enable very early console on ttya
kmdb: add diag-device as input/output device
uts: test VGA memory exclusion from mapping
uts: clear boot mapping and protect boot pages test
uts: add dboot map debug printf
uts: need to release FB pages in release_bootstrap()
uts: add screenmap ioctl
uts: update sys/queue.h
loader: add illumos uts/common to include path
loader: tem/gfx font cleanup
loader: vbe checks
uts: gfx_private set KD_TEXT when KD_RESETTEXT is
uts: gfx 8-bit update
loader: gfx 8-bit fix
loader: always set media size from partition.
uts: MB2 support for 32-bit kernel
loader: x86 should have tem 80x25
uts: x86 should have tem 80x25
uts: font update
loader: font update
uts: tem attributes
loader: tem.c comment added
uts: use font module
loader: add font module
loader: build rules for new font setup
uts: gfx_private update for new font structure
uts: early boot update for new font structure
uts: font update
uts: font build rules update for new fonts
uts: tem update to new font structure
loader: module.c needs to include tem_impl.h
uts: gfx_private 8x16 font rework
uts: make font_lookup public
loader: font rework
uts: font rework
9259 libefi: efi_alloc_and_read should check for PMBR
uts: tem utf-8 support
loader: implement tem utf-8 support
loader: tem should be able to display UTF-8
7784 uts: console input should support utf-8
7796 uts: ldterm default to utf-8
uts: do not reset serial console
uts: set up colors even if tem is not console
uts: add type for early boot properties
uts: gfx_private experiment with drm and vga
uts: gfx_private should use setmode drm callback.
uts: identify FB types and set up gfx_private based
loader: replace gop and vesa with framebuffer
uts: boot needs simple tem to support mdb
uts: boot_keyboard should emit esc sequences for
uts: gfx_private FB showuld be written by line
kmdb: set terminal window size
uts: gfx_private needs to keep track of early boot FB
pnglite: move pnglite to usr/src/common
loader: gfx_fb
ficl-sys: add gfx primitives
loader: add illumos.png logo
ficl: add fb-putimage
loader: add png support
loader: add alpha blending for gfx_fb
loader: use term-drawrect for menu frame
ficl: add simple gfx words
uts: provide fb_info via fbgattr dev_specific array.
uts: gfx_private add alpha blending
uts: update sys/ascii.h
uts: tem OSC support (incomplete)
uts: implement env module support and use data from
uts: tem get colors from early boot data
loader: use crc32 from libstand (libz)
loader: optimize for size
loader: pass tem info to the environment
loader: import tem for loader console
loader: UEFI loader needs to set ISADIR based on
loader: need UEFI32 support
8918 loader.efi: add vesa edid support
uts: tem_safe_pix_clear_prom_output() should only
uts: tem_safe_pix_clear_entire_screen() should use
uts: tem_safe_check_first_time() should query cursor
uts: tem implement cls callback & visual_io v4
uts: gfx_vgatext use block cursor for vgatext
uts: gfx_private implement cls callback & visual_io
uts: gfx_private bitmap framebuffer implementation
uts: early start frame buffer console support
uts: font functions should check the input char
uts: font rendering should support 16/24/32bit depths
uts: use smallest font as fallback default.
uts: update terminal dimensions based on selected
7834 uts: vgatext should use gfx_private
uts: add spacing property to 8859-1.bdf
terminfo: add underline for sun-color
terminfo: sun-color has 16 colors
uts: add font load callback type
loader: do not repeat int13 calls with error 0x20 and
8905 loader: add skein/edonr support
8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
Revert "NEX-16819 loader UEFI support"
This reverts commit ec06b9fc617b99234e538bf2e7e4d02a24993e0c.
Reverting due to failures in the zfs-tests and the sharefs-tests
NEX-16819 loader UEFI support
Includes work by Toomas Soome <tsoome@me.com>
Upstream commits:
loader: pxe receive cleanup
9475 libefi: Do not return only if ReceiveFilter
installboot: should support efi system partition
8931 boot1.efi: scan all display modes rather than
loader: spinconsole updates
loader: gfx experiment to try GOP Blt() function.
sha1 build test
loader: add sha1 hash calculation
common/sha1: update for loader build
loader: biosdisk rework
uts: 32-bit kernel FB needs mapping in low memory
uts: add diag-device
uts: boot console mirror with diag-device
uts: enable very early console on ttya
kmdb: add diag-device as input/output device
uts: test VGA memory exclusion from mapping
uts: clear boot mapping and protect boot pages test
uts: add dboot map debug printf
uts: need to release FB pages in release_bootstrap()
uts: add screenmap ioctl
uts: update sys/queue.h
loader: add illumos uts/common to include path
loader: tem/gfx font cleanup
loader: vbe checks
uts: gfx_private set KD_TEXT when KD_RESETTEXT is
uts: gfx 8-bit update
loader: gfx 8-bit fix
loader: always set media size from partition.
uts: MB2 support for 32-bit kernel
loader: x86 should have tem 80x25
uts: x86 should have tem 80x25
uts: font update
loader: font update
uts: tem attributes
loader: tem.c comment added
uts: use font module
loader: add font module
loader: build rules for new font setup
uts: gfx_private update for new font structure
uts: early boot update for new font structure
uts: font update
uts: font build rules update for new fonts
uts: tem update to new font structure
loader: module.c needs to include tem_impl.h
uts: gfx_private 8x16 font rework
uts: make font_lookup public
loader: font rework
uts: font rework
libefi: efi_alloc_and_read should check for PMBR
uts: tem utf-8 support
loader: implement tem utf-8 support
loader: tem should be able to display UTF-8
7784 uts: console input should support utf-8
7796 uts: ldterm default to utf-8
uts: do not reset serial console
uts: set up colors even if tem is not console
uts: add type for early boot properties
uts: gfx_private experiment with drm and vga
uts: gfx_private should use setmode drm callback.
uts: identify FB types and set up gfx_private based
loader: replace gop and vesa with framebuffer
uts: boot needs simple tem to support mdb
uts: boot_keyboard should emit esc sequences for
uts: gfx_private FB showuld be written by line
kmdb: set terminal window size
uts: gfx_private needs to keep track of early boot FB
pnglite: move pnglite to usr/src/common
loader: gfx_fb
ficl-sys: add gfx primitives
loader: add illumos.png logo
ficl: add fb-putimage
loader: add png support
loader: add alpha blending for gfx_fb
loader: use term-drawrect for menu frame
ficl: add simple gfx words
uts: provide fb_info via fbgattr dev_specific array.
uts: gfx_private add alpha blending
uts: update sys/ascii.h
uts: tem OSC support (incomplete)
uts: implement env module support and use data from
uts: tem get colors from early boot data
loader: use crc32 from libstand (libz)
loader: optimize for size
loader: pass tem info to the environment
loader: import tem for loader console
loader: UEFI loader needs to set ISADIR based on
loader: need UEFI32 support
8918 loader.efi: add vesa edid support
uts: tem_safe_pix_clear_prom_output() should only
uts: tem_safe_pix_clear_entire_screen() should use
uts: tem_safe_check_first_time() should query cursor
uts: tem implement cls callback & visual_io v4
uts: gfx_vgatext use block cursor for vgatext
uts: gfx_private implement cls callback & visual_io
uts: gfx_private bitmap framebuffer implementation
uts: early start frame buffer console support
uts: font functions should check the input char
uts: font rendering should support 16/24/32bit depths
uts: use smallest font as fallback default.
uts: update terminal dimensions based on selected
7834 uts: vgatext should use gfx_private
uts: add spacing property to 8859-1.bdf
terminfo: add underline for sun-color
terminfo: sun-color has 16 colors
uts: add font load callback type
loader: do not repeat int13 calls with error 0x20 and
8905 loader: add skein/edonr support
8904 common/crypto: make skein and edonr loader
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Evan Layton <evan.layton@nexenta.com>
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/cmd/mdb/intel/kmdb/kctl/kctl_isadep.c
+++ new/usr/src/cmd/mdb/intel/kmdb/kctl/kctl_isadep.c
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21
22 22 /*
23 23 * Copyright (c) 2012 Gary Mills
24 24 *
25 25 * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
26 26 * Use is subject to license terms.
27 27 */
28 28
29 29 #include <kmdb/kmdb_auxv.h>
30 30 #include <kmdb/kctl/kctl.h>
31 31
32 32 #include <sys/bootconf.h>
33 33 #include <sys/kobj.h>
34 34 #include <sys/kobj_impl.h>
35 35 #include <sys/cpuvar.h>
36 36 #include <sys/kdi_impl.h>
37 37 #include <sys/x86_archext.h>
38 38 #include <sys/controlregs.h>
39 39 #include <sys/archsystm.h>
40 40
41 41 static int
42 42 kctl_boot_prop_read(char *pname, char *prop_buf, int buf_len)
43 43 {
44 44 struct bootops *ops = kctl.kctl_boot_ops;
45 45 int len;
46 46
47 47 len = BOP_GETPROPLEN(ops, pname);
48 48 if (len > 0 && len <= buf_len) {
49 49 (void) BOP_GETPROP(ops, pname, (void *)prop_buf);
50 50 return (1);
51 51 }
52 52
53 53 return (0);
54 54 }
55 55
56 56 static int
57 57 kctl_ddi_prop_read(char *pname, char *prop_buf, int buf_len)
58 58 {
59 59 dev_info_t *dip = ddi_root_node();
60 60 char *val;
61 61 int ret = 0;
62 62
63 63 if (ddi_prop_lookup_string(DDI_DEV_T_ANY, dip,
64 64 DDI_PROP_DONTPASS, pname, &val) != DDI_SUCCESS)
65 65 return (0);
66 66
67 67 if (strlen(val) < buf_len) {
68 68 (void) strcpy(prop_buf, val);
69 69 ret = 1;
70 70 }
|
↓ open down ↓ |
70 lines elided |
↑ open up ↑ |
71 71
72 72 ddi_prop_free(val);
73 73 return (ret);
74 74 }
75 75
76 76 /*
77 77 * We don't have any property-walking routines, so we have to specifically
78 78 * query and thus have guilty knowledge of the properties that the
79 79 * debugger wants to see.
80 80 *
81 - * Here actually we only support six console properties:
82 - * input-device, output-device, tty[a-d]-mode.
81 + * Here actually we only support eight console properties:
82 + * input-device, output-device, tty[a-d]-mode, screen-#rows, screen-#cols.
83 83 */
84 84 #define KCTL_PROPNV_NIODEV 2
85 85 #define KCTL_PROPNV_NTTYMD 4
86 -#define KCTL_PROPNV_NENT (KCTL_PROPNV_NIODEV + KCTL_PROPNV_NTTYMD)
86 +#define KCTL_PROPNV_NSCREEN 2
87 +#define KCTL_PROPNV_NENT (KCTL_PROPNV_NIODEV + KCTL_PROPNV_NTTYMD + \
88 + KCTL_PROPNV_NSCREEN)
87 89
88 90 static kmdb_auxv_nv_t *
89 91 kctl_pcache_create(int *nprops)
90 92 {
91 93 int (*preader)(char *, char *, int);
92 94 kmdb_auxv_nv_t *pnv;
93 95 size_t psz = sizeof (kmdb_auxv_nv_t) * KCTL_PROPNV_NENT;
94 96 char *inputdev, *outputdev;
95 - int i;
97 + int i, j;
96 98 char ttymode[] = "ttyX-mode";
97 99
98 100 if (kctl.kctl_boot_loaded) {
99 101 preader = kctl_boot_prop_read;
100 102 } else {
101 103 preader = kctl_ddi_prop_read;
102 104 }
103 105
104 106 pnv = kobj_alloc(psz, KM_WAIT);
105 107 inputdev = (&pnv[0])->kanv_val;
106 108 outputdev = (&pnv[1])->kanv_val;
107 109
108 110 /* Set the property names. */
109 111 (void) strcpy((&pnv[0])->kanv_name, "input-device");
110 112 (void) strcpy((&pnv[1])->kanv_name, "output-device");
111 113 for (i = 0; i < KCTL_PROPNV_NTTYMD; i++) {
|
↓ open down ↓ |
6 lines elided |
↑ open up ↑ |
112 114 ttymode[3] = 'a' + i;
113 115 (void) strcpy((&pnv[i + KCTL_PROPNV_NIODEV])->kanv_name,
114 116 ttymode);
115 117 }
116 118
117 119 /*
118 120 * console is defined by "console" property, with
119 121 * fallback on the old "input-device" property.
120 122 */
121 123 (void) strcpy(inputdev, "text"); /* default to screen */
122 - if (!preader("console", inputdev, sizeof ((&pnv[0])->kanv_val)))
124 + if (!preader("diag-device", inputdev, sizeof ((&pnv[0])->kanv_val)) &&
125 + !preader("console", inputdev, sizeof ((&pnv[0])->kanv_val)))
123 126 (void) preader("input-device", inputdev,
124 127 sizeof ((&pnv[0])->kanv_val));
125 128
126 129 if (strncmp(inputdev, "tty", 3) == 0 &&
127 130 inputdev[4] == '\0' &&
128 131 inputdev[3] >= 'a' &&
129 132 inputdev[3] < 'a' + KCTL_PROPNV_NTTYMD) {
130 133 (void) strcpy(outputdev, inputdev);
131 134 } else {
132 135 (void) strcpy(inputdev, "keyboard");
133 136 (void) strcpy(outputdev, "screen");
134 137 }
135 138
136 139 /* Set tty modes or defaults. */
137 - for (i = KCTL_PROPNV_NIODEV; i < KCTL_PROPNV_NENT; i++) {
140 + j = KCTL_PROPNV_NIODEV + KCTL_PROPNV_NTTYMD;
141 + for (i = KCTL_PROPNV_NIODEV; i < j; i++) {
138 142 if (!preader((&pnv[i])->kanv_name, (&pnv[i])->kanv_val,
139 143 sizeof ((&pnv[0])->kanv_val)))
140 144 (void) strcpy((&pnv[i])->kanv_val, "9600,8,n,1,-");
141 145 }
142 146
147 + (void) strcpy((&pnv[j])->kanv_name, "screen-#rows");
148 + (void) strcpy((&pnv[j + 1])->kanv_name, "screen-#cols");
149 + (void) strcpy((&pnv[j])->kanv_val, "0");
150 + (void) strcpy((&pnv[j + 1])->kanv_val, "0");
151 + (void) preader((&pnv[j])->kanv_name, (&pnv[j])->kanv_val,
152 + sizeof ((&pnv[j])->kanv_val));
153 + (void) preader((&pnv[j + 1])->kanv_name, (&pnv[j + 1])->kanv_val,
154 + sizeof ((&pnv[j + 1])->kanv_val));
155 +
143 156 *nprops = KCTL_PROPNV_NENT;
144 157 return (pnv);
145 158 }
146 159
147 160 static void
148 161 kctl_pcache_destroy(kmdb_auxv_nv_t *pnv)
149 162 {
150 163 kobj_free(pnv, sizeof (kmdb_auxv_nv_t) * KCTL_PROPNV_NENT);
151 164 }
152 165
153 166 void
154 167 kctl_auxv_init_isadep(kmdb_auxv_t *kav, void *romp)
155 168 {
156 169 kav->kav_pcache = kctl_pcache_create(&kav->kav_nprops);
157 170 kav->kav_romp = romp;
158 171 }
159 172
160 173 void
161 174 kctl_auxv_fini_isadep(kmdb_auxv_t *kav)
162 175 {
163 176 if (kav->kav_pcache != NULL)
164 177 kctl_pcache_destroy(kav->kav_pcache);
165 178 }
166 179
167 180 int
168 181 kctl_preactivate_isadep(void)
169 182 {
170 183 return (0);
171 184 }
172 185
173 186 /*ARGSUSED*/
174 187 void
175 188 kctl_activate_isadep(kdi_debugvec_t *dvec)
176 189 {
177 190 dvec->dv_kctl_vmready = hat_kdi_init;
178 191
179 192 if (!kctl.kctl_boot_loaded)
180 193 hat_kdi_init();
181 194 }
182 195
183 196 void
184 197 kctl_depreactivate_isadep(void)
185 198 {
186 199 }
187 200
188 201 /*
189 202 * Many common kernel functions assume that %gs can be deferenced, and
190 203 * fail horribly if it cannot. Ask the kernel to set up a temporary
191 204 * mapping to a fake cpu_t so that we can call such functions during
192 205 * initialization.
193 206 */
194 207 void *
195 208 kctl_boot_tmpinit(void)
196 209 {
197 210 return (boot_kdi_tmpinit());
198 211 }
199 212
200 213 void
201 214 kctl_boot_tmpfini(void *old)
202 215 {
203 216 boot_kdi_tmpfini(old);
204 217 }
|
↓ open down ↓ |
52 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX