@@ -29,6 +29,8 @@ void print_usage(const char * progname)
29
29
std::cout << " -b low:high : read or write only low..high bits of the register\n " ;
30
30
std::cout << " -e entries : perform read/write on specified entries (default is all entries)\n " ;
31
31
std::cout << " (examples: -e 10 -e 10-11 -e 4,6,12-20,6)\n " ;
32
+ std::cout << " -i instances: perform read/write on specified instances (default is all instances)\n " ;
33
+ std::cout << " (examples: -i 1 -i 0,1 -i 0,2-3)\n " ;
32
34
std::cout << " -d : output all numbers in dec (default is hex)\n " ;
33
35
std::cout << " -v : verbose ouput\n " ;
34
36
std::cout << " --version : print application version\n " ;
@@ -51,10 +53,10 @@ int mainThrows(int argc, char * argv[])
51
53
bool write = false ;
52
54
bool dec = false ;
53
55
std::pair<int64,int64> bits{-1 , -1 };
54
- std::list<int > entries;
56
+ std::list<int > entries, instances ;
55
57
56
58
int my_opt = -1 ;
57
- while ((my_opt = getopt (argc, argv, " w:dvb:e:" )) != -1 )
59
+ while ((my_opt = getopt (argc, argv, " w:dvb:e:i: " )) != -1 )
58
60
{
59
61
switch (my_opt)
60
62
{
@@ -74,6 +76,9 @@ int mainThrows(int argc, char * argv[])
74
76
case ' e' :
75
77
entries = extract_integer_list (optarg);
76
78
break ;
79
+ case ' i' :
80
+ instances = extract_integer_list (optarg);
81
+ break ;
77
82
default :
78
83
print_usage (argv[0 ]);
79
84
return -1 ;
@@ -106,8 +111,20 @@ int mainThrows(int argc, char * argv[])
106
111
107
112
try
108
113
{
109
- for ( size_t i = 0 ; i < TPMIHandle::getNumInstances (); ++i )
114
+ if (instances. empty () )
110
115
{
116
+ for (size_t i = 0 ; i < TPMIHandle::getNumInstances (); ++i)
117
+ {
118
+ instances.push_back (i);
119
+ }
120
+ }
121
+ for (const size_t i : instances)
122
+ {
123
+ if (i >= TPMIHandle::getNumInstances ())
124
+ {
125
+ std::cerr << " Instance " << i << " does not exist\n " ;
126
+ continue ;
127
+ }
111
128
TPMIHandle h (i, requestedID, requestedRelativeOffset, !write);
112
129
auto one = [&](const size_t p)
113
130
{
0 commit comments