X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=drivers%2Fedac%2Fedac_core.h;h=2d23e304f5ec1083b9850e46fe817c74b4e78d00;hb=2843483d2eb02ad104edbe8b2429fb6a39d25063;hp=fca1990945a917fbeb0564b58f9b8f09baaaae26;hpb=fd309a9d8e63e9176759d00630b65d772ae06e0c;p=linux-2.6 diff --git a/drivers/edac/edac_core.h b/drivers/edac/edac_core.h index fca1990945..2d23e304f5 100644 --- a/drivers/edac/edac_core.h +++ b/drivers/edac/edac_core.h @@ -75,7 +75,7 @@ extern int edac_debug_level; #define edac_debug_printk(level, fmt, arg...) \ do { \ if (level <= edac_debug_level) \ - edac_printk(KERN_EMERG, EDAC_DEBUG, fmt, ##arg); \ + edac_printk(KERN_DEBUG, EDAC_DEBUG, fmt, ##arg); \ } while(0) #define debugf0( ... ) edac_debug_printk(0, __VA_ARGS__ ) @@ -94,8 +94,6 @@ extern int edac_debug_level; #endif /* !CONFIG_EDAC_DEBUG */ -#define BIT(x) (1 << (x)) - #define PCI_VEND_DEV(vend, dev) PCI_VENDOR_ID_ ## vend, \ PCI_DEVICE_ID_ ## vend ## _ ## dev @@ -317,9 +315,8 @@ struct csrow_info { struct mem_ctl_info *mci; /* the parent */ struct kobject kobj; /* sysfs kobject for this csrow */ - struct completion kobj_complete; - /* FIXME the number of CHANNELs might need to become dynamic */ + /* channel information for this csrow */ u32 nr_channels; struct channel_info *channels; }; @@ -338,6 +335,9 @@ struct mcidev_sysfs_attribute { */ struct mem_ctl_info { struct list_head link; /* for global list of mem_ctl_info structs */ + + struct module *owner; /* Module owner of this control struct */ + unsigned long mtype_cap; /* memory types supported by mc */ unsigned long edac_ctl_cap; /* Mem controller EDAC capabilities */ unsigned long edac_cap; /* configuration capabilities - this is @@ -403,7 +403,6 @@ struct mem_ctl_info { /* edac sysfs device control */ struct kobject edac_mci_kobj; - struct completion kobj_complete; /* Additional top controller level attributes, but specified * by the low level driver. @@ -484,7 +483,16 @@ struct edac_dev_sysfs_attribute { }; /* edac_dev_sysfs_block_attribute structure + * * used in leaf 'block' nodes for adding controls/attributes + * + * each block in each instance of the containing control structure + * can have an array of the following. The show and store functions + * will be filled in with the show/store function in the + * low level driver. + * + * The 'value' field will be the actual value field used for + * counting */ struct edac_dev_sysfs_block_attribute { struct attribute attr; @@ -493,8 +501,6 @@ struct edac_dev_sysfs_block_attribute { const char *, size_t); struct edac_device_block *block; - /* low driver use */ - void *arg; unsigned int value; }; @@ -512,7 +518,6 @@ struct edac_device_block { /* edac sysfs device control */ struct kobject kobj; - struct completion kobj_complete; }; /* device instance control structure */ @@ -527,7 +532,6 @@ struct edac_device_instance { /* edac sysfs device control */ struct kobject kobj; - struct completion kobj_complete; }; @@ -539,6 +543,8 @@ struct edac_device_ctl_info { /* for global list of edac_device_ctl_info structs */ struct list_head link; + struct module *owner; /* Module owner of this control struct */ + int dev_idx; /* Per instance controls for this edac_device */ @@ -589,7 +595,7 @@ struct edac_device_ctl_info { * NMI handlers may be traversing list */ struct rcu_head rcu; - struct completion complete; + struct completion removal_complete; /* sysfs top name under 'edac' directory * and instance name: @@ -613,7 +619,6 @@ struct edac_device_ctl_info { * device this structure controls */ struct kobject kobj; - struct completion kobj_complete; }; /* To get from the instance's wq to the beginning of the ctl structure */ @@ -634,7 +639,8 @@ extern struct edac_device_ctl_info *edac_device_alloc_ctl_info( char *edac_block_name, unsigned nr_blocks, unsigned offset_value, struct edac_dev_sysfs_block_attribute *block_attributes, - unsigned nr_attribs); + unsigned nr_attribs, + int device_index); /* The offset value can be: * -1 indicating no offset value @@ -765,8 +771,11 @@ static inline void pci_write_bits32(struct pci_dev *pdev, int offset, #endif /* CONFIG_PCI */ +extern struct mem_ctl_info *edac_mc_alloc(unsigned sz_pvt, unsigned nr_csrows, + unsigned nr_chans, int edac_index); +extern int edac_mc_add_mc(struct mem_ctl_info *mci); +extern void edac_mc_free(struct mem_ctl_info *mci); extern struct mem_ctl_info *edac_mc_find(int idx); -extern int edac_mc_add_mc(struct mem_ctl_info *mci, int mc_idx); extern struct mem_ctl_info *edac_mc_del_mc(struct device *dev); extern int edac_mc_find_csrow_by_page(struct mem_ctl_info *mci, unsigned long page); @@ -803,33 +812,30 @@ extern void edac_mc_handle_fbd_ce(struct mem_ctl_info *mci, unsigned int csrow, /* * edac_device APIs */ -extern struct mem_ctl_info *edac_mc_alloc(unsigned sz_pvt, unsigned nr_csrows, - unsigned nr_chans); -extern void edac_mc_free(struct mem_ctl_info *mci); -extern int edac_device_add_device(struct edac_device_ctl_info *edac_dev, - int edac_idx); +extern int edac_device_add_device(struct edac_device_ctl_info *edac_dev); extern struct edac_device_ctl_info *edac_device_del_device(struct device *dev); extern void edac_device_handle_ue(struct edac_device_ctl_info *edac_dev, - int inst_nr, int block_nr, const char *msg); + int inst_nr, int block_nr, const char *msg); extern void edac_device_handle_ce(struct edac_device_ctl_info *edac_dev, - int inst_nr, int block_nr, const char *msg); + int inst_nr, int block_nr, const char *msg); /* * edac_pci APIs */ -extern struct edac_pci_ctl_info *edac_pci_alloc_ctl_info(unsigned int sz_pvt, const char - *edac_pci_name); +extern struct edac_pci_ctl_info *edac_pci_alloc_ctl_info(unsigned int sz_pvt, + const char *edac_pci_name); extern void edac_pci_free_ctl_info(struct edac_pci_ctl_info *pci); -extern void -edac_pci_reset_delay_period(struct edac_pci_ctl_info *pci, unsigned long value); +extern void edac_pci_reset_delay_period(struct edac_pci_ctl_info *pci, + unsigned long value); extern int edac_pci_add_device(struct edac_pci_ctl_info *pci, int edac_idx); extern struct edac_pci_ctl_info *edac_pci_del_device(struct device *dev); -extern struct edac_pci_ctl_info *edac_pci_create_generic_ctl(struct device *dev, const char - *mod_name); +extern struct edac_pci_ctl_info *edac_pci_create_generic_ctl( + struct device *dev, + const char *mod_name); extern void edac_pci_release_generic_ctl(struct edac_pci_ctl_info *pci); extern int edac_pci_create_sysfs(struct edac_pci_ctl_info *pci);