![Eugene Surovegin](/assets/img/avatar_default.png)
This patch replaces current PowerPC 4xx EMAC driver with new, re-written from the scratch version. This patch is quite big (~234K) because there is virtualy 0% of common code between old and new version. New driver uses NAPI, it solves stability problems under heavy packet load and low memory, corrects chip register access and fixes numerous small bugs I don't even remember now. This patch has been tested on all supported in 2.6 PPC 4xx boards. It's been used in production for almost a year now on custom 4xx hardware. PPC32 specific parts are already upstream. Patch was acked by the current EMAC driver maintainer (Matt Porter). I will be maintaining this new version. Signed-off-by: Eugene Surovegin <ebs@ebshome.net> -- Kconfig | 72 ibm_emac/Makefile | 13 ibm_emac/ibm_emac.h | 418 +++-- ibm_emac/ibm_emac_core.c | 3414 ++++++++++++++++++++++++---------------------- ibm_emac/ibm_emac_core.h | 313 ++-- ibm_emac/ibm_emac_debug.c | 377 ++--- ibm_emac/ibm_emac_debug.h | 63 ibm_emac/ibm_emac_mal.c | 674 +++++---- ibm_emac/ibm_emac_mal.h | 336 +++- ibm_emac/ibm_emac_phy.c | 335 ++-- ibm_emac/ibm_emac_phy.h | 105 - ibm_emac/ibm_emac_rgmii.c | 201 ++ ibm_emac/ibm_emac_rgmii.h | 68 ibm_emac/ibm_emac_tah.c | 111 + ibm_emac/ibm_emac_tah.h | 96 - ibm_emac/ibm_emac_zmii.c | 255 +++ ibm_emac/ibm_emac_zmii.h | 114 - 17 files changed, 4114 insertions(+), 2851 deletions(-) Signed-off-by: Jeff Garzik <jgarzik@pobox.com>
66 lines
1.8 KiB
C
66 lines
1.8 KiB
C
/*
|
|
* drivers/net/ibm_emac/ibm_emac_rgmii.c
|
|
*
|
|
* Driver for PowerPC 4xx on-chip ethernet controller, RGMII bridge support.
|
|
*
|
|
* Based on ocp_zmii.h/ibm_emac_zmii.h
|
|
* Armin Kuster akuster@mvista.com
|
|
*
|
|
* Copyright 2004 MontaVista Software, Inc.
|
|
* Matt Porter <mporter@kernel.crashing.org>
|
|
*
|
|
* Copyright (c) 2004, 2005 Zultys Technologies.
|
|
* Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License as published by the
|
|
* Free Software Foundation; either version 2 of the License, or (at your
|
|
* option) any later version.
|
|
*/
|
|
|
|
#ifndef _IBM_EMAC_RGMII_H_
|
|
#define _IBM_EMAC_RGMII_H_
|
|
|
|
#include <linux/config.h>
|
|
|
|
/* RGMII bridge */
|
|
struct rgmii_regs {
|
|
u32 fer; /* Function enable register */
|
|
u32 ssr; /* Speed select register */
|
|
};
|
|
|
|
/* RGMII device */
|
|
struct ibm_ocp_rgmii {
|
|
struct rgmii_regs *base;
|
|
int users; /* number of EMACs using this RGMII bridge */
|
|
};
|
|
|
|
#ifdef CONFIG_IBM_EMAC_RGMII
|
|
int rgmii_attach(void *emac) __init;
|
|
|
|
void __rgmii_fini(struct ocp_device *ocpdev, int input) __exit;
|
|
static inline void rgmii_fini(struct ocp_device *ocpdev, int input)
|
|
{
|
|
if (ocpdev)
|
|
__rgmii_fini(ocpdev, input);
|
|
}
|
|
|
|
void rgmii_set_speed(struct ocp_device *ocpdev, int input, int speed);
|
|
|
|
int __rgmii_get_regs_len(struct ocp_device *ocpdev);
|
|
static inline int rgmii_get_regs_len(struct ocp_device *ocpdev)
|
|
{
|
|
return ocpdev ? __rgmii_get_regs_len(ocpdev) : 0;
|
|
}
|
|
|
|
void *rgmii_dump_regs(struct ocp_device *ocpdev, void *buf);
|
|
#else
|
|
# define rgmii_attach(x) 0
|
|
# define rgmii_fini(x,y) ((void)0)
|
|
# define rgmii_set_speed(x,y,z) ((void)0)
|
|
# define rgmii_get_regs_len(x) 0
|
|
# define rgmii_dump_regs(x,buf) (buf)
|
|
#endif /* !CONFIG_IBM_EMAC_RGMII */
|
|
|
|
#endif /* _IBM_EMAC_RGMII_H_ */
|