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