| /* SPDX-License-Identifier: GPL-2.0-only */ |
| /* Copyright (c) 2015-2016, The Linux Foundation. All rights reserved. |
| */ |
| |
| #ifndef _EMAC_SGMII_H_ |
| #define _EMAC_SGMII_H_ |
| |
| struct emac_adapter; |
| struct platform_device; |
| |
| /** emac_sgmii - internal emac phy |
| * @init initialization function |
| * @open called when the driver is opened |
| * @close called when the driver is closed |
| * @link_change called when the link state changes |
| */ |
| struct sgmii_ops { |
| int (*init)(struct emac_adapter *adpt); |
| int (*open)(struct emac_adapter *adpt); |
| void (*close)(struct emac_adapter *adpt); |
| int (*link_change)(struct emac_adapter *adpt, bool link_state); |
| void (*reset)(struct emac_adapter *adpt); |
| }; |
| |
| /** emac_sgmii - internal emac phy |
| * @base base address |
| * @digital per-lane digital block |
| * @irq the interrupt number |
| * @decode_error_count reference count of consecutive decode errors |
| * @sgmii_ops sgmii ops |
| */ |
| struct emac_sgmii { |
| void __iomem *base; |
| void __iomem *digital; |
| unsigned int irq; |
| atomic_t decode_error_count; |
| struct sgmii_ops *sgmii_ops; |
| }; |
| |
| int emac_sgmii_config(struct platform_device *pdev, struct emac_adapter *adpt); |
| |
| int emac_sgmii_init_fsm9900(struct emac_adapter *adpt); |
| int emac_sgmii_init_qdf2432(struct emac_adapter *adpt); |
| int emac_sgmii_init_qdf2400(struct emac_adapter *adpt); |
| |
| int emac_sgmii_init(struct emac_adapter *adpt); |
| int emac_sgmii_open(struct emac_adapter *adpt); |
| void emac_sgmii_close(struct emac_adapter *adpt); |
| int emac_sgmii_link_change(struct emac_adapter *adpt, bool link_state); |
| void emac_sgmii_reset(struct emac_adapter *adpt); |
| #endif |