blob: 15f4948133bc0437a6b2940b21c835b0e72605b6 [file] [log] [blame]
Ed Tanous2b314e42025-08-19 15:46:18 -07001// SPDX-License-Identifier: Apache-2.0
2// SPDX-FileCopyrightText: 2025 NVIDIA
3
Marc Olberding1e17db52025-08-27 12:25:28 -07004#include "gpio.hpp"
5#include "i2c.hpp"
Marc Olberding801bc902025-08-27 12:55:42 -07006#include "nvidia.hpp"
Marc Olberding1e17db52025-08-27 12:25:28 -07007#include "utilities.hpp"
8
Ed Tanous2b314e42025-08-19 15:46:18 -07009#include <fcntl.h>
10#include <systemd/sd-daemon.h>
11
12#include <CLI/CLI.hpp>
13#include <gpiod.hpp>
14
Marc Olberding801bc902025-08-27 12:55:42 -070015#include <algorithm>
16#include <array>
Ed Tanous2b314e42025-08-19 15:46:18 -070017#include <iostream>
Marc Olberding801bc902025-08-27 12:55:42 -070018#include <string_view>
19#include <utility>
Ed Tanous2b314e42025-08-19 15:46:18 -070020
21constexpr std::array<std::pair<std::string_view, int (*)()>, 2> init_functions{
Marc Olberding801bc902025-08-27 12:55:42 -070022 {{"nvidia-gb200", nvidia::init_gb200_base},
23 {"nvidia-gb200-with-p2020", nvidia::init_gb200_with_p2020}}};
Ed Tanous2b314e42025-08-19 15:46:18 -070024
25int main(int argc, char** argv)
26{
27 CLI::App app("Platform init CLI");
28
29 app.require_subcommand();
30
31 CLI::App* init_sub =
32 app.add_subcommand("init", "Initialize the platform and daemonize");
33 std::string platform_name;
34 init_sub
35 ->add_option("platform_name", platform_name,
36 "Name of the platform to init")
37 ->required();
38 app.require_subcommand();
39
40 CLI11_PARSE(app, argc, argv)
41
42 const auto* it = std::ranges::find_if(
43 init_functions,
44 [&platform_name](const std::pair<std::string_view, int (*)()> val) {
45 return val.first == platform_name;
46 });
47 if (it == init_functions.end())
48 {
49 std::cerr << init_sub->help() << "\n";
50 return EXIT_FAILURE;
51 }
52
53 return it->second();
54}