Blame view
include/linux/phy.h
31 KB
00db8189d This patch adds a... |
1 |
/* |
00db8189d This patch adds a... |
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
* 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 |
2220943a2 phy: Centralise p... |
18 |
#include <linux/compiler.h> |
00db8189d This patch adds a... |
19 |
#include <linux/spinlock.h> |
13df29f69 [PATCH] 2.6.18: s... |
20 |
#include <linux/ethtool.h> |
bac83c653 mdio: Move mdiobu... |
21 |
#include <linux/mdio.h> |
13df29f69 [PATCH] 2.6.18: s... |
22 |
#include <linux/mii.h> |
3e3aaf649 phy: fix mdiobus ... |
23 |
#include <linux/module.h> |
13df29f69 [PATCH] 2.6.18: s... |
24 25 |
#include <linux/timer.h> #include <linux/workqueue.h> |
8626d3b43 phylib: Support p... |
26 |
#include <linux/mod_devicetable.h> |
00db8189d This patch adds a... |
27 |
|
60063497a atomic: use <linu... |
28 |
#include <linux/atomic.h> |
0ac495273 PHYLIB: IRQ event... |
29 |
|
e9fbdf176 net: phy: breakdo... |
30 |
#define PHY_DEFAULT_FEATURES (SUPPORTED_Autoneg | \ |
00db8189d This patch adds a... |
31 32 |
SUPPORTED_TP | \ SUPPORTED_MII) |
e9fbdf176 net: phy: breakdo... |
33 34 35 36 37 38 39 |
#define PHY_10BT_FEATURES (SUPPORTED_10baseT_Half | \ SUPPORTED_10baseT_Full) #define PHY_100BT_FEATURES (SUPPORTED_100baseT_Half | \ SUPPORTED_100baseT_Full) #define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \ |
00db8189d This patch adds a... |
40 |
SUPPORTED_1000baseT_Full) |
e9fbdf176 net: phy: breakdo... |
41 42 43 44 45 46 |
#define PHY_BASIC_FEATURES (PHY_10BT_FEATURES | \ PHY_100BT_FEATURES | \ PHY_DEFAULT_FEATURES) #define PHY_GBIT_FEATURES (PHY_BASIC_FEATURES | \ PHY_1000BT_FEATURES) |
c5e38a949 phy: Clean up hea... |
47 48 |
/* * Set phydev->irq to PHY_POLL if interrupts are not supported, |
00db8189d This patch adds a... |
49 50 51 52 53 54 55 |
* 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 |
1b86f702f net: phy: Remove ... |
56 |
#define PHY_IS_INTERNAL 0x00000002 |
a9049e0c5 mdio: Add support... |
57 |
#define MDIO_DEVICE_IS_PHY 0x80000000 |
00db8189d This patch adds a... |
58 |
|
e8a2b6a42 [PATCH] PHY: Add ... |
59 60 |
/* Interface Mode definitions */ typedef enum { |
4157ef1b8 net: ibm_newemac:... |
61 |
PHY_INTERFACE_MODE_NA, |
735d8a184 net: phy: Support... |
62 |
PHY_INTERFACE_MODE_INTERNAL, |
e8a2b6a42 [PATCH] PHY: Add ... |
63 64 65 66 |
PHY_INTERFACE_MODE_MII, PHY_INTERFACE_MODE_GMII, PHY_INTERFACE_MODE_SGMII, PHY_INTERFACE_MODE_TBI, |
2cc70ba4c phy: add reverse ... |
67 |
PHY_INTERFACE_MODE_REVMII, |
e8a2b6a42 [PATCH] PHY: Add ... |
68 69 |
PHY_INTERFACE_MODE_RMII, PHY_INTERFACE_MODE_RGMII, |
a999589cc phylib: add RGMII... |
70 |
PHY_INTERFACE_MODE_RGMII_ID, |
7d400a4c5 phylib: add PHY i... |
71 72 |
PHY_INTERFACE_MODE_RGMII_RXID, PHY_INTERFACE_MODE_RGMII_TXID, |
4157ef1b8 net: ibm_newemac:... |
73 74 |
PHY_INTERFACE_MODE_RTBI, PHY_INTERFACE_MODE_SMII, |
898dd0bda phylib: introduce... |
75 |
PHY_INTERFACE_MODE_XGMII, |
fd70f72c6 net: phy: add MoC... |
76 |
PHY_INTERFACE_MODE_MOCA, |
b9d12085f net: phy: add min... |
77 |
PHY_INTERFACE_MODE_QSGMII, |
572de608e net: ethernet: me... |
78 |
PHY_INTERFACE_MODE_TRGMII, |
55601a880 net: phy: Add 200... |
79 80 81 |
PHY_INTERFACE_MODE_1000BASEX, PHY_INTERFACE_MODE_2500BASEX, PHY_INTERFACE_MODE_RXAUI, |
c125ca091 net: phy: add XAU... |
82 83 84 |
PHY_INTERFACE_MODE_XAUI, /* 10GBASE-KR, XFI, SFI - single lane 10G Serdes */ PHY_INTERFACE_MODE_10GKR, |
8a2fe56e8 net: phy: re-desi... |
85 |
PHY_INTERFACE_MODE_MAX, |
e8a2b6a42 [PATCH] PHY: Add ... |
86 |
} phy_interface_t; |
8a2fe56e8 net: phy: re-desi... |
87 |
/** |
1f9127cae net: phy: Create ... |
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
* phy_supported_speeds - return all speeds currently supported by a phy device * @phy: The phy device to return supported speeds of. * @speeds: buffer to store supported speeds in. * @size: size of speeds buffer. * * Description: Returns the number of supported speeds, and * fills the speeds * buffer with the supported speeds. If speeds buffer is * too small to contain * all currently supported speeds, will return as * many speeds as can fit. */ unsigned int phy_supported_speeds(struct phy_device *phy, unsigned int *speeds, unsigned int size); /** |
8a2fe56e8 net: phy: re-desi... |
103 104 105 106 107 108 109 110 111 |
* It maps 'enum phy_interface_t' found in include/linux/phy.h * into the device tree binding of 'phy-mode', so that Ethernet * device driver can get phy interface from device tree. */ static inline const char *phy_modes(phy_interface_t interface) { switch (interface) { case PHY_INTERFACE_MODE_NA: return ""; |
735d8a184 net: phy: Support... |
112 113 |
case PHY_INTERFACE_MODE_INTERNAL: return "internal"; |
8a2fe56e8 net: phy: re-desi... |
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
case PHY_INTERFACE_MODE_MII: return "mii"; case PHY_INTERFACE_MODE_GMII: return "gmii"; case PHY_INTERFACE_MODE_SGMII: return "sgmii"; case PHY_INTERFACE_MODE_TBI: return "tbi"; case PHY_INTERFACE_MODE_REVMII: return "rev-mii"; case PHY_INTERFACE_MODE_RMII: return "rmii"; case PHY_INTERFACE_MODE_RGMII: return "rgmii"; case PHY_INTERFACE_MODE_RGMII_ID: return "rgmii-id"; case PHY_INTERFACE_MODE_RGMII_RXID: return "rgmii-rxid"; case PHY_INTERFACE_MODE_RGMII_TXID: return "rgmii-txid"; case PHY_INTERFACE_MODE_RTBI: return "rtbi"; case PHY_INTERFACE_MODE_SMII: return "smii"; case PHY_INTERFACE_MODE_XGMII: return "xgmii"; |
fd70f72c6 net: phy: add MoC... |
140 141 |
case PHY_INTERFACE_MODE_MOCA: return "moca"; |
b9d12085f net: phy: add min... |
142 143 |
case PHY_INTERFACE_MODE_QSGMII: return "qsgmii"; |
572de608e net: ethernet: me... |
144 145 |
case PHY_INTERFACE_MODE_TRGMII: return "trgmii"; |
55601a880 net: phy: Add 200... |
146 147 148 149 150 151 |
case PHY_INTERFACE_MODE_1000BASEX: return "1000base-x"; case PHY_INTERFACE_MODE_2500BASEX: return "2500base-x"; case PHY_INTERFACE_MODE_RXAUI: return "rxaui"; |
c125ca091 net: phy: add XAU... |
152 153 154 155 |
case PHY_INTERFACE_MODE_XAUI: return "xaui"; case PHY_INTERFACE_MODE_10GKR: return "10gbase-kr"; |
8a2fe56e8 net: phy: re-desi... |
156 157 158 159 |
default: return "unknown"; } } |
00db8189d This patch adds a... |
160 |
|
e8a2b6a42 [PATCH] PHY: Add ... |
161 |
#define PHY_INIT_TIMEOUT 100000 |
00db8189d This patch adds a... |
162 163 164 |
#define PHY_STATE_TIME 1 #define PHY_FORCE_TIMEOUT 10 #define PHY_AN_TIMEOUT 10 |
e8a2b6a42 [PATCH] PHY: Add ... |
165 |
#define PHY_MAX_ADDR 32 |
00db8189d This patch adds a... |
166 |
|
a4d00f179 [PATCH] phy: Adde... |
167 |
/* Used when trying to connect to a specific phy (mii bus id:phy device id) */ |
9d9326d3b phy: Change mii_b... |
168 |
#define PHY_ID_FMT "%s:%02x" |
4567d686f phy: increase siz... |
169 |
#define MII_BUS_ID_SIZE 61 |
a4d00f179 [PATCH] phy: Adde... |
170 |
|
abf35df21 NET: Support clau... |
171 172 173 |
/* 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) |
313162d0b device.h: audit a... |
174 |
struct device; |
9525ae839 phylink: add phyl... |
175 |
struct phylink; |
313162d0b device.h: audit a... |
176 |
struct sk_buff; |
c5e38a949 phy: Clean up hea... |
177 178 179 180 |
/* * The Bus class for PHYs. Devices which provide access to * PHYs should register using this structure */ |
00db8189d This patch adds a... |
181 |
struct mii_bus { |
3e3aaf649 phy: fix mdiobus ... |
182 |
struct module *owner; |
00db8189d This patch adds a... |
183 |
const char *name; |
9d9326d3b phy: Change mii_b... |
184 |
char id[MII_BUS_ID_SIZE]; |
00db8189d This patch adds a... |
185 |
void *priv; |
ccaa953e9 phy: Consistently... |
186 187 |
int (*read)(struct mii_bus *bus, int addr, int regnum); int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val); |
00db8189d This patch adds a... |
188 |
int (*reset)(struct mii_bus *bus); |
c5e38a949 phy: Clean up hea... |
189 190 191 192 |
/* * A lock to ensure that only one thing can read/write * the MDIO bus at a time */ |
35b5f6b1a PHYLIB: Locking f... |
193 |
struct mutex mdio_lock; |
00db8189d This patch adds a... |
194 |
|
18ee49ddb phylib: rename mi... |
195 |
struct device *parent; |
46abc0217 phylib: give mdio... |
196 197 198 199 200 201 202 |
enum { MDIOBUS_ALLOCATED = 1, MDIOBUS_REGISTERED, MDIOBUS_UNREGISTERED, MDIOBUS_RELEASED, } state; struct device dev; |
00db8189d This patch adds a... |
203 204 |
/* list of all PHYs on bus */ |
7f854420f phy: Add API for ... |
205 |
struct mdio_device *mdio_map[PHY_MAX_ADDR]; |
00db8189d This patch adds a... |
206 |
|
c68839963 net: Improve comm... |
207 |
/* PHY addresses to be ignored when probing */ |
f896424cb [PATCH] phy addre... |
208 |
u32 phy_mask; |
922f2dd1b net: phy: Add phy... |
209 210 |
/* PHY addresses to ignore the TA/read failure */ u32 phy_ignore_ta_mask; |
c5e38a949 phy: Clean up hea... |
211 |
/* |
e7f4dc353 mdio: Move alloca... |
212 213 |
* An array of interrupts, each PHY's interrupt at the index * matching its address |
c5e38a949 phy: Clean up hea... |
214 |
*/ |
e7f4dc353 mdio: Move alloca... |
215 |
int irq[PHY_MAX_ADDR]; |
69226896a mdio_bus: Issue G... |
216 217 218 |
/* GPIO reset pulse width in microseconds */ int reset_delay_us; |
d396e84c5 mdio_bus: handle ... |
219 220 |
/* RESET GPIO descriptor pointer */ struct gpio_desc *reset_gpiod; |
00db8189d This patch adds a... |
221 |
}; |
46abc0217 phylib: give mdio... |
222 |
#define to_mii_bus(d) container_of(d, struct mii_bus, dev) |
00db8189d This patch adds a... |
223 |
|
eb8a54a78 phylib: introduce... |
224 225 226 227 228 |
struct mii_bus *mdiobus_alloc_size(size_t); static inline struct mii_bus *mdiobus_alloc(void) { return mdiobus_alloc_size(0); } |
3e3aaf649 phy: fix mdiobus ... |
229 230 |
int __mdiobus_register(struct mii_bus *bus, struct module *owner); #define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE) |
2e8881032 phylib: add mdiob... |
231 232 |
void mdiobus_unregister(struct mii_bus *bus); void mdiobus_free(struct mii_bus *bus); |
6d48f44b7 mdio_bus: impleme... |
233 234 235 236 237 238 239 |
struct mii_bus *devm_mdiobus_alloc_size(struct device *dev, int sizeof_priv); static inline struct mii_bus *devm_mdiobus_alloc(struct device *dev) { return devm_mdiobus_alloc_size(dev, 0); } void devm_mdiobus_free(struct device *dev, struct mii_bus *bus); |
2e8881032 phylib: add mdiob... |
240 |
struct phy_device *mdiobus_scan(struct mii_bus *bus, int addr); |
2e8881032 phylib: add mdiob... |
241 |
|
e8a2b6a42 [PATCH] PHY: Add ... |
242 243 |
#define PHY_INTERRUPT_DISABLED 0x0 #define PHY_INTERRUPT_ENABLED 0x80000000 |
00db8189d This patch adds a... |
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 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 |
/* 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 { |
4017b4d32 <linux/phy.h>: co... |
326 |
PHY_DOWN = 0, |
00db8189d This patch adds a... |
327 328 329 330 331 332 333 334 335 336 337 338 |
PHY_STARTING, PHY_READY, PHY_PENDING, PHY_UP, PHY_AN, PHY_RUNNING, PHY_NOLINK, PHY_FORCING, PHY_CHANGELINK, PHY_HALTED, PHY_RESUMING }; |
ac28b9f8c netdev/phy: Handl... |
339 340 341 342 343 344 345 346 347 |
/** * struct phy_c45_device_ids - 802.3-c45 Device Identifiers * @devices_in_package: Bit vector of devices present. * @device_ids: The device identifer for each present device. */ struct phy_c45_device_ids { u32 devices_in_package; u32 device_ids[8]; }; |
c1f19b51d net: support time... |
348 |
|
00db8189d This patch adds a... |
349 350 351 |
/* phy_device: An instance of a PHY * * drv: Pointer to the driver for this PHY instance |
00db8189d This patch adds a... |
352 |
* phy_id: UID for this device found during discovery |
ac28b9f8c netdev/phy: Handl... |
353 354 |
* c45_ids: 802.3-c45 Device Identifers if is_c45. * is_c45: Set to true if this phy uses clause 45 addressing. |
4284b6a53 phy: allow driver... |
355 |
* is_internal: Set to true if this phy is internal to a MAC. |
5a11dd7d9 net: phy: Allow P... |
356 |
* is_pseudo_fixed_link: Set to true if this phy is an Ethernet switch, etc. |
aae88261a net: phy: documen... |
357 |
* has_fixups: Set to true if this phy has fixups/quirks. |
8a477a6fb net: phy: keep tr... |
358 |
* suspended: Set to true if this phy has been suspended successfully. |
a39954604 net: phy: Relax e... |
359 |
* sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal. |
f0f9b4ed2 net: phy: Add phy... |
360 |
* loopback_enabled: Set true if this phy has been loopbacked successfully. |
00db8189d This patch adds a... |
361 362 |
* state: state of the PHY for management purposes * dev_flags: Device-specific flags used by the PHY driver. |
00db8189d This patch adds a... |
363 364 365 366 |
* 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 |
664fcf123 net: phy: Threade... |
367 |
* phy_queue: A work_queue for the phy_mac_interrupt |
00db8189d This patch adds a... |
368 369 370 |
* 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. |
00db8189d This patch adds a... |
371 |
* |
114002bc1 net: phy: report ... |
372 373 |
* speed, duplex, pause, supported, advertising, lp_advertising, * and autoneg are used like in mii_if_info |
00db8189d This patch adds a... |
374 375 376 377 378 379 380 381 382 |
* * 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 { |
e5a03bfd8 phy: Add an mdio_... |
383 |
struct mdio_device mdio; |
00db8189d This patch adds a... |
384 385 386 |
/* Information about the PHY type */ /* And management functions */ struct phy_driver *drv; |
00db8189d This patch adds a... |
387 |
u32 phy_id; |
ac28b9f8c netdev/phy: Handl... |
388 389 |
struct phy_c45_device_ids c45_ids; bool is_c45; |
4284b6a53 phy: allow driver... |
390 |
bool is_internal; |
5a11dd7d9 net: phy: Allow P... |
391 |
bool is_pseudo_fixed_link; |
b0ae009f3 net: phy: add "ha... |
392 |
bool has_fixups; |
8a477a6fb net: phy: keep tr... |
393 |
bool suspended; |
a39954604 net: phy: Relax e... |
394 |
bool sysfs_links; |
f0f9b4ed2 net: phy: Add phy... |
395 |
bool loopback_enabled; |
ac28b9f8c netdev/phy: Handl... |
396 |
|
00db8189d This patch adds a... |
397 398 399 |
enum phy_state state; u32 dev_flags; |
e8a2b6a42 [PATCH] PHY: Add ... |
400 |
phy_interface_t interface; |
c5e38a949 phy: Clean up hea... |
401 402 |
/* * forced speed & duplex (no autoneg) |
00db8189d This patch adds a... |
403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 |
* 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; |
114002bc1 net: phy: report ... |
420 |
u32 lp_advertising; |
00db8189d This patch adds a... |
421 |
|
d853d145e net: phy: add an ... |
422 423 |
/* Energy efficient ethernet modes which should be prohibited */ u32 eee_broken_modes; |
00db8189d This patch adds a... |
424 425 426 |
int autoneg; int link_timeout; |
2e0bc452f net: phy: leds: a... |
427 428 429 430 431 |
#ifdef CONFIG_LED_TRIGGER_PHY struct phy_led_trigger *phy_led_triggers; unsigned int phy_num_led_triggers; struct phy_led_trigger *last_triggered; #endif |
c5e38a949 phy: Clean up hea... |
432 433 434 435 |
/* * Interrupt number for this PHY * -1 means no interrupt */ |
00db8189d This patch adds a... |
436 437 438 439 440 441 442 443 |
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 phylib: convert s... |
444 |
struct delayed_work state_queue; |
0ac495273 PHYLIB: IRQ event... |
445 |
atomic_t irq_disable; |
00db8189d This patch adds a... |
446 |
|
35b5f6b1a PHYLIB: Locking f... |
447 |
struct mutex lock; |
00db8189d This patch adds a... |
448 |
|
9525ae839 phylink: add phyl... |
449 |
struct phylink *phylink; |
00db8189d This patch adds a... |
450 |
struct net_device *attached_dev; |
634ec36cc net: phy: Pass md... |
451 |
u8 mdix; |
f4ed2fe34 net: phy: add mdi... |
452 |
u8 mdix_ctrl; |
634ec36cc net: phy: Pass md... |
453 |
|
a81497bee net: phy: provide... |
454 |
void (*phy_link_change)(struct phy_device *, bool up, bool do_carrier); |
00db8189d This patch adds a... |
455 |
void (*adjust_link)(struct net_device *dev); |
00db8189d This patch adds a... |
456 |
}; |
e5a03bfd8 phy: Add an mdio_... |
457 458 |
#define to_phy_device(d) container_of(to_mdio_device(d), \ struct phy_device, mdio) |
00db8189d This patch adds a... |
459 460 461 |
/* struct phy_driver: Driver structure for a particular PHY type * |
a9049e0c5 mdio: Add support... |
462 |
* driver_data: static driver data |
00db8189d This patch adds a... |
463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 |
* 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 { |
a9049e0c5 mdio: Add support... |
482 |
struct mdio_driver_common mdiodrv; |
00db8189d This patch adds a... |
483 484 485 486 487 |
u32 phy_id; char *name; unsigned int phy_id_mask; u32 features; u32 flags; |
860f6e9eb net: phy: add sta... |
488 |
const void *driver_data; |
00db8189d This patch adds a... |
489 |
|
c5e38a949 phy: Clean up hea... |
490 |
/* |
9df81dd75 net: phy: allow P... |
491 492 493 494 495 |
* Called to issue a PHY software reset */ int (*soft_reset)(struct phy_device *phydev); /* |
c5e38a949 phy: Clean up hea... |
496 497 498 |
* Called to initialize the PHY, * including after a reset */ |
00db8189d This patch adds a... |
499 |
int (*config_init)(struct phy_device *phydev); |
c5e38a949 phy: Clean up hea... |
500 501 502 503 |
/* * Called during discovery. Used to set * up device-specific structures, if any */ |
00db8189d This patch adds a... |
504 505 506 507 508 |
int (*probe)(struct phy_device *phydev); /* PHY Power Management */ int (*suspend)(struct phy_device *phydev); int (*resume)(struct phy_device *phydev); |
c5e38a949 phy: Clean up hea... |
509 510 |
/* * Configures the advertisement and resets |
00db8189d This patch adds a... |
511 512 |
* autonegotiation if phydev->autoneg is on, * forces the speed to the current settings in phydev |
c5e38a949 phy: Clean up hea... |
513 514 |
* if phydev->autoneg is off */ |
00db8189d This patch adds a... |
515 |
int (*config_aneg)(struct phy_device *phydev); |
76a423a3f net: phy: allow d... |
516 517 |
/* Determines the auto negotiation result */ int (*aneg_done)(struct phy_device *phydev); |
00db8189d This patch adds a... |
518 519 520 521 522 523 524 525 |
/* 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 phylib: Allow ear... |
526 527 528 529 530 |
/* * Checks if the PHY generated an interrupt. * For multi-PHY devices with shared PHY interrupt pin */ int (*did_interrupt)(struct phy_device *phydev); |
00db8189d This patch adds a... |
531 532 |
/* Clears up any memory if needed */ void (*remove)(struct phy_device *phydev); |
a30e2c189 netdev/phy/of: Ad... |
533 534 535 536 537 |
/* Returns true if this is a suitable driver for the given * phydev. If NULL, matching is based on phy_id and * phy_id_mask. */ int (*match_phy_device)(struct phy_device *phydev); |
c8f3a8c31 ethtool: Introduc... |
538 539 |
/* Handles ethtool queries for hardware time stamping. */ int (*ts_info)(struct phy_device *phydev, struct ethtool_ts_info *ti); |
c1f19b51d net: support time... |
540 541 542 543 544 545 546 547 548 549 550 551 552 553 |
/* 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 net: hold sock re... |
554 |
* to deliver it using skb_complete_tx_timestamp() as soon as a |
c1f19b51d net: support time... |
555 556 557 558 |
* 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); |
42e836eb4 phy: add set_wol/... |
559 560 561 562 563 564 565 |
/* Some devices (e.g. qnap TS-119P II) require PHY register changes to * enable Wake on LAN, so set_wol is provided to be called in the * ethernet driver's set_wol function. */ int (*set_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); /* See set_wol, but for checking whether Wake on LAN is enabled. */ void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol); |
2b8f2a28e net: phylib: add ... |
566 567 568 569 570 571 572 573 |
/* * Called to inform a PHY device driver when the core is about to * change the link state. This callback is supposed to be used as * fixup hook for drivers that need to take action when the link * state changes. Drivers are by no means allowed to mess with the * PHY device structure in their implementations. */ void (*link_change_notify)(struct phy_device *dev); |
1ee6b9bc6 net: phy: make ph... |
574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 |
/* * Phy specific driver override for reading a MMD register. * This function is optional for PHY specific drivers. When * not provided, the default MMD read function will be used * by phy_read_mmd(), which will use either a direct read for * Clause 45 PHYs or an indirect read for Clause 22 PHYs. * devnum is the MMD device number within the PHY device, * regnum is the register within the selected MMD device. */ int (*read_mmd)(struct phy_device *dev, int devnum, u16 regnum); /* * Phy specific driver override for writing a MMD register. * This function is optional for PHY specific drivers. When * not provided, the default MMD write function will be used * by phy_write_mmd(), which will use either a direct write for * Clause 45 PHYs, or an indirect write for Clause 22 PHYs. * devnum is the MMD device number within the PHY device, * regnum is the register within the selected MMD device. * val is the value to be written. */ int (*write_mmd)(struct phy_device *dev, int devnum, u16 regnum, u16 val); |
2f4383667 ethtool: Extend e... |
597 598 599 600 601 602 603 604 |
/* Get the size and type of the eeprom contained within a plug-in * module */ int (*module_info)(struct phy_device *dev, struct ethtool_modinfo *modinfo); /* Get the eeprom information from the plug-in module */ int (*module_eeprom)(struct phy_device *dev, struct ethtool_eeprom *ee, u8 *data); |
f3a409455 ethtool: Add phy ... |
605 606 607 608 609 |
/* Get statistics from the phy using ethtool */ int (*get_sset_count)(struct phy_device *dev); void (*get_strings)(struct phy_device *dev, u8 *data); void (*get_stats)(struct phy_device *dev, struct ethtool_stats *stats, u64 *data); |
968ad9da7 ethtool: Implemen... |
610 611 612 613 614 615 616 |
/* Get and Set PHY tunables */ int (*get_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, void *data); int (*set_tunable)(struct phy_device *dev, struct ethtool_tunable *tuna, const void *data); |
f0f9b4ed2 net: phy: Add phy... |
617 |
int (*set_loopback)(struct phy_device *dev, bool enable); |
00db8189d This patch adds a... |
618 |
}; |
a9049e0c5 mdio: Add support... |
619 620 |
#define to_phy_driver(d) container_of(to_mdio_common_driver(d), \ struct phy_driver, mdiodrv) |
00db8189d This patch adds a... |
621 |
|
f62220d3a phylib: Add suppo... |
622 623 624 625 626 627 |
#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; |
4567d686f phy: increase siz... |
628 |
char bus_id[MII_BUS_ID_SIZE + 3]; |
f62220d3a phylib: Add suppo... |
629 630 631 632 |
u32 phy_uid; u32 phy_uid_mask; int (*run)(struct phy_device *phydev); }; |
da4625ac2 net: phy: split o... |
633 634 |
const char *phy_speed_to_str(int speed); const char *phy_duplex_to_str(unsigned int duplex); |
0ccb4fc65 net: phy: move ph... |
635 636 637 638 639 640 641 642 643 644 645 646 647 648 |
/* A structure for mapping a particular speed and duplex * combination to a particular SUPPORTED and ADVERTISED value */ struct phy_setting { u32 speed; u8 duplex; u8 bit; }; const struct phy_setting * phy_lookup_setting(int speed, int duplex, const unsigned long *mask, size_t maxbit, bool exact); size_t phy_speeds(unsigned int *speeds, size_t size, unsigned long *mask, size_t maxbit); |
2e8881032 phylib: add mdiob... |
649 |
/** |
efabdfb95 phylib: Add Claus... |
650 651 652 653 654 655 656 657 |
* phy_read_mmd - Convenience function for reading a register * from an MMD on a given PHY. * @phydev: The phy_device struct * @devad: The MMD to read from * @regnum: The register on the MMD to read * * Same rules as for phy_read(); */ |
9860118b5 net: phy: move ph... |
658 |
int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum); |
efabdfb95 phylib: Add Claus... |
659 660 |
/** |
2e8881032 phylib: add mdiob... |
661 662 663 664 665 666 667 668 |
* 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 NET: Support clau... |
669 |
static inline int phy_read(struct phy_device *phydev, u32 regnum) |
2e8881032 phylib: add mdiob... |
670 |
{ |
e5a03bfd8 phy: Add an mdio_... |
671 |
return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum); |
2e8881032 phylib: add mdiob... |
672 673 674 675 676 677 678 679 680 681 682 683 |
} /** * 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 NET: Support clau... |
684 |
static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val) |
2e8881032 phylib: add mdiob... |
685 |
{ |
e5a03bfd8 phy: Add an mdio_... |
686 |
return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val); |
2e8881032 phylib: add mdiob... |
687 |
} |
2c7b49212 phy: fix the use ... |
688 689 690 691 692 693 694 695 696 697 698 |
/** * phy_interrupt_is_valid - Convenience function for testing a given PHY irq * @phydev: the phy_device struct * * NOTE: must be kept in sync with addition/removal of PHY_POLL and * PHY_IGNORE_INTERRUPT */ static inline bool phy_interrupt_is_valid(struct phy_device *phydev) { return phydev->irq != PHY_POLL && phydev->irq != PHY_IGNORE_INTERRUPT; } |
4284b6a53 phy: allow driver... |
699 700 701 702 703 704 705 706 |
/** * phy_is_internal - Convenience function for testing if a PHY is internal * @phydev: the phy_device struct */ static inline bool phy_is_internal(struct phy_device *phydev) { return phydev->is_internal; } |
efabdfb95 phylib: Add Claus... |
707 |
/** |
32d0f7830 phy: Add helper f... |
708 709 710 711 712 713 714 715 716 717 718 |
* phy_interface_mode_is_rgmii - Convenience function for testing if a * PHY interface mode is RGMII (all variants) * @mode: the phy_interface_t enum */ static inline bool phy_interface_mode_is_rgmii(phy_interface_t mode) { return mode >= PHY_INTERFACE_MODE_RGMII && mode <= PHY_INTERFACE_MODE_RGMII_TXID; }; /** |
e463d88c3 net: phy: Add phy... |
719 720 721 722 723 724 |
* phy_interface_is_rgmii - Convenience function for testing if a PHY interface * is RGMII (all variants) * @phydev: the phy_device struct */ static inline bool phy_interface_is_rgmii(struct phy_device *phydev) { |
32d0f7830 phy: Add helper f... |
725 |
return phy_interface_mode_is_rgmii(phydev->interface); |
5a11dd7d9 net: phy: Allow P... |
726 727 728 729 730 731 732 733 734 735 |
}; /* * phy_is_pseudo_fixed_link - Convenience function for testing if this * PHY is the CPU port facing side of an Ethernet switch, or similar. * @phydev: the phy_device struct */ static inline bool phy_is_pseudo_fixed_link(struct phy_device *phydev) { return phydev->is_pseudo_fixed_link; |
e463d88c3 net: phy: Add phy... |
736 737 738 |
} /** |
efabdfb95 phylib: Add Claus... |
739 740 741 742 743 744 745 746 747 |
* phy_write_mmd - Convenience function for writing a register * on an MMD on a given PHY. * @phydev: The phy_device struct * @devad: The MMD to read from * @regnum: The register on the MMD to read * @val: value to write to @regnum * * Same rules as for phy_write(); */ |
9860118b5 net: phy: move ph... |
748 |
int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val); |
efabdfb95 phylib: Add Claus... |
749 |
|
ac28b9f8c netdev/phy: Handl... |
750 |
struct phy_device *phy_device_create(struct mii_bus *bus, int addr, int phy_id, |
4017b4d32 <linux/phy.h>: co... |
751 752 |
bool is_c45, struct phy_c45_device_ids *c45_ids); |
90eff9096 net: phy: Allow s... |
753 |
#if IS_ENABLED(CONFIG_PHYLIB) |
ac28b9f8c netdev/phy: Handl... |
754 |
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45); |
4dea547fe phylib: rework to... |
755 |
int phy_device_register(struct phy_device *phy); |
90eff9096 net: phy: Allow s... |
756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 |
void phy_device_free(struct phy_device *phydev); #else static inline struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45) { return NULL; } static inline int phy_device_register(struct phy_device *phy) { return 0; } static inline void phy_device_free(struct phy_device *phydev) { } #endif /* CONFIG_PHYLIB */ |
38737e490 phy: add phy_devi... |
771 |
void phy_device_remove(struct phy_device *phydev); |
2f5cb4340 phylib: Properly ... |
772 |
int phy_init_hw(struct phy_device *phydev); |
481b5d938 net: phy: provide... |
773 774 |
int phy_suspend(struct phy_device *phydev); int phy_resume(struct phy_device *phydev); |
6bccf8962 net: phy: Restore... |
775 |
int __phy_resume(struct phy_device *phydev); |
f0f9b4ed2 net: phy: Add phy... |
776 |
int phy_loopback(struct phy_device *phydev, bool enable); |
4017b4d32 <linux/phy.h>: co... |
777 778 |
struct phy_device *phy_attach(struct net_device *dev, const char *bus_id, phy_interface_t interface); |
f8f76db1d libphy: add phy_f... |
779 |
struct phy_device *phy_find_first(struct mii_bus *bus); |
257184d7c phylib: Support a... |
780 781 |
int phy_attach_direct(struct net_device *dev, struct phy_device *phydev, u32 flags, phy_interface_t interface); |
fa94f6d93 phylib: add *_dir... |
782 |
int phy_connect_direct(struct net_device *dev, struct phy_device *phydev, |
4017b4d32 <linux/phy.h>: co... |
783 784 785 786 787 |
void (*handler)(struct net_device *), phy_interface_t interface); struct phy_device *phy_connect(struct net_device *dev, const char *bus_id, void (*handler)(struct net_device *), phy_interface_t interface); |
e13934563 [PATCH] PHY Layer... |
788 789 790 791 792 |
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); |
372788f96 net: phy: expose ... |
793 |
int phy_aneg_done(struct phy_device *phydev); |
e13934563 [PATCH] PHY Layer... |
794 |
|
e13934563 [PATCH] PHY Layer... |
795 |
int phy_stop_interrupts(struct phy_device *phydev); |
002ba7058 net: phy: hook up... |
796 |
int phy_restart_aneg(struct phy_device *phydev); |
00db8189d This patch adds a... |
797 |
|
4017b4d32 <linux/phy.h>: co... |
798 799 |
static inline int phy_read_status(struct phy_device *phydev) { |
25149ef9d net: phy: Check p... |
800 801 |
if (!phydev->drv) return -EIO; |
00db8189d This patch adds a... |
802 803 |
return phydev->drv->read_status(phydev); } |
72ba48be3 phy: Add phydev_e... |
804 |
#define phydev_err(_phydev, format, args...) \ |
e5a03bfd8 phy: Add an mdio_... |
805 |
dev_err(&_phydev->mdio.dev, format, ##args) |
72ba48be3 phy: Add phydev_e... |
806 807 |
#define phydev_dbg(_phydev, format, args...) \ |
2eaa38d9f net: phy: Remove ... |
808 |
dev_dbg(&_phydev->mdio.dev, format, ##args) |
72ba48be3 phy: Add phydev_e... |
809 |
|
84eff6d19 phy: add phydev_n... |
810 811 |
static inline const char *phydev_name(const struct phy_device *phydev) { |
e5a03bfd8 phy: Add an mdio_... |
812 |
return dev_name(&phydev->mdio.dev); |
84eff6d19 phy: add phydev_n... |
813 |
} |
2220943a2 phy: Centralise p... |
814 815 816 |
void phy_attached_print(struct phy_device *phydev, const char *fmt, ...) __printf(2, 3); void phy_attached_info(struct phy_device *phydev); |
5acde34a5 net: phy: add 802... |
817 818 |
/* Clause 22 PHY */ |
af6b6967d net: phy: export ... |
819 |
int genphy_config_init(struct phy_device *phydev); |
3fb69bcad net/phy: Add the ... |
820 |
int genphy_setup_forced(struct phy_device *phydev); |
00db8189d This patch adds a... |
821 |
int genphy_restart_aneg(struct phy_device *phydev); |
81d76d675 MLK-15309-01 net:... |
822 |
int genphy_config_aneg_check(struct phy_device *phydev); |
00db8189d This patch adds a... |
823 |
int genphy_config_aneg(struct phy_device *phydev); |
a9fa6e6ac net: phy: add gen... |
824 |
int genphy_aneg_done(struct phy_device *phydev); |
00db8189d This patch adds a... |
825 826 |
int genphy_update_link(struct phy_device *phydev); int genphy_read_status(struct phy_device *phydev); |
0f0ca340e phy: power manage... |
827 828 |
int genphy_suspend(struct phy_device *phydev); int genphy_resume(struct phy_device *phydev); |
f0f9b4ed2 net: phy: Add phy... |
829 |
int genphy_loopback(struct phy_device *phydev, bool enable); |
797ac0713 net: phy: move PH... |
830 |
int genphy_soft_reset(struct phy_device *phydev); |
0878fff1f net: phy: Do not ... |
831 832 833 834 |
static inline int genphy_no_soft_reset(struct phy_device *phydev) { return 0; } |
8b882dbba net: phy: Add gen... |
835 836 837 838 |
int genphy_read_mmd_unsupported(struct phy_device *phdev, int devad, u16 regnum); int genphy_write_mmd_unsupported(struct phy_device *phdev, int devnum, u16 regnum, u16 val); |
5acde34a5 net: phy: add 802... |
839 840 841 842 843 844 845 846 847 |
/* Clause 45 PHY */ int genphy_c45_restart_aneg(struct phy_device *phydev); int genphy_c45_aneg_done(struct phy_device *phydev); int genphy_c45_read_link(struct phy_device *phydev, u32 mmd_mask); int genphy_c45_read_lpa(struct phy_device *phydev); int genphy_c45_read_pma(struct phy_device *phydev); int genphy_c45_pma_setup_forced(struct phy_device *phydev); int genphy_c45_an_disable_aneg(struct phy_device *phydev); |
00db8189d This patch adds a... |
848 |
void phy_driver_unregister(struct phy_driver *drv); |
d5bf9071e phylib: Support r... |
849 |
void phy_drivers_unregister(struct phy_driver *drv, int n); |
be01da72b phy: Centralize s... |
850 851 852 |
int phy_driver_register(struct phy_driver *new_driver, struct module *owner); int phy_drivers_register(struct phy_driver *new_driver, int n, struct module *owner); |
4f9c85a1b phylib: Move work... |
853 |
void phy_state_machine(struct work_struct *work); |
664fcf123 net: phy: Threade... |
854 |
void phy_change_work(struct work_struct *work); |
5ea94e768 phy: add phy_mac_... |
855 |
void phy_mac_interrupt(struct phy_device *phydev, int new_link); |
29935aebc phylib: remove un... |
856 |
void phy_start_machine(struct phy_device *phydev); |
00db8189d This patch adds a... |
857 |
void phy_stop_machine(struct phy_device *phydev); |
f555f34fd net: phy: fix aut... |
858 |
void phy_trigger_machine(struct phy_device *phydev, bool sync); |
00db8189d This patch adds a... |
859 |
int phy_ethtool_sset(struct phy_device *phydev, struct ethtool_cmd *cmd); |
5514174fe net: phy: Make ph... |
860 861 |
void phy_ethtool_ksettings_get(struct phy_device *phydev, struct ethtool_link_ksettings *cmd); |
2d55173e7 phy: add generic ... |
862 863 |
int phy_ethtool_ksettings_set(struct phy_device *phydev, const struct ethtool_link_ksettings *cmd); |
4017b4d32 <linux/phy.h>: co... |
864 |
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); |
e13934563 [PATCH] PHY Layer... |
865 866 |
int phy_start_interrupts(struct phy_device *phydev); void phy_print_status(struct phy_device *phydev); |
f3a6bd393 phylib: Add phy_s... |
867 |
int phy_set_max_speed(struct phy_device *phydev, u32 max_speed); |
00db8189d This patch adds a... |
868 |
|
f62220d3a phylib: Add suppo... |
869 |
int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask, |
4017b4d32 <linux/phy.h>: co... |
870 |
int (*run)(struct phy_device *)); |
f62220d3a phylib: Add suppo... |
871 |
int phy_register_fixup_for_id(const char *bus_id, |
4017b4d32 <linux/phy.h>: co... |
872 |
int (*run)(struct phy_device *)); |
f62220d3a phylib: Add suppo... |
873 |
int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask, |
4017b4d32 <linux/phy.h>: co... |
874 |
int (*run)(struct phy_device *)); |
f62220d3a phylib: Add suppo... |
875 |
|
f38e7a32e phy: add phy fixu... |
876 877 878 |
int phy_unregister_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask); int phy_unregister_fixup_for_id(const char *bus_id); int phy_unregister_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask); |
a59a4d192 phy: add the EEE ... |
879 880 881 882 |
int phy_init_eee(struct phy_device *phydev, bool clk_stop_enable); int phy_get_eee_err(struct phy_device *phydev); int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data); int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data); |
42e836eb4 phy: add set_wol/... |
883 |
int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol); |
4017b4d32 <linux/phy.h>: co... |
884 885 |
void phy_ethtool_get_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol); |
9d9a77cee net: phy: add phy... |
886 887 888 889 |
int phy_ethtool_get_link_ksettings(struct net_device *ndev, struct ethtool_link_ksettings *cmd); int phy_ethtool_set_link_ksettings(struct net_device *ndev, const struct ethtool_link_ksettings *cmd); |
e86a8987e net: phy: Add phy... |
890 |
int phy_ethtool_nway_reset(struct net_device *ndev); |
a59a4d192 phy: add the EEE ... |
891 |
|
90eff9096 net: phy: Allow s... |
892 |
#if IS_ENABLED(CONFIG_PHYLIB) |
9b9a8bfc8 phylib: Fix some ... |
893 894 |
int __init mdio_bus_init(void); void mdio_bus_exit(void); |
90eff9096 net: phy: Allow s... |
895 |
#endif |
9b9a8bfc8 phylib: Fix some ... |
896 |
|
00db8189d This patch adds a... |
897 |
extern struct bus_type mdio_bus_type; |
c31accd15 net: phy: add mod... |
898 |
|
648ea0134 net: phy: Allow p... |
899 900 901 902 903 904 |
struct mdio_board_info { const char *bus_id; char modalias[MDIO_NAME_SIZE]; int mdio_addr; const void *platform_data; }; |
90eff9096 net: phy: Allow s... |
905 |
#if IS_ENABLED(CONFIG_MDIO_DEVICE) |
648ea0134 net: phy: Allow p... |
906 907 908 909 910 911 912 913 914 |
int mdiobus_register_board_info(const struct mdio_board_info *info, unsigned int n); #else static inline int mdiobus_register_board_info(const struct mdio_board_info *i, unsigned int n) { return 0; } #endif |
c31accd15 net: phy: add mod... |
915 916 917 918 919 920 921 922 923 924 925 |
/** * module_phy_driver() - Helper macro for registering PHY drivers * @__phy_drivers: array of PHY drivers to register * * Helper macro for PHY drivers which do not do anything special in module * init/exit. Each module may only use this macro once, and calling it * replaces module_init() and module_exit(). */ #define phy_module_driver(__phy_drivers, __count) \ static int __init phy_module_init(void) \ { \ |
be01da72b phy: Centralize s... |
926 |
return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \ |
c31accd15 net: phy: add mod... |
927 928 929 930 931 932 933 934 935 936 |
} \ module_init(phy_module_init); \ static void __exit phy_module_exit(void) \ { \ phy_drivers_unregister(__phy_drivers, __count); \ } \ module_exit(phy_module_exit) #define module_phy_driver(__phy_drivers) \ phy_module_driver(__phy_drivers, ARRAY_SIZE(__phy_drivers)) |
00db8189d This patch adds a... |
937 |
#endif /* __PHY_H */ |