@@ -990,6 +990,7 @@ static int get_telemetry_data(struct nvme_dev *dev, __u32 ns, __u8 tele_type,
990990 cmd .cdw14 = 0 ;
991991 return nvme_submit_admin_passthru (dev_fd (dev ), & cmd , NULL );
992992}
993+
993994static void print_telemetry_data_area_1 (struct telemetry_data_area_1 * da1 ,
994995 int tele_type )
995996{
@@ -1075,13 +1076,13 @@ static void print_telemetry_da_stat(struct telemetry_stats_desc *da_stat,
10751076 }
10761077}
10771078static void print_telemetry_da_fifo (struct telemetry_event_desc * da_fifo ,
1078- __le64 buf_size ,
1079+ __u64 buf_size ,
10791080 int tele_type ,
10801081 int da ,
10811082 int index )
10821083{
10831084 if (da_fifo ) {
1084- unsigned int i = 0 ;
1085+ __u64 i = 0 ;
10851086 struct telemetry_event_desc * next_da_fifo = da_fifo ;
10861087
10871088 if (tele_type == TELEMETRY_TYPE_HOST )
@@ -1091,8 +1092,11 @@ static void print_telemetry_da_fifo(struct telemetry_event_desc *da_fifo,
10911092 printf ("====== Telemetry Controller Data area %d Event FIFO %d ======\n" ,
10921093 da , index );
10931094
1094-
10951095 while ((i + 4 ) < buf_size ) {
1096+ /* break if last entry */
1097+ if (next_da_fifo -> class == 0 )
1098+ break ;
1099+
10961100 /* Print Event Data */
10971101 print_telemetry_fifo_event (next_da_fifo -> class , /* Event class type */
10981102 next_da_fifo -> id , /* Event ID */
@@ -1190,7 +1194,7 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
11901194 enum TELEMETRY_TYPE tele_type , int data_area , bool header_print )
11911195{
11921196 __u32 err = 0 , nsid = 0 ;
1193- __le64 da1_sz = 512 , m_512_sz = 0 , da1_off = 0 , m_512_off = 0 , diff = 0 ,
1197+ __u64 da1_sz = 512 , m_512_sz = 0 , da1_off = 0 , m_512_off = 0 , diff = 0 ,
11941198 temp_sz = 0 , temp_ofst = 0 ;
11951199 __u8 lsp = 0 , rae = 0 , flag = 0 ;
11961200 __u8 data [TELEMETRY_HEADER_SIZE ] = { 0 };
@@ -1242,16 +1246,16 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
12421246 /* Print the Data Area 1 Stats */
12431247 if (da1 -> da1_stat_size != 0 ) {
12441248 diff = 0 ;
1245- da1_sz = (da1 -> da1_stat_size ) * 4 ;
1246- m_512_sz = (da1 -> da1_stat_size ) * 4 ;
1247- da1_off = (da1 -> da1_stat_start ) * 4 ;
1248- m_512_off = (da1 -> da1_stat_start ) * 4 ;
1249- temp_sz = (da1 -> da1_stat_size ) * 4 ;
1250- temp_ofst = (da1 -> da1_stat_start ) * 4 ;
1249+ da1_sz = le64_to_cpu (da1 -> da1_stat_size ) * 4 ;
1250+ m_512_sz = le64_to_cpu (da1 -> da1_stat_size ) * 4 ;
1251+ da1_off = le64_to_cpu (da1 -> da1_stat_start ) * 4 ;
1252+ m_512_off = le64_to_cpu (da1 -> da1_stat_start ) * 4 ;
1253+ temp_sz = le64_to_cpu (da1 -> da1_stat_size ) * 4 ;
1254+ temp_ofst = le64_to_cpu (da1 -> da1_stat_start ) * 4 ;
12511255 flag = 0 ;
12521256
12531257 if ((da1_off % 512 ) > 0 ) {
1254- m_512_off = (__le64 ) (( da1_off / 512 ) );
1258+ m_512_off = (da1_off / 512 );
12551259 da1_off = m_512_off * 512 ;
12561260 diff = temp_ofst - da1_off ;
12571261 flag = 1 ;
@@ -1261,15 +1265,15 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
12611265 da1_sz = 512 ;
12621266 else if ((da1_sz % 512 ) > 0 ) {
12631267 if (flag == 0 ) {
1264- m_512_sz = (__le64 ) (( da1_sz / 512 ) + 1 ) ;
1268+ m_512_sz = (da1_sz / 512 ) + 1 ;
12651269 da1_sz = m_512_sz * 512 ;
12661270 } else {
12671271 if (diff < 512 )
12681272 diff = 1 ;
12691273 else
12701274 diff = (diff / 512 ) * 512 ;
12711275
1272- m_512_sz = (__le64 ) (( da1_sz / 512 ) + 1 + diff + 1 ) ;
1276+ m_512_sz = (da1_sz / 512 ) + 1 + diff + 1 ;
12731277 da1_sz = m_512_sz * 512 ;
12741278 }
12751279 }
@@ -1284,23 +1288,23 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
12841288 }
12851289
12861290 print_telemetry_da_stat ((void * )(da1_stat + (temp_ofst - da1_off )),
1287- tele_type , (da1 -> da1_stat_size ) * 4 , 1 );
1291+ tele_type , le64_to_cpu (da1 -> da1_stat_size ) * 4 , 1 );
12881292 }
12891293
12901294 /* Print the Data Area 1 Event FIFO's */
12911295 for (i = 0 ; i < 16 ; i ++ ) {
12921296 if ((da1 -> event_fifo_da [i ] == 1 ) && (da1 -> event_fifos [i ].size != 0 )) {
12931297 diff = 0 ;
1294- da1_sz = da1 -> event_fifos [i ].size * 4 ;
1295- m_512_sz = da1 -> event_fifos [i ].size * 4 ;
1296- da1_off = da1 -> event_fifos [i ].start * 4 ;
1297- m_512_off = da1 -> event_fifos [i ].start * 4 ;
1298- temp_sz = da1 -> event_fifos [i ].size * 4 ;
1299- temp_ofst = da1 -> event_fifos [i ].start * 4 ;
1298+ da1_sz = le64_to_cpu ( da1 -> event_fifos [i ].size ) * 4 ;
1299+ m_512_sz = le64_to_cpu ( da1 -> event_fifos [i ].size ) * 4 ;
1300+ da1_off = le64_to_cpu ( da1 -> event_fifos [i ].start ) * 4 ;
1301+ m_512_off = le64_to_cpu ( da1 -> event_fifos [i ].start ) * 4 ;
1302+ temp_sz = le64_to_cpu ( da1 -> event_fifos [i ].size ) * 4 ;
1303+ temp_ofst = le64_to_cpu ( da1 -> event_fifos [i ].start ) * 4 ;
13001304 flag = 0 ;
13011305
13021306 if ((da1_off % 512 ) > 0 ) {
1303- m_512_off = (__le64 ) ( (da1_off / 512 ));
1307+ m_512_off = ((da1_off / 512 ));
13041308 da1_off = m_512_off * 512 ;
13051309 diff = temp_ofst - da1_off ;
13061310 flag = 1 ;
@@ -1310,23 +1314,25 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
13101314 da1_sz = 512 ;
13111315 else if ((da1_sz % 512 ) > 0 ) {
13121316 if (flag == 0 ) {
1313- m_512_sz = (__le64 ) (( da1_sz / 512 ) + 1 ) ;
1317+ m_512_sz = (da1_sz / 512 ) + 1 ;
13141318 da1_sz = m_512_sz * 512 ;
13151319 } else {
13161320 if (diff < 512 )
13171321 diff = 1 ;
13181322 else
13191323 diff = (diff / 512 ) * 512 ;
13201324
1321- m_512_sz = (__le64 ) (( da1_sz / 512 ) + 1 + diff + 1 ) ;
1325+ m_512_sz = (da1_sz / 512 ) + 1 + diff + 1 ;
13221326 da1_sz = m_512_sz * 512 ;
13231327 }
13241328 }
13251329
13261330 char * da1_fifo = calloc (da1_sz , sizeof (char ));
13271331
1332+ printf ("Get DA 1 FIFO addr: %p, offset 0x%llx\n" ,
1333+ da1_fifo , da1_off );
13281334 err = get_telemetry_data (dev , nsid , tele_type ,
1329- (da1 -> event_fifos [i ].size ) * 4 ,
1335+ le64_to_cpu (da1 -> event_fifos [i ].size ) * 4 ,
13301336 (void * )da1_fifo , lsp , rae , da1_off );
13311337 if (err ) {
13321338 printf ("get_telemetry_data da1 event fifos failed, err: %d.\n" ,
@@ -1336,34 +1342,34 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
13361342 print_telemetry_da_fifo ((void * )(da1_fifo + (temp_ofst - da1_off )),
13371343 temp_sz ,
13381344 tele_type ,
1339- da1 -> event_fifo_da [i ],
1345+ le64_to_cpu ( da1 -> event_fifo_da [i ]) ,
13401346 i );
13411347 }
13421348 }
13431349
13441350 /* Print the Data Area 2 Stats */
13451351 if (da1 -> da2_stat_size != 0 ) {
1346- da1_off = (da1 -> da2_stat_start ) * 4 ;
1347- temp_ofst = (da1 -> da2_stat_start ) * 4 ;
1348- da1_sz = (da1 -> da2_stat_size ) * 4 ;
1352+ da1_off = le64_to_cpu (da1 -> da2_stat_start ) * 4 ;
1353+ temp_ofst = le64_to_cpu (da1 -> da2_stat_start ) * 4 ;
1354+ da1_sz = le64_to_cpu (da1 -> da2_stat_size ) * 4 ;
13491355 diff = 0 ;
13501356 flag = 0 ;
13511357
13521358 if (da1 -> da2_stat_start == 0 ) {
1353- da1_off = 512 + (logheader -> DataArea1LastBlock * 512 );
1359+ da1_off = 512 + (le16_to_cpu ( logheader -> DataArea1LastBlock ) * 512 );
13541360 temp_ofst = 512 + (le16_to_cpu (logheader -> DataArea1LastBlock ) * 512 );
13551361 if ((da1_off % 512 ) == 0 ) {
1356- m_512_off = (__le64 ) ((( da1_off ) / 512 ) );
1362+ m_512_off = (( da1_off ) / 512 );
13571363 da1_off = m_512_off * 512 ;
13581364 diff = temp_ofst - da1_off ;
13591365 flag = 1 ;
13601366 }
13611367 } else {
13621368
13631369 if (((da1_off * 4 ) % 512 ) > 0 ) {
1364- m_512_off = ( __le64 ) (((( da1 -> da2_stat_start ) * 4 ) / 512 ) );
1370+ m_512_off = ((le64_to_cpu ( da1 -> da2_stat_start ) * 4 ) / 512 );
13651371 da1_off = m_512_off * 512 ;
1366- diff = ((da1 -> da2_stat_start ) * 4 ) - da1_off ;
1372+ diff = (le64_to_cpu (da1 -> da2_stat_start ) * 4 ) - da1_off ;
13671373 flag = 1 ;
13681374 }
13691375 }
@@ -1372,14 +1378,14 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
13721378 da1_sz = 512 ;
13731379 else if ((da1_sz % 512 ) > 0 ) {
13741380 if (flag == 0 ) {
1375- m_512_sz = (__le64 ) (( da1 -> da2_stat_size / 512 ) + 1 ) ;
1381+ m_512_sz = (le64_to_cpu ( da1 -> da2_stat_size ) / 512 ) + 1 ;
13761382 da1_sz = m_512_sz * 512 ;
13771383 } else {
13781384 if (diff < 512 )
13791385 diff = 1 ;
13801386 else
13811387 diff = (diff / 512 ) * 512 ;
1382- m_512_sz = ( __le64 ) ( (da1 -> da2_stat_size / 512 ) + 1 + diff + 1 ) ;
1388+ m_512_sz = ( le64_to_cpu (da1 -> da2_stat_size ) / 512 ) + 1 + diff + 1 ;
13831389 da1_sz = m_512_sz * 512 ;
13841390 }
13851391 }
@@ -1395,24 +1401,24 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
13951401
13961402 print_telemetry_da_stat ((void * )(da2_stat + (temp_ofst - da1_off )),
13971403 tele_type ,
1398- (da1 -> da2_stat_size ) * 4 ,
1404+ le64_to_cpu (da1 -> da2_stat_size ) * 4 ,
13991405 2 );
14001406 }
14011407
14021408 /* Print the Data Area 2 Event FIFO's */
14031409 for (i = 0 ; i < 16 ; i ++ ) {
14041410 if ((da1 -> event_fifo_da [i ] == 2 ) && (da1 -> event_fifos [i ].size != 0 )) {
14051411 diff = 0 ;
1406- da1_sz = da1 -> event_fifos [i ].size * 4 ;
1407- m_512_sz = da1 -> event_fifos [i ].size * 4 ;
1408- da1_off = da1 -> event_fifos [i ].start * 4 ;
1409- m_512_off = da1 -> event_fifos [i ].start * 4 ;
1410- temp_sz = da1 -> event_fifos [i ].size * 4 ;
1411- temp_ofst = da1 -> event_fifos [i ].start * 4 ;
1412+ da1_sz = le64_to_cpu ( da1 -> event_fifos [i ].size ) * 4 ;
1413+ m_512_sz = le64_to_cpu ( da1 -> event_fifos [i ].size ) * 4 ;
1414+ da1_off = le64_to_cpu ( da1 -> event_fifos [i ].start ) * 4 ;
1415+ m_512_off = le64_to_cpu ( da1 -> event_fifos [i ].start ) * 4 ;
1416+ temp_sz = le64_to_cpu ( da1 -> event_fifos [i ].size ) * 4 ;
1417+ temp_ofst = le64_to_cpu ( da1 -> event_fifos [i ].start ) * 4 ;
14121418 flag = 0 ;
14131419
14141420 if ((da1_off % 512 ) > 0 ) {
1415- m_512_off = (__le64 ) ( (da1_off / 512 ));
1421+ m_512_off = ((da1_off / 512 ));
14161422 da1_off = m_512_off * 512 ;
14171423 diff = temp_ofst - da1_off ;
14181424 flag = 1 ;
@@ -1422,7 +1428,7 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
14221428 da1_sz = 512 ;
14231429 else if ((da1_sz % 512 ) > 0 ) {
14241430 if (flag == 0 ) {
1425- m_512_sz = (__le64 ) (( da1_sz / 512 ) + 1 ) ;
1431+ m_512_sz = (da1_sz / 512 ) + 1 ;
14261432 da1_sz = m_512_sz * 512 ;
14271433 }
14281434
@@ -1432,15 +1438,15 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
14321438 else
14331439 diff = (diff / 512 ) * 512 ;
14341440
1435- m_512_sz = (__le64 ) (( da1_sz / 512 ) + 1 + diff + 1 ) ;
1441+ m_512_sz = (da1_sz / 512 ) + 1 + diff + 1 ;
14361442 da1_sz = m_512_sz * 512 ;
14371443 }
14381444 }
14391445
14401446 char * da1_fifo = calloc (da1_sz , sizeof (char ));
14411447
14421448 err = get_telemetry_data (dev , nsid , tele_type ,
1443- (da1 -> event_fifos [i ].size ) * 4 ,
1449+ le64_to_cpu (da1 -> event_fifos [i ].size ) * 4 ,
14441450 (void * )da1_fifo , lsp , rae , da1_off );
14451451 if (err ) {
14461452 printf ("get_telemetry_data da2 event fifos failed, err: %d.\n" ,
@@ -1450,7 +1456,7 @@ static int get_telemetry_dump(struct nvme_dev *dev, char *filename, char *sn,
14501456 print_telemetry_da_fifo ((void * )(da1_fifo + (temp_ofst - da1_off )),
14511457 temp_sz ,
14521458 tele_type ,
1453- da1 -> event_fifo_da [i ],
1459+ le64_to_cpu ( da1 -> event_fifo_da [i ]) ,
14541460 i );
14551461 }
14561462 }
@@ -1818,6 +1824,7 @@ static int ocp_telemetry_log(int argc, char **argv, struct command *cmd,
18181824 }
18191825 } else {
18201826 tele_type = TELEMETRY_TYPE_HOST ; //Default Type - Host
1827+ opt .telemetry_type = "host" ;
18211828 nvme_show_result ("Missing telemetry-type. Using default - host.\n" );
18221829 }
18231830
0 commit comments