xref: /haiku/src/system/boot/platform/u-boot/devices.cpp (revision e7be020ce59cd8a50dcb9a782b3b15cfa769396c)
1 /*
2  * Copyright 2009, Johannes Wischert, johanneswi@gmail.com. All rights reserved.
3  * Distributed under the terms of the MIT License.
4  */
5 
6 
7 #include <KernelExport.h>
8 #include <boot/platform.h>
9 #include <boot/vfs.h>
10 #include <boot/stdio.h>
11 #include <boot/stage2.h>
12 
13 #define TRACE_DEVICES
14 #ifdef TRACE_DEVICES
15 #	define TRACE(x...) dprintf(x)
16 #else
17 #	define TRACE(x...)
18 #endif
19 
20 
21 
22 
23 status_t
24 platform_add_boot_device(struct stage2_args *args, NodeList *devicesList)
25 {
26 	TRACE("platform_add_boot_device\n");
27 
28 	if (!args->platform.boot_tgz_data || !args->platform.boot_tgz_size)
29 		return B_DEVICE_NOT_FOUND;
30 
31 	TRACE("Memory Disk at: %lx size: %lx\n", args->platform.boot_tgz_data,
32 		args->platform.boot_tgz_size);
33 
34 	MemoryDisk* disk = new(nothrow) MemoryDisk(
35 		(const uint8 *)args->platform.boot_tgz_data,
36 		args->platform.boot_tgz_size, "boot.tgz");
37 	if (!disk) {
38 		dprintf("platform_add_boot_device(): Could not create MemoryDisk !\n");
39 		return B_NO_MEMORY;
40 	}
41 
42 	devicesList->Add(disk);
43 	return B_OK;
44 }
45 
46 
47 status_t
48 platform_get_boot_partition(struct stage2_args *args, Node *device,
49 	NodeList *list, boot::Partition **_partition)
50 {
51 	TRACE("platform_get_boot_partition\n");
52 
53 	NodeIterator iterator = list->GetIterator();
54 	boot::Partition *partition = NULL;
55 	while ((partition = (boot::Partition *)iterator.Next()) != NULL) {
56 		// ToDo: just take the first partition for now
57 		*_partition = partition;
58 		return B_OK;
59 	}
60 
61 	return B_ENTRY_NOT_FOUND;
62 }
63 
64 
65 status_t
66 platform_add_block_devices(stage2_args *args, NodeList *devicesList)
67 {
68 	TRACE("platform_add_block_devices\n");
69 	return B_OK;
70 }
71 
72 
73 status_t
74 platform_register_boot_device(Node *device)
75 {
76 	TRACE("platform_register_boot_device\n");
77 	return B_OK;
78 }
79