2005-04-17 02:20:36 +04:00
/*
* File Attributes for Zorro Devices
*
* Copyright ( C ) 2003 Geert Uytterhoeven
*
* Loosely based on drivers / pci / pci - sysfs . c
*
* This file is subject to the terms and conditions of the GNU General Public
* License . See the file COPYING in the main directory of this archive
* for more details .
*/
# include <linux/kernel.h>
# include <linux/zorro.h>
# include <linux/stat.h>
2005-10-31 02:03:48 +03:00
# include <linux/string.h>
2005-04-17 02:20:36 +04:00
# include "zorro.h"
/* show configuration fields */
# define zorro_config_attr(name, field, format_string) \
static ssize_t \
2005-05-17 14:44:04 +04:00
show_ # # name ( struct device * dev , struct device_attribute * attr , char * buf ) \
2005-04-17 02:20:36 +04:00
{ \
struct zorro_dev * z ; \
\
z = to_zorro_dev ( dev ) ; \
return sprintf ( buf , format_string , z - > field ) ; \
} \
static DEVICE_ATTR ( name , S_IRUGO , show_ # # name , NULL ) ;
zorro_config_attr ( id , id , " 0x%08x \n " ) ;
zorro_config_attr ( type , rom . er_Type , " 0x%02x \n " ) ;
zorro_config_attr ( serial , rom . er_SerialNumber , " 0x%08x \n " ) ;
zorro_config_attr ( slotaddr , slotaddr , " 0x%04x \n " ) ;
zorro_config_attr ( slotsize , slotsize , " 0x%04x \n " ) ;
2005-05-17 14:44:04 +04:00
static ssize_t zorro_show_resource ( struct device * dev , struct device_attribute * attr , char * buf )
2005-04-17 02:20:36 +04:00
{
struct zorro_dev * z = to_zorro_dev ( dev ) ;
return sprintf ( buf , " 0x%08lx 0x%08lx 0x%08lx \n " ,
2007-05-02 00:33:04 +04:00
( unsigned long ) zorro_resource_start ( z ) ,
( unsigned long ) zorro_resource_end ( z ) ,
2005-04-17 02:20:36 +04:00
zorro_resource_flags ( z ) ) ;
}
static DEVICE_ATTR ( resource , S_IRUGO , zorro_show_resource , NULL ) ;
2007-06-09 09:57:22 +04:00
static ssize_t zorro_read_config ( struct kobject * kobj ,
struct bin_attribute * bin_attr ,
char * buf , loff_t off , size_t count )
2005-04-17 02:20:36 +04:00
{
struct zorro_dev * z = to_zorro_dev ( container_of ( kobj , struct device ,
kobj ) ) ;
struct ConfigDev cd ;
/* Construct a ConfigDev */
memset ( & cd , 0 , sizeof ( cd ) ) ;
cd . cd_Rom = z - > rom ;
cd . cd_SlotAddr = z - > slotaddr ;
cd . cd_SlotSize = z - > slotsize ;
cd . cd_BoardAddr = ( void * ) zorro_resource_start ( z ) ;
cd . cd_BoardSize = zorro_resource_len ( z ) ;
2008-07-17 23:16:17 +04:00
return memory_read_from_buffer ( buf , count , & off , & cd , sizeof ( cd ) ) ;
2005-04-17 02:20:36 +04:00
}
static struct bin_attribute zorro_config_attr = {
. attr = {
. name = " config " ,
2007-08-23 01:01:34 +04:00
. mode = S_IRUGO ,
2005-04-17 02:20:36 +04:00
} ,
. size = sizeof ( struct ConfigDev ) ,
. read = zorro_read_config ,
} ;
2008-12-30 16:21:19 +03:00
int zorro_create_sysfs_dev_files ( struct zorro_dev * z )
2005-04-17 02:20:36 +04:00
{
struct device * dev = & z - > dev ;
2008-12-30 16:21:19 +03:00
int error ;
2005-04-17 02:20:36 +04:00
/* current configuration's attributes */
2008-12-30 16:21:19 +03:00
if ( ( error = device_create_file ( dev , & dev_attr_id ) ) | |
( error = device_create_file ( dev , & dev_attr_type ) ) | |
( error = device_create_file ( dev , & dev_attr_serial ) ) | |
( error = device_create_file ( dev , & dev_attr_slotaddr ) ) | |
( error = device_create_file ( dev , & dev_attr_slotsize ) ) | |
( error = device_create_file ( dev , & dev_attr_resource ) ) | |
( error = sysfs_create_bin_file ( & dev - > kobj , & zorro_config_attr ) ) )
return error ;
return 0 ;
2005-04-17 02:20:36 +04:00
}