linux/drivers/edac/i3000_edac.c

/*
 * Intel 3000/3010 Memory Controller kernel module
 * Copyright (C) 2007 Akamai Technologies, Inc.
 * Shamelessly copied from:
 * 	Intel D82875P Memory Controller kernel module
 * 	(C) 2003 Linux Networx (http://lnxi.com)
 *
 * This file may be distributed under the terms of the
 * GNU General Public License.
 */

#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

/* Intel 3000 register addresses - device 0 function 0 - DRAM Controller */

#define I3000_MCHBAR
#define I3000_MCHBAR_MASK
#define I3000_MMR_WINDOW_SIZE

#define I3000_EDEAP
#define I3000_DEAP
#define I3000_DEAP_GRAIN

/*
 * Helper functions to decode the DEAP/EDEAP hardware registers.
 *
 * The type promotion here is deliberate; we're deriving an
 * unsigned long pfn and offset from hardware regs which are u8/u32.
 */

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

/* Intel  MMIO register space - device 0 function 0 - MMR space */

#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)
{}

/* returns count (>= 0), or negative on error */
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();