#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 ie31200_printk(level, fmt, arg...) …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_1 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_2 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_3 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_4 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_5 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_6 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_7 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_8 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_9 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_10 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_11 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_MASK …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_1 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_2 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_3 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_4 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_5 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_6 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_7 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_8 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_9 …
#define PCI_DEVICE_ID_INTEL_IE31200_HB_CFL_10 …
#define DEVICE_ID_SKYLAKE_OR_LATER(did) …
#define IE31200_DIMMS …
#define IE31200_RANKS …
#define IE31200_RANKS_PER_CHANNEL …
#define IE31200_DIMMS_PER_CHANNEL …
#define IE31200_CHANNELS …
#define IE31200_MCHBAR_LOW …
#define IE31200_MCHBAR_HIGH …
#define IE31200_MCHBAR_MASK …
#define IE31200_MMR_WINDOW_SIZE …
#define IE31200_ERRSTS …
#define IE31200_ERRSTS_UE …
#define IE31200_ERRSTS_CE …
#define IE31200_ERRSTS_BITS …
#define IE31200_C0ECCERRLOG …
#define IE31200_C1ECCERRLOG …
#define IE31200_C0ECCERRLOG_SKL …
#define IE31200_C1ECCERRLOG_SKL …
#define IE31200_ECCERRLOG_CE …
#define IE31200_ECCERRLOG_UE …
#define IE31200_ECCERRLOG_RANK_BITS …
#define IE31200_ECCERRLOG_RANK_SHIFT …
#define IE31200_ECCERRLOG_SYNDROME_BITS …
#define IE31200_ECCERRLOG_SYNDROME_SHIFT …
#define IE31200_ECCERRLOG_SYNDROME(log) …
#define IE31200_CAPID0 …
#define IE31200_CAPID0_PDCD …
#define IE31200_CAPID0_DDPCD …
#define IE31200_CAPID0_ECC …
#define IE31200_MAD_DIMM_0_OFFSET …
#define IE31200_MAD_DIMM_0_OFFSET_SKL …
#define IE31200_MAD_DIMM_SIZE …
#define IE31200_MAD_DIMM_A_RANK …
#define IE31200_MAD_DIMM_A_RANK_SHIFT …
#define IE31200_MAD_DIMM_A_RANK_SKL …
#define IE31200_MAD_DIMM_A_RANK_SKL_SHIFT …
#define IE31200_MAD_DIMM_A_WIDTH …
#define IE31200_MAD_DIMM_A_WIDTH_SHIFT …
#define IE31200_MAD_DIMM_A_WIDTH_SKL …
#define IE31200_MAD_DIMM_A_WIDTH_SKL_SHIFT …
#define IE31200_PAGES(n, skl) …
static int nr_channels;
static struct pci_dev *mci_pdev;
static int ie31200_registered = …;
struct ie31200_priv { … };
enum ie31200_chips { … };
struct ie31200_dev_info { … };
struct ie31200_error_info { … };
static const struct ie31200_dev_info ie31200_devs[] = …;
struct dimm_data { … };
static int how_many_channels(struct pci_dev *pdev)
{ … }
static bool ecc_capable(struct pci_dev *pdev)
{ … }
static int eccerrlog_row(u64 log)
{ … }
static void ie31200_clear_error_info(struct mem_ctl_info *mci)
{ … }
static void ie31200_get_and_clear_error_info(struct mem_ctl_info *mci,
struct ie31200_error_info *info)
{ … }
static void ie31200_process_error_info(struct mem_ctl_info *mci,
struct ie31200_error_info *info)
{ … }
static void ie31200_check(struct mem_ctl_info *mci)
{ … }
static void __iomem *ie31200_map_mchbar(struct pci_dev *pdev)
{ … }
static void __skl_populate_dimm_info(struct dimm_data *dd, u32 addr_decode,
int chan)
{ … }
static void __populate_dimm_info(struct dimm_data *dd, u32 addr_decode,
int chan)
{ … }
static void populate_dimm_info(struct dimm_data *dd, u32 addr_decode, int chan,
bool skl)
{ … }
static int ie31200_probe1(struct pci_dev *pdev, int dev_idx)
{ … }
static int ie31200_init_one(struct pci_dev *pdev,
const struct pci_device_id *ent)
{ … }
static void ie31200_remove_one(struct pci_dev *pdev)
{ … }
static const struct pci_device_id ie31200_pci_tbl[] = …;
MODULE_DEVICE_TABLE(pci, ie31200_pci_tbl);
static struct pci_driver ie31200_driver = …;
static int __init ie31200_init(void)
{ … }
static void __exit ie31200_exit(void)
{ … }
module_init(…) …;
module_exit(ie31200_exit);
MODULE_LICENSE(…) …;
MODULE_AUTHOR(…) …;
MODULE_DESCRIPTION(…) …;