Blame view

include/linux/phy.h 16.1 KB
00db8189d   Andy Fleming   This patch adds a...
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
  /*
   * include/linux/phy.h
   *
   * Framework and drivers for configuring and reading different PHYs
   * Based on code in sungem_phy.c and gianfar_phy.c
   *
   * Author: Andy Fleming
   *
   * Copyright (c) 2004 Freescale Semiconductor, Inc.
   *
   * 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 __PHY_H
  #define __PHY_H
  
  #include <linux/spinlock.h>
  #include <linux/device.h>
13df29f69   Maciej W. Rozycki   [PATCH] 2.6.18: s...
23
24
25
26
  #include <linux/ethtool.h>
  #include <linux/mii.h>
  #include <linux/timer.h>
  #include <linux/workqueue.h>
8626d3b43   David Woodhouse   phylib: Support p...
27
  #include <linux/mod_devicetable.h>
00db8189d   Andy Fleming   This patch adds a...
28

60063497a   Arun Sharma   atomic: use <linu...
29
  #include <linux/atomic.h>
0ac495273   Maciej W. Rozycki   PHYLIB: IRQ event...
30

00db8189d   Andy Fleming   This patch adds a...
31
32
33
34
35
36
37
38
39
40
41
  #define PHY_BASIC_FEATURES	(SUPPORTED_10baseT_Half | \
  				 SUPPORTED_10baseT_Full | \
  				 SUPPORTED_100baseT_Half | \
  				 SUPPORTED_100baseT_Full | \
  				 SUPPORTED_Autoneg | \
  				 SUPPORTED_TP | \
  				 SUPPORTED_MII)
  
  #define PHY_GBIT_FEATURES	(PHY_BASIC_FEATURES | \
  				 SUPPORTED_1000baseT_Half | \
  				 SUPPORTED_1000baseT_Full)
c5e38a949   Andy Fleming   phy: Clean up hea...
42
43
  /*
   * Set phydev->irq to PHY_POLL if interrupts are not supported,
00db8189d   Andy Fleming   This patch adds a...
44
45
46
47
48
49
50
51
   * or not desired for this PHY.  Set to PHY_IGNORE_INTERRUPT if
   * the attached driver handles the interrupt
   */
  #define PHY_POLL		-1
  #define PHY_IGNORE_INTERRUPT	-2
  
  #define PHY_HAS_INTERRUPT	0x00000001
  #define PHY_HAS_MAGICANEG	0x00000002
e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
52
53
  /* Interface Mode definitions */
  typedef enum {
4157ef1b8   Shawn Guo   net: ibm_newemac:...
54
  	PHY_INTERFACE_MODE_NA,
e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
55
56
57
58
59
60
  	PHY_INTERFACE_MODE_MII,
  	PHY_INTERFACE_MODE_GMII,
  	PHY_INTERFACE_MODE_SGMII,
  	PHY_INTERFACE_MODE_TBI,
  	PHY_INTERFACE_MODE_RMII,
  	PHY_INTERFACE_MODE_RGMII,
a999589cc   Kim Phillips   phylib: add RGMII...
61
  	PHY_INTERFACE_MODE_RGMII_ID,
7d400a4c5   Kim Phillips   phylib: add PHY i...
62
63
  	PHY_INTERFACE_MODE_RGMII_RXID,
  	PHY_INTERFACE_MODE_RGMII_TXID,
4157ef1b8   Shawn Guo   net: ibm_newemac:...
64
65
  	PHY_INTERFACE_MODE_RTBI,
  	PHY_INTERFACE_MODE_SMII,
e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
66
  } phy_interface_t;
00db8189d   Andy Fleming   This patch adds a...
67

e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
68
  #define PHY_INIT_TIMEOUT	100000
00db8189d   Andy Fleming   This patch adds a...
69
70
71
  #define PHY_STATE_TIME		1
  #define PHY_FORCE_TIMEOUT	10
  #define PHY_AN_TIMEOUT		10
e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
72
  #define PHY_MAX_ADDR	32
00db8189d   Andy Fleming   This patch adds a...
73

a4d00f179   Kumar Gala   [PATCH] phy: Adde...
74
  /* Used when trying to connect to a specific phy (mii bus id:phy device id) */
9d9326d3b   Andy Fleming   phy: Change mii_b...
75
76
77
78
79
80
  #define PHY_ID_FMT "%s:%02x"
  
  /*
   * Need to be a little smaller than phydev->dev.bus_id to leave room
   * for the ":%02x"
   */
8e401eccd   David S. Miller   phy: Eliminate re...
81
  #define MII_BUS_ID_SIZE	(20 - 3)
a4d00f179   Kumar Gala   [PATCH] phy: Adde...
82

abf35df21   Jason Gunthorpe   NET: Support clau...
83
84
85
  /* Or MII_ADDR_C45 into regnum for read/write on mii_bus to enable the 21 bit
     IEEE 802.3ae clause 45 addressing mode used by 10GIGE phy chips. */
  #define MII_ADDR_C45 (1<<30)
c5e38a949   Andy Fleming   phy: Clean up hea...
86
87
88
89
  /*
   * The Bus class for PHYs.  Devices which provide access to
   * PHYs should register using this structure
   */
00db8189d   Andy Fleming   This patch adds a...
90
91
  struct mii_bus {
  	const char *name;
9d9326d3b   Andy Fleming   phy: Change mii_b...
92
  	char id[MII_BUS_ID_SIZE];
00db8189d   Andy Fleming   This patch adds a...
93
94
95
96
  	void *priv;
  	int (*read)(struct mii_bus *bus, int phy_id, int regnum);
  	int (*write)(struct mii_bus *bus, int phy_id, int regnum, u16 val);
  	int (*reset)(struct mii_bus *bus);
c5e38a949   Andy Fleming   phy: Clean up hea...
97
98
99
100
  	/*
  	 * A lock to ensure that only one thing can read/write
  	 * the MDIO bus at a time
  	 */
35b5f6b1a   Nate Case   PHYLIB: Locking f...
101
  	struct mutex mdio_lock;
00db8189d   Andy Fleming   This patch adds a...
102

18ee49ddb   Lennert Buytenhek   phylib: rename mi...
103
  	struct device *parent;
46abc0217   Lennert Buytenhek   phylib: give mdio...
104
105
106
107
108
109
110
  	enum {
  		MDIOBUS_ALLOCATED = 1,
  		MDIOBUS_REGISTERED,
  		MDIOBUS_UNREGISTERED,
  		MDIOBUS_RELEASED,
  	} state;
  	struct device dev;
00db8189d   Andy Fleming   This patch adds a...
111
112
113
  
  	/* list of all PHYs on bus */
  	struct phy_device *phy_map[PHY_MAX_ADDR];
c68839963   Peter Meerwald   net: Improve comm...
114
  	/* PHY addresses to be ignored when probing */
f896424cb   Matt Porter   [PATCH] phy addre...
115
  	u32 phy_mask;
c5e38a949   Andy Fleming   phy: Clean up hea...
116
117
118
119
  	/*
  	 * Pointer to an array of interrupts, each PHY's
  	 * interrupt at the index matching its address
  	 */
00db8189d   Andy Fleming   This patch adds a...
120
121
  	int *irq;
  };
46abc0217   Lennert Buytenhek   phylib: give mdio...
122
  #define to_mii_bus(d) container_of(d, struct mii_bus, dev)
00db8189d   Andy Fleming   This patch adds a...
123

2e8881032   Lennert Buytenhek   phylib: add mdiob...
124
125
126
127
128
  struct mii_bus *mdiobus_alloc(void);
  int mdiobus_register(struct mii_bus *bus);
  void mdiobus_unregister(struct mii_bus *bus);
  void mdiobus_free(struct mii_bus *bus);
  struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr);
abf35df21   Jason Gunthorpe   NET: Support clau...
129
130
  int mdiobus_read(struct mii_bus *bus, int addr, u32 regnum);
  int mdiobus_write(struct mii_bus *bus, int addr, u32 regnum, u16 val);
2e8881032   Lennert Buytenhek   phylib: add mdiob...
131

e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
132
133
  #define PHY_INTERRUPT_DISABLED	0x0
  #define PHY_INTERRUPT_ENABLED	0x80000000
