util/nvmutil: optimise swap command
handle it exclusively in writeGbeFile() this reduces nvmutil.c sloccount to 261, versus 265 Signed-off-by: Leah Rowe <leah@libreboot.org>btrfsvols
parent
4d44820163
commit
137a548b04
|
@ -24,7 +24,6 @@ void showmac(int partnum);
|
||||||
void hexdump(int partnum);
|
void hexdump(int partnum);
|
||||||
void cmd_setchecksum(void);
|
void cmd_setchecksum(void);
|
||||||
void cmd_brick(void);
|
void cmd_brick(void);
|
||||||
void cmd_swap(void);
|
|
||||||
void cmd_copy(void);
|
void cmd_copy(void);
|
||||||
int validChecksum(int partnum);
|
int validChecksum(int partnum);
|
||||||
void setWord(int pos16, int partnum, uint16_t val16);
|
void setWord(int pos16, int partnum, uint16_t val16);
|
||||||
|
@ -52,7 +51,7 @@ typedef struct op {
|
||||||
op_t op[] = {
|
op_t op[] = {
|
||||||
{ .str = "dump", .cmd = cmd_dump, .args = 3},
|
{ .str = "dump", .cmd = cmd_dump, .args = 3},
|
||||||
{ .str = "setmac", .cmd = cmd_setmac, .args = 3},
|
{ .str = "setmac", .cmd = cmd_setmac, .args = 3},
|
||||||
{ .str = "swap", .cmd = cmd_swap, .args = 3},
|
{ .str = "swap", .cmd = writeGbeFile, .args = 3},
|
||||||
{ .str = "copy", .cmd = cmd_copy, .args = 4},
|
{ .str = "copy", .cmd = cmd_copy, .args = 4},
|
||||||
{ .str = "brick", .cmd = cmd_brick, .args = 4},
|
{ .str = "brick", .cmd = cmd_brick, .args = 4},
|
||||||
{ .str = "setchecksum", .cmd = cmd_setchecksum, .args = 4},
|
{ .str = "setchecksum", .cmd = cmd_setchecksum, .args = 4},
|
||||||
|
@ -102,7 +101,7 @@ main(int argc, char *argv[])
|
||||||
readGbeFile();
|
readGbeFile();
|
||||||
(*cmd)();
|
(*cmd)();
|
||||||
|
|
||||||
if ((gbeFileModified) && (flags != O_RDONLY))
|
if ((gbeFileModified) && (flags != O_RDONLY) && (cmd != writeGbeFile))
|
||||||
writeGbeFile();
|
writeGbeFile();
|
||||||
err_if((errno != 0) && (cmd != &cmd_dump));
|
err_if((errno != 0) && (cmd != &cmd_dump));
|
||||||
return errno;
|
return errno;
|
||||||
|
@ -122,7 +121,7 @@ openFiles(const char *path)
|
||||||
void
|
void
|
||||||
readGbeFile(void)
|
readGbeFile(void)
|
||||||
{
|
{
|
||||||
nf = ((cmd == cmd_swap) || (cmd == cmd_copy)) ? SIZE_4KB : nf;
|
nf = ((cmd == writeGbeFile) || (cmd == cmd_copy)) ? SIZE_4KB : nf;
|
||||||
skipread[part ^ 1] = (cmd == &cmd_copy) | (cmd == &cmd_setchecksum)
|
skipread[part ^ 1] = (cmd == &cmd_copy) | (cmd == &cmd_setchecksum)
|
||||||
| (cmd == &cmd_brick);
|
| (cmd == &cmd_brick);
|
||||||
gbe[1] = (gbe[0] = (size_t) buf) + SIZE_4KB;
|
gbe[1] = (gbe[0] = (size_t) buf) + SIZE_4KB;
|
||||||
|
@ -242,14 +241,6 @@ cmd_brick(void)
|
||||||
setWord(0x3F, part, (word(0x3F, part)) ^ 0xFF);
|
setWord(0x3F, part, (word(0x3F, part)) ^ 0xFF);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
cmd_swap(void)
|
|
||||||
{
|
|
||||||
if ((gbeFileModified = nvmPartModified[0] = nvmPartModified[1]
|
|
||||||
= validChecksum(1) | validChecksum(0)))
|
|
||||||
xorswap(gbe[0], gbe[1]); /* speedhack: swap ptr, not words */
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
cmd_copy(void)
|
cmd_copy(void)
|
||||||
{
|
{
|
||||||
|
@ -288,11 +279,15 @@ void
|
||||||
writeGbeFile(void)
|
writeGbeFile(void)
|
||||||
{
|
{
|
||||||
errno = 0;
|
errno = 0;
|
||||||
for (int x = gbe[0] > gbe[1] ? 1 : 0, p = 0; p < 2; p++, x ^= 1) {
|
if (cmd == writeGbeFile) {
|
||||||
if (!nvmPartModified[x])
|
err_if(!(validChecksum(0) || validChecksum(1)));
|
||||||
|
xorswap(gbe[0], gbe[1]);
|
||||||
|
}
|
||||||
|
for (int p = 0; p < 2; p++) {
|
||||||
|
if ((!nvmPartModified[p]) && (gbe[0] <= gbe[1]))
|
||||||
continue;
|
continue;
|
||||||
handle_endianness(x);
|
handle_endianness(p);
|
||||||
err_if(pwrite(fd, (uint8_t *) gbe[x], nf, x << 12) == -1);
|
err_if(pwrite(fd, (uint8_t *) gbe[p], nf, p << 12) == -1);
|
||||||
}
|
}
|
||||||
err_if(close(fd) == -1);
|
err_if(close(fd) == -1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue