2005-04-17 02:20:36 +04:00
/*
* Compaq Hot Plug Controller Driver
*
* Copyright ( c ) 1995 , 2001 Compaq Computer Corporation
* Copyright ( c ) 2001 , 2003 Greg Kroah - Hartman ( greg @ kroah . com )
* Copyright ( c ) 2001 IBM Corp .
*
* All rights reserved .
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or ( at
* your option ) any later version .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE , GOOD TITLE or
* NON INFRINGEMENT . See the GNU General Public License for more
* details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 675 Mass Ave , Cambridge , MA 0213 9 , USA .
*
* Send feedback to < greg @ kroah . com >
*
*/
# include <linux/module.h>
# include <linux/kernel.h>
# include <linux/types.h>
# include <linux/pci.h>
# include "shpchp.h"
/* A few routines that create sysfs entries for the hot plug controller */
2005-05-17 14:42:58 +04:00
static ssize_t show_ctrl ( struct device * dev , struct device_attribute * attr , char * buf )
2005-04-17 02:20:36 +04:00
{
2005-10-13 23:05:36 +04:00
struct pci_dev * pdev ;
2005-04-17 02:20:36 +04:00
char * out = buf ;
2005-10-13 23:05:36 +04:00
int index , busnr ;
struct resource * res ;
struct pci_bus * bus ;
2005-04-17 02:20:36 +04:00
2005-10-13 23:05:36 +04:00
pdev = container_of ( dev , struct pci_dev , dev ) ;
bus = pdev - > subordinate ;
2005-04-17 02:20:36 +04:00
out + = sprintf ( buf , " Free resources: memory \n " ) ;
2010-02-23 20:24:31 +03:00
pci_bus_for_each_resource ( bus , res , index ) {
2005-10-13 23:05:36 +04:00
if ( res & & ( res - > flags & IORESOURCE_MEM ) & &
! ( res - > flags & IORESOURCE_PREFETCH ) ) {
2011-06-09 20:13:32 +04:00
out + = sprintf ( out , " start = %8.8llx, length = %8.8llx \n " ,
( unsigned long long ) res - > start ,
( unsigned long long ) resource_size ( res ) ) ;
2005-10-13 23:05:36 +04:00
}
2005-04-17 02:20:36 +04:00
}
out + = sprintf ( out , " Free resources: prefetchable memory \n " ) ;
2010-02-23 20:24:31 +03:00
pci_bus_for_each_resource ( bus , res , index ) {
2005-10-13 23:05:36 +04:00
if ( res & & ( res - > flags & IORESOURCE_MEM ) & &
( res - > flags & IORESOURCE_PREFETCH ) ) {
2011-06-09 20:13:32 +04:00
out + = sprintf ( out , " start = %8.8llx, length = %8.8llx \n " ,
( unsigned long long ) res - > start ,
( unsigned long long ) resource_size ( res ) ) ;
2005-10-13 23:05:36 +04:00
}
2005-04-17 02:20:36 +04:00
}
out + = sprintf ( out , " Free resources: IO \n " ) ;
2010-02-23 20:24:31 +03:00
pci_bus_for_each_resource ( bus , res , index ) {
2005-10-13 23:05:36 +04:00
if ( res & & ( res - > flags & IORESOURCE_IO ) ) {
2011-06-09 20:13:32 +04:00
out + = sprintf ( out , " start = %8.8llx, length = %8.8llx \n " ,
( unsigned long long ) res - > start ,
( unsigned long long ) resource_size ( res ) ) ;
2005-10-13 23:05:36 +04:00
}
2005-04-17 02:20:36 +04:00
}
out + = sprintf ( out , " Free resources: bus numbers \n " ) ;
2012-05-18 05:51:11 +04:00
for ( busnr = bus - > busn_res . start ; busnr < = bus - > busn_res . end ; busnr + + ) {
2005-10-13 23:05:36 +04:00
if ( ! pci_find_bus ( pci_domain_nr ( bus ) , busnr ) )
break ;
2005-04-17 02:20:36 +04:00
}
2012-05-18 05:51:11 +04:00
if ( busnr < bus - > busn_res . end )
2005-10-13 23:05:36 +04:00
out + = sprintf ( out , " start = %8.8x, length = %8.8x \n " ,
2012-05-18 05:51:11 +04:00
busnr , ( int ) ( bus - > busn_res . end - busnr ) ) ;
2005-04-17 02:20:36 +04:00
return out - buf ;
}
static DEVICE_ATTR ( ctrl , S_IRUGO , show_ctrl , NULL ) ;
2006-08-28 22:43:25 +04:00
int __must_check shpchp_create_ctrl_files ( struct controller * ctrl )
2005-04-17 02:20:36 +04:00
{
2006-08-28 22:43:25 +04:00
return device_create_file ( & ctrl - > pci_dev - > dev , & dev_attr_ctrl ) ;
2005-04-17 02:20:36 +04:00
}
2005-10-13 23:05:44 +04:00
void shpchp_remove_ctrl_files ( struct controller * ctrl )
{
device_remove_file ( & ctrl - > pci_dev - > dev , & dev_attr_ctrl ) ;
}