00db8189d   Andy Fleming   This patch adds a...
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
  
  /* PHY state machine states:
   *
   * DOWN: PHY device and driver are not ready for anything.  probe
   * should be called if and only if the PHY is in this state,
   * given that the PHY device exists.
   * - PHY driver probe function will, depending on the PHY, set
   * the state to STARTING or READY
   *
   * STARTING:  PHY device is coming up, and the ethernet driver is
   * not ready.  PHY drivers may set this in the probe function.
   * If they do, they are responsible for making sure the state is
   * eventually set to indicate whether the PHY is UP or READY,
   * depending on the state when the PHY is done starting up.
   * - PHY driver will set the state to READY
   * - start will set the state to PENDING
   *
   * READY: PHY is ready to send and receive packets, but the
   * controller is not.  By default, PHYs which do not implement
   * probe will be set to this state by phy_probe().  If the PHY
   * driver knows the PHY is ready, and the PHY state is STARTING,
   * then it sets this STATE.
   * - start will set the state to UP
   *
   * PENDING: PHY device is coming up, but the ethernet driver is
   * ready.  phy_start will set this state if the PHY state is
   * STARTING.
   * - PHY driver will set the state to UP when the PHY is ready
   *
   * UP: The PHY and attached device are ready to do work.
   * Interrupts should be started here.
   * - timer moves to AN
   *
   * AN: The PHY is currently negotiating the link state.  Link is
   * therefore down for now.  phy_timer will set this state when it
   * detects the state is UP.  config_aneg will set this state
   * whenever called with phydev->autoneg set to AUTONEG_ENABLE.
   * - If autonegotiation finishes, but there's no link, it sets
   *   the state to NOLINK.
   * - If aneg finishes with link, it sets the state to RUNNING,
   *   and calls adjust_link
   * - If autonegotiation did not finish after an arbitrary amount
   *   of time, autonegotiation should be tried again if the PHY
   *   supports "magic" autonegotiation (back to AN)
   * - If it didn't finish, and no magic_aneg, move to FORCING.
   *
   * NOLINK: PHY is up, but not currently plugged in.
   * - If the timer notes that the link comes back, we move to RUNNING
   * - config_aneg moves to AN
   * - phy_stop moves to HALTED
   *
   * FORCING: PHY is being configured with forced settings
   * - if link is up, move to RUNNING
   * - If link is down, we drop to the next highest setting, and
   *   retry (FORCING) after a timeout
   * - phy_stop moves to HALTED
   *
   * RUNNING: PHY is currently up, running, and possibly sending
   * and/or receiving packets
   * - timer will set CHANGELINK if we're polling (this ensures the
   *   link state is polled every other cycle of this state machine,
   *   which makes it every other second)
   * - irq will set CHANGELINK
   * - config_aneg will set AN
   * - phy_stop moves to HALTED
   *
   * CHANGELINK: PHY experienced a change in link state
   * - timer moves to RUNNING if link
   * - timer moves to NOLINK if the link is down
   * - phy_stop moves to HALTED
   *
   * HALTED: PHY is up, but no polling or interrupts are done. Or
   * PHY is in an error state.
   *
   * - phy_start moves to RESUMING
   *
   * RESUMING: PHY was halted, but now wants to run again.
   * - If we are forcing, or aneg is done, timer moves to RUNNING
   * - If aneg is not done, timer moves to AN
   * - phy_stop moves to HALTED
   */
  enum phy_state {
  	PHY_DOWN=0,
  	PHY_STARTING,
  	PHY_READY,
  	PHY_PENDING,
  	PHY_UP,
  	PHY_AN,
  	PHY_RUNNING,
  	PHY_NOLINK,
  	PHY_FORCING,
  	PHY_CHANGELINK,
  	PHY_HALTED,
  	PHY_RESUMING
  };
c1f19b51d   Richard Cochran   net: support time...
229
  struct sk_buff;
