drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
Source file repositories/reference/linux-study-clean/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c- Extension
.c- Size
- 11875 bytes
- Lines
- 365
- Domain
- Driver Families
- Bucket
- drivers/net
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
pch_gbe.hpch_gbe_phy.h
Detected Declarations
function Copyrightfunction pch_gbe_phy_read_reg_miicfunction pch_gbe_phy_write_reg_miicfunction pch_gbe_phy_sw_resetfunction pch_gbe_phy_hw_resetfunction pch_gbe_phy_power_upfunction pch_gbe_phy_power_downfunction pch_gbe_phy_set_rgmiifunction pch_gbe_phy_tx_clk_delayfunction pch_gbe_phy_init_settingfunction pch_gbe_phy_disable_hibernate
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0-only
/*
* Copyright (C) 1999 - 2010 Intel Corporation.
* Copyright (C) 2010 OKI SEMICONDUCTOR Co., LTD.
*
* This code was derived from the Intel e1000e Linux driver.
*/
#include "pch_gbe.h"
#include "pch_gbe_phy.h"
#define PHY_MAX_REG_ADDRESS 0x1F /* 5 bit address bus (0-0x1F) */
/* PHY 1000 MII Register/Bit Definitions */
/* PHY Registers defined by IEEE */
#define PHY_CONTROL 0x00 /* Control Register */
#define PHY_STATUS 0x01 /* Status Regiser */
#define PHY_ID1 0x02 /* Phy Id Register (word 1) */
#define PHY_ID2 0x03 /* Phy Id Register (word 2) */
#define PHY_AUTONEG_ADV 0x04 /* Autoneg Advertisement */
#define PHY_LP_ABILITY 0x05 /* Link Partner Ability (Base Page) */
#define PHY_AUTONEG_EXP 0x06 /* Autoneg Expansion Register */
#define PHY_NEXT_PAGE_TX 0x07 /* Next Page TX */
#define PHY_LP_NEXT_PAGE 0x08 /* Link Partner Next Page */
#define PHY_1000T_CTRL 0x09 /* 1000Base-T Control Register */
#define PHY_1000T_STATUS 0x0A /* 1000Base-T Status Register */
#define PHY_EXT_STATUS 0x0F /* Extended Status Register */
#define PHY_PHYSP_CONTROL 0x10 /* PHY Specific Control Register */
#define PHY_EXT_PHYSP_CONTROL 0x14 /* Extended PHY Specific Control Register */
#define PHY_LED_CONTROL 0x18 /* LED Control Register */
#define PHY_EXT_PHYSP_STATUS 0x1B /* Extended PHY Specific Status Register */
/* PHY Control Register */
#define MII_CR_SPEED_SELECT_MSB 0x0040 /* bits 6,13: 10=1000, 01=100, 00=10 */
#define MII_CR_COLL_TEST_ENABLE 0x0080 /* Collision test enable */
#define MII_CR_FULL_DUPLEX 0x0100 /* FDX =1, half duplex =0 */
#define MII_CR_RESTART_AUTO_NEG 0x0200 /* Restart auto negotiation */
#define MII_CR_ISOLATE 0x0400 /* Isolate PHY from MII */
#define MII_CR_POWER_DOWN 0x0800 /* Power down */
#define MII_CR_AUTO_NEG_EN 0x1000 /* Auto Neg Enable */
#define MII_CR_SPEED_SELECT_LSB 0x2000 /* bits 6,13: 10=1000, 01=100, 00=10 */
#define MII_CR_LOOPBACK 0x4000 /* 0 = normal, 1 = loopback */
#define MII_CR_RESET 0x8000 /* 0 = normal, 1 = PHY reset */
#define MII_CR_SPEED_1000 0x0040
#define MII_CR_SPEED_100 0x2000
#define MII_CR_SPEED_10 0x0000
/* PHY Status Register */
#define MII_SR_EXTENDED_CAPS 0x0001 /* Extended register capabilities */
#define MII_SR_JABBER_DETECT 0x0002 /* Jabber Detected */
#define MII_SR_LINK_STATUS 0x0004 /* Link Status 1 = link */
#define MII_SR_AUTONEG_CAPS 0x0008 /* Auto Neg Capable */
#define MII_SR_REMOTE_FAULT 0x0010 /* Remote Fault Detect */
#define MII_SR_AUTONEG_COMPLETE 0x0020 /* Auto Neg Complete */
#define MII_SR_PREAMBLE_SUPPRESS 0x0040 /* Preamble may be suppressed */
#define MII_SR_EXTENDED_STATUS 0x0100 /* Ext. status info in Reg 0x0F */
#define MII_SR_100T2_HD_CAPS 0x0200 /* 100T2 Half Duplex Capable */
#define MII_SR_100T2_FD_CAPS 0x0400 /* 100T2 Full Duplex Capable */
#define MII_SR_10T_HD_CAPS 0x0800 /* 10T Half Duplex Capable */
#define MII_SR_10T_FD_CAPS 0x1000 /* 10T Full Duplex Capable */
#define MII_SR_100X_HD_CAPS 0x2000 /* 100X Half Duplex Capable */
#define MII_SR_100X_FD_CAPS 0x4000 /* 100X Full Duplex Capable */
#define MII_SR_100T4_CAPS 0x8000 /* 100T4 Capable */
/* AR8031 PHY Debug Registers */
#define PHY_AR803X_ID 0x00001374
#define PHY_AR8031_DBG_OFF 0x1D
#define PHY_AR8031_DBG_DAT 0x1E
#define PHY_AR8031_SERDES 0x05
#define PHY_AR8031_HIBERNATE 0x0B
#define PHY_AR8031_SERDES_TX_CLK_DLY 0x0100 /* TX clock delay of 2.0ns */
#define PHY_AR8031_PS_HIB_EN 0x8000 /* Hibernate enable */
/* Phy Id Register (word 2) */
#define PHY_REVISION_MASK 0x000F
/* PHY Specific Control Register */
#define PHYSP_CTRL_ASSERT_CRS_TX 0x0800
/* Default value of PHY register */
#define PHY_CONTROL_DEFAULT 0x1140 /* Control Register */
#define PHY_AUTONEG_ADV_DEFAULT 0x01e0 /* Autoneg Advertisement */
#define PHY_NEXT_PAGE_TX_DEFAULT 0x2001 /* Next Page TX */
#define PHY_1000T_CTRL_DEFAULT 0x0300 /* 1000Base-T Control Register */
#define PHY_PHYSP_CONTROL_DEFAULT 0x01EE /* PHY Specific Control Register */
/**
* pch_gbe_phy_get_id - Retrieve the PHY ID and revision
* @hw: Pointer to the HW structure
Annotation
- Immediate include surface: `pch_gbe.h`, `pch_gbe_phy.h`.
- Detected declarations: `function Copyright`, `function pch_gbe_phy_read_reg_miic`, `function pch_gbe_phy_write_reg_miic`, `function pch_gbe_phy_sw_reset`, `function pch_gbe_phy_hw_reset`, `function pch_gbe_phy_power_up`, `function pch_gbe_phy_power_down`, `function pch_gbe_phy_set_rgmii`, `function pch_gbe_phy_tx_clk_delay`, `function pch_gbe_phy_init_setting`.
- Atlas domain: Driver Families / drivers/net.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.