[PATCH] sky2: 88E803X transmit lockup
[linux-2.6] / drivers / net / ibm_emac / ibm_emac_zmii.h
1 /*
2  * drivers/net/ibm_emac/ibm_emac_zmii.h
3  *
4  * Driver for PowerPC 4xx on-chip ethernet controller, ZMII bridge support.
5  *
6  * Copyright (c) 2004, 2005 Zultys Technologies.
7  * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net>
8  *
9  * Based on original work by
10  *      Armin Kuster <akuster@mvista.com>
11  *      Copyright 2001 MontaVista Softare Inc.
12  *
13  * This program is free software; you can redistribute  it and/or modify it
14  * under  the terms of  the GNU General  Public License as published by the
15  * Free Software Foundation;  either version 2 of the  License, or (at your
16  * option) any later version.
17  *
18  */
19 #ifndef _IBM_EMAC_ZMII_H_
20 #define _IBM_EMAC_ZMII_H_
21
22 #include <linux/init.h>
23 #include <asm/ocp.h>
24
25 /* ZMII bridge registers */
26 struct zmii_regs {
27         u32 fer;                /* Function enable reg */
28         u32 ssr;                /* Speed select reg */
29         u32 smiirs;             /* SMII status reg */
30 };
31
32 /* ZMII device */
33 struct ibm_ocp_zmii {
34         struct zmii_regs __iomem *base;
35         int mode;               /* subset of PHY_MODE_XXXX */
36         int users;              /* number of EMACs using this ZMII bridge */
37         u32 fer_save;           /* FER value left by firmware */
38 };
39
40 #ifdef CONFIG_IBM_EMAC_ZMII
41 int zmii_attach(void *emac) __init;
42
43 void __zmii_fini(struct ocp_device *ocpdev, int input) __exit;
44 static inline void zmii_fini(struct ocp_device *ocpdev, int input)
45 {
46         if (ocpdev)
47                 __zmii_fini(ocpdev, input);
48 }
49
50 void __zmii_enable_mdio(struct ocp_device *ocpdev, int input);
51 static inline void zmii_enable_mdio(struct ocp_device *ocpdev, int input)
52 {
53         if (ocpdev)
54                 __zmii_enable_mdio(ocpdev, input);
55 }
56
57 void __zmii_set_speed(struct ocp_device *ocpdev, int input, int speed);
58 static inline void zmii_set_speed(struct ocp_device *ocpdev, int input,
59                                   int speed)
60 {
61         if (ocpdev)
62                 __zmii_set_speed(ocpdev, input, speed);
63 }
64
65 int __zmii_get_regs_len(struct ocp_device *ocpdev);
66 static inline int zmii_get_regs_len(struct ocp_device *ocpdev)
67 {
68         return ocpdev ? __zmii_get_regs_len(ocpdev) : 0;
69 }
70
71 void *zmii_dump_regs(struct ocp_device *ocpdev, void *buf);
72
73 #else
74 # define zmii_attach(x)         0
75 # define zmii_fini(x,y)         ((void)0)
76 # define zmii_enable_mdio(x,y)  ((void)0)
77 # define zmii_set_speed(x,y,z)  ((void)0)
78 # define zmii_get_regs_len(x)   0
79 # define zmii_dump_regs(x,buf)  (buf)
80 #endif                          /* !CONFIG_IBM_EMAC_ZMII */
81
82 #endif                          /* _IBM_EMAC_ZMII_H_ */