00db8189d   Andy Fleming   This patch adds a...
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
  /* phy_device: An instance of a PHY
   *
   * drv: Pointer to the driver for this PHY instance
   * bus: Pointer to the bus this PHY is on
   * dev: driver model device structure for this PHY
   * phy_id: UID for this device found during discovery
   * state: state of the PHY for management purposes
   * dev_flags: Device-specific flags used by the PHY driver.
   * addr: Bus address of PHY
   * link_timeout: The number of timer firings to wait before the
   * giving up on the current attempt at acquiring a link
   * irq: IRQ number of the PHY's interrupt (-1 if none)
   * phy_timer: The timer for handling the state machine
   * phy_queue: A work_queue for the interrupt
   * attached_dev: The attached enet driver's device instance ptr
   * adjust_link: Callback for the enet controller to respond to
   * changes in the link state.
   * adjust_state: Callback for the enet driver to respond to
   * changes in the state machine.
   *
   * speed, duplex, pause, supported, advertising, and
   * autoneg are used like in mii_if_info
   *
   * interrupts currently only supports enabled or disabled,
   * but could be changed in the future to support enabling
   * and disabling specific interrupts
   *
   * Contains some infrastructure for polling and interrupt
   * handling, as well as handling shifts in PHY hardware state
   */
  struct phy_device {
  	/* Information about the PHY type */
  	/* And management functions */
  	struct phy_driver *drv;
  
  	struct mii_bus *bus;
  
  	struct device dev;
  
  	u32 phy_id;
  
  	enum phy_state state;
  
  	u32 dev_flags;
e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
274
  	phy_interface_t interface;
c68839963   Peter Meerwald   net: Improve comm...
275
  	/* Bus address of the PHY (0-31) */
00db8189d   Andy Fleming   This patch adds a...
276
  	int addr;
c5e38a949   Andy Fleming   phy: Clean up hea...
277
278
  	/*
  	 * forced speed & duplex (no autoneg)
00db8189d   Andy Fleming   This patch adds a...
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
  	 * partner speed & duplex & pause (autoneg)
  	 */
  	int speed;
  	int duplex;
  	int pause;
  	int asym_pause;
  
  	/* The most recently read link state */
  	int link;
  
  	/* Enabled Interrupts */
  	u32 interrupts;
  
  	/* Union of PHY and Attached devices' supported modes */
  	/* See mii.h for more info */
  	u32 supported;
  	u32 advertising;
  
  	int autoneg;
  
  	int link_timeout;
c5e38a949   Andy Fleming   phy: Clean up hea...
300
301
302
303
  	/*
  	 * Interrupt number for this PHY
  	 * -1 means no interrupt
  	 */
00db8189d   Andy Fleming   This patch adds a...
304
305
306
307
308
309
310
311
  	int irq;
  
  	/* private data pointer */
  	/* For use by PHYs to maintain extra state */
  	void *priv;
  
  	/* Interrupt and Polling infrastructure */
  	struct work_struct phy_queue;
a390d1f37   Marcin Slusarz   phylib: convert s...
312
  	struct delayed_work state_queue;
0ac495273   Maciej W. Rozycki   PHYLIB: IRQ event...
313
  	atomic_t irq_disable;
00db8189d   Andy Fleming   This patch adds a...
314

35b5f6b1a   Nate Case   PHYLIB: Locking f...
315
  	struct mutex lock;
00db8189d   Andy Fleming   This patch adds a...
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
  
  	struct net_device *attached_dev;
  
  	void (*adjust_link)(struct net_device *dev);
  
  	void (*adjust_state)(struct net_device *dev);
  };
  #define to_phy_device(d) container_of(d, struct phy_device, dev)
  
  /* struct phy_driver: Driver structure for a particular PHY type
   *
   * phy_id: The result of reading the UID registers of this PHY
   *   type, and ANDing them with the phy_id_mask.  This driver
   *   only works for PHYs with IDs which match this field
   * name: The friendly name of this PHY type
   * phy_id_mask: Defines the important bits of the phy_id
   * features: A list of features (speed, duplex, etc) supported
   *   by this PHY
   * flags: A bitfield defining certain other features this PHY
   *   supports (like interrupts)
   *
   * The drivers must implement config_aneg and read_status.  All
   * other functions are optional. Note that none of these
   * functions should be called from interrupt time.  The goal is
   * for the bus read/write functions to be able to block when the
   * bus transaction is happening, and be freed up by an interrupt
   * (The MPC85xx has this ability, though it is not currently
   * supported in the driver).
   */
  struct phy_driver {
  	u32 phy_id;
  	char *name;
  	unsigned int phy_id_mask;
  	u32 features;
  	u32 flags;
c5e38a949   Andy Fleming   phy: Clean up hea...
351
352
353
354
  	/*
  	 * Called to initialize the PHY,
  	 * including after a reset
  	 */
00db8189d   Andy Fleming   This patch adds a...
355
  	int (*config_init)(struct phy_device *phydev);
c5e38a949   Andy Fleming   phy: Clean up hea...
356
357
358
359
  	/*
  	 * Called during discovery.  Used to set
  	 * up device-specific structures, if any
  	 */
00db8189d   Andy Fleming   This patch adds a...
360
361
362
363
364
  	int (*probe)(struct phy_device *phydev);
  
  	/* PHY Power Management */
  	int (*suspend)(struct phy_device *phydev);
  	int (*resume)(struct phy_device *phydev);
c5e38a949   Andy Fleming   phy: Clean up hea...
365
366
  	/*
  	 * Configures the advertisement and resets
00db8189d   Andy Fleming   This patch adds a...
367
368
  	 * autonegotiation if phydev->autoneg is on,
  	 * forces the speed to the current settings in phydev
c5e38a949   Andy Fleming   phy: Clean up hea...
369
370
  	 * if phydev->autoneg is off
  	 */
00db8189d   Andy Fleming   This patch adds a...
371
372
373
374
375
376
377
378
379
380
  	int (*config_aneg)(struct phy_device *phydev);
  
  	/* Determines the negotiated speed and duplex */
  	int (*read_status)(struct phy_device *phydev);
  
  	/* Clears any pending interrupts */
  	int (*ack_interrupt)(struct phy_device *phydev);
  
  	/* Enables or disables interrupts */
  	int (*config_intr)(struct phy_device *phydev);
a8729eb30   Anatolij Gustschin   phylib: Allow ear...
381
382
383
384
385
  	/*
  	 * Checks if the PHY generated an interrupt.
  	 * For multi-PHY devices with shared PHY interrupt pin
  	 */
  	int (*did_interrupt)(struct phy_device *phydev);
00db8189d   Andy Fleming   This patch adds a...
386
387
  	/* Clears up any memory if needed */
  	void (*remove)(struct phy_device *phydev);
c1f19b51d   Richard Cochran   net: support time...
388
389
390
391
392
393
394
395
396
397
398
399
400
401
  	/* Handles SIOCSHWTSTAMP ioctl for hardware time stamping. */
  	int  (*hwtstamp)(struct phy_device *phydev, struct ifreq *ifr);
  
  	/*
  	 * Requests a Rx timestamp for 'skb'. If the skb is accepted,
  	 * the phy driver promises to deliver it using netif_rx() as
  	 * soon as a timestamp becomes available. One of the
  	 * PTP_CLASS_ values is passed in 'type'. The function must
  	 * return true if the skb is accepted for delivery.
  	 */
  	bool (*rxtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
  
  	/*
  	 * Requests a Tx timestamp for 'skb'. The phy driver promises
da92b194c   Richard Cochran   net: hold sock re...
402
  	 * to deliver it using skb_complete_tx_timestamp() as soon as a
c1f19b51d   Richard Cochran   net: support time...
403
404
405
406
  	 * timestamp becomes available. One of the PTP_CLASS_ values
  	 * is passed in 'type'.
  	 */
  	void (*txtstamp)(struct phy_device *dev, struct sk_buff *skb, int type);
00db8189d   Andy Fleming   This patch adds a...
407
408
409
  	struct device_driver driver;
  };
  #define to_phy_driver(d) container_of(d, struct phy_driver, driver)
f62220d3a   Andy Fleming   phylib: Add suppo...
410
411
412
413
414
415
  #define PHY_ANY_ID "MATCH ANY PHY"
  #define PHY_ANY_UID 0xffffffff
  
  /* A Structure for boards to register fixups with the PHY Lib */
  struct phy_fixup {
  	struct list_head list;
8e401eccd   David S. Miller   phy: Eliminate re...
416
  	char bus_id[20];
f62220d3a   Andy Fleming   phylib: Add suppo...
417
418
419
420
  	u32 phy_uid;
  	u32 phy_uid_mask;
  	int (*run)(struct phy_device *phydev);
  };
2e8881032   Lennert Buytenhek   phylib: add mdiob...
421
422
423
424
425
426
427
428
429
  /**
   * phy_read - Convenience function for reading a given PHY register
   * @phydev: the phy_device struct
   * @regnum: register number to read
   *
   * NOTE: MUST NOT be called from interrupt context,
   * because the bus read/write functions may wait for an interrupt
   * to conclude the operation.
   */
abf35df21   Jason Gunthorpe   NET: Support clau...
430
  static inline int phy_read(struct phy_device *phydev, u32 regnum)
2e8881032   Lennert Buytenhek   phylib: add mdiob...
431
432
433
434
435
436
437
438
439
440
441
442
443
444
  {
  	return mdiobus_read(phydev->bus, phydev->addr, regnum);
  }
  
  /**
   * phy_write - Convenience function for writing a given PHY register
   * @phydev: the phy_device struct
   * @regnum: register number to write
   * @val: value to write to @regnum
   *
   * NOTE: MUST NOT be called from interrupt context,
   * because the bus read/write functions may wait for an interrupt
   * to conclude the operation.
   */
abf35df21   Jason Gunthorpe   NET: Support clau...
445
  static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
2e8881032   Lennert Buytenhek   phylib: add mdiob...
446
447
448
  {
  	return mdiobus_write(phydev->bus, phydev->addr, regnum, val);
  }
cac1f3c8a   Paul Gortmaker   phylib: factor ou...
449
  int get_phy_id(struct mii_bus *bus, int addr, u32 *phy_id);
00db8189d   Andy Fleming   This patch adds a...
450
  struct phy_device* get_phy_device(struct mii_bus *bus, int addr);
4dea547fe   Grant Likely   phylib: rework to...
451
  int phy_device_register(struct phy_device *phy);
2f5cb4340   Anton Vorontsov   phylib: Properly ...
452
  int phy_init_hw(struct phy_device *phydev);
e13934563   Andy Fleming   [PATCH] PHY Layer...
453
  struct phy_device * phy_attach(struct net_device *dev,
f62220d3a   Andy Fleming   phylib: Add suppo...
454
  		const char *bus_id, u32 flags, phy_interface_t interface);
f8f76db1d   Jiri Pirko   libphy: add phy_f...
455
  struct phy_device *phy_find_first(struct mii_bus *bus);
fa94f6d93   Grant Likely   phylib: add *_dir...
456
457
458
  int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
  		void (*handler)(struct net_device *), u32 flags,
  		phy_interface_t interface);
f62220d3a   Andy Fleming   phylib: Add suppo...
459
  struct phy_device * phy_connect(struct net_device *dev, const char *bus_id,
e8a2b6a42   Andy Fleming   [PATCH] PHY: Add ...
460
461
  		void (*handler)(struct net_device *), u32 flags,
  		phy_interface_t interface);
e13934563   Andy Fleming   [PATCH] PHY Layer...
462
463
464
465
466
  void phy_disconnect(struct phy_device *phydev);
  void phy_detach(struct phy_device *phydev);
  void phy_start(struct phy_device *phydev);
  void phy_stop(struct phy_device *phydev);
  int phy_start_aneg(struct phy_device *phydev);
e13934563   Andy Fleming   [PATCH] PHY Layer...
467
  int phy_stop_interrupts(struct phy_device *phydev);
00db8189d   Andy Fleming   This patch adds a...
468
469
470
471
  
  static inline int phy_read_status(struct phy_device *phydev) {
  	return phydev->drv->read_status(phydev);
  }
00db8189d   Andy Fleming   This patch adds a...
472
473
474
475
  int genphy_restart_aneg(struct phy_device *phydev);
  int genphy_config_aneg(struct phy_device *phydev);
  int genphy_update_link(struct phy_device *phydev);
  int genphy_read_status(struct phy_device *phydev);
0f0ca340e   Giuseppe Cavallaro   phy: power manage...
476
477
  int genphy_suspend(struct phy_device *phydev);
  int genphy_resume(struct phy_device *phydev);
00db8189d   Andy Fleming   This patch adds a...
478
479
  void phy_driver_unregister(struct phy_driver *drv);
  int phy_driver_register(struct phy_driver *new_driver);
4f9c85a1b   Anton Vorontsov   phylib: Move work...
480
  void phy_state_machine(struct work_struct *work);
00db8189d   Andy Fleming   This patch adds a...
481
482
483
484
485
486
  void phy_start_machine(struct phy_device *phydev,
  		void (*handler)(struct net_device *));
  void phy_stop_machine(struct phy_device *phydev);
  int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd);
  int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd);
  int phy_mii_ioctl(struct phy_device *phydev,
28b041139   Richard Cochran   net: preserve ifr...
487
  		struct ifreq *ifr, int cmd);
e13934563   Andy Fleming   [PATCH] PHY Layer...
488
489
  int phy_start_interrupts(struct phy_device *phydev);
  void phy_print_status(struct phy_device *phydev);
6f4a7f418   Anton Vorontsov   PHY: Add the phy_...
490
  void phy_device_free(struct phy_device *phydev);
00db8189d   Andy Fleming   This patch adds a...
491

f62220d3a   Andy Fleming   phylib: Add suppo...
492
493
494
495
496
497
498
  int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
  		int (*run)(struct phy_device *));
  int phy_register_fixup_for_id(const char *bus_id,
  		int (*run)(struct phy_device *));
  int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
  		int (*run)(struct phy_device *));
  int phy_scan_fixups(struct phy_device *phydev);
9b9a8bfc8   Andy Fleming   phylib: Fix some ...
499
500
  int __init mdio_bus_init(void);
  void mdio_bus_exit(void);
00db8189d   Andy Fleming   This patch adds a...
501
  extern struct bus_type mdio_bus_type;
00db8189d   Andy Fleming   This patch adds a...
502
  #endif /* __PHY_H */