blob: 2464e6c6efde7432379520a94d02fa57951391ec [file] [log] [blame]
Deepak Kodihallib6a446f2017-04-29 13:01:49 -05001#include "mboxd_pnor_partition_table.h"
2#include "mbox.h"
3#include "pnor_partition_table.hpp"
Ratan Gupta3214b512017-05-11 08:58:19 +05304#include <experimental/filesystem>
Deepak Kodihallib6a446f2017-04-29 13:01:49 -05005
6struct vpnor_partition_table
7{
8 openpower::virtual_pnor::partition::Table* table = nullptr;
9};
10
11void vpnor_create_partition_table(struct mbox_context *context)
12{
Ratan Gupta3214b512017-05-11 08:58:19 +053013 if (context && !context->vpnor)
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050014 {
Ratan Gupta3214b512017-05-11 08:58:19 +053015 context->vpnor = new vpnor_partition_table;
16 context->vpnor->table =
Deepak Kodihallid1d79302017-07-11 23:01:39 -050017 new openpower::virtual_pnor::partition::Table(
18 1 << context->erase_size_shift,
19 context->flash_size);
Ratan Gupta3214b512017-05-11 08:58:19 +053020 }
21}
22
23void vpnor_create_partition_table_from_path(struct mbox_context *context,
24 const char *path)
25{
26 std::experimental::filesystem::path dir(path);
27
28 if (context && !context->vpnor)
29 {
30 context->vpnor = new vpnor_partition_table;
31 context->vpnor->table =
Deepak Kodihallid1d79302017-07-11 23:01:39 -050032 new openpower::virtual_pnor::partition::Table(
33 std::move(dir),
34 1 << context->erase_size_shift,
35 context->flash_size);
Deepak Kodihallib6a446f2017-04-29 13:01:49 -050036 }
37}
38
39size_t vpnor_get_partition_table_size(const struct mbox_context *context)
40{
41 return context && context->vpnor ?
42 context->vpnor->table->size() : 0;
43}
44
45const struct pnor_partition_table* vpnor_get_partition_table(
46 const struct mbox_context *context)
47{
48 return context && context->vpnor ?
49 &(context->vpnor->table->getHostTable()) : nullptr;
50}
51
52const struct pnor_partition* vpnor_get_partition(
53 const struct mbox_context *context,
54 const size_t offset)
55{
56 return context && context->vpnor ?
57 &(context->vpnor->table->partition(offset)) : nullptr;
58}
59
60void vpnor_destroy_partition_table(struct mbox_context *context)
61{
62 if(context && context->vpnor)
63 {
64 delete context->vpnor->table;
65 delete context->vpnor;
66 context->vpnor = nullptr;
67 }
68}