#include <linux/module.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/pci_ids.h>
#include <linux/edac.h>
#include <linux/io-64-nonatomic-lo-hi.h>
#include "edac_module.h"
#define EDAC_MOD_STR …
#define PCI_DEVICE_ID_INTEL_X38_HB …
#define X38_RANKS …
#define X38_RANKS_PER_CHANNEL …
#define X38_CHANNELS …
#define X38_MCHBAR_LOW …
#define X38_MCHBAR_HIGH …
#define X38_MCHBAR_MASK …
#define X38_MMR_WINDOW_SIZE …
#define X38_TOM …
#define X38_TOM_MASK …
#define X38_TOM_SHIFT …
#define X38_ERRSTS …
#define X38_ERRSTS_UE …
#define X38_ERRSTS_CE …
#define X38_ERRSTS_BITS …
#define X38_C0DRB …
#define X38_C1DRB …
#define X38_DRB_MASK …
#define X38_DRB_SHIFT …
#define X38_C0ECCERRLOG …
#define X38_C1ECCERRLOG …
#define X38_ECCERRLOG_CE …
#define X38_ECCERRLOG_UE …
#define X38_ECCERRLOG_RANK_BITS …
#define X38_ECCERRLOG_SYNDROME_BITS …
#define X38_CAPID0 …
static int x38_channel_num;
static int how_many_channel(struct pci_dev *pdev)
{ … }
static unsigned long eccerrlog_syndrome(u64 log)
{ … }
static int eccerrlog_row(int channel, u64 log)
{ … }
enum x38_chips { … };
struct x38_dev_info { … };
struct x38_error_info { … };
static const struct x38_dev_info x38_devs[] = …;
static struct pci_dev *mci_pdev;
static int x38_registered = …;
static void x38_clear_error_info(struct mem_ctl_info *mci)
{ … }
static void x38_get_and_clear_error_info(struct mem_ctl_info *mci,
struct x38_error_info *info)
{ … }
static void x38_process_error_info(struct mem_ctl_info *mci,
struct x38_error_info *info)
{ … }
static void x38_check(struct mem_ctl_info *mci)
{ … }
static void __iomem *x38_map_mchbar(struct pci_dev *pdev)
{ … }
static void x38_get_drbs(void __iomem *window,
u16 drbs[X38_CHANNELS][X38_RANKS_PER_CHANNEL])
{ … }
static bool x38_is_stacked(struct pci_dev *pdev,
u16 drbs[X38_CHANNELS][X38_RANKS_PER_CHANNEL])
{ … }
static unsigned long drb_to_nr_pages(
u16 drbs[X38_CHANNELS][X38_RANKS_PER_CHANNEL],
bool stacked, int channel, int rank)
{ … }
static int x38_probe1(struct pci_dev *pdev, int dev_idx)
{ … }
static int x38_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
{ … }
static void x38_remove_one(struct pci_dev *pdev)
{ … }
static const struct pci_device_id x38_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, x38_pci_tbl);
static struct pci_driver x38_driver = …;
static int __init x38_init(void)
{ … }
static void __exit x38_exit(void)
{ … }
module_init(…) …;
module_exit(x38_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;
module_param(edac_op_state, int, 0444);
MODULE_PARM_DESC(…) …;