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