Linux kernel mirror (for testing)
git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel
os
linux
1// SPDX-License-Identifier: GPL-2.0
2
3use crate::gpu;
4use kernel::firmware;
5
6pub(crate) struct ModInfoBuilder<const N: usize>(firmware::ModInfoBuilder<N>);
7
8impl<const N: usize> ModInfoBuilder<N> {
9 const VERSION: &'static str = "535.113.01";
10
11 const fn make_entry_file(self, chipset: &str, fw: &str) -> Self {
12 ModInfoBuilder(
13 self.0
14 .new_entry()
15 .push("nvidia/")
16 .push(chipset)
17 .push("/gsp/")
18 .push(fw)
19 .push("-")
20 .push(Self::VERSION)
21 .push(".bin"),
22 )
23 }
24
25 const fn make_entry_chipset(self, chipset: &str) -> Self {
26 self.make_entry_file(chipset, "booter_load")
27 .make_entry_file(chipset, "booter_unload")
28 .make_entry_file(chipset, "bootloader")
29 .make_entry_file(chipset, "gsp")
30 }
31
32 pub(crate) const fn create(
33 module_name: &'static kernel::str::CStr,
34 ) -> firmware::ModInfoBuilder<N> {
35 let mut this = Self(firmware::ModInfoBuilder::new(module_name));
36 let mut i = 0;
37
38 while i < gpu::Chipset::NAMES.len() {
39 this = this.make_entry_chipset(gpu::Chipset::NAMES[i]);
40 i += 1;
41 }
42
43 this.0
44 }
45}