~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/phylink.h

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /include/linux/phylink.h (Version linux-6.12-rc7) and /include/linux/phylink.h (Version linux-4.11.12)


  1 #ifndef NETDEV_PCS_H                                1 
  2 #define NETDEV_PCS_H                              
  3                                                   
  4 #include <linux/phy.h>                            
  5 #include <linux/spinlock.h>                       
  6 #include <linux/workqueue.h>                      
  7                                                   
  8 struct device_node;                               
  9 struct ethtool_cmd;                               
 10 struct fwnode_handle;                             
 11 struct net_device;                                
 12 struct phylink;                                   
 13                                                   
 14 enum {                                            
 15         MLO_PAUSE_NONE,                           
 16         MLO_PAUSE_RX = BIT(0),                    
 17         MLO_PAUSE_TX = BIT(1),                    
 18         MLO_PAUSE_TXRX_MASK = MLO_PAUSE_TX | M    
 19         MLO_PAUSE_AN = BIT(2),                    
 20                                                   
 21         MLO_AN_PHY = 0, /* Conventional PHY */    
 22         MLO_AN_FIXED,   /* Fixed-link mode */     
 23         MLO_AN_INBAND,  /* In-band protocol */    
 24                                                   
 25         /* PCS "negotiation" mode.                
 26          *  PHYLINK_PCS_NEG_NONE - protocol ha    
 27          *  PHYLINK_PCS_NEG_OUTBAND - some out    
 28          *  PHYLINK_PCS_NEG_INBAND_DISABLED -     
 29          *                                        
 30          *  PHYLINK_PCS_NEG_INBAND_ENABLED - i    
 31          * Additionally, this can be tested us    
 32          *  PHYLINK_PCS_NEG_INBAND - inband mo    
 33          *  PHYLINK_PCS_NEG_ENABLED - negotiat    
 34          */                                       
 35         PHYLINK_PCS_NEG_NONE = 0,                 
 36         PHYLINK_PCS_NEG_ENABLED = BIT(4),         
 37         PHYLINK_PCS_NEG_OUTBAND = BIT(5),         
 38         PHYLINK_PCS_NEG_INBAND = BIT(6),          
 39         PHYLINK_PCS_NEG_INBAND_DISABLED = PHYL    
 40         PHYLINK_PCS_NEG_INBAND_ENABLED = PHYLI    
 41                                          PHYLI    
 42                                                   
 43         /* MAC_SYM_PAUSE and MAC_ASYM_PAUSE ar    
 44          * autonegotiation advertisement. They    
 45          * ASM_DIR bits defined by 802.3, resp    
 46          *                                        
 47          * The following table lists the value    
 48          * might be requested in mac_link_up.     
 49          * the results of autonegotation (if M    
 50          * configuration (if MLO_PAUSE_AN is n    
 51          *                                        
 52          * MAC_SYM_PAUSE MAC_ASYM_PAUSE MLO_PA    
 53          * ============= ============== ======    
 54          *             0              0           
 55          *             0              0           
 56          *             0              1           
 57          *             0              1           
 58          *             1              0           
 59          *             1              0           
 60          *             1              1           
 61          *             1              1           
 62          *                                        
 63          * If you set MAC_ASYM_PAUSE, the user    
 64          * tx_pause and rx_pause. You do not h    
 65          * combinations.                          
 66          *                                        
 67          * However, you should support combina    
 68          * which might be the result of autone    
 69          * MAC_SYM_PAUSE unless your device ca    
 70          * at the same time.                      
 71          */                                       
 72         MAC_SYM_PAUSE   = BIT(0),                 
 73         MAC_ASYM_PAUSE  = BIT(1),                 
 74         MAC_10HD        = BIT(2),                 
 75         MAC_10FD        = BIT(3),                 
 76         MAC_10          = MAC_10HD | MAC_10FD,    
 77         MAC_100HD       = BIT(4),                 
 78         MAC_100FD       = BIT(5),                 
 79         MAC_100         = MAC_100HD | MAC_100F    
 80         MAC_1000HD      = BIT(6),                 
 81         MAC_1000FD      = BIT(7),                 
 82         MAC_1000        = MAC_1000HD | MAC_100    
 83         MAC_2500FD      = BIT(8),                 
 84         MAC_5000FD      = BIT(9),                 
 85         MAC_10000FD     = BIT(10),                
 86         MAC_20000FD     = BIT(11),                
 87         MAC_25000FD     = BIT(12),                
 88         MAC_40000FD     = BIT(13),                
 89         MAC_50000FD     = BIT(14),                
 90         MAC_56000FD     = BIT(15),                
 91         MAC_100000FD    = BIT(16),                
 92         MAC_200000FD    = BIT(17),                
 93         MAC_400000FD    = BIT(18),                
 94 };                                                
 95                                                   
 96 static inline bool phylink_autoneg_inband(unsi    
 97 {                                                 
 98         return mode == MLO_AN_INBAND;             
 99 }                                                 
100                                                   
101 /**                                               
102  * struct phylink_link_state - link state stru    
103  * @advertising: ethtool bitmask containing ad    
104  * @lp_advertising: ethtool bitmask containing    
105  *   modes                                        
106  * @interface: link &typedef phy_interface_t m    
107  * @speed: link speed, one of the SPEED_* cons    
108  * @duplex: link duplex mode, one of DUPLEX_*     
109  * @pause: link pause state, described by MLO_    
110  * @rate_matching: rate matching being perform    
111  *   constants. If rate matching is taking pla    
112  *   the medium link mode (@speed and @duplex)    
113  *   interface mode (@interface) are different    
114  * @link: true if the link is up.                 
115  * @an_complete: true if autonegotiation has c    
116  */                                               
117 struct phylink_link_state {                       
118         __ETHTOOL_DECLARE_LINK_MODE_MASK(adver    
119         __ETHTOOL_DECLARE_LINK_MODE_MASK(lp_ad    
120         phy_interface_t interface;                
121         int speed;                                
122         int duplex;                               
123         int pause;                                
124         int rate_matching;                        
125         unsigned int link:1;                      
126         unsigned int an_complete:1;               
127 };                                                
128                                                   
129 enum phylink_op_type {                            
130         PHYLINK_NETDEV = 0,                       
131         PHYLINK_DEV,                              
132 };                                                
133                                                   
134 /**                                               
135  * struct phylink_config - PHYLINK configurati    
136  * @dev: a pointer to a struct device associat    
137  * @type: operation type of PHYLINK instance      
138  * @poll_fixed_state: if true, starts link_pol    
139  *                    if MAC link is at %MLO_A    
140  * @mac_managed_pm: if true, indicate the MAC     
141  * @mac_requires_rxc: if true, the MAC always     
142  *                    The PHY driver should st    
143  *                    possible and avoid stopp    
144  * @default_an_inband: if true, defaults to ML    
145  *                     MLO_AN_PHY. A fixed-lin    
146  * @get_fixed_state: callback to execute to de    
147  *                   if MAC link is at %MLO_AN    
148  * @supported_interfaces: bitmap describing wh    
149  *                        are supported by the    
150  * @mac_capabilities: MAC pause/speed/duplex c    
151  */                                               
152 struct phylink_config {                           
153         struct device *dev;                       
154         enum phylink_op_type type;                
155         bool poll_fixed_state;                    
156         bool mac_managed_pm;                      
157         bool mac_requires_rxc;                    
158         bool default_an_inband;                   
159         void (*get_fixed_state)(struct phylink    
160                                 struct phylink    
161         DECLARE_PHY_INTERFACE_MASK(supported_i    
162         unsigned long mac_capabilities;           
163 };                                                
164                                                   
165 void phylink_limit_mac_speed(struct phylink_co    
166                                                   
167 /**                                               
168  * struct phylink_mac_ops - MAC operations str    
169  * @mac_get_caps: Get MAC capabilities for int    
170  * @mac_select_pcs: Select a PCS for the inter    
171  * @mac_prepare: prepare for a major reconfigu    
172  * @mac_config: configure the MAC for the sele    
173  * @mac_finish: finish a major reconfiguration    
174  * @mac_link_down: take the link down.            
175  * @mac_link_up: allow the link to come up.       
176  *                                                
177  * The individual methods are described more f    
178  */                                               
179 struct phylink_mac_ops {                          
180         unsigned long (*mac_get_caps)(struct p    
181                                       phy_inte    
182         struct phylink_pcs *(*mac_select_pcs)(    
183                                                   
184         int (*mac_prepare)(struct phylink_conf    
185                            phy_interface_t ifa    
186         void (*mac_config)(struct phylink_conf    
187                            const struct phylin    
188         int (*mac_finish)(struct phylink_confi    
189                           phy_interface_t ifac    
190         void (*mac_link_down)(struct phylink_c    
191                               phy_interface_t     
192         void (*mac_link_up)(struct phylink_con    
193                             struct phy_device     
194                             phy_interface_t in    
195                             bool tx_pause, boo    
196 };                                                
197                                                   
198 #if 0 /* For kernel-doc purposes only. */         
199 /**                                               
200  * mac_get_caps: Get MAC capabilities for inte    
201  * @config: a pointer to a &struct phylink_con    
202  * @interface: PHY interface mode.                
203  *                                                
204  * Optional method. When not provided, config-    
205  * When implemented, this returns the MAC capa    
206  * interface mode where there is some special     
207  * driver (e.g. not supporting half-duplex in     
208  */                                               
209 unsigned long mac_get_caps(struct phylink_conf    
210                            phy_interface_t int    
211 /**                                               
212  * mac_select_pcs: Select a PCS for the interf    
213  * @config: a pointer to a &struct phylink_con    
214  * @interface: PHY interface mode for PCS         
215  *                                                
216  * Return the &struct phylink_pcs for the spec    
217  * NULL if none is required, or an error point    
218  *                                                
219  * This must not modify any state. It is used     
220  * be used. Phylink will use this during valid    
221  * configuration is valid, and when setting a     
222  * set the PCS that will be used.                 
223  */                                               
224 struct phylink_pcs *mac_select_pcs(struct phyl    
225                                    phy_interfa    
226                                                   
227 /**                                               
228  * mac_prepare() - prepare to change the PHY i    
229  * @config: a pointer to a &struct phylink_con    
230  * @mode: one of %MLO_AN_FIXED, %MLO_AN_PHY, %    
231  * @iface: interface mode to switch to            
232  *                                                
233  * phylink will call this method at the beginn    
234  * of the link, which includes changing the in    
235  * startup time. It may be called for the curr    
236  * should perform whatever actions are require    
237  * Serdes PHY.                                    
238  *                                                
239  * This will be the first call in the sequence    
240  * - mac_prepare()                                
241  * - mac_config()                                 
242  * - pcs_config()                                 
243  * - possible pcs_an_restart()                    
244  * - mac_finish()                                 
245  *                                                
246  * Returns zero on success, or negative errno     
247  * reported to the kernel log.                    
248  */                                               
249 int mac_prepare(struct phylink_config *config,    
250                 phy_interface_t iface);           
251                                                   
252 /**                                               
253  * mac_config() - configure the MAC for the se    
254  * @config: a pointer to a &struct phylink_con    
255  * @mode: one of %MLO_AN_FIXED, %MLO_AN_PHY, %    
256  * @state: a pointer to a &struct phylink_link    
257  *                                                
258  * Note - not all members of @state are valid.    
259  * @state->lp_advertising, @state->link, @stat    
260  * guaranteed to be correct, and so any mac_co    
261  * never reference these fields.                  
262  *                                                
263  * This will only be called to reconfigure the    
264  * e.g. interface mode. It will not be called     
265  * or pause modes or to change the in-band adv    
266  *                                                
267  * In all negotiation modes, as defined by @mo    
268  * pause settings which should be applied as f    
269  * set, %MLO_PAUSE_TX and %MLO_PAUSE_RX indica    
270  * pause frames and/or act on received pause f    
271  * the results of in-band negotiation/status f    
272  * to control the MAC pause mode settings.        
273  *                                                
274  * The action performed depends on the current    
275  *                                                
276  * %MLO_AN_FIXED, %MLO_AN_PHY:                    
277  *   Configure for non-inband negotiation mode    
278  *   are completely communicated via mac_link_    
279  *   protocol from the MAC is specified by @st    
280  *                                                
281  *   @state->advertising may be used, but is n    
282  *                                                
283  *   Older drivers (prior to the mac_link_up()    
284  *   @state->duplex and @state->pause to confi    
285  *   deprecated; such drivers should be conver    
286  *                                                
287  *   Other members of @state must be ignored.     
288  *                                                
289  *   Valid state members: interface, advertisi    
290  *   Deprecated state members: speed, duplex,     
291  *                                                
292  * %MLO_AN_INBAND:                                
293  *   place the link in an inband negotiation m    
294  *   1000base-X or Cisco SGMII mode depending     
295  *   mode). In both cases, link state manageme    
296  *   is up or not) is performed by the MAC, an    
297  *   pcs_get_state() callback. Changes in link    
298  *   by calling phylink_mac_change().             
299  *                                                
300  *   Interface mode specific details are menti    
301  *                                                
302  *   If in 802.3z mode, the link speed is fixe    
303  *   @state->interface. Duplex and pause modes    
304  *   the in-band configuration word. Advertise    
305  *   according to the @state->an_enabled and @    
306  *   flags. Beware of MACs which only support     
307  *   and higher speeds.                           
308  *                                                
309  *   If in Cisco SGMII mode, the link speed an    
310  *   in the serial bitstream 16-bit configurat    
311  *   should be configured to read these bits a    
312  *   configuration word. Nothing is advertised    
313  *   responsible for reading the configuration    
314  *   itself accordingly.                          
315  *                                                
316  *   Valid state members: interface, an_enable    
317  *                                                
318  * Implementations are expected to update the     
319  * requested settings - i.o.w., if nothing has    
320  * calls, no action is expected.  If only flow    
321  * changed, flow control should be updated *wi    
322  * down.  This "update" behaviour is critical     
323  * link up status.                                
324  */                                               
325 void mac_config(struct phylink_config *config,    
326                 const struct phylink_link_stat    
327                                                   
328 /**                                               
329  * mac_finish() - finish a to change the PHY i    
330  * @config: a pointer to a &struct phylink_con    
331  * @mode: one of %MLO_AN_FIXED, %MLO_AN_PHY, %    
332  * @iface: interface mode to switch to            
333  *                                                
334  * phylink will call this if it called mac_pre    
335  * complete any necessary steps after the MAC     
336  * for the @mode and @iface. E.g. a MAC driver    
337  * Serdes PHY here if it was previously disabl    
338  *                                                
339  * Returns zero on success, or negative errno     
340  * reported to the kernel log.                    
341  */                                               
342 int mac_finish(struct phylink_config *config,     
343                 phy_interface_t iface);           
344                                                   
345 /**                                               
346  * mac_link_down() - take the link down           
347  * @config: a pointer to a &struct phylink_con    
348  * @mode: link autonegotiation mode               
349  * @interface: link &typedef phy_interface_t m    
350  *                                                
351  * If @mode is not an in-band negotiation mode    
352  * phylink_autoneg_inband()), force the link d    
353  * Energy Efficient Ethernet MAC configuration    
354  * selection must be done in mac_config().        
355  */                                               
356 void mac_link_down(struct phylink_config *conf    
357                    phy_interface_t interface);    
358                                                   
359 /**                                               
360  * mac_link_up() - allow the link to come up      
361  * @config: a pointer to a &struct phylink_con    
362  * @phy: any attached phy                         
363  * @mode: link autonegotiation mode               
364  * @interface: link &typedef phy_interface_t m    
365  * @speed: link speed                             
366  * @duplex: link duplex                           
367  * @tx_pause: link transmit pause enablement s    
368  * @rx_pause: link receive pause enablement st    
369  *                                                
370  * Configure the MAC for an established link.     
371  *                                                
372  * @speed, @duplex, @tx_pause and @rx_pause in    
373  * settings, and should be used to configure t    
374  * where these settings are not automatically     
375  * or if in-band negotiation (as defined by ph    
376  * is disabled.                                   
377  *                                                
378  * Note that when 802.3z in-band negotiation i    
379  * that the user wishes to override the pause     
380  * be allowed when considering the implementat    
381  *                                                
382  * If in-band negotiation mode is disabled, al    
383  * @phy is non-%NULL, configure Energy Efficie    
384  * phy_init_eee() and perform appropriate MAC     
385  * Interface type selection must be done in ma    
386  */                                               
387 void mac_link_up(struct phylink_config *config    
388                  unsigned int mode, phy_interf    
389                  int speed, int duplex, bool t    
390 #endif                                            
391                                                   
392 struct phylink_pcs_ops;                           
393                                                   
394 /**                                               
395  * struct phylink_pcs - PHYLINK PCS instance      
396  * @ops: a pointer to the &struct phylink_pcs_    
397  * @phylink: pointer to &struct phylink_config    
398  * @neg_mode: provide PCS neg mode via "mode"     
399  * @poll: poll the PCS for link changes           
400  * @rxc_always_on: The MAC driver requires the    
401  *                 to always be on. Standalone    
402  *                 do not have access to a PHY    
403  *                 this instead of PHY_F_RXC_A    
404  *                                                
405  * This structure is designed to be embedded w    
406  * and will be passed between phylink and the     
407  *                                                
408  * The @phylink member is private to phylink a    
409  * the PCS driver.                                
410  */                                               
411 struct phylink_pcs {                              
412         const struct phylink_pcs_ops *ops;        
413         struct phylink *phylink;                  
414         bool neg_mode;                            
415         bool poll;                                
416         bool rxc_always_on;                       
417 };                                                
418                                                   
419 /**                                               
420  * struct phylink_pcs_ops - MAC PCS operations    
421  * @pcs_validate: validate the link configurat    
422  * @pcs_enable: enable the PCS.                   
423  * @pcs_disable: disable the PCS.                 
424  * @pcs_pre_config: pre-mac_config method (for    
425  * @pcs_post_config: post-mac_config method (f    
426  * @pcs_get_state: read the current MAC PCS li    
427  * @pcs_config: configure the MAC PCS for the     
428  * @pcs_an_restart: restart 802.3z BaseX auton    
429  * @pcs_link_up: program the PCS for the resol    
430  *               (where necessary).               
431  * @pcs_pre_init: configure PCS components nec    
432  *                initialization e.g. RX clock    
433  */                                               
434 struct phylink_pcs_ops {                          
435         int (*pcs_validate)(struct phylink_pcs    
436                             const struct phyli    
437         int (*pcs_enable)(struct phylink_pcs *    
438         void (*pcs_disable)(struct phylink_pcs    
439         void (*pcs_pre_config)(struct phylink_    
440                                phy_interface_t    
441         int (*pcs_post_config)(struct phylink_    
442                                phy_interface_t    
443         void (*pcs_get_state)(struct phylink_p    
444                               struct phylink_l    
445         int (*pcs_config)(struct phylink_pcs *    
446                           phy_interface_t inte    
447                           const unsigned long     
448                           bool permit_pause_to    
449         void (*pcs_an_restart)(struct phylink_    
450         void (*pcs_link_up)(struct phylink_pcs    
451                             phy_interface_t in    
452         int (*pcs_pre_init)(struct phylink_pcs    
453 };                                                
454                                                   
455 #if 0 /* For kernel-doc purposes only. */         
456 /**                                               
457  * pcs_validate() - validate the link configur    
458  * @pcs: a pointer to a &struct phylink_pcs.      
459  * @supported: ethtool bitmask for supported l    
460  * @state: a const pointer to a &struct phylin    
461  *                                                
462  * Validate the interface mode, and advertisin    
463  * media ethtool link modes that would not be     
464  * mask. Phylink will propagate the changes to    
465  * &struct phylink_mac_ops validate() method.     
466  *                                                
467  * Returns -EINVAL if the interface mode/auton    
468  * Returns non-zero positive if the link state    
469  */                                               
470 int pcs_validate(struct phylink_pcs *pcs, unsi    
471                  const struct phylink_link_sta    
472                                                   
473 /**                                               
474  * pcs_enable() - enable the PCS.                 
475  * @pcs: a pointer to a &struct phylink_pcs.      
476  */                                               
477 int pcs_enable(struct phylink_pcs *pcs);          
478                                                   
479 /**                                               
480  * pcs_disable() - disable the PCS.               
481  * @pcs: a pointer to a &struct phylink_pcs.      
482  */                                               
483 void pcs_disable(struct phylink_pcs *pcs);        
484                                                   
485 /**                                               
486  * pcs_get_state() - Read the current inband l    
487  * @pcs: a pointer to a &struct phylink_pcs.      
488  * @state: a pointer to a &struct phylink_link    
489  *                                                
490  * Read the current inband link state from the    
491  * current speed in @state->speed, duplex mode    
492  * mode in @state->pause using the %MLO_PAUSE_    
493  * negotiation completion state in @state->an_    
494  * in @state->link. If possible, @state->lp_ad    
495  * populated.                                     
496  */                                               
497 void pcs_get_state(struct phylink_pcs *pcs,       
498                    struct phylink_link_state *    
499                                                   
500 /**                                               
501  * pcs_config() - Configure the PCS mode and a    
502  * @pcs: a pointer to a &struct phylink_pcs.      
503  * @neg_mode: link negotiation mode (see below    
504  * @interface: interface mode to be used          
505  * @advertising: adertisement ethtool link mod    
506  * @permit_pause_to_mac: permit forwarding pau    
507  *                                                
508  * Configure the PCS for the operating mode, t    
509  * the advertisement mask. @permit_pause_to_ma    
510  * hardware may forward the pause mode resolut    
511  *                                                
512  * When operating in %MLO_AN_INBAND, inband sh    
513  * otherwise inband should be disabled.           
514  *                                                
515  * For SGMII, there is no advertisement from t    
516  * be programmed to acknowledge the inband wor    
517  *                                                
518  * For 1000BASE-X, the advertisement should be    
519  *                                                
520  * For most 10GBASE-R, there is no advertiseme    
521  *                                                
522  * The %neg_mode argument should be tested via    
523  * functions, or for PCS that set pcs->neg_mod    
524  * against the PHYLINK_PCS_NEG_* definitions.     
525  */                                               
526 int pcs_config(struct phylink_pcs *pcs, unsign    
527                phy_interface_t interface, cons    
528                bool permit_pause_to_mac);         
529                                                   
530 /**                                               
531  * pcs_an_restart() - restart 802.3z BaseX aut    
532  * @pcs: a pointer to a &struct phylink_pcs.      
533  *                                                
534  * When PCS ops are present, this overrides ma    
535  * phylink_mac_ops.                               
536  */                                               
537 void pcs_an_restart(struct phylink_pcs *pcs);     
538                                                   
539 /**                                               
540  * pcs_link_up() - program the PCS for the res    
541  * @pcs: a pointer to a &struct phylink_pcs.      
542  * @neg_mode: link negotiation mode (see below    
543  * @interface: link &typedef phy_interface_t m    
544  * @speed: link speed                             
545  * @duplex: link duplex                           
546  *                                                
547  * This call will be made just before mac_link    
548  * the resolved link parameters. For example,     
549  * mode without in-band AN needs to be manuall    
550  * and duplex setting. Otherwise, this should     
551  *                                                
552  * The %mode argument should be tested via the    
553  * functions, or for PCS that set pcs->neg_mod    
554  * against the PHYLINK_PCS_NEG_* definitions.     
555  */                                               
556 void pcs_link_up(struct phylink_pcs *pcs, unsi    
557                  phy_interface_t interface, in    
558                                                   
559 /**                                               
560  * pcs_pre_init() - Configure PCS components n    
561  * @pcs: a pointer to a &struct phylink_pcs.      
562  *                                                
563  * This function can be called by MAC drivers     
564  * phylink_pcs_pre_init() wrapper, before thei    
565  * should not be called after the link is brou    
566  * at this point could break the link.            
567  *                                                
568  * Some MAC devices require specific hardware     
569  * their associated PCS device before they can    
570  * hardware. An example of this is the initial    
571  * which requires an active REF_CLK signal to     
572  *                                                
573  * By calling phylink_pcs_pre_init(), MAC driv    
574  * setup in a way that allows for successful h    
575  *                                                
576  * The specific configuration performed by pcs    
577  * model of PCS and the requirements of the MA    
578  * driver authors should consider whether thei    
579  * conjunction with a MAC device whose driver     
580  * driver authors should document their requir    
581  * pre-initialization.                            
582  *                                                
583  */                                               
584 int pcs_pre_init(struct phylink_pcs *pcs);        
585                                                   
586 #endif                                            
587                                                   
588 struct phylink *phylink_create(struct phylink_    
589                                const struct fw    
590                                phy_interface_t    
591                                const struct ph    
592 void phylink_destroy(struct phylink *);           
593 bool phylink_expects_phy(struct phylink *pl);     
594                                                   
595 int phylink_connect_phy(struct phylink *, stru    
596 int phylink_of_phy_connect(struct phylink *, s    
597 int phylink_fwnode_phy_connect(struct phylink     
598                                const struct fw    
599                                u32 flags);        
600 void phylink_disconnect_phy(struct phylink *);    
601 int phylink_set_fixed_link(struct phylink *,      
602                            const struct phylin    
603                                                   
604 void phylink_mac_change(struct phylink *, bool    
605 void phylink_pcs_change(struct phylink_pcs *,     
606                                                   
607 int phylink_pcs_pre_init(struct phylink *pl, s    
608                                                   
609 void phylink_start(struct phylink *);             
610 void phylink_stop(struct phylink *);              
611                                                   
612 void phylink_suspend(struct phylink *pl, bool     
613 void phylink_resume(struct phylink *pl);          
614                                                   
615 void phylink_ethtool_get_wol(struct phylink *,    
616 int phylink_ethtool_set_wol(struct phylink *,     
617                                                   
618 int phylink_ethtool_ksettings_get(struct phyli    
619                                   struct ethto    
620 int phylink_ethtool_ksettings_set(struct phyli    
621                                   const struct    
622 int phylink_ethtool_nway_reset(struct phylink     
623 void phylink_ethtool_get_pauseparam(struct phy    
624                                     struct eth    
625 int phylink_ethtool_set_pauseparam(struct phyl    
626                                    struct etht    
627 int phylink_get_eee_err(struct phylink *);        
628 int phylink_init_eee(struct phylink *, bool);     
629 int phylink_ethtool_get_eee(struct phylink *li    
630 int phylink_ethtool_set_eee(struct phylink *li    
631 int phylink_mii_ioctl(struct phylink *, struct    
632 int phylink_speed_down(struct phylink *pl, boo    
633 int phylink_speed_up(struct phylink *pl);         
634                                                   
635 #define phylink_zero(bm) \                        
636         bitmap_zero(bm, __ETHTOOL_LINK_MODE_MA    
637 #define __phylink_do_bit(op, bm, mode) \          
638         op(ETHTOOL_LINK_MODE_ ## mode ## _BIT,    
639                                                   
640 #define phylink_set(bm, mode)   __phylink_do_b    
641 #define phylink_clear(bm, mode) __phylink_do_b    
642 #define phylink_test(bm, mode)  __phylink_do_b    
643                                                   
644 void phylink_set_port_modes(unsigned long *bit    
645                                                   
646 /**                                               
647  * phylink_get_link_timer_ns - return the PCS     
648  * @interface: link &typedef phy_interface_t m    
649  *                                                
650  * Return the PCS link timer setting in nanose    
651  * mode, or -EINVAL if not appropriate.           
652  */                                               
653 static inline int phylink_get_link_timer_ns(ph    
654 {                                                 
655         switch (interface) {                      
656         case PHY_INTERFACE_MODE_SGMII:            
657         case PHY_INTERFACE_MODE_QSGMII:           
658         case PHY_INTERFACE_MODE_USXGMII:          
659         case PHY_INTERFACE_MODE_10G_QXGMII:       
660                 return 1600000;                   
661                                                   
662         case PHY_INTERFACE_MODE_1000BASEX:        
663         case PHY_INTERFACE_MODE_2500BASEX:        
664                 return 10000000;                  
665                                                   
666         default:                                  
667                 return -EINVAL;                   
668         }                                         
669 }                                                 
670                                                   
671 void phylink_mii_c22_pcs_decode_state(struct p    
672                                       u16 bmsr    
673 void phylink_mii_c22_pcs_get_state(struct mdio    
674                                    struct phyl    
675 int phylink_mii_c22_pcs_encode_advertisement(p    
676                                              c    
677 int phylink_mii_c22_pcs_config(struct mdio_dev    
678                                phy_interface_t    
679                                const unsigned     
680                                unsigned int ne    
681 void phylink_mii_c22_pcs_an_restart(struct mdi    
682                                                   
683 void phylink_resolve_c73(struct phylink_link_s    
684                                                   
685 void phylink_mii_c45_pcs_get_state(struct mdio    
686                                    struct phyl    
687                                                   
688 void phylink_decode_usxgmii_word(struct phylin    
689                                  uint16_t lpa)    
690 #endif                                            
691                                                   

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php