#include <linux/module.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/pci_ids.h>
#include <linux/edac.h>
#include "edac_module.h"
#define EDAC_MOD_STR …
#define I3000_RANKS …
#define I3000_RANKS_PER_CHANNEL …
#define I3000_CHANNELS …
#define I3000_MCHBAR …
#define I3000_MCHBAR_MASK …
#define I3000_MMR_WINDOW_SIZE …
#define I3000_EDEAP …
#define I3000_DEAP …
#define I3000_DEAP_GRAIN …
static inline unsigned long deap_pfn(u8 edeap, u32 deap)
{ … }
static inline unsigned long deap_offset(u32 deap)
{ … }
static inline int deap_channel(u32 deap)
{ … }
#define I3000_DERRSYN …
#define I3000_ERRSTS …
#define I3000_ERRSTS_BITS …
#define I3000_ERRSTS_UE …
#define I3000_ERRSTS_CE …
#define I3000_ERRCMD …
#define I3000_DRB_SHIFT …
#define I3000_C0DRB …
#define I3000_C1DRB …
#define I3000_C0DRA …
#define I3000_C1DRA …
static inline unsigned char odd_rank_attrib(unsigned char dra)
{ … }
static inline unsigned char even_rank_attrib(unsigned char dra)
{ … }
#define I3000_C0DRC0 …
#define I3000_C0DRC1 …
enum i3000p_chips { … };
struct i3000_dev_info { … };
struct i3000_error_info { … };
static const struct i3000_dev_info i3000_devs[] = …;
static struct pci_dev *mci_pdev;
static int i3000_registered = …;
static struct edac_pci_ctl_info *i3000_pci;
static void i3000_get_error_info(struct mem_ctl_info *mci,
struct i3000_error_info *info)
{ … }
static int i3000_process_error_info(struct mem_ctl_info *mci,
struct i3000_error_info *info,
int handle_errors)
{ … }
static void i3000_check(struct mem_ctl_info *mci)
{ … }
static int i3000_is_interleaved(const unsigned char *c0dra,
const unsigned char *c1dra,
const unsigned char *c0drb,
const unsigned char *c1drb)
{ … }
static int i3000_probe1(struct pci_dev *pdev, int dev_idx)
{ … }
static int i3000_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{ … }
static void i3000_remove_one(struct pci_dev *pdev)
{ … }
static const struct pci_device_id i3000_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, i3000_pci_tbl);
static struct pci_driver i3000_driver = …;
static int __init i3000_init(void)
{ … }
static void __exit i3000_exit(void)
{ … }
module_init(…) …;
module_exit(i3000_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
module_param(edac_op_state, int, 0444);
MODULE_PARM_DESC(…) …;