130bcf84cSAndrew Jeffery // SPDX-License-Identifier: Apache-2.0
230bcf84cSAndrew Jeffery // Copyright (C) 2018 IBM Corp.
330bcf84cSAndrew Jeffery
430bcf84cSAndrew Jeffery #include "config.h"
5d5f1d40fSWilliam A. Kennington III
6*de08ca2dSAndrew Jeffery #include "vpnor/table.hpp"
7d5f1d40fSWilliam A. Kennington III
8261f61a1SAndrew Jeffery #include <cassert>
930bcf84cSAndrew Jeffery
1030bcf84cSAndrew Jeffery #include "common.h"
11dec59b47SAndrew Jeffery #include "vpnor/ffs.h"
1230bcf84cSAndrew Jeffery
1330bcf84cSAndrew Jeffery static constexpr auto BLOCK_SIZE = 4 * 1024;
1430bcf84cSAndrew Jeffery static constexpr auto DATA_MASK = ((1 << 24) - 1);
1530bcf84cSAndrew Jeffery
main()1630bcf84cSAndrew Jeffery int main()
1730bcf84cSAndrew Jeffery {
1830bcf84cSAndrew Jeffery namespace vpnor = openpower::virtual_pnor;
1930bcf84cSAndrew Jeffery
2030bcf84cSAndrew Jeffery struct pnor_partition part;
2130bcf84cSAndrew Jeffery std::string line;
2230bcf84cSAndrew Jeffery
2330bcf84cSAndrew Jeffery mbox_vlog = mbox_log_console;
2430bcf84cSAndrew Jeffery verbosity = MBOX_LOG_DEBUG;
2530bcf84cSAndrew Jeffery
2630bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,ECC";
2730bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
2830bcf84cSAndrew Jeffery assert((part.data.user.data[0]) == PARTITION_ECC_PROTECTED);
2930bcf84cSAndrew Jeffery assert(!(part.data.user.data[1] & DATA_MASK));
3030bcf84cSAndrew Jeffery
3130bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,PRESERVED";
3230bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
3330bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
3430bcf84cSAndrew Jeffery assert((part.data.user.data[1] & DATA_MASK) == PARTITION_PRESERVED);
3530bcf84cSAndrew Jeffery
3630bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,READONLY";
3730bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
3830bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
3930bcf84cSAndrew Jeffery assert((part.data.user.data[1] & DATA_MASK) == PARTITION_READONLY);
4030bcf84cSAndrew Jeffery
4130bcf84cSAndrew Jeffery /* BACKUP is unimplemented */
4230bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,BACKUP";
4330bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
4430bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
4530bcf84cSAndrew Jeffery assert(!(part.data.user.data[1] & DATA_MASK));
4630bcf84cSAndrew Jeffery
4730bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,REPROVISION";
4830bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
4930bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
5030bcf84cSAndrew Jeffery assert((part.data.user.data[1] & DATA_MASK) == PARTITION_REPROVISION);
5130bcf84cSAndrew Jeffery
5230bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,VOLATILE";
5330bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
5430bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
5530bcf84cSAndrew Jeffery assert((part.data.user.data[1] & DATA_MASK) == PARTITION_VOLATILE);
5630bcf84cSAndrew Jeffery
5730bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,CLEARECC";
5830bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
5930bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
6030bcf84cSAndrew Jeffery assert((part.data.user.data[1] & DATA_MASK) == PARTITION_CLEARECC);
6130bcf84cSAndrew Jeffery
6230bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,READWRITE";
6330bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
6430bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
6530bcf84cSAndrew Jeffery assert(((part.data.user.data[1] & DATA_MASK) ^ PARTITION_READONLY) ==
6630bcf84cSAndrew Jeffery PARTITION_READONLY);
6730bcf84cSAndrew Jeffery
6830bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,";
6930bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
7030bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
7130bcf84cSAndrew Jeffery assert(!(part.data.user.data[1] & DATA_MASK));
7230bcf84cSAndrew Jeffery
7330bcf84cSAndrew Jeffery line = "partition01=FOO,00001000,00002000,80,junk";
7430bcf84cSAndrew Jeffery vpnor::parseTocLine(line, BLOCK_SIZE, part);
7530bcf84cSAndrew Jeffery assert(!(part.data.user.data[0]));
7630bcf84cSAndrew Jeffery assert(!(part.data.user.data[1] & DATA_MASK));
7730bcf84cSAndrew Jeffery
7830bcf84cSAndrew Jeffery return 0;
7930bcf84cSAndrew Jeffery }
80