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