diff options
author | Eugene Surovegin <ebs@ebshome.net> | 2005-10-10 19:58:14 -0400 |
---|---|---|
committer | Jeff Garzik <jgarzik@pobox.com> | 2005-10-28 16:42:01 -0400 |
commit | 37448f7d39717db7c1098c1a88b9074694c69797 (patch) | |
tree | 18e019dd740c12a3af6e603aaefff985f0faea59 /drivers/net/ibm_emac/ibm_emac_zmii.h | |
parent | b71b95efa5abca33e1bfb85d55162c7f99f54c23 (diff) |
[PATCH] New PowerPC 4xx on-chip ethernet controller driver
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>
Diffstat (limited to 'drivers/net/ibm_emac/ibm_emac_zmii.h')
-rw-r--r-- | drivers/net/ibm_emac/ibm_emac_zmii.h | 104 |
1 files changed, 47 insertions, 57 deletions
diff --git a/drivers/net/ibm_emac/ibm_emac_zmii.h b/drivers/net/ibm_emac/ibm_emac_zmii.h index 6f6cd2a39e38..0bb26062c0ad 100644 --- a/drivers/net/ibm_emac/ibm_emac_zmii.h +++ b/drivers/net/ibm_emac/ibm_emac_zmii.h | |||
@@ -1,23 +1,27 @@ | |||
1 | /* | 1 | /* |
2 | * ocp_zmii.h | 2 | * drivers/net/ibm_emac/ibm_emac_zmii.h |
3 | * | 3 | * |
4 | * Defines for the IBM ZMII bridge | 4 | * Driver for PowerPC 4xx on-chip ethernet controller, ZMII bridge support. |
5 | * | 5 | * |
6 | * Armin Kuster akuster@mvista.com | 6 | * Copyright (c) 2004, 2005 Zultys Technologies. |
7 | * Dec, 2001 | 7 | * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> |
8 | * | 8 | * |
9 | * Copyright 2001 MontaVista Softare Inc. | 9 | * Based on original work by |
10 | * Armin Kuster <akuster@mvista.com> | ||
11 | * Copyright 2001 MontaVista Softare Inc. | ||
10 | * | 12 | * |
11 | * This program is free software; you can redistribute it and/or modify it | 13 | * This program is free software; you can redistribute it and/or modify it |
12 | * under the terms of the GNU General Public License as published by the | 14 | * under the terms of the GNU General Public License as published by the |
13 | * Free Software Foundation; either version 2 of the License, or (at your | 15 | * Free Software Foundation; either version 2 of the License, or (at your |
14 | * option) any later version. | 16 | * option) any later version. |
17 | * | ||
15 | */ | 18 | */ |
16 | |||
17 | #ifndef _IBM_EMAC_ZMII_H_ | 19 | #ifndef _IBM_EMAC_ZMII_H_ |
18 | #define _IBM_EMAC_ZMII_H_ | 20 | #define _IBM_EMAC_ZMII_H_ |
19 | 21 | ||
20 | #include <linux/config.h> | 22 | #include <linux/config.h> |
23 | #include <linux/init.h> | ||
24 | #include <asm/ocp.h> | ||
21 | 25 | ||
22 | /* ZMII bridge registers */ | 26 | /* ZMII bridge registers */ |
23 | struct zmii_regs { | 27 | struct zmii_regs { |
@@ -26,68 +30,54 @@ struct zmii_regs { | |||
26 | u32 smiirs; /* SMII status reg */ | 30 | u32 smiirs; /* SMII status reg */ |
27 | }; | 31 | }; |
28 | 32 | ||
29 | #define ZMII_INPUTS 4 | ||
30 | |||
31 | /* ZMII device */ | 33 | /* ZMII device */ |
32 | struct ibm_ocp_zmii { | 34 | struct ibm_ocp_zmii { |
33 | struct zmii_regs *base; | 35 | struct zmii_regs *base; |
34 | int mode[ZMII_INPUTS]; | 36 | int mode; /* subset of PHY_MODE_XXXX */ |
35 | int users; /* number of EMACs using this ZMII bridge */ | 37 | int users; /* number of EMACs using this ZMII bridge */ |
38 | u32 fer_save; /* FER value left by firmware */ | ||
36 | }; | 39 | }; |
37 | 40 | ||
38 | /* Fuctional Enable Reg */ | 41 | #ifdef CONFIG_IBM_EMAC_ZMII |
39 | 42 | int zmii_attach(void *emac) __init; | |
40 | #define ZMII_FER_MASK(x) (0xf0000000 >> (4*x)) | ||
41 | |||
42 | #define ZMII_MDI0 0x80000000 | ||
43 | #define ZMII_SMII0 0x40000000 | ||
44 | #define ZMII_RMII0 0x20000000 | ||
45 | #define ZMII_MII0 0x10000000 | ||
46 | #define ZMII_MDI1 0x08000000 | ||
47 | #define ZMII_SMII1 0x04000000 | ||
48 | #define ZMII_RMII1 0x02000000 | ||
49 | #define ZMII_MII1 0x01000000 | ||
50 | #define ZMII_MDI2 0x00800000 | ||
51 | #define ZMII_SMII2 0x00400000 | ||
52 | #define ZMII_RMII2 0x00200000 | ||
53 | #define ZMII_MII2 0x00100000 | ||
54 | #define ZMII_MDI3 0x00080000 | ||
55 | #define ZMII_SMII3 0x00040000 | ||
56 | #define ZMII_RMII3 0x00020000 | ||
57 | #define ZMII_MII3 0x00010000 | ||
58 | 43 | ||
59 | /* Speed Selection reg */ | 44 | void __zmii_fini(struct ocp_device *ocpdev, int input) __exit; |
45 | static inline void zmii_fini(struct ocp_device *ocpdev, int input) | ||
46 | { | ||
47 | if (ocpdev) | ||
48 | __zmii_fini(ocpdev, input); | ||
49 | } | ||
60 | 50 | ||
61 | #define ZMII_SCI0 0x40000000 | 51 | void __zmii_enable_mdio(struct ocp_device *ocpdev, int input); |
62 | #define ZMII_FSS0 0x20000000 | 52 | static inline void zmii_enable_mdio(struct ocp_device *ocpdev, int input) |
63 | #define ZMII_SP0 0x10000000 | 53 | { |
64 | #define ZMII_SCI1 0x04000000 | 54 | if (ocpdev) |
65 | #define ZMII_FSS1 0x02000000 | 55 | __zmii_enable_mdio(ocpdev, input); |
66 | #define ZMII_SP1 0x01000000 | 56 | } |
67 | #define ZMII_SCI2 0x00400000 | ||
68 | #define ZMII_FSS2 0x00200000 | ||
69 | #define ZMII_SP2 0x00100000 | ||
70 | #define ZMII_SCI3 0x00040000 | ||
71 | #define ZMII_FSS3 0x00020000 | ||
72 | #define ZMII_SP3 0x00010000 | ||
73 | 57 | ||
74 | #define ZMII_MII0_100MB ZMII_SP0 | 58 | void __zmii_set_speed(struct ocp_device *ocpdev, int input, int speed); |
75 | #define ZMII_MII0_10MB ~ZMII_SP0 | 59 | static inline void zmii_set_speed(struct ocp_device *ocpdev, int input, |
76 | #define ZMII_MII1_100MB ZMII_SP1 | 60 | int speed) |
77 | #define ZMII_MII1_10MB ~ZMII_SP1 | 61 | { |
78 | #define ZMII_MII2_100MB ZMII_SP2 | 62 | if (ocpdev) |
79 | #define ZMII_MII2_10MB ~ZMII_SP2 | 63 | __zmii_set_speed(ocpdev, input, speed); |
80 | #define ZMII_MII3_100MB ZMII_SP3 | 64 | } |
81 | #define ZMII_MII3_10MB ~ZMII_SP3 | ||
82 | 65 | ||
83 | /* SMII Status reg */ | 66 | int __zmii_get_regs_len(struct ocp_device *ocpdev); |
67 | static inline int zmii_get_regs_len(struct ocp_device *ocpdev) | ||
68 | { | ||
69 | return ocpdev ? __zmii_get_regs_len(ocpdev) : 0; | ||
70 | } | ||
84 | 71 | ||
85 | #define ZMII_STS0 0xFF000000 /* EMAC0 smii status mask */ | 72 | void *zmii_dump_regs(struct ocp_device *ocpdev, void *buf); |
86 | #define ZMII_STS1 0x00FF0000 /* EMAC1 smii status mask */ | ||
87 | 73 | ||
88 | #define SMII 0 | 74 | #else |
89 | #define RMII 1 | 75 | # define zmii_attach(x) 0 |
90 | #define MII 2 | 76 | # define zmii_fini(x,y) ((void)0) |
91 | #define MDI 3 | 77 | # define zmii_enable_mdio(x,y) ((void)0) |
78 | # define zmii_set_speed(x,y,z) ((void)0) | ||
79 | # define zmii_get_regs_len(x) 0 | ||
80 | # define zmii_dump_regs(x,buf) (buf) | ||
81 | #endif /* !CONFIG_IBM_EMAC_ZMII */ | ||
92 | 82 | ||
93 | #endif /* _IBM_EMAC_ZMII_H_ */ | 83 | #endif /* _IBM_EMAC_ZMII_H_ */ |