14fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian/*
24fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * Copyright (C) 2017 The Android Open Source Project
34fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian *
44fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * Licensed under the Apache License, Version 2.0 (the "License");
54fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * you may not use this file except in compliance with the License.
64fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * You may obtain a copy of the License at
74fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian *
84fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian *      http://www.apache.org/licenses/LICENSE-2.0
94fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian *
104fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * Unless required by applicable law or agreed to in writing, software
114fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * distributed under the License is distributed on an "AS IS" BASIS,
124fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
134fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * See the License for the specific language governing permissions and
144fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian * limitations under the License.
154fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian */
164fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
174fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian#ifndef _STORAGED_INFO_H_
184fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian#define _STORAGED_INFO_H_
194fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
204fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian#include <string.h>
214fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
224fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian#define FRIEND_TEST(test_case_name, test_name) \
234fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianfriend class test_case_name##_##test_name##_Test
244fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
254fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianusing namespace std;
264fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
274fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianclass storage_info_t {
284fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianprotected:
294fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian    FRIEND_TEST(storaged_test, storage_info_t);
308197093497a65829f4da90b3fda0e281da7b27ebJin Qian    uint16_t eol;                   // pre-eol (end of life) information
318197093497a65829f4da90b3fda0e281da7b27ebJin Qian    uint16_t lifetime_a;            // device life time estimation (type A)
328197093497a65829f4da90b3fda0e281da7b27ebJin Qian    uint16_t lifetime_b;            // device life time estimation (type B)
334fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian    string version;                 // version string
344fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian    void publish();
358197093497a65829f4da90b3fda0e281da7b27ebJin Qianpublic:
368197093497a65829f4da90b3fda0e281da7b27ebJin Qian    storage_info_t() : eol(0), lifetime_a(0), lifetime_b(0) {}
374fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian    virtual ~storage_info_t() {}
388197093497a65829f4da90b3fda0e281da7b27ebJin Qian    virtual bool report() = 0;
394fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian};
404fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
414fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianclass emmc_info_t : public storage_info_t {
424fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianprivate:
438197093497a65829f4da90b3fda0e281da7b27ebJin Qian    const string emmc_sysfs = "/sys/bus/mmc/devices/mmc0:0001/";
448197093497a65829f4da90b3fda0e281da7b27ebJin Qian    const string emmc_debugfs = "/d/mmc0/mmc0:0001/ext_csd";
458197093497a65829f4da90b3fda0e281da7b27ebJin Qian    const char* emmc_ver_str[9] = {
468197093497a65829f4da90b3fda0e281da7b27ebJin Qian        "4.0", "4.1", "4.2", "4.3", "Obsolete", "4.41", "4.5", "5.0", "5.1"
474fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian    };
484fc338e60bf1d85212f1540d109beb1b248c4830Jin Qianpublic:
494fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian    virtual ~emmc_info_t() {}
508197093497a65829f4da90b3fda0e281da7b27ebJin Qian    bool report();
518197093497a65829f4da90b3fda0e281da7b27ebJin Qian    bool report_sysfs();
528197093497a65829f4da90b3fda0e281da7b27ebJin Qian    bool report_debugfs();
534fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian};
544fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian
55808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qianclass ufs_info_t : public storage_info_t {
56808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qianprivate:
57808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qian    const string health_file = "/sys/devices/soc/624000.ufshc/health";
58808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qianpublic:
59808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qian    virtual ~ufs_info_t() {}
60808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qian    bool report();
61808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qian};
62808f7036096e1f7b4889fe8689702685caa6ccb7Jin Qian
638197093497a65829f4da90b3fda0e281da7b27ebJin Qianvoid report_storage_health();
648197093497a65829f4da90b3fda0e281da7b27ebJin Qian
654fc338e60bf1d85212f1540d109beb1b248c4830Jin Qian#endif /* _STORAGED_INFO_H_ */
66