Skip to content

Commit 8810a3f

Browse files
jackpot51crawfxrd
authored andcommitted
Reboot in order to set serial
1 parent e4b0416 commit 8810a3f

File tree

3 files changed

+56
-38
lines changed

3 files changed

+56
-38
lines changed

res/firmware.nsh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -208,5 +208,23 @@ if "%2" == "ec2" then
208208
exit 1
209209
endif
210210

211+
if "%2" == "serial" then
212+
if exist amide.efi then
213+
if exist amide.tag then
214+
rm amide.tag
215+
amide.efi /SS "%3"
216+
exit %lasterror%
217+
else
218+
echo > amide.tag
219+
if not exist amide.tag then
220+
echo "failed to create amide.tag"
221+
exit 1
222+
endif
223+
224+
reset
225+
endif
226+
endif
227+
endif
228+
211229
echo "unknown command '%2'"
212230
exit 1

src/app/bios.rs

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ use std::vars::{get_boot_item, get_boot_order, set_boot_item, set_boot_order};
1313
use std::uefi::reset::ResetType;
1414
use std::uefi::status::{Error, Result, Status};
1515

16-
use super::{AMIDE, FIRMWARECAP, FIRMWAREDIR, FIRMWARENSH, FIRMWAREROM, H2OFFT, IFLASHV, SERIAL, UEFIFLASH, shell, Component, pci_mcfg, UefiMapper};
16+
use super::{FIRMWARECAP, FIRMWAREDIR, FIRMWARENSH, FIRMWAREROM, H2OFFT, IFLASHV, UEFIFLASH, shell, Component, pci_mcfg, UefiMapper};
1717

1818
fn copy_region(region: intelflash::RegionKind, old_data: &[u8], new_data: &mut [u8]) -> core::result::Result<bool, String> {
1919
let old_opt = intelflash::Rom::new(old_data)?.get_region_base_limit(region)?;
@@ -188,23 +188,6 @@ impl BiosComponent {
188188
println!("Failed to locate EC");
189189
}
190190
}
191-
192-
fn set_serial(&self, serial: &str) -> Result<()> {
193-
if find(AMIDE).is_ok() {
194-
let cmd = format!("{} /SS {}", AMIDE, serial);
195-
let status = shell(&cmd)?;
196-
197-
if status == 0 {
198-
Ok(())
199-
} else {
200-
println!("{} Set Serial Error: {}", self.name(), status);
201-
Err(Error::DeviceError)
202-
}
203-
} else {
204-
//TODO
205-
Err(Error::NotFound)
206-
}
207-
}
208191
}
209192

210193
impl Component for BiosComponent {
@@ -558,25 +541,6 @@ impl Component for BiosComponent {
558541
}
559542
}
560543

561-
if let Ok(serial_vec) = load(SERIAL) {
562-
match String::from_utf8(serial_vec) {
563-
Ok(serial_str) => {
564-
let serial = serial_str.trim();
565-
match self.set_serial(&serial) {
566-
Ok(()) => {
567-
println!("Set serial to '{}'", serial);
568-
},
569-
Err(err) => {
570-
println!("Failed to set serial to '{}': {:?}", serial, err);
571-
}
572-
}
573-
},
574-
Err(err) => {
575-
println!("Failed to parse serial: {:?}", err);
576-
}
577-
}
578-
}
579-
580544
Ok(())
581545
}
582546
}

src/app/mod.rs

Lines changed: 37 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ mod ec;
3838
mod mapper;
3939
mod pci;
4040

41-
static AMIDE: &str = concat!("\\", env!("BASEDIR"), "\\firmware\\amide.efi");
41+
static AMIDETAG: &str = concat!("\\", env!("BASEDIR"), "\\firmware\\amide.tag");
4242
static ECROM: &str = concat!("\\", env!("BASEDIR"), "\\firmware\\ec.rom");
4343
static ECTAG: &str = concat!("\\", env!("BASEDIR"), "\\firmware\\ec.tag");
4444
static EC2ROM: &str = concat!("\\", env!("BASEDIR"), "\\firmware\\ec2.rom");
@@ -79,6 +79,18 @@ fn ac_connected() -> bool {
7979
}
8080
}
8181

82+
fn set_serial(serial: &str) -> Result<()> {
83+
find(FIRMWARENSH)?;
84+
let cmd = format!("{} {} serial {}", FIRMWARENSH, FIRMWAREDIR, serial);
85+
let status = shell(&cmd)?;
86+
if status == 0 {
87+
Ok(())
88+
} else {
89+
println!("Set Serial Error: {}", status);
90+
Err(Error::DeviceError)
91+
}
92+
}
93+
8294
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
8395
enum ValidateKind {
8496
Found,
@@ -257,6 +269,11 @@ fn inner() -> Result<()> {
257269
components.clear();
258270
validations.clear();
259271
'\n'
272+
} else if find(AMIDETAG).is_ok() {
273+
// Skip enter if writing serial
274+
components.clear();
275+
validations.clear();
276+
'\n'
260277
} else if find(UEFIFLASH).is_ok() {
261278
// Skip enter if flashing a meerkat
262279
if find(UEFIFLASHTAG).is_ok() {
@@ -319,6 +336,25 @@ fn inner() -> Result<()> {
319336
}
320337
};
321338

339+
if let Ok(serial_vec) = load(SERIAL) {
340+
match String::from_utf8(serial_vec) {
341+
Ok(serial_str) => {
342+
let serial = serial_str.trim();
343+
match set_serial(&serial) {
344+
Ok(()) => {
345+
println!("Set serial to '{}'", serial);
346+
},
347+
Err(err) => {
348+
println!("Failed to set serial to '{}': {:?}", serial, err);
349+
}
350+
}
351+
},
352+
Err(err) => {
353+
println!("Failed to parse serial: {:?}", err);
354+
}
355+
}
356+
}
357+
322358
remove_override(option)?;
323359

324360
println!("{}", message);

0 commit comments

Comments
 (0)