#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__ )
#endif /* !CONFIG_EDAC_DEBUG */
-#define BIT(x) (1 << (x))
-
#define PCI_VEND_DEV(vend, dev) PCI_VENDOR_ID_ ## vend, \
PCI_DEVICE_ID_ ## vend ## _ ## dev
MEM_DDR2, /* DDR2 RAM */
MEM_FB_DDR2, /* fully buffered DDR2 */
MEM_RDDR2, /* Registered DDR2 RAM */
+ MEM_XDR, /* Rambus XDR */
};
#define MEM_FLAG_EMPTY BIT(MEM_EMPTY)
#define MEM_FLAG_DDR2 BIT(MEM_DDR2)
#define MEM_FLAG_FB_DDR2 BIT(MEM_FB_DDR2)
#define MEM_FLAG_RDDR2 BIT(MEM_RDDR2)
+#define MEM_FLAG_XDR BIT(MEM_XDR)
/* chipset Error Detection and Correction capabilities and mode */
enum edac_type {
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;
};
*/
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
/* 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.
};
/* 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;
const char *, size_t);
struct edac_device_block *block;
- /* low driver use */
- void *arg;
unsigned int value;
};
/* edac sysfs device control */
struct kobject kobj;
- struct completion kobj_complete;
};
/* device instance control structure */
/* edac sysfs device control */
struct kobject kobj;
- struct completion kobj_complete;
};
/* 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 */
* 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:
* 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 */