Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6
[linux-2.6/linux-mips/linux-dm7025.git] / drivers / net / ucc_geth_mii.h
blob1e45b2028a50c7f07d43d955979afd760acf42b4
1 /*
2 * drivers/net/ucc_geth_mii.h
4 * QE UCC Gigabit Ethernet Driver -- MII Management Bus Implementation
5 * Provides Bus interface for MII Management regs in the UCC register space
7 * Copyright (C) 2007 Freescale Semiconductor, Inc.
9 * Authors: Li Yang <leoli@freescale.com>
10 * Kim Phillips <kim.phillips@freescale.com>
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version.
18 #ifndef __UEC_MII_H
19 #define __UEC_MII_H
21 /* UCC GETH MIIMCFG (MII Management Configuration Register) */
22 #define MIIMCFG_RESET_MANAGEMENT 0x80000000 /* Reset
23 management */
24 #define MIIMCFG_NO_PREAMBLE 0x00000010 /* Preamble
25 suppress */
26 #define MIIMCFG_CLOCK_DIVIDE_SHIFT (31 - 31) /* clock divide
27 << shift */
28 #define MIIMCFG_CLOCK_DIVIDE_MAX 0xf /* max clock divide */
29 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_2 0x00000000
30 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_4 0x00000001
31 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_6 0x00000002
32 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_8 0x00000003
33 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_10 0x00000004
34 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_14 0x00000005
35 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_16 0x00000008
36 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_20 0x00000006
37 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_28 0x00000007
38 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_32 0x00000009
39 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_48 0x0000000a
40 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_64 0x0000000b
41 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_80 0x0000000c
42 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_112 0x0000000d
43 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_160 0x0000000e
44 #define MIIMCFG_MANAGEMENT_CLOCK_DIVIDE_BY_224 0x0000000f
46 /* UCC GETH MIIMCOM (MII Management Command Register) */
47 #define MIIMCOM_SCAN_CYCLE 0x00000002 /* Scan cycle */
48 #define MIIMCOM_READ_CYCLE 0x00000001 /* Read cycle */
50 /* UCC GETH MIIMADD (MII Management Address Register) */
51 #define MIIMADD_PHY_ADDRESS_SHIFT (31 - 23) /* PHY Address
52 << shift */
53 #define MIIMADD_PHY_REGISTER_SHIFT (31 - 31) /* PHY Register
54 << shift */
56 /* UCC GETH MIIMCON (MII Management Control Register) */
57 #define MIIMCON_PHY_CONTROL_SHIFT (31 - 31) /* PHY Control
58 << shift */
59 #define MIIMCON_PHY_STATUS_SHIFT (31 - 31) /* PHY Status
60 << shift */
62 /* UCC GETH MIIMIND (MII Management Indicator Register) */
63 #define MIIMIND_NOT_VALID 0x00000004 /* Not valid */
64 #define MIIMIND_SCAN 0x00000002 /* Scan in
65 progress */
66 #define MIIMIND_BUSY 0x00000001
68 /* Initial TBI Physical Address */
69 #define UTBIPAR_INIT_TBIPA 0x1f
71 struct ucc_mii_mng {
72 u32 miimcfg; /* MII management configuration reg */
73 u32 miimcom; /* MII management command reg */
74 u32 miimadd; /* MII management address reg */
75 u32 miimcon; /* MII management control reg */
76 u32 miimstat; /* MII management status reg */
77 u32 miimind; /* MII management indication reg */
78 u8 notcare[28]; /* Space holder */
79 u32 utbipar; /* TBI phy address reg */
80 } __attribute__ ((packed));
82 /* TBI / MII Set Register */
83 enum enet_tbi_mii_reg {
84 ENET_TBI_MII_CR = 0x00, /* Control */
85 ENET_TBI_MII_SR = 0x01, /* Status */
86 ENET_TBI_MII_ANA = 0x04, /* AN advertisement */
87 ENET_TBI_MII_ANLPBPA = 0x05, /* AN link partner base page ability */
88 ENET_TBI_MII_ANEX = 0x06, /* AN expansion */
89 ENET_TBI_MII_ANNPT = 0x07, /* AN next page transmit */
90 ENET_TBI_MII_ANLPANP = 0x08, /* AN link partner ability next page */
91 ENET_TBI_MII_EXST = 0x0F, /* Extended status */
92 ENET_TBI_MII_JD = 0x10, /* Jitter diagnostics */
93 ENET_TBI_MII_TBICON = 0x11 /* TBI control */
96 int uec_mdio_read(struct mii_bus *bus, int mii_id, int regnum);
97 int uec_mdio_write(struct mii_bus *bus, int mii_id, int regnum, u16 value);
98 int __init uec_mdio_init(void);
99 void uec_mdio_exit(void);
100 #endif /* __UEC_MII_H */