2023-06-15 16:20:29 -07:00
|
|
|
#include <denali/denali.h>
|
2023-06-07 00:04:53 -07:00
|
|
|
#include <mammoth/debug.h>
|
2023-06-21 21:26:24 -07:00
|
|
|
#include <mammoth/endpoint_client.h>
|
2023-06-16 23:51:49 -07:00
|
|
|
#include <mammoth/init.h>
|
2023-06-07 00:04:53 -07:00
|
|
|
#include <mammoth/process.h>
|
2023-06-07 00:19:15 -07:00
|
|
|
#include <zcall.h>
|
2023-05-30 20:55:03 -07:00
|
|
|
|
2023-06-19 21:54:40 -07:00
|
|
|
#include "hw/gpt.h"
|
2023-06-07 22:45:42 -07:00
|
|
|
#include "hw/pcie.h"
|
|
|
|
|
2023-06-16 23:15:41 -07:00
|
|
|
uint64_t main(uint64_t port_cap) {
|
2023-06-07 11:18:35 -07:00
|
|
|
dbgln("Yellowstone Initializing.");
|
2023-06-16 23:51:49 -07:00
|
|
|
check(ParseInitPort(port_cap));
|
|
|
|
|
2023-06-19 21:54:40 -07:00
|
|
|
DumpPciEDevices();
|
|
|
|
|
2023-06-07 00:19:15 -07:00
|
|
|
uint64_t vaddr;
|
2023-06-17 00:17:43 -07:00
|
|
|
check(ZAddressSpaceMap(gSelfVmasCap, 0, gBootDenaliVmmoCap, &vaddr));
|
2023-06-15 16:20:29 -07:00
|
|
|
|
2023-06-21 21:26:24 -07:00
|
|
|
auto endpoint_or = SpawnProcessFromElfRegion(vaddr);
|
|
|
|
if (!endpoint_or) {
|
|
|
|
check(endpoint_or.error());
|
2023-06-21 20:58:08 -07:00
|
|
|
}
|
2023-06-21 21:26:24 -07:00
|
|
|
EndpointClient endpoint = endpoint_or.value();
|
2023-06-16 01:31:23 -07:00
|
|
|
|
2023-06-21 21:26:24 -07:00
|
|
|
DenaliClient client(endpoint);
|
2023-06-19 22:58:00 -07:00
|
|
|
GptReader reader(client);
|
|
|
|
|
|
|
|
check(reader.ParsePartitionTables());
|
2023-06-07 22:45:42 -07:00
|
|
|
|
2023-06-22 00:22:59 -07:00
|
|
|
check(ZAddressSpaceMap(gSelfVmasCap, 0, gBootVictoriaFallsVmmoCap, &vaddr));
|
|
|
|
auto error_or = SpawnProcessFromElfRegion(vaddr);
|
|
|
|
if (!error_or) {
|
|
|
|
check(error_or.error());
|
|
|
|
}
|
2023-06-07 11:18:35 -07:00
|
|
|
dbgln("Yellowstone Finished Successfully.");
|
2023-05-29 00:32:54 -07:00
|
|
|
return 0;
|
|
|
|
}
|