blob: b32b6c2482ef44c9d569a9ab3aa20aaa0a274fc6 [file] [log] [blame]
// SPDX-License-Identifier: Apache-2.0
// Copyright (C) 2018 IBM Corp.
#include "config.h"
#include "vpnor/pnor_partition_table.hpp"
#include <assert.h>
#include "common.h"
#include "vpnor/pnor_partition_defs.h"
static constexpr auto BLOCK_SIZE = 4 * 1024;
static constexpr auto DATA_MASK = ((1 << 24) - 1);
int main()
{
namespace vpnor = openpower::virtual_pnor;
struct pnor_partition part;
std::string line;
mbox_vlog = mbox_log_console;
verbosity = MBOX_LOG_DEBUG;
line = "partition01=FOO,00001000,00002000,80,ECC";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert((part.data.user.data[0]) == PARTITION_ECC_PROTECTED);
assert(!(part.data.user.data[1] & DATA_MASK));
line = "partition01=FOO,00001000,00002000,80,PRESERVED";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert((part.data.user.data[1] & DATA_MASK) == PARTITION_PRESERVED);
line = "partition01=FOO,00001000,00002000,80,READONLY";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert((part.data.user.data[1] & DATA_MASK) == PARTITION_READONLY);
/* BACKUP is unimplemented */
line = "partition01=FOO,00001000,00002000,80,BACKUP";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert(!(part.data.user.data[1] & DATA_MASK));
line = "partition01=FOO,00001000,00002000,80,REPROVISION";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert((part.data.user.data[1] & DATA_MASK) == PARTITION_REPROVISION);
line = "partition01=FOO,00001000,00002000,80,VOLATILE";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert((part.data.user.data[1] & DATA_MASK) == PARTITION_VOLATILE);
line = "partition01=FOO,00001000,00002000,80,CLEARECC";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert((part.data.user.data[1] & DATA_MASK) == PARTITION_CLEARECC);
line = "partition01=FOO,00001000,00002000,80,READWRITE";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert(((part.data.user.data[1] & DATA_MASK) ^ PARTITION_READONLY) ==
PARTITION_READONLY);
line = "partition01=FOO,00001000,00002000,80,";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert(!(part.data.user.data[1] & DATA_MASK));
line = "partition01=FOO,00001000,00002000,80,junk";
vpnor::parseTocLine(line, BLOCK_SIZE, part);
assert(!(part.data.user.data[0]));
assert(!(part.data.user.data[1] & DATA_MASK));
return 0;
}