Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F171128559
D59417.id185882.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D59417.id185882.diff
View Options
diff --git a/stand/common/bootstrap.h b/stand/common/bootstrap.h
--- a/stand/common/bootstrap.h
+++ b/stand/common/bootstrap.h
@@ -381,4 +381,7 @@
int mount_currdev(struct env_var *, int, const void *);
void set_currdev(const char *devname);
+/* md.c */
+void md_export_to_kernel(uint64_t start, uint64_t len);
+
#endif /* !_BOOTSTRAP_H_ */
diff --git a/stand/common/md.c b/stand/common/md.c
--- a/stand/common/md.c
+++ b/stand/common/md.c
@@ -34,6 +34,25 @@
#define MD_BLOCK_SIZE 512
+/*
+ * The kernel can accept a MD inline in the metadata, or out-of-line via
+ * hints, like when memory disks are passed to us in, for example, UEFI.
+ */
+void
+md_export_to_kernel(uint64_t start, uint64_t len)
+{
+ char key[32], value[32];
+ static int unit = 0; /* Note: loader unit and kernel unit may differ */
+
+ snprintf(key, sizeof(key), "hint.md.%d.physaddr", unit);
+ snprintf(value, sizeof(value), "0x%016jx", (uintmax_t)start);
+ setenv(key, value, 1);
+ snprintf(key, sizeof(key), "hint.md.%d.len", unit);
+ snprintf(value, sizeof(value), "%jd", (uintmax_t)len);
+ setenv(key, value, 1);
+ unit++;
+}
+
#ifdef MD_IMAGE_SIZE
#if (MD_IMAGE_SIZE == 0 || MD_IMAGE_SIZE % MD_BLOCK_SIZE)
diff --git a/stand/efi/libefi/efipart.c b/stand/efi/libefi/efipart.c
--- a/stand/efi/libefi/efipart.c
+++ b/stand/efi/libefi/efipart.c
@@ -1278,7 +1278,6 @@
MEDIA_RAM_DISK_DEVICE_PATH *ram;
uint64_t start, end;
pdinfo_t *md;
- char key[32], value[32];
int i;
STAILQ_FOREACH(md, &pdinfo, pd_link) {
@@ -1288,11 +1287,6 @@
i = ram->Instance;
start = ((uint64_t)ram->StartingAddr[1] << 32) | ram->StartingAddr[0];
end = ((uint64_t)ram->EndingAddr[1] << 32) | ram->EndingAddr[0];
- snprintf(key, sizeof(key), "hint.md.%d.physaddr", i);
- snprintf(value, sizeof(value), "0x%016x", start);
- setenv(key, value, 1);
- snprintf(key, sizeof(key), "hint.md.%d.len", i);
- snprintf(value, sizeof(value), "%d", end - start + 1);
- setenv(key, value, 1);
+ md_export_to_kernel(start, end - start + 1);
}
}
diff --git a/stand/i386/libi386/biosmemdisk.c b/stand/i386/libi386/biosmemdisk.c
--- a/stand/i386/libi386/biosmemdisk.c
+++ b/stand/i386/libi386/biosmemdisk.c
@@ -66,8 +66,7 @@
void
biosmemdisk_detect(void)
{
- char line[80], scratch[80];
- int hook = 0, count = 0, sector_size;
+ int hook = 0, sector_size;
uint16_t segment, offset;
struct safe_13h_hook *probe;
ACPI_TABLE_HEADER *mbft;
@@ -125,13 +124,7 @@
mdi->mdi_major, mdi->mdi_minor, mdi->mdi_disk_ptr,
mdi->mdi_disk_sectors, mdi->mdi_disk_sectors * sector_size);
- snprintf(line, sizeof(line), "hint.md.%d.physaddr", count);
- snprintf(scratch, sizeof(scratch), "0x%08x", mdi->mdi_disk_ptr);
- setenv(line, scratch, 1);
- snprintf(line, sizeof(line), "hint.md.%d.len", count);
- snprintf(scratch, sizeof(scratch), "%d", mdi->mdi_disk_sectors * sector_size);
- setenv(line, scratch, 1);
- count++;
+ md_export_to_kernel(mdi->mdi_disk_ptr, mdi->mdi_disk_sectors * sector_size);
end_of_loop:
hook++;
offset = probe->sh_next_offset;
diff --git a/stand/i386/loader/Makefile b/stand/i386/loader/Makefile
--- a/stand/i386/loader/Makefile
+++ b/stand/i386/loader/Makefile
@@ -10,6 +10,7 @@
LOADER_GZIP_SUPPORT?= yes
LOADER_BZIP2_SUPPORT?= yes
LOADER_XZ_SUPPORT?= yes
+LOADER_MD_SUPPORT?= yes
.include <bsd.init.mk>
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Wed, Sep 9, 9:24 PM (1 h, 26 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
38525659
Default Alt Text
D59417.id185882.diff (3 KB)
Attached To
Mode
D59417: loader: Move ramdisk export to md.c
Attached
Detach File
Event Timeline
Log In to Comment