xref: /openbmc/estoraged/include/zero.hpp (revision 0c2808f0)
1 #pragma once
2 
3 #include "erase.hpp"
4 
5 #include <stdplus/fd/create.hpp>
6 #include <stdplus/fd/managed.hpp>
7 
8 namespace estoraged
9 {
10 
11 using stdplus::fd::ManagedFd;
12 
13 class Zero : public Erase
14 {
15   public:
16     /** @brief Creates a zero erase object.
17      *
18      *  @param[in] inDevPath - the linux device path for the block device.
19      */
20     Zero(std::string_view inDevPath) : Erase(inDevPath)
21     {}
22 
23     /** @brief writes zero to the drive
24      * and throws errors accordingly.
25      *
26      *  @param[in] bytes - Size of the block device
27      */
28     void writeZero(uint64_t driveSize);
29 
30     /** @brief verifies the  uncompressible random pattern is on the drive
31      * and throws errors accordingly.
32      *
33      *  @param[in] bytes - Size of the block device
34      */
35     void verifyZero(uint64_t driveSize);
36 
37   private:
38     /* @brief the size of the blocks in bytes used for write and verify.
39      * 32768 was also tested. It had almost identical performance.
40      */
41     static constexpr size_t blockSize = 4096;
42 };
43 
44 } // namespace estoraged
45