Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | /* |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 2 | * drivers/net/ibm_emac/ibm_emac_zmii.h |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 3 | * |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 4 | * Driver for PowerPC 4xx on-chip ethernet controller, ZMII bridge support. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 5 | * |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 6 | * Copyright (c) 2004, 2005 Zultys Technologies. |
| 7 | * Eugene Surovegin <eugene.surovegin@zultys.com> or <ebs@ebshome.net> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 8 | * |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 9 | * Based on original work by |
| 10 | * Armin Kuster <akuster@mvista.com> |
| 11 | * Copyright 2001 MontaVista Softare Inc. |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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. |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 17 | * |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 18 | */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 19 | #ifndef _IBM_EMAC_ZMII_H_ |
| 20 | #define _IBM_EMAC_ZMII_H_ |
| 21 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 22 | #include <linux/init.h> |
| 23 | #include <asm/ocp.h> |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 32 | /* ZMII device */ |
| 33 | struct ibm_ocp_zmii { |
Al Viro | b43de2d | 2005-12-01 10:15:21 -0500 | [diff] [blame] | 34 | struct zmii_regs __iomem *base; |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 35 | int mode; /* subset of PHY_MODE_XXXX */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 36 | int users; /* number of EMACs using this ZMII bridge */ |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 37 | u32 fer_save; /* FER value left by firmware */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 38 | }; |
| 39 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 40 | #ifdef CONFIG_IBM_EMAC_ZMII |
| 41 | int zmii_attach(void *emac) __init; |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 42 | |
Eugene Surovegin | 0ec6d95 | 2007-05-16 11:57:37 -0700 | [diff] [blame] | 43 | void __zmii_fini(struct ocp_device *ocpdev, int input); |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 44 | static inline void zmii_fini(struct ocp_device *ocpdev, int input) |
| 45 | { |
| 46 | if (ocpdev) |
| 47 | __zmii_fini(ocpdev, input); |
| 48 | } |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 49 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 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 | } |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 56 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 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 | } |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 64 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 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 | } |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 70 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 71 | void *zmii_dump_regs(struct ocp_device *ocpdev, void *buf); |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 72 | |
Eugene Surovegin | 37448f7 | 2005-10-10 16:58:14 -0700 | [diff] [blame] | 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 */ |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 81 | |
| 82 | #endif /* _IBM_EMAC_ZMII_H_ */ |