@ -1,5 +1,5 @@
/*
* Copyright IBM Corp . 2012
* Copyright IBM Corp . 2012 , 2015
*
* Author ( s ) :
* Jan Glauber < jang @ linux . vnet . ibm . com >
@ -23,22 +23,45 @@ EXPORT_SYMBOL_GPL(pci_debug_msg_id);
debug_info_t * pci_debug_err_id ;
EXPORT_SYMBOL_GPL ( pci_debug_err_id ) ;
static char * pci_perf_names [ ] = {
/* hardware counters */
static char * pci_common_names [ ] = {
" Load operations " ,
" Store operations " ,
" Store block operations " ,
" Refresh operations " ,
} ;
static char * pci_fmt0_names [ ] = {
" DMA read bytes " ,
" DMA write bytes " ,
} ;
static char * pci_fmt1_names [ ] = {
" Received bytes " ,
" Received packets " ,
" Transmitted bytes " ,
" Transmitted packets " ,
} ;
static char * pci_fmt2_names [ ] = {
" Consumed work units " ,
" Maximum work units " ,
} ;
static char * pci_sw_names [ ] = {
" Allocated pages " ,
" Mapped pages " ,
" Unmapped pages " ,
} ;
static void pci_fmb_show ( struct seq_file * m , char * name [ ] , int length ,
u64 * data )
{
int i ;
for ( i = 0 ; i < length ; i + + , data + + )
seq_printf ( m , " %26s: \t %llu \n " , name [ i ] , * data ) ;
}
static void pci_sw_counter_show ( struct seq_file * m )
{
struct zpci_dev * zdev = m - > private ;
@ -53,8 +76,6 @@ static void pci_sw_counter_show(struct seq_file *m)
static int pci_perf_show ( struct seq_file * m , void * v )
{
struct zpci_dev * zdev = m - > private ;
u64 * stat ;
int i ;
if ( ! zdev )
return 0 ;
@ -72,15 +93,27 @@ static int pci_perf_show(struct seq_file *m, void *v)
seq_printf ( m , " Samples: %u \n " , zdev - > fmb - > samples ) ;
seq_printf ( m , " Last update TOD: %Lx \n " , zdev - > fmb - > last_update ) ;
/* hardware counters */
stat = ( u64 * ) & zdev - > fmb - > ld_ops ;
for ( i = 0 ; i < 4 ; i + + )
seq_printf ( m , " %26s: \t %llu \n " ,
pci_perf_names [ i ] , * ( stat + i ) ) ;
if ( zdev - > fmb - > dma_valid )
for ( i = 4 ; i < 6 ; i + + )
seq_printf ( m , " %26s: \t %llu \n " ,
pci_perf_names [ i ] , * ( stat + i ) ) ;
pci_fmb_show ( m , pci_common_names , ARRAY_SIZE ( pci_common_names ) ,
& zdev - > fmb - > ld_ops ) ;
switch ( zdev - > fmb - > format ) {
case 0 :
if ( ! ( zdev - > fmb - > fmt_ind & ZPCI_FMB_DMA_COUNTER_VALID ) )
break ;
pci_fmb_show ( m , pci_fmt0_names , ARRAY_SIZE ( pci_fmt0_names ) ,
& zdev - > fmb - > fmt0 . dma_rbytes ) ;
break ;
case 1 :
pci_fmb_show ( m , pci_fmt1_names , ARRAY_SIZE ( pci_fmt1_names ) ,
& zdev - > fmb - > fmt1 . rx_bytes ) ;
break ;
case 2 :
pci_fmb_show ( m , pci_fmt2_names , ARRAY_SIZE ( pci_fmt2_names ) ,
& zdev - > fmb - > fmt2 . consumed_work_units ) ;
break ;
default :
seq_puts ( m , " Unknown format \n " ) ;
}
pci_sw_counter_show ( m ) ;
mutex_unlock ( & zdev - > lock ) ;