__  __    __   __  _____      _            _          _____ _          _ _ 
 |  \/  |   \ \ / / |  __ \    (_)          | |        / ____| |        | | |
 | \  / |_ __\ V /  | |__) | __ ___   ____ _| |_ ___  | (___ | |__   ___| | |
 | |\/| | '__|> <   |  ___/ '__| \ \ / / _` | __/ _ \  \___ \| '_ \ / _ \ | |
 | |  | | |_ / . \  | |   | |  | |\ V / (_| | ||  __/  ____) | | | |  __/ | |
 |_|  |_|_(_)_/ \_\ |_|   |_|  |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1
 if you need WebShell for Seo everyday contact me on Telegram
 Telegram Address : @jackleet
        
        
For_More_Tools: Telegram: @jackleet | Bulk Smtp support mail sender | Business Mail Collector | Mail Bouncer All Mail | Bulk Office Mail Validator | Html Letter private



Upload:

Command:

[email protected]: ~ $
/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
 * Framework and drivers for configuring and reading different PHYs
 * Based on code in sungem_phy.c and (long-removed) gianfar_phy.c
 *
 * Author: Andy Fleming
 *
 * Copyright (c) 2004 Freescale Semiconductor, Inc.
 */

#ifndef __PHY_H
#define __PHY_H

#include <linux/compiler.h>
#include <linux/spinlock.h>
#include <linux/ethtool.h>
#include <linux/leds.h>
#include <linux/linkmode.h>
#include <linux/netlink.h>
#include <linux/mdio.h>
#include <linux/mii.h>
#include <linux/mii_timestamper.h>
#include <linux/module.h>
#include <linux/timer.h>
#include <linux/workqueue.h>
#include <linux/mod_devicetable.h>
#include <linux/u64_stats_sync.h>
#include <linux/irqreturn.h>
#include <linux/iopoll.h>
#include <linux/refcount.h>

#include <linux/atomic.h>
#include <net/eee.h>

extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_basic_t1s_p2mp_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_fibre_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_gbit_all_ports_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_fec_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_10gbit_full_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_eee_cap1_features) __ro_after_init;
extern __ETHTOOL_DECLARE_LINK_MODE_MASK(phy_eee_cap2_features) __ro_after_init;

#define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features)
#define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features)
#define PHY_BASIC_T1S_P2MP_FEATURES ((unsigned long *)&phy_basic_t1s_p2mp_features)
#define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features)
#define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features)
#define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features)
#define PHY_EEE_CAP1_FEATURES ((unsigned long *)&phy_eee_cap1_features)
#define PHY_EEE_CAP2_FEATURES ((unsigned long *)&phy_eee_cap2_features)

extern const int phy_basic_ports_array[3];
extern const int phy_10_100_features_array[4];
extern const int phy_basic_t1_features_array[3];
extern const int phy_basic_t1s_p2mp_features_array[2];
extern const int phy_gbit_features_array[2];
extern const int phy_10gbit_features_array[1];

/*
 * Set phydev->irq to PHY_POLL if interrupts are not supported,
 * or not desired for this PHY.  Set to PHY_MAC_INTERRUPT if
 * the attached MAC driver handles the interrupt
 */
#define PHY_POLL		-1
#define PHY_MAC_INTERRUPT	-2

#define PHY_IS_INTERNAL		0x00000001
#define PHY_RST_AFTER_CLK_EN	0x00000002
#define PHY_POLL_CABLE_TEST	0x00000004
#define PHY_ALWAYS_CALL_SUSPEND	0x00000008
#define MDIO_DEVICE_IS_PHY	0x80000000

/**
 * enum phy_interface_t - Interface Mode definitions
 *
 * @PHY_INTERFACE_MODE_NA: Not Applicable - don't touch
 * @PHY_INTERFACE_MODE_INTERNAL: No interface, MAC and PHY combined
 * @PHY_INTERFACE_MODE_MII: Media-independent interface
 * @PHY_INTERFACE_MODE_GMII: Gigabit media-independent interface
 * @PHY_INTERFACE_MODE_SGMII: Serial gigabit media-independent interface
 * @PHY_INTERFACE_MODE_TBI: Ten Bit Interface
 * @PHY_INTERFACE_MODE_REVMII: Reverse Media Independent Interface
 * @PHY_INTERFACE_MODE_RMII: Reduced Media Independent Interface
 * @PHY_INTERFACE_MODE_REVRMII: Reduced Media Independent Interface in PHY role
 * @PHY_INTERFACE_MODE_RGMII: Reduced gigabit media-independent interface
 * @PHY_INTERFACE_MODE_RGMII_ID: RGMII with Internal RX+TX delay
 * @PHY_INTERFACE_MODE_RGMII_RXID: RGMII with Internal RX delay
 * @PHY_INTERFACE_MODE_RGMII_TXID: RGMII with Internal RX delay
 * @PHY_INTERFACE_MODE_RTBI: Reduced TBI
 * @PHY_INTERFACE_MODE_SMII: Serial MII
 * @PHY_INTERFACE_MODE_XGMII: 10 gigabit media-independent interface
 * @PHY_INTERFACE_MODE_XLGMII:40 gigabit media-independent interface
 * @PHY_INTERFACE_MODE_MOCA: Multimedia over Coax
 * @PHY_INTERFACE_MODE_PSGMII: Penta SGMII
 * @PHY_INTERFACE_MODE_QSGMII: Quad SGMII
 * @PHY_INTERFACE_MODE_TRGMII: Turbo RGMII
 * @PHY_INTERFACE_MODE_100BASEX: 100 BaseX
 * @PHY_INTERFACE_MODE_1000BASEX: 1000 BaseX
 * @PHY_INTERFACE_MODE_2500BASEX: 2500 BaseX
 * @PHY_INTERFACE_MODE_5GBASER: 5G BaseR
 * @PHY_INTERFACE_MODE_RXAUI: Reduced XAUI
 * @PHY_INTERFACE_MODE_XAUI: 10 Gigabit Attachment Unit Interface
 * @PHY_INTERFACE_MODE_10GBASER: 10G BaseR
 * @PHY_INTERFACE_MODE_25GBASER: 25G BaseR
 * @PHY_INTERFACE_MODE_USXGMII:  Universal Serial 10GE MII
 * @PHY_INTERFACE_MODE_10GKR: 10GBASE-KR - with Clause 73 AN
 * @PHY_INTERFACE_MODE_QUSGMII: Quad Universal SGMII
 * @PHY_INTERFACE_MODE_1000BASEKX: 1000Base-KX - with Clause 73 AN
 * @PHY_INTERFACE_MODE_10G_QXGMII: 10G-QXGMII - 4 ports over 10G USXGMII
 * @PHY_INTERFACE_MODE_MAX: Book keeping
 *
 * Describes the interface between the MAC and PHY.
 */
typedef enum {
	PHY_INTERFACE_MODE_NA,
	PHY_INTERFACE_MODE_INTERNAL,
	PHY_INTERFACE_MODE_MII,
	PHY_INTERFACE_MODE_GMII,
	PHY_INTERFACE_MODE_SGMII,
	PHY_INTERFACE_MODE_TBI,
	PHY_INTERFACE_MODE_REVMII,
	PHY_INTERFACE_MODE_RMII,
	PHY_INTERFACE_MODE_REVRMII,
	PHY_INTERFACE_MODE_RGMII,
	PHY_INTERFACE_MODE_RGMII_ID,
	PHY_INTERFACE_MODE_RGMII_RXID,
	PHY_INTERFACE_MODE_RGMII_TXID,
	PHY_INTERFACE_MODE_RTBI,
	PHY_INTERFACE_MODE_SMII,
	PHY_INTERFACE_MODE_XGMII,
	PHY_INTERFACE_MODE_XLGMII,
	PHY_INTERFACE_MODE_MOCA,
	PHY_INTERFACE_MODE_PSGMII,
	PHY_INTERFACE_MODE_QSGMII,
	PHY_INTERFACE_MODE_TRGMII,
	PHY_INTERFACE_MODE_100BASEX,
	PHY_INTERFACE_MODE_1000BASEX,
	PHY_INTERFACE_MODE_2500BASEX,
	PHY_INTERFACE_MODE_5GBASER,
	PHY_INTERFACE_MODE_RXAUI,
	PHY_INTERFACE_MODE_XAUI,
	/* 10GBASE-R, XFI, SFI - single lane 10G Serdes */
	PHY_INTERFACE_MODE_10GBASER,
	PHY_INTERFACE_MODE_25GBASER,
	PHY_INTERFACE_MODE_USXGMII,
	/* 10GBASE-KR - with Clause 73 AN */
	PHY_INTERFACE_MODE_10GKR,
	PHY_INTERFACE_MODE_QUSGMII,
	PHY_INTERFACE_MODE_1000BASEKX,
	PHY_INTERFACE_MODE_10G_QXGMII,
	PHY_INTERFACE_MODE_MAX,
} phy_interface_t;

/* PHY interface mode bitmap handling */
#define DECLARE_PHY_INTERFACE_MASK(name) \
	DECLARE_BITMAP(name, PHY_INTERFACE_MODE_MAX)

static inline void phy_interface_zero(unsigned long *intf)
{
	bitmap_zero(intf, PHY_INTERFACE_MODE_MAX);
}

static inline bool phy_interface_empty(const unsigned long *intf)
{
	return bitmap_empty(intf, PHY_INTERFACE_MODE_MAX);
}

static inline void phy_interface_and(unsigned long *dst, const unsigned long *a,
				     const unsigned long *b)
{
	bitmap_and(dst, a, b, PHY_INTERFACE_MODE_MAX);
}

static inline void phy_interface_or(unsigned long *dst, const unsigned long *a,
				    const unsigned long *b)
{
	bitmap_or(dst, a, b, PHY_INTERFACE_MODE_MAX);
}

static inline void phy_interface_set_rgmii(unsigned long *intf)
{
	__set_bit(PHY_INTERFACE_MODE_RGMII, intf);
	__set_bit(PHY_INTERFACE_MODE_RGMII_ID, intf);
	__set_bit(PHY_INTERFACE_MODE_RGMII_RXID, intf);
	__set_bit(PHY_INTERFACE_MODE_RGMII_TXID, intf);
}

/*
 * phy_supported_speeds - return all speeds currently supported by a PHY device
 */
unsigned int phy_supported_speeds(struct phy_device *phy,
				      unsigned int *speeds,
				      unsigned int size);

/**
 * phy_modes - map phy_interface_t enum to device tree binding of phy-mode
 * @interface: enum phy_interface_t value
 *
 * Description: maps enum &phy_interface_t defined in this file
 * 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 "";
	case PHY_INTERFACE_MODE_INTERNAL:
		return "internal";
	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_REVRMII:
		return "rev-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";
	case PHY_INTERFACE_MODE_XLGMII:
		return "xlgmii";
	case PHY_INTERFACE_MODE_MOCA:
		return "moca";
	case PHY_INTERFACE_MODE_PSGMII:
		return "psgmii";
	case PHY_INTERFACE_MODE_QSGMII:
		return "qsgmii";
	case PHY_INTERFACE_MODE_TRGMII:
		return "trgmii";
	case PHY_INTERFACE_MODE_1000BASEX:
		return "1000base-x";
	case PHY_INTERFACE_MODE_1000BASEKX:
		return "1000base-kx";
	case PHY_INTERFACE_MODE_2500BASEX:
		return "2500base-x";
	case PHY_INTERFACE_MODE_5GBASER:
		return "5gbase-r";
	case PHY_INTERFACE_MODE_RXAUI:
		return "rxaui";
	case PHY_INTERFACE_MODE_XAUI:
		return "xaui";
	case PHY_INTERFACE_MODE_10GBASER:
		return "10gbase-r";
	case PHY_INTERFACE_MODE_25GBASER:
		return "25gbase-r";
	case PHY_INTERFACE_MODE_USXGMII:
		return "usxgmii";
	case PHY_INTERFACE_MODE_10GKR:
		return "10gbase-kr";
	case PHY_INTERFACE_MODE_100BASEX:
		return "100base-x";
	case PHY_INTERFACE_MODE_QUSGMII:
		return "qusgmii";
	case PHY_INTERFACE_MODE_10G_QXGMII:
		return "10g-qxgmii";
	default:
		return "unknown";
	}
}

/**
 * rgmii_clock - map link speed to the clock rate
 * @speed: link speed value
 *
 * Description: maps RGMII supported link speeds
 * into the clock rates.
 *
 * Returns: clock rate or negative errno
 */
static inline long rgmii_clock(int speed)
{
	switch (speed) {
	case SPEED_10:
		return 2500000;
	case SPEED_100:
		return 25000000;
	case SPEED_1000:
		return 125000000;
	default:
		return -EINVAL;
	}
}

#define PHY_INIT_TIMEOUT	100000
#define PHY_FORCE_TIMEOUT	10

#define PHY_MAX_ADDR	32

/* Used when trying to connect to a specific phy (mii bus id:phy device id) */
#define PHY_ID_FMT "%s:%02x"

#define MII_BUS_ID_SIZE	61

struct device;
struct kernel_hwtstamp_config;
struct phylink;
struct sfp_bus;
struct sfp_upstream_ops;
struct sk_buff;

/**
 * struct mdio_bus_stats - Statistics counters for MDIO busses
 * @transfers: Total number of transfers, i.e. @writes + @reads
 * @errors: Number of MDIO transfers that returned an error
 * @writes: Number of write transfers
 * @reads: Number of read transfers
 * @syncp: Synchronisation for incrementing statistics
 */
struct mdio_bus_stats {
	u64_stats_t transfers;
	u64_stats_t errors;
	u64_stats_t writes;
	u64_stats_t reads;
	/* Must be last, add new statistics above */
	struct u64_stats_sync syncp;
};

/**
 * struct phy_package_shared - Shared information in PHY packages
 * @base_addr: Base PHY address of PHY package used to combine PHYs
 *   in one package and for offset calculation of phy_package_read/write
 * @np: Pointer to the Device Node if PHY package defined in DT
 * @refcnt: Number of PHYs connected to this shared data
 * @flags: Initialization of PHY package
 * @priv_size: Size of the shared private data @priv
 * @priv: Driver private data shared across a PHY package
 *
 * Represents a shared structure between different phydev's in the same
 * package, for example a quad PHY. See phy_package_join() and
 * phy_package_leave().
 */
struct phy_package_shared {
	u8 base_addr;
	/* With PHY package defined in DT this points to the PHY package node */
	struct device_node *np;
	refcount_t refcnt;
	unsigned long flags;
	size_t priv_size;

	/* private data pointer */
	/* note that this pointer is shared between different phydevs and
	 * the user has to take care of appropriate locking. It is allocated
	 * and freed automatically by phy_package_join() and
	 * phy_package_leave().
	 */
	void *priv;
};

/* used as bit number in atomic bitops */
#define PHY_SHARED_F_INIT_DONE  0
#define PHY_SHARED_F_PROBE_DONE 1

/**
 * struct mii_bus - Represents an MDIO bus
 *
 * @owner: Who owns this device
 * @name: User friendly name for this MDIO device, or driver name
 * @id: Unique identifier for this bus, typical from bus hierarchy
 * @priv: Driver private data
 *
 * The Bus class for PHYs.  Devices which provide access to
 * PHYs should register using this structure
 */
struct mii_bus {
	struct module *owner;
	const char *name;
	char id[MII_BUS_ID_SIZE];
	void *priv;
	/** @read: Perform a read transfer on the bus */
	int (*read)(struct mii_bus *bus, int addr, int regnum);
	/** @write: Perform a write transfer on the bus */
	int (*write)(struct mii_bus *bus, int addr, int regnum, u16 val);
	/** @read_c45: Perform a C45 read transfer on the bus */
	int (*read_c45)(struct mii_bus *bus, int addr, int devnum, int regnum);
	/** @write_c45: Perform a C45 write transfer on the bus */
	int (*write_c45)(struct mii_bus *bus, int addr, int devnum,
			 int regnum, u16 val);
	/** @reset: Perform a reset of the bus */
	int (*reset)(struct mii_bus *bus);

	/** @stats: Statistic counters per device on the bus */
	struct mdio_bus_stats stats[PHY_MAX_ADDR];

	/**
	 * @mdio_lock: A lock to ensure that only one thing can read/write
	 * the MDIO bus at a time
	 */
	struct mutex mdio_lock;

	/** @parent: Parent device of this bus */
	struct device *parent;
	/** @state: State of bus structure */
	enum {
		MDIOBUS_ALLOCATED = 1,
		MDIOBUS_REGISTERED,
		MDIOBUS_UNREGISTERED,
		MDIOBUS_RELEASED,
	} state;

	/** @dev: Kernel device representation */
	struct device dev;

	/** @mdio_map: list of all MDIO devices on bus */
	struct mdio_device *mdio_map[PHY_MAX_ADDR];

	/** @phy_mask: PHY addresses to be ignored when probing */
	u32 phy_mask;

	/** @phy_ignore_ta_mask: PHY addresses to ignore the TA/read failure */
	u32 phy_ignore_ta_mask;

	/**
	 * @irq: An array of interrupts, each PHY's interrupt at the index
	 * matching its address
	 */
	int irq[PHY_MAX_ADDR];

	/** @reset_delay_us: GPIO reset pulse width in microseconds */
	int reset_delay_us;
	/** @reset_post_delay_us: GPIO reset deassert delay in microseconds */
	int reset_post_delay_us;
	/** @reset_gpiod: Reset GPIO descriptor pointer */
	struct gpio_desc *reset_gpiod;

	/** @shared_lock: protect access to the shared element */
	struct mutex shared_lock;

	/** @shared: shared state across different PHYs */
	struct phy_package_shared *shared[PHY_MAX_ADDR];
};
#define to_mii_bus(d) container_of(d, struct mii_bus, dev)

struct mii_bus *mdiobus_alloc_size(size_t size);

/**
 * mdiobus_alloc - Allocate an MDIO bus structure
 *
 * The internal state of the MDIO bus will be set of MDIOBUS_ALLOCATED ready
 * for the driver to register the bus.
 */
static inline struct mii_bus *mdiobus_alloc(void)
{
	return mdiobus_alloc_size(0);
}

int __mdiobus_register(struct mii_bus *bus, struct module *owner);
int __devm_mdiobus_register(struct device *dev, struct mii_bus *bus,
			    struct module *owner);
#define mdiobus_register(bus) __mdiobus_register(bus, THIS_MODULE)
#define devm_mdiobus_register(dev, bus) \
		__devm_mdiobus_register(dev, bus, THIS_MODULE)

void mdiobus_unregister(struct mii_bus *bus);
void mdiobus_free(struct mii_bus *bus);
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);
}

struct mii_bus *mdio_find_bus(const char *mdio_name);
struct phy_device *mdiobus_scan_c22(struct mii_bus *bus, int addr);

#define PHY_INTERRUPT_DISABLED	false
#define PHY_INTERRUPT_ENABLED	true

/**
 * enum phy_state - PHY state machine states:
 *
 * @PHY_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 set the state to @PHY_READY
 *
 * @PHY_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().
 * - start will set the state to UP
 *
 * @PHY_UP: The PHY and attached device are ready to do work.
 * Interrupts should be started here.
 * - timer moves to @PHY_NOLINK or @PHY_RUNNING
 *
 * @PHY_NOLINK: PHY is up, but not currently plugged in.
 * - irq or timer will set @PHY_RUNNING if link comes back
 * - phy_stop moves to @PHY_HALTED
 *
 * @PHY_RUNNING: PHY is currently up, running, and possibly sending
 * and/or receiving packets
 * - irq or timer will set @PHY_NOLINK if link goes down
 * - phy_stop moves to @PHY_HALTED
 *
 * @PHY_CABLETEST: PHY is performing a cable test. Packet reception/sending
 * is not expected to work, carrier will be indicated as down. PHY will be
 * poll once per second, or on interrupt for it current state.
 * Once complete, move to UP to restart the PHY.
 * - phy_stop aborts the running test and moves to @PHY_HALTED
 *
 * @PHY_HALTED: PHY is up, but no polling or interrupts are done.
 * - phy_start moves to @PHY_UP
 *
 * @PHY_ERROR: PHY is up, but is in an error state.
 * - phy_stop moves to @PHY_HALTED
 */
enum phy_state {
	PHY_DOWN = 0,
	PHY_READY,
	PHY_HALTED,
	PHY_ERROR,
	PHY_UP,
	PHY_RUNNING,
	PHY_NOLINK,
	PHY_CABLETEST,
};

#define MDIO_MMD_NUM 32

/**
 * struct phy_c45_device_ids - 802.3-c45 Device Identifiers
 * @devices_in_package: IEEE 802.3 devices in package register value.
 * @mmds_present: bit vector of MMDs present.
 * @device_ids: The device identifer for each present device.
 */
struct phy_c45_device_ids {
	u32 devices_in_package;
	u32 mmds_present;
	u32 device_ids[MDIO_MMD_NUM];
};

struct macsec_context;
struct macsec_ops;

/**
 * struct phy_device - An instance of a PHY
 *
 * @mdio: MDIO bus this PHY is on
 * @drv: Pointer to the driver for this PHY instance
 * @devlink: Create a link between phy dev and mac dev, if the external phy
 *           used by current mac interface is managed by another mac interface.
 * @phyindex: Unique id across the phy's parent tree of phys to address the PHY
 *	      from userspace, similar to ifindex. A zero index means the PHY
 *	      wasn't assigned an id yet.
 * @phy_id: UID for this device found during discovery
 * @c45_ids: 802.3-c45 Device Identifiers if is_c45.
 * @is_c45:  Set to true if this PHY uses clause 45 addressing.
 * @is_internal: Set to true if this PHY is internal to a MAC.
 * @is_pseudo_fixed_link: Set to true if this PHY is an Ethernet switch, etc.
 * @is_gigabit_capable: Set to true if PHY supports 1000Mbps
 * @has_fixups: Set to true if this PHY has fixups/quirks.
 * @suspended: Set to true if this PHY has been suspended successfully.
 * @suspended_by_mdio_bus: Set to true if this PHY was suspended by MDIO bus.
 * @sysfs_links: Internal boolean tracking sysfs symbolic links setup/removal.
 * @loopback_enabled: Set true if this PHY has been loopbacked successfully.
 * @downshifted_rate: Set true if link speed has been downshifted.
 * @is_on_sfp_module: Set true if PHY is located on an SFP module.
 * @mac_managed_pm: Set true if MAC driver takes of suspending/resuming PHY
 * @wol_enabled: Set to true if the PHY or the attached MAC have Wake-on-LAN
 * 		 enabled.
 * @state: State of the PHY for management purposes
 * @dev_flags: Device-specific flags used by the PHY driver.
 *
 *      - Bits [15:0] are free to use by the PHY driver to communicate
 *        driver specific behavior.
 *      - Bits [23:16] are currently reserved for future use.
 *      - Bits [31:24] are reserved for defining generic
 *        PHY driver behavior.
 * @irq: IRQ number of the PHY's interrupt (-1 if none)
 * @phylink: Pointer to phylink instance for this PHY
 * @sfp_bus_attached: Flag indicating whether the SFP bus has been attached
 * @sfp_bus: SFP bus attached to this PHY's fiber port
 * @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.
 * @phy_link_change: Callback for phylink for notification of link change
 * @macsec_ops: MACsec offloading ops.
 *
 * @speed: Current link speed
 * @duplex: Current duplex
 * @port: Current port
 * @pause: Current pause
 * @asym_pause: Current asymmetric pause
 * @supported: Combined MAC/PHY supported linkmodes
 * @advertising: Currently advertised linkmodes
 * @adv_old: Saved advertised while power saving for WoL
 * @supported_eee: supported PHY EEE linkmodes
 * @advertising_eee: Currently advertised EEE linkmodes
 * @enable_tx_lpi: When True, MAC should transmit LPI to PHY
 * @eee_active: phylib private state, indicating that EEE has been negotiated
 * @eee_cfg: User configuration of EEE
 * @lp_advertising: Current link partner advertised linkmodes
 * @host_interfaces: PHY interface modes supported by host
 * @eee_broken_modes: Energy efficient ethernet modes which should be prohibited
 * @autoneg: Flag autoneg being used
 * @rate_matching: Current rate matching mode
 * @link: Current link state
 * @autoneg_complete: Flag auto negotiation of the link has completed
 * @mdix: Current crossover
 * @mdix_ctrl: User setting of crossover
 * @pma_extable: Cached value of PMA/PMD Extended Abilities Register
 * @interrupts: Flag interrupts have been enabled
 * @irq_suspended: Flag indicating PHY is suspended and therefore interrupt
 *                 handling shall be postponed until PHY has resumed
 * @irq_rerun: Flag indicating interrupts occurred while PHY was suspended,
 *             requiring a rerun of the interrupt handler after resume
 * @default_timestamp: Flag indicating whether we are using the phy
 *		       timestamp as the default one
 * @interface: enum phy_interface_t value
 * @possible_interfaces: bitmap if interface modes that the attached PHY
 *			 will switch between depending on media speed.
 * @skb: Netlink message for cable diagnostics
 * @nest: Netlink nest used for cable diagnostics
 * @ehdr: nNtlink header for cable diagnostics
 * @phy_led_triggers: Array of LED triggers
 * @phy_num_led_triggers: Number of triggers in @phy_led_triggers
 * @led_link_trigger: LED trigger for link up/down
 * @last_triggered: last LED trigger for link speed
 * @leds: list of PHY LED structures
 * @master_slave_set: User requested master/slave configuration
 * @master_slave_get: Current master/slave advertisement
 * @master_slave_state: Current master/slave configuration
 * @mii_ts: Pointer to time stamper callbacks
 * @psec: Pointer to Power Sourcing Equipment control struct
 * @lock:  Mutex for serialization access to PHY
 * @state_queue: Work queue for state machine
 * @link_down_events: Number of times link was lost
 * @shared: Pointer to private data shared by phys in one package
 * @priv: Pointer to driver private data
 *
 * 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 {
	struct mdio_device mdio;

	/* Information about the PHY type */
	/* And management functions */
	const struct phy_driver *drv;

	struct device_link *devlink;

	u32 phyindex;
	u32 phy_id;

	struct phy_c45_device_ids c45_ids;
	unsigned is_c45:1;
	unsigned is_internal:1;
	unsigned is_pseudo_fixed_link:1;
	unsigned is_gigabit_capable:1;
	unsigned has_fixups:1;
	unsigned suspended:1;
	unsigned suspended_by_mdio_bus:1;
	unsigned sysfs_links:1;
	unsigned loopback_enabled:1;
	unsigned downshifted_rate:1;
	unsigned is_on_sfp_module:1;
	unsigned mac_managed_pm:1;
	unsigned wol_enabled:1;

	unsigned autoneg:1;
	/* The most recently read link state */
	unsigned link:1;
	unsigned autoneg_complete:1;

	/* Interrupts are enabled */
	unsigned interrupts:1;
	unsigned irq_suspended:1;
	unsigned irq_rerun:1;

	unsigned default_timestamp:1;

	int rate_matching;

	enum phy_state state;

	u32 dev_flags;

	phy_interface_t interface;
	DECLARE_PHY_INTERFACE_MASK(possible_interfaces);

	/*
	 * forced speed & duplex (no autoneg)
	 * partner speed & duplex & pause (autoneg)
	 */
	int speed;
	int duplex;
	int port;
	int pause;
	int asym_pause;
	u8 master_slave_get;
	u8 master_slave_set;
	u8 master_slave_state;

	/* Union of PHY and Attached devices' supported link modes */
	/* See ethtool.h for more info */
	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported);
	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising);
	__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising);
	/* used with phy_speed_down */
	__ETHTOOL_DECLARE_LINK_MODE_MASK(adv_old);
	/* used for eee validation and configuration*/
	__ETHTOOL_DECLARE_LINK_MODE_MASK(supported_eee);
	__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising_eee);
	/* Energy efficient ethernet modes which should be prohibited */
	__ETHTOOL_DECLARE_LINK_MODE_MASK(eee_broken_modes);
	bool enable_tx_lpi;
	bool eee_active;
	struct eee_config eee_cfg;

	/* Host supported PHY interface types. Should be ignored if empty. */
	DECLARE_PHY_INTERFACE_MASK(host_interfaces);

#ifdef CONFIG_LED_TRIGGER_PHY
	struct phy_led_trigger *phy_led_triggers;
	unsigned int phy_num_led_triggers;
	struct phy_led_trigger *last_triggered;

	struct phy_led_trigger *led_link_trigger;
#endif
	struct list_head leds;

	/*
	 * Interrupt number for this PHY
	 * -1 means no interrupt
	 */
	int irq;

	/* private data pointer */
	/* For use by PHYs to maintain extra state */
	void *priv;

	/* shared data pointer */
	/* For use by PHYs inside the same package that need a shared state. */
	struct phy_package_shared *shared;

	/* Reporting cable test results */
	struct sk_buff *skb;
	void *ehdr;
	struct nlattr *nest;

	/* Interrupt and Polling infrastructure */
	struct delayed_work state_queue;

	struct mutex lock;

	/* This may be modified under the rtnl lock */
	bool sfp_bus_attached;
	struct sfp_bus *sfp_bus;
	struct phylink *phylink;
	struct net_device *attached_dev;
	struct mii_timestamper *mii_ts;
	struct pse_control *psec;

	u8 mdix;
	u8 mdix_ctrl;

	int pma_extable;

	unsigned int link_down_events;

	void (*phy_link_change)(struct phy_device *phydev, bool up);
	void (*adjust_link)(struct net_device *dev);

#if IS_ENABLED(CONFIG_MACSEC)
	/* MACsec management functions */
	const struct macsec_ops *macsec_ops;
#endif
};

/* Generic phy_device::dev_flags */
#define PHY_F_NO_IRQ		0x80000000
#define PHY_F_RXC_ALWAYS_ON	0x40000000

#define to_phy_device(__dev)	container_of_const(to_mdio_device(__dev), struct phy_device, mdio)

/**
 * struct phy_tdr_config - Configuration of a TDR raw test
 *
 * @first: Distance for first data collection point
 * @last: Distance for last data collection point
 * @step: Step between data collection points
 * @pair: Bitmap of cable pairs to collect data for
 *
 * A structure containing possible configuration parameters
 * for a TDR cable test. The driver does not need to implement
 * all the parameters, but should report what is actually used.
 * All distances are in centimeters.
 */
struct phy_tdr_config {
	u32 first;
	u32 last;
	u32 step;
	s8 pair;
};
#define PHY_PAIR_ALL -1

/**
 * enum link_inband_signalling - in-band signalling modes that are supported
 *
 * @LINK_INBAND_DISABLE: in-band signalling can be disabled
 * @LINK_INBAND_ENABLE: in-band signalling can be enabled without bypass
 * @LINK_INBAND_BYPASS: in-band signalling can be enabled with bypass
 *
 * The possible and required bits can only be used if the valid bit is set.
 * If possible is clear, that means inband signalling can not be used.
 * Required is only valid when possible is set, and means that inband
 * signalling must be used.
 */
enum link_inband_signalling {
	LINK_INBAND_DISABLE		= BIT(0),
	LINK_INBAND_ENABLE		= BIT(1),
	LINK_INBAND_BYPASS		= BIT(2),
};

/**
 * struct phy_plca_cfg - Configuration of the PLCA (Physical Layer Collision
 * Avoidance) Reconciliation Sublayer.
 *
 * @version: read-only PLCA register map version. -1 = not available. Ignored
 *   when setting the configuration. Format is the same as reported by the PLCA
 *   IDVER register (31.CA00). -1 = not available.
 * @enabled: PLCA configured mode (enabled/disabled). -1 = not available / don't
 *   set. 0 = disabled, anything else = enabled.
 * @node_id: the PLCA local node identifier. -1 = not available / don't set.
 *   Allowed values [0 .. 254]. 255 = node disabled.
 * @node_cnt: the PLCA node count (maximum number of nodes having a TO). Only
 *   meaningful for the coordinator (node_id = 0). -1 = not available / don't
 *   set. Allowed values [1 .. 255].
 * @to_tmr: The value of the PLCA to_timer in bit-times, which determines the
 *   PLCA transmit opportunity window opening. See IEEE802.3 Clause 148 for
 *   more details. The to_timer shall be set equal over all nodes.
 *   -1 = not available / don't set. Allowed values [0 .. 255].
 * @burst_cnt: controls how many additional frames a node is allowed to send in
 *   single transmit opportunity (TO). The default value of 0 means that the
 *   node is allowed exactly one frame per TO. A value of 1 allows two frames
 *   per TO, and so on. -1 = not available / don't set.
 *   Allowed values [0 .. 255].
 * @burst_tmr: controls how many bit times to wait for the MAC to send a new
 *   frame before interrupting the burst. This value should be set to a value
 *   greater than the MAC inter-packet gap (which is typically 96 bits).
 *   -1 = not available / don't set. Allowed values [0 .. 255].
 *
 * A structure containing configuration parameters for setting/getting the PLCA
 * RS configuration. The driver does not need to implement all the parameters,
 * but should report what is actually used.
 */
struct phy_plca_cfg {
	int version;
	int enabled;
	int node_id;
	int node_cnt;
	int to_tmr;
	int burst_cnt;
	int burst_tmr;
};

/**
 * struct phy_plca_status - Status of the PLCA (Physical Layer Collision
 * Avoidance) Reconciliation Sublayer.
 *
 * @pst: The PLCA status as reported by the PST bit in the PLCA STATUS
 *	register(31.CA03), indicating BEACON activity.
 *
 * A structure containing status information of the PLCA RS configuration.
 * The driver does not need to implement all the parameters, but should report
 * what is actually used.
 */
struct phy_plca_status {
	bool pst;
};

/* Modes for PHY LED configuration */
enum phy_led_modes {
	PHY_LED_ACTIVE_HIGH = 0,
	PHY_LED_ACTIVE_LOW = 1,
	PHY_LED_INACTIVE_HIGH_IMPEDANCE = 2,

	/* keep it last */
	__PHY_LED_MODES_NUM,
};

/**
 * struct phy_led: An LED driven by the PHY
 *
 * @list: List of LEDs
 * @phydev: PHY this LED is attached to
 * @led_cdev: Standard LED class structure
 * @index: Number of the LED
 */
struct phy_led {
	struct list_head list;
	struct phy_device *phydev;
	struct led_classdev led_cdev;
	u8 index;
};

#define to_phy_led(d) container_of(d, struct phy_led, led_cdev)

/**
 * struct phy_driver - Driver structure for a particular PHY type
 *
 * @mdiodrv: Data common to all MDIO devices
 * @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 mandatory list of features (speed, duplex, etc)
 *   supported by this PHY
 * @flags: A bitfield defining certain other features this PHY
 *   supports (like interrupts)
 * @driver_data: Static driver data
 *
 * All functions are optional. If config_aneg or read_status
 * are not implemented, the phy core uses the genphy versions.
 * 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 {
	struct mdio_driver_common mdiodrv;
	u32 phy_id;
	char *name;
	u32 phy_id_mask;
	const unsigned long * const features;
	u32 flags;
	const void *driver_data;

	/**
	 * @soft_reset: Called to issue a PHY software reset
	 */
	int (*soft_reset)(struct phy_device *phydev);

	/**
	 * @config_init: Called to initialize the PHY,
	 * including after a reset
	 */
	int (*config_init)(struct phy_device *phydev);

	/**
	 * @probe: Called during discovery.  Used to set
	 * up device-specific structures, if any
	 */
	int (*probe)(struct phy_device *phydev);

	/**
	 * @get_features: Probe the hardware to determine what
	 * abilities it has.  Should only set phydev->supported.
	 */
	int (*get_features)(struct phy_device *phydev);

	/**
	 * @inband_caps: query whether in-band is supported for the given PHY
	 * interface mode. Returns a bitmask of bits defined by enum
	 * link_inband_signalling.
	 */
	unsigned int (*inband_caps)(struct phy_device *phydev,
				    phy_interface_t interface);

	/**
	 * @config_inband: configure in-band mode for the PHY
	 */
	int (*config_inband)(struct phy_device *phydev, unsigned int modes);

	/**
	 * @get_rate_matching: Get the supported type of rate matching for a
	 * particular phy interface. This is used by phy consumers to determine
	 * whether to advertise lower-speed modes for that interface. It is
	 * assumed that if a rate matching mode is supported on an interface,
	 * then that interface's rate can be adapted to all slower link speeds
	 * supported by the phy. If the interface is not supported, this should
	 * return %RATE_MATCH_NONE.
	 */
	int (*get_rate_matching)(struct phy_device *phydev,
				   phy_interface_t iface);

	/* PHY Power Management */
	/** @suspend: Suspend the hardware, saving state if needed */
	int (*suspend)(struct phy_device *phydev);
	/** @resume: Resume the hardware, restoring state if needed */
	int (*resume)(struct phy_device *phydev);

	/**
	 * @config_aneg: Configures the advertisement and resets
	 * autonegotiation if phydev->autoneg is on,
	 * forces the speed to the current settings in phydev
	 * if phydev->autoneg is off
	 */
	int (*config_aneg)(struct phy_device *phydev);

	/** @aneg_done: Determines the auto negotiation result */
	int (*aneg_done)(struct phy_device *phydev);

	/** @read_status: Determines the negotiated speed and duplex */
	int (*read_status)(struct phy_device *phydev);

	/**
	 * @config_intr: Enables or disables interrupts.
	 * It should also clear any pending interrupts prior to enabling the
	 * IRQs and after disabling them.
	 */
	int (*config_intr)(struct phy_device *phydev);

	/** @handle_interrupt: Override default interrupt handling */
	irqreturn_t (*handle_interrupt)(struct phy_device *phydev);

	/** @remove: Clears up any memory if needed */
	void (*remove)(struct phy_device *phydev);

	/**
	 * @match_phy_device: 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);

	/**
	 * @set_wol: 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);

	/**
	 * @get_wol: See set_wol, but for checking whether Wake on LAN
	 * is enabled.
	 */
	void (*get_wol)(struct phy_device *dev, struct ethtool_wolinfo *wol);

	/**
	 * @link_change_notify: 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);

	/**
	 * @read_mmd: 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);

	/**
	 * @write_mmd: 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);

	/** @read_page: Return the current PHY register page number */
	int (*read_page)(struct phy_device *dev);
	/** @write_page: Set the current PHY register page number */
	int (*write_page)(struct phy_device *dev, int page);

	/**
	 * @module_info: 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);

	/**
	 * @module_eeprom: Get the eeprom information from the plug-in
	 * module
	 */
	int (*module_eeprom)(struct phy_device *dev,
			     struct ethtool_eeprom *ee, u8 *data);

	/** @cable_test_start: Start a cable test */
	int (*cable_test_start)(struct phy_device *dev);

	/**  @cable_test_tdr_start: Start a raw TDR cable test */
	int (*cable_test_tdr_start)(struct phy_device *dev,
				    const struct phy_tdr_config *config);

	/**
	 * @cable_test_get_status: Once per second, or on interrupt,
	 * request the status of the test.
	 */
	int (*cable_test_get_status)(struct phy_device *dev, bool *finished);

	/* Get statistics from the PHY using ethtool */
	/**
	 * @get_phy_stats: Retrieve PHY statistics.
	 * @dev: The PHY device for which the statistics are retrieved.
	 * @eth_stats: structure where Ethernet PHY stats will be stored.
	 * @stats: structure where additional PHY-specific stats will be stored.
	 *
	 * Retrieves the supported PHY statistics and populates the provided
	 * structures. The input structures are pre-initialized with
	 * `ETHTOOL_STAT_NOT_SET`, and the driver must only modify members
	 * corresponding to supported statistics. Unmodified members will remain
	 * set to `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace.
	 */
	void (*get_phy_stats)(struct phy_device *dev,
			      struct ethtool_eth_phy_stats *eth_stats,
			      struct ethtool_phy_stats *stats);

	/**
	 * @get_link_stats: Retrieve link statistics.
	 * @dev: The PHY device for which the statistics are retrieved.
	 * @link_stats: structure where link-specific stats will be stored.
	 *
	 * Retrieves link-related statistics for the given PHY device. The input
	 * structure is pre-initialized with `ETHTOOL_STAT_NOT_SET`, and the
	 * driver must only modify members corresponding to supported
	 * statistics. Unmodified members will remain set to
	 * `ETHTOOL_STAT_NOT_SET` and will not be returned to userspace.
	 */
	void (*get_link_stats)(struct phy_device *dev,
			       struct ethtool_link_ext_stats *link_stats);

	/**
	 * @update_stats: Trigger periodic statistics updates.
	 * @dev: The PHY device for which statistics updates are triggered.
	 *
	 * Periodically gathers statistics from the PHY device to update locally
	 * maintained 64-bit counters. This is necessary for PHYs that implement
	 * reduced-width counters (e.g., 16-bit or 32-bit) which can overflow
	 * more frequently compared to 64-bit counters. By invoking this
	 * callback, drivers can fetch the current counter values, handle
	 * overflow detection, and accumulate the results into local 64-bit
	 * counters for accurate reporting through the `get_phy_stats` and
	 * `get_link_stats` interfaces.
	 *
	 * Return: 0 on success or a negative error code on failure.
	 */
	int (*update_stats)(struct phy_device *dev);

	/** @get_sset_count: Number of statistic counters */
	int (*get_sset_count)(struct phy_device *dev);
	/** @get_strings: Names of the statistic counters */
	void (*get_strings)(struct phy_device *dev, u8 *data);
	/** @get_stats: Return the statistic counter values */
	void (*get_stats)(struct phy_device *dev,
			  struct ethtool_stats *stats, u64 *data);

	/* Get and Set PHY tunables */
	/** @get_tunable: Return the value of a tunable */
	int (*get_tunable)(struct phy_device *dev,
			   struct ethtool_tunable *tuna, void *data);
	/** @set_tunable: Set the value of a tunable */
	int (*set_tunable)(struct phy_device *dev,
			    struct ethtool_tunable *tuna,
			    const void *data);
	/** @set_loopback: Set the loopback mood of the PHY */
	int (*set_loopback)(struct phy_device *dev, bool enable);
	/** @get_sqi: Get the signal quality indication */
	int (*get_sqi)(struct phy_device *dev);
	/** @get_sqi_max: Get the maximum signal quality indication */
	int (*get_sqi_max)(struct phy_device *dev);

	/* PLCA RS interface */
	/** @get_plca_cfg: Return the current PLCA configuration */
	int (*get_plca_cfg)(struct phy_device *dev,
			    struct phy_plca_cfg *plca_cfg);
	/** @set_plca_cfg: Set the PLCA configuration */
	int (*set_plca_cfg)(struct phy_device *dev,
			    const struct phy_plca_cfg *plca_cfg);
	/** @get_plca_status: Return the current PLCA status info */
	int (*get_plca_status)(struct phy_device *dev,
			       struct phy_plca_status *plca_st);

	/**
	 * @led_brightness_set: Set a PHY LED brightness. Index
	 * indicates which of the PHYs led should be set. Value
	 * follows the standard LED class meaning, e.g. LED_OFF,
	 * LED_HALF, LED_FULL.
	 */
	int (*led_brightness_set)(struct phy_device *dev,
				  u8 index, enum led_brightness value);

	/**
	 * @led_blink_set: Set a PHY LED blinking.  Index indicates
	 * which of the PHYs led should be configured to blink. Delays
	 * are in milliseconds and if both are zero then a sensible
	 * default should be chosen.  The call should adjust the
	 * timings in that case and if it can't match the values
	 * specified exactly.
	 */
	int (*led_blink_set)(struct phy_device *dev, u8 index,
			     unsigned long *delay_on,
			     unsigned long *delay_off);
	/**
	 * @led_hw_is_supported: Can the HW support the given rules.
	 * @dev: PHY device which has the LED
	 * @index: Which LED of the PHY device
	 * @rules The core is interested in these rules
	 *
	 * Return 0 if yes,  -EOPNOTSUPP if not, or an error code.
	 */
	int (*led_hw_is_supported)(struct phy_device *dev, u8 index,
				   unsigned long rules);
	/**
	 * @led_hw_control_set: Set the HW to control the LED
	 * @dev: PHY device which has the LED
	 * @index: Which LED of the PHY device
	 * @rules The rules used to control the LED
	 *
	 * Returns 0, or a an error code.
	 */
	int (*led_hw_control_set)(struct phy_device *dev, u8 index,
				  unsigned long rules);
	/**
	 * @led_hw_control_get: Get how the HW is controlling the LED
	 * @dev: PHY device which has the LED
	 * @index: Which LED of the PHY device
	 * @rules Pointer to the rules used to control the LED
	 *
	 * Set *@rules to how the HW is currently blinking. Returns 0
	 * on success, or a error code if the current blinking cannot
	 * be represented in rules, or some other error happens.
	 */
	int (*led_hw_control_get)(struct phy_device *dev, u8 index,
				  unsigned long *rules);

	/**
	 * @led_polarity_set: Set the LED polarity modes
	 * @dev: PHY device which has the LED
	 * @index: Which LED of the PHY device
	 * @modes: bitmap of LED polarity modes
	 *
	 * Configure LED with all the required polarity modes in @modes
	 * to make it correctly turn ON or OFF.
	 *
	 * Returns 0, or an error code.
	 */
	int (*led_polarity_set)(struct phy_device *dev, int index,
				unsigned long modes);
};
#define to_phy_driver(d) container_of_const(to_mdio_common_driver(d),		\
				      struct phy_driver, mdiodrv)

#define PHY_ANY_ID "MATCH ANY PHY"
#define PHY_ANY_UID 0xffffffff

#define PHY_ID_MATCH_EXACT(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 0)
#define PHY_ID_MATCH_MODEL(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 4)
#define PHY_ID_MATCH_VENDOR(id) .phy_id = (id), .phy_id_mask = GENMASK(31, 10)

/**
 * phy_id_compare - compare @id1 with @id2 taking account of @mask
 * @id1: first PHY ID
 * @id2: second PHY ID
 * @mask: the PHY ID mask, set bits are significant in matching
 *
 * Return true if the bits from @id1 and @id2 specified by @mask match.
 * This uses an equivalent test to (@id & @mask) == (@phy_id & @mask).
 */
static inline bool phy_id_compare(u32 id1, u32 id2, u32 mask)
{
	return !((id1 ^ id2) & mask);
}

/**
 * phydev_id_compare - compare @id with the PHY's Clause 22 ID
 * @phydev: the PHY device
 * @id: the PHY ID to be matched
 *
 * Compare the @phydev clause 22 ID with the provided @id and return true or
 * false depending whether it matches, using the bound driver mask. The
 * @phydev must be bound to a driver.
 */
static inline bool phydev_id_compare(struct phy_device *phydev, u32 id)
{
	return phy_id_compare(id, phydev->phy_id, phydev->drv->phy_id_mask);
}

/* A Structure for boards to register fixups with the PHY Lib */
struct phy_fixup {
	struct list_head list;
	char bus_id[MII_BUS_ID_SIZE + 3];
	u32 phy_uid;
	u32 phy_uid_mask;
	int (*run)(struct phy_device *phydev);
};

const char *phy_speed_to_str(int speed);
const char *phy_duplex_to_str(unsigned int duplex);
const char *phy_rate_matching_to_str(int rate_matching);

int phy_interface_num_ports(phy_interface_t interface);

/* 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,
		   bool exact);
size_t phy_speeds(unsigned int *speeds, size_t size,
		  unsigned long *mask);
void of_set_phy_supported(struct phy_device *phydev);
void of_set_phy_eee_broken(struct phy_device *phydev);
void of_set_phy_timing_role(struct phy_device *phydev);
int phy_speed_down_core(struct phy_device *phydev);

/**
 * phy_set_eee_broken - Mark an EEE mode as broken so that it isn't advertised.
 * @phydev: The phy_device struct
 * @link_mode: The broken EEE mode
 */
static inline void phy_set_eee_broken(struct phy_device *phydev, u32 link_mode)
{
	linkmode_set_bit(link_mode, phydev->eee_broken_modes);
}

/**
 * phy_is_started - Convenience function to check whether PHY is started
 * @phydev: The phy_device struct
 */
static inline bool phy_is_started(struct phy_device *phydev)
{
	return phydev->state >= PHY_UP;
}

void phy_resolve_aneg_pause(struct phy_device *phydev);
void phy_resolve_aneg_linkmode(struct phy_device *phydev);
void phy_check_downshift(struct phy_device *phydev);

/**
 * 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.
 */
static inline int phy_read(struct phy_device *phydev, u32 regnum)
{
	return mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
}

#define phy_read_poll_timeout(phydev, regnum, val, cond, sleep_us, \
				timeout_us, sleep_before_read) \
({ \
	int __ret, __val; \
	__ret = read_poll_timeout(__val = phy_read, val, \
				  __val < 0 || (cond), \
		sleep_us, timeout_us, sleep_before_read, phydev, regnum); \
	if (__val < 0) \
		__ret = __val; \
	if (__ret) \
		phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
	__ret; \
})

/**
 * __phy_read - convenience function for reading a given PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to read
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_read(struct phy_device *phydev, u32 regnum)
{
	return __mdiobus_read(phydev->mdio.bus, phydev->mdio.addr, regnum);
}

/**
 * phy_write - Convenience function for writing a given PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: value to write to @regnum
 *
 * NOTE: MUST NOT be called from interrupt context,
 * because the bus read/write functions may wait for an interrupt
 * to conclude the operation.
 */
static inline int phy_write(struct phy_device *phydev, u32 regnum, u16 val)
{
	return mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum, val);
}

/**
 * __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
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_write(struct phy_device *phydev, u32 regnum, u16 val)
{
	return __mdiobus_write(phydev->mdio.bus, phydev->mdio.addr, regnum,
			       val);
}

/**
 * __phy_modify_changed() - Convenience function for modifying a PHY register
 * @phydev: a pointer to a &struct phy_device
 * @regnum: register number
 * @mask: bit mask of bits to clear
 * @set: bit mask of bits to set
 *
 * Unlocked helper function which allows a PHY register to be modified as
 * new register value = (old register value & ~mask) | set
 *
 * Returns negative errno, 0 if there was no change, and 1 in case of change
 */
static inline int __phy_modify_changed(struct phy_device *phydev, u32 regnum,
				       u16 mask, u16 set)
{
	return __mdiobus_modify_changed(phydev->mdio.bus, phydev->mdio.addr,
					regnum, mask, set);
}

/*
 * phy_read_mmd - Convenience function for reading a register
 * from an MMD on a given PHY.
 */
int phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);

/**
 * phy_read_mmd_poll_timeout - Periodically poll a PHY register until a
 *                             condition is met or a timeout occurs
 *
 * @phydev: The phy_device struct
 * @devaddr: The MMD to read from
 * @regnum: The register on the MMD to read
 * @val: Variable to read the register into
 * @cond: Break condition (usually involving @val)
 * @sleep_us: Maximum time to sleep between reads in us (0 tight-loops). Please
 *            read usleep_range() function description for details and
 *            limitations.
 * @timeout_us: Timeout in us, 0 means never timeout
 * @sleep_before_read: if it is true, sleep @sleep_us before read.
 *
 * Returns: 0 on success and -ETIMEDOUT upon a timeout. In either
 * case, the last read value at @args is stored in @val. Must not
 * be called from atomic context if sleep_us or timeout_us are used.
 */
#define phy_read_mmd_poll_timeout(phydev, devaddr, regnum, val, cond, \
				  sleep_us, timeout_us, sleep_before_read) \
({ \
	int __ret, __val; \
	__ret = read_poll_timeout(__val = phy_read_mmd, val, \
				  __val < 0 || (cond), \
				  sleep_us, timeout_us, sleep_before_read, \
				  phydev, devaddr, regnum); \
	if (__val < 0) \
		__ret = __val; \
	if (__ret) \
		phydev_err(phydev, "%s failed: %d\n", __func__, __ret); \
	__ret; \
})

/*
 * __phy_read_mmd - Convenience function for reading a register
 * from an MMD on a given PHY.
 */
int __phy_read_mmd(struct phy_device *phydev, int devad, u32 regnum);

/*
 * phy_write_mmd - Convenience function for writing a register
 * on an MMD on a given PHY.
 */
int phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);

/*
 * __phy_write_mmd - Convenience function for writing a register
 * on an MMD on a given PHY.
 */
int __phy_write_mmd(struct phy_device *phydev, int devad, u32 regnum, u16 val);

int __phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
			 u16 set);
int phy_modify_changed(struct phy_device *phydev, u32 regnum, u16 mask,
		       u16 set);
int __phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);
int phy_modify(struct phy_device *phydev, u32 regnum, u16 mask, u16 set);

int __phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
			     u16 mask, u16 set);
int phy_modify_mmd_changed(struct phy_device *phydev, int devad, u32 regnum,
			   u16 mask, u16 set);
int __phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
		     u16 mask, u16 set);
int phy_modify_mmd(struct phy_device *phydev, int devad, u32 regnum,
		   u16 mask, u16 set);

/**
 * __phy_set_bits - Convenience function for setting bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to set
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
{
	return __phy_modify(phydev, regnum, 0, val);
}

/**
 * __phy_clear_bits - Convenience function for clearing bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to clear
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_clear_bits(struct phy_device *phydev, u32 regnum,
				   u16 val)
{
	return __phy_modify(phydev, regnum, val, 0);
}

/**
 * phy_set_bits - Convenience function for setting bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to set
 */
static inline int phy_set_bits(struct phy_device *phydev, u32 regnum, u16 val)
{
	return phy_modify(phydev, regnum, 0, val);
}

/**
 * phy_clear_bits - Convenience function for clearing bits in a PHY register
 * @phydev: the phy_device struct
 * @regnum: register number to write
 * @val: bits to clear
 */
static inline int phy_clear_bits(struct phy_device *phydev, u32 regnum, u16 val)
{
	return phy_modify(phydev, regnum, val, 0);
}

/**
 * __phy_set_bits_mmd - Convenience function for setting bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to set
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_set_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return __phy_modify_mmd(phydev, devad, regnum, 0, val);
}

/**
 * __phy_clear_bits_mmd - Convenience function for clearing bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to clear
 *
 * The caller must have taken the MDIO bus lock.
 */
static inline int __phy_clear_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return __phy_modify_mmd(phydev, devad, regnum, val, 0);
}

/**
 * phy_set_bits_mmd - Convenience function for setting bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to set
 */
static inline int phy_set_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return phy_modify_mmd(phydev, devad, regnum, 0, val);
}

/**
 * phy_clear_bits_mmd - Convenience function for clearing bits in a register
 * on MMD
 * @phydev: the phy_device struct
 * @devad: the MMD containing register to modify
 * @regnum: register number to modify
 * @val: bits to clear
 */
static inline int phy_clear_bits_mmd(struct phy_device *phydev, int devad,
		u32 regnum, u16 val)
{
	return phy_modify_mmd(phydev, devad, regnum, val, 0);
}

/**
 * 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_MAC_INTERRUPT
 */
static inline bool phy_interrupt_is_valid(struct phy_device *phydev)
{
	return phydev->irq != PHY_POLL && phydev->irq != PHY_MAC_INTERRUPT;
}

/**
 * phy_polling_mode - Convenience function for testing whether polling is
 * used to detect PHY status changes
 * @phydev: the phy_device struct
 */
static inline bool phy_polling_mode(struct phy_device *phydev)
{
	if (phydev->state == PHY_CABLETEST)
		if (phydev->drv->flags & PHY_POLL_CABLE_TEST)
			return true;

	if (phydev->drv->update_stats)
		return true;

	return phydev->irq == PHY_POLL;
}

/**
 * phy_has_hwtstamp - Tests whether a PHY time stamp configuration.
 * @phydev: the phy_device struct
 */
static inline bool phy_has_hwtstamp(struct phy_device *phydev)
{
	return phydev && phydev->mii_ts && phydev->mii_ts->hwtstamp;
}

/**
 * phy_has_rxtstamp - Tests whether a PHY supports receive time stamping.
 * @phydev: the phy_device struct
 */
static inline bool phy_has_rxtstamp(struct phy_device *phydev)
{
	return phydev && phydev->mii_ts && phydev->mii_ts->rxtstamp;
}

/**
 * phy_has_tsinfo - Tests whether a PHY reports time stamping and/or
 * PTP hardware clock capabilities.
 * @phydev: the phy_device struct
 */
static inline bool phy_has_tsinfo(struct phy_device *phydev)
{
	return phydev && phydev->mii_ts && phydev->mii_ts->ts_info;
}

/**
 * phy_has_txtstamp - Tests whether a PHY supports transmit time stamping.
 * @phydev: the phy_device struct
 */
static inline bool phy_has_txtstamp(struct phy_device *phydev)
{
	return phydev && phydev->mii_ts && phydev->mii_ts->txtstamp;
}

static inline int phy_hwtstamp(struct phy_device *phydev,
			       struct kernel_hwtstamp_config *cfg,
			       struct netlink_ext_ack *extack)
{
	return phydev->mii_ts->hwtstamp(phydev->mii_ts, cfg, extack);
}

static inline bool phy_rxtstamp(struct phy_device *phydev, struct sk_buff *skb,
				int type)
{
	return phydev->mii_ts->rxtstamp(phydev->mii_ts, skb, type);
}

static inline int phy_ts_info(struct phy_device *phydev,
			      struct kernel_ethtool_ts_info *tsinfo)
{
	return phydev->mii_ts->ts_info(phydev->mii_ts, tsinfo);
}

static inline void phy_txtstamp(struct phy_device *phydev, struct sk_buff *skb,
				int type)
{
	phydev->mii_ts->txtstamp(phydev->mii_ts, skb, type);
}

/**
 * phy_is_default_hwtstamp - Is the PHY hwtstamp the default timestamp
 * @phydev: Pointer to phy_device
 *
 * This is used to get default timestamping device taking into account
 * the new API choice, which is selecting the timestamping from MAC by
 * default if the phydev does not have default_timestamp flag enabled.
 *
 * Return: True if phy is the default hw timestamp, false otherwise.
 */
static inline bool phy_is_default_hwtstamp(struct phy_device *phydev)
{
	return phy_has_hwtstamp(phydev) && phydev->default_timestamp;
}

/**
 * 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;
}

/**
 * phy_on_sfp - Convenience function for testing if a PHY is on an SFP module
 * @phydev: the phy_device struct
 */
static inline bool phy_on_sfp(struct phy_device *phydev)
{
	return phydev->is_on_sfp_module;
}

/**
 * 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;
};

/**
 * phy_interface_mode_is_8023z() - does the PHY interface mode use 802.3z
 *   negotiation
 * @mode: one of &enum phy_interface_t
 *
 * Returns true if the PHY interface mode uses the 16-bit negotiation
 * word as defined in 802.3z. (See 802.3-2015 37.2.1 Config_Reg encoding)
 */
static inline bool phy_interface_mode_is_8023z(phy_interface_t mode)
{
	return mode == PHY_INTERFACE_MODE_1000BASEX ||
	       mode == PHY_INTERFACE_MODE_2500BASEX;
}

/**
 * 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)
{
	return phy_interface_mode_is_rgmii(phydev->interface);
};

/**
 * 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;
}

int phy_save_page(struct phy_device *phydev);
int phy_select_page(struct phy_device *phydev, int page);
int phy_restore_page(struct phy_device *phydev, int oldpage, int ret);
int phy_read_paged(struct phy_device *phydev, int page, u32 regnum);
int phy_write_paged(struct phy_device *phydev, int page, u32 regnum, u16 val);
int phy_modify_paged_changed(struct phy_device *phydev, int page, u32 regnum,
			     u16 mask, u16 set);
int phy_modify_paged(struct phy_device *phydev, int page, u32 regnum,
		     u16 mask, u16 set);

struct phy_device *phy_device_create(struct mii_bus *bus, int addr, u32 phy_id,
				     bool is_c45,
				     struct phy_c45_device_ids *c45_ids);
#if IS_ENABLED(CONFIG_PHYLIB)
int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id);
struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode);
struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode);
struct phy_device *device_phy_find_device(struct device *dev);
struct fwnode_handle *fwnode_get_phy_node(const struct fwnode_handle *fwnode);
struct phy_device *get_phy_device(struct mii_bus *bus, int addr, bool is_c45);
int phy_device_register(struct phy_device *phy);
void phy_device_free(struct phy_device *phydev);
#else
static inline int fwnode_get_phy_id(struct fwnode_handle *fwnode, u32 *phy_id)
{
	return 0;
}
static inline
struct mdio_device *fwnode_mdio_find_device(struct fwnode_handle *fwnode)
{
	return 0;
}

static inline
struct phy_device *fwnode_phy_find_device(struct fwnode_handle *phy_fwnode)
{
	return NULL;
}

static inline struct phy_device *device_phy_find_device(struct device *dev)
{
	return NULL;
}

static inline
struct fwnode_handle *fwnode_get_phy_node(struct fwnode_handle *fwnode)
{
	return NULL;
}

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 */
void phy_device_remove(struct phy_device *phydev);
int phy_get_c45_ids(struct phy_device *phydev);
int phy_init_hw(struct phy_device *phydev);
int phy_suspend(struct phy_device *phydev);
int phy_resume(struct phy_device *phydev);
int __phy_resume(struct phy_device *phydev);
int phy_loopback(struct phy_device *phydev, bool enable);
int phy_sfp_connect_phy(void *upstream, struct phy_device *phy);
void phy_sfp_disconnect_phy(void *upstream, struct phy_device *phy);
void phy_sfp_attach(void *upstream, struct sfp_bus *bus);
void phy_sfp_detach(void *upstream, struct sfp_bus *bus);
int phy_sfp_probe(struct phy_device *phydev,
	          const struct sfp_upstream_ops *ops);
struct phy_device *phy_attach(struct net_device *dev, const char *bus_id,
			      phy_interface_t interface);
struct phy_device *phy_find_first(struct mii_bus *bus);
int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
		      u32 flags, phy_interface_t interface);
int phy_connect_direct(struct net_device *dev, struct phy_device *phydev,
		       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);
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_config_aneg(struct phy_device *phydev);
int _phy_start_aneg(struct phy_device *phydev);
int phy_start_aneg(struct phy_device *phydev);
int phy_aneg_done(struct phy_device *phydev);
unsigned int phy_inband_caps(struct phy_device *phydev,
			     phy_interface_t interface);
int phy_config_inband(struct phy_device *phydev, unsigned int modes);
int phy_speed_down(struct phy_device *phydev, bool sync);
int phy_speed_up(struct phy_device *phydev);
bool phy_check_valid(int speed, int duplex, unsigned long *features);

int phy_restart_aneg(struct phy_device *phydev);
int phy_reset_after_clk_enable(struct phy_device *phydev);

#if IS_ENABLED(CONFIG_PHYLIB)
int phy_start_cable_test(struct phy_device *phydev,
			 struct netlink_ext_ack *extack);
int phy_start_cable_test_tdr(struct phy_device *phydev,
			     struct netlink_ext_ack *extack,
			     const struct phy_tdr_config *config);
#else
static inline
int phy_start_cable_test(struct phy_device *phydev,
			 struct netlink_ext_ack *extack)
{
	NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
	return -EOPNOTSUPP;
}
static inline
int phy_start_cable_test_tdr(struct phy_device *phydev,
			     struct netlink_ext_ack *extack,
			     const struct phy_tdr_config *config)
{
	NL_SET_ERR_MSG(extack, "Kernel not compiled with PHYLIB support");
	return -EOPNOTSUPP;
}
#endif

static inline void phy_device_reset(struct phy_device *phydev, int value)
{
	mdio_device_reset(&phydev->mdio, value);
}

#define phydev_err(_phydev, format, args...)	\
	dev_err(&_phydev->mdio.dev, format, ##args)

#define phydev_err_probe(_phydev, err, format, args...)	\
	dev_err_probe(&_phydev->mdio.dev, err, format, ##args)

#define phydev_info(_phydev, format, args...)	\
	dev_info(&_phydev->mdio.dev, format, ##args)

#define phydev_warn(_phydev, format, args...)	\
	dev_warn(&_phydev->mdio.dev, format, ##args)

#define phydev_dbg(_phydev, format, args...)	\
	dev_dbg(&_phydev->mdio.dev, format, ##args)

static inline const char *phydev_name(const struct phy_device *phydev)
{
	return dev_name(&phydev->mdio.dev);
}

static inline void phy_lock_mdio_bus(struct phy_device *phydev)
{
	mutex_lock(&phydev->mdio.bus->mdio_lock);
}

static inline void phy_unlock_mdio_bus(struct phy_device *phydev)
{
	mutex_unlock(&phydev->mdio.bus->mdio_lock);
}

void phy_attached_print(struct phy_device *phydev, const char *fmt, ...)
	__printf(2, 3);
char *phy_attached_info_irq(struct phy_device *phydev)
	__malloc;
void phy_attached_info(struct phy_device *phydev);

/* Clause 22 PHY */
int genphy_read_abilities(struct phy_device *phydev);
int genphy_setup_forced(struct phy_device *phydev);
int genphy_restart_aneg(struct phy_device *phydev);
int genphy_check_and_restart_aneg(struct phy_device *phydev, bool restart);
int __genphy_config_aneg(struct phy_device *phydev, bool changed);
int genphy_aneg_done(struct phy_device *phydev);
int genphy_update_link(struct phy_device *phydev);
int genphy_read_lpa(struct phy_device *phydev);
int genphy_read_status_fixed(struct phy_device *phydev);
int genphy_read_status(struct phy_device *phydev);
int genphy_read_master_slave(struct phy_device *phydev);
int genphy_suspend(struct phy_device *phydev);
int genphy_resume(struct phy_device *phydev);
int genphy_loopback(struct phy_device *phydev, bool enable);
int genphy_soft_reset(struct phy_device *phydev);
irqreturn_t genphy_handle_interrupt_no_ack(struct phy_device *phydev);

static inline int genphy_config_aneg(struct phy_device *phydev)
{
	return __genphy_config_aneg(phydev, false);
}

static inline int genphy_no_config_intr(struct phy_device *phydev)
{
	return 0;
}
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);

/* Clause 37 */
int genphy_c37_config_aneg(struct phy_device *phydev);
int genphy_c37_read_status(struct phy_device *phydev, bool *changed);

/* Clause 45 PHY */
int genphy_c45_restart_aneg(struct phy_device *phydev);
int genphy_c45_check_and_restart_aneg(struct phy_device *phydev, bool restart);
int genphy_c45_aneg_done(struct phy_device *phydev);
int genphy_c45_read_link(struct phy_device *phydev);
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_pma_baset1_setup_master_slave(struct phy_device *phydev);
int genphy_c45_an_config_aneg(struct phy_device *phydev);
int genphy_c45_an_disable_aneg(struct phy_device *phydev);
int genphy_c45_read_mdix(struct phy_device *phydev);
int genphy_c45_pma_read_abilities(struct phy_device *phydev);
int genphy_c45_pma_read_ext_abilities(struct phy_device *phydev);
int genphy_c45_pma_baset1_read_abilities(struct phy_device *phydev);
int genphy_c45_read_eee_abilities(struct phy_device *phydev);
int genphy_c45_pma_baset1_read_master_slave(struct phy_device *phydev);
int genphy_c45_read_status(struct phy_device *phydev);
int genphy_c45_baset1_read_status(struct phy_device *phydev);
int genphy_c45_config_aneg(struct phy_device *phydev);
int genphy_c45_loopback(struct phy_device *phydev, bool enable);
int genphy_c45_pma_resume(struct phy_device *phydev);
int genphy_c45_pma_suspend(struct phy_device *phydev);
int genphy_c45_fast_retrain(struct phy_device *phydev, bool enable);
int genphy_c45_plca_get_cfg(struct phy_device *phydev,
			    struct phy_plca_cfg *plca_cfg);
int genphy_c45_plca_set_cfg(struct phy_device *phydev,
			    const struct phy_plca_cfg *plca_cfg);
int genphy_c45_plca_get_status(struct phy_device *phydev,
			       struct phy_plca_status *plca_st);
int genphy_c45_eee_is_active(struct phy_device *phydev, unsigned long *adv,
			     unsigned long *lp);
int genphy_c45_ethtool_get_eee(struct phy_device *phydev,
			       struct ethtool_keee *data);
int genphy_c45_ethtool_set_eee(struct phy_device *phydev,
			       struct ethtool_keee *data);
int genphy_c45_an_config_eee_aneg(struct phy_device *phydev);
int genphy_c45_read_eee_adv(struct phy_device *phydev, unsigned long *adv);

/* Generic C45 PHY driver */
extern struct phy_driver genphy_c45_driver;

/* The gen10g_* functions are the old Clause 45 stub */
int gen10g_config_aneg(struct phy_device *phydev);

static inline int phy_read_status(struct phy_device *phydev)
{
	if (!phydev->drv)
		return -EIO;

	if (phydev->drv->read_status)
		return phydev->drv->read_status(phydev);
	else
		return genphy_read_status(phydev);
}

void phy_driver_unregister(struct phy_driver *drv);
void phy_drivers_unregister(struct phy_driver *drv, int n);
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);
void phy_error(struct phy_device *phydev);
void phy_state_machine(struct work_struct *work);
void phy_queue_state_machine(struct phy_device *phydev, unsigned long jiffies);
void phy_trigger_machine(struct phy_device *phydev);
void phy_mac_interrupt(struct phy_device *phydev);
void phy_start_machine(struct phy_device *phydev);
void phy_stop_machine(struct phy_device *phydev);
void phy_ethtool_ksettings_get(struct phy_device *phydev,
			       struct ethtool_link_ksettings *cmd);
int phy_ethtool_ksettings_set(struct phy_device *phydev,
			      const struct ethtool_link_ksettings *cmd);
int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd);
int phy_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
int phy_do_ioctl_running(struct net_device *dev, struct ifreq *ifr, int cmd);
int phy_disable_interrupts(struct phy_device *phydev);
void phy_request_interrupt(struct phy_device *phydev);
void phy_free_interrupt(struct phy_device *phydev);
void phy_print_status(struct phy_device *phydev);
int phy_get_rate_matching(struct phy_device *phydev,
			    phy_interface_t iface);
void phy_set_max_speed(struct phy_device *phydev, u32 max_speed);
void phy_remove_link_mode(struct phy_device *phydev, u32 link_mode);
void phy_advertise_supported(struct phy_device *phydev);
void phy_advertise_eee_all(struct phy_device *phydev);
void phy_support_sym_pause(struct phy_device *phydev);
void phy_support_asym_pause(struct phy_device *phydev);
void phy_support_eee(struct phy_device *phydev);
void phy_disable_eee(struct phy_device *phydev);
void phy_set_sym_pause(struct phy_device *phydev, bool rx, bool tx,
		       bool autoneg);
void phy_set_asym_pause(struct phy_device *phydev, bool rx, bool tx);
bool phy_validate_pause(struct phy_device *phydev,
			struct ethtool_pauseparam *pp);
void phy_get_pause(struct phy_device *phydev, bool *tx_pause, bool *rx_pause);

s32 phy_get_internal_delay(struct phy_device *phydev, struct device *dev,
			   const int *delay_values, int size, bool is_rx);

int phy_get_tx_amplitude_gain(struct phy_device *phydev, struct device *dev,
			      enum ethtool_link_mode_bit_indices linkmode,
			      u32 *val);

void phy_resolve_pause(unsigned long *local_adv, unsigned long *partner_adv,
		       bool *tx_pause, bool *rx_pause);

int phy_register_fixup(const char *bus_id, u32 phy_uid, u32 phy_uid_mask,
		       int (*run)(struct phy_device *));
int phy_register_fixup_for_id(const char *bus_id,
			      int (*run)(struct phy_device *));
int phy_register_fixup_for_uid(u32 phy_uid, u32 phy_uid_mask,
			       int (*run)(struct phy_device *));

int phy_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);

int phy_eee_tx_clock_stop_capable(struct phy_device *phydev);
int phy_eee_rx_clock_stop(struct phy_device *phydev, bool clk_stop_enable);
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_keee *data);
int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_keee *data);
int phy_ethtool_set_wol(struct phy_device *phydev, struct ethtool_wolinfo *wol);
void phy_ethtool_get_wol(struct phy_device *phydev,
			 struct ethtool_wolinfo *wol);
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);
int phy_ethtool_nway_reset(struct net_device *ndev);
int phy_package_join(struct phy_device *phydev, int base_addr, size_t priv_size);
int of_phy_package_join(struct phy_device *phydev, size_t priv_size);
void phy_package_leave(struct phy_device *phydev);
int devm_phy_package_join(struct device *dev, struct phy_device *phydev,
			  int base_addr, size_t priv_size);
int devm_of_phy_package_join(struct device *dev, struct phy_device *phydev,
			     size_t priv_size);

int __init mdio_bus_init(void);
void mdio_bus_exit(void);

int phy_ethtool_get_strings(struct phy_device *phydev, u8 *data);
int phy_ethtool_get_sset_count(struct phy_device *phydev);
int phy_ethtool_get_stats(struct phy_device *phydev,
			  struct ethtool_stats *stats, u64 *data);

void __phy_ethtool_get_phy_stats(struct phy_device *phydev,
			 struct ethtool_eth_phy_stats *phy_stats,
			 struct ethtool_phy_stats *phydev_stats);
void __phy_ethtool_get_link_ext_stats(struct phy_device *phydev,
				      struct ethtool_link_ext_stats *link_stats);

int phy_ethtool_get_plca_cfg(struct phy_device *phydev,
			     struct phy_plca_cfg *plca_cfg);
int phy_ethtool_set_plca_cfg(struct phy_device *phydev,
			     const struct phy_plca_cfg *plca_cfg,
			     struct netlink_ext_ack *extack);
int phy_ethtool_get_plca_status(struct phy_device *phydev,
				struct phy_plca_status *plca_st);

int __phy_hwtstamp_get(struct phy_device *phydev,
		       struct kernel_hwtstamp_config *config);
int __phy_hwtstamp_set(struct phy_device *phydev,
		       struct kernel_hwtstamp_config *config,
		       struct netlink_ext_ack *extack);

static inline int phy_package_address(struct phy_device *phydev,
				      unsigned int addr_offset)
{
	struct phy_package_shared *shared = phydev->shared;
	u8 base_addr = shared->base_addr;

	if (addr_offset >= PHY_MAX_ADDR - base_addr)
		return -EIO;

	/* we know that addr will be in the range 0..31 and thus the
	 * implicit cast to a signed int is not a problem.
	 */
	return base_addr + addr_offset;
}

static inline int phy_package_read(struct phy_device *phydev,
				   unsigned int addr_offset, u32 regnum)
{
	int addr = phy_package_address(phydev, addr_offset);

	if (addr < 0)
		return addr;

	return mdiobus_read(phydev->mdio.bus, addr, regnum);
}

static inline int __phy_package_read(struct phy_device *phydev,
				     unsigned int addr_offset, u32 regnum)
{
	int addr = phy_package_address(phydev, addr_offset);

	if (addr < 0)
		return addr;

	return __mdiobus_read(phydev->mdio.bus, addr, regnum);
}

static inline int phy_package_write(struct phy_device *phydev,
				    unsigned int addr_offset, u32 regnum,
				    u16 val)
{
	int addr = phy_package_address(phydev, addr_offset);

	if (addr < 0)
		return addr;

	return mdiobus_write(phydev->mdio.bus, addr, regnum, val);
}

static inline int __phy_package_write(struct phy_device *phydev,
				      unsigned int addr_offset, u32 regnum,
				      u16 val)
{
	int addr = phy_package_address(phydev, addr_offset);

	if (addr < 0)
		return addr;

	return __mdiobus_write(phydev->mdio.bus, addr, regnum, val);
}

int __phy_package_read_mmd(struct phy_device *phydev,
			   unsigned int addr_offset, int devad,
			   u32 regnum);

int phy_package_read_mmd(struct phy_device *phydev,
			 unsigned int addr_offset, int devad,
			 u32 regnum);

int __phy_package_write_mmd(struct phy_device *phydev,
			    unsigned int addr_offset, int devad,
			    u32 regnum, u16 val);

int phy_package_write_mmd(struct phy_device *phydev,
			  unsigned int addr_offset, int devad,
			  u32 regnum, u16 val);

static inline bool __phy_package_set_once(struct phy_device *phydev,
					  unsigned int b)
{
	struct phy_package_shared *shared = phydev->shared;

	if (!shared)
		return false;

	return !test_and_set_bit(b, &shared->flags);
}

static inline bool phy_package_init_once(struct phy_device *phydev)
{
	return __phy_package_set_once(phydev, PHY_SHARED_F_INIT_DONE);
}

static inline bool phy_package_probe_once(struct phy_device *phydev)
{
	return __phy_package_set_once(phydev, PHY_SHARED_F_PROBE_DONE);
}

extern const struct bus_type mdio_bus_type;

struct mdio_board_info {
	const char	*bus_id;
	char		modalias[MDIO_NAME_SIZE];
	int		mdio_addr;
	const void	*platform_data;
};

#if IS_ENABLED(CONFIG_MDIO_DEVICE)
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


/**
 * phy_module_driver() - Helper macro for registering PHY drivers
 * @__phy_drivers: array of PHY drivers to register
 * @__count: Numbers of members in array
 *
 * 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)					\
{									\
	return phy_drivers_register(__phy_drivers, __count, THIS_MODULE); \
}									\
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))

bool phy_driver_is_genphy(struct phy_device *phydev);
bool phy_driver_is_genphy_10g(struct phy_device *phydev);

#endif /* __PHY_H */

Filemanager

Name Type Size Permission Actions
amba Folder 0755
atomic Folder 0755
avf Folder 0755
bcma Folder 0755
bus Folder 0755
byteorder Folder 0755
can Folder 0755
cdx Folder 0755
ceph Folder 0755
clk Folder 0755
comedi Folder 0755
crush Folder 0755
decompress Folder 0755
device Folder 0755
dma Folder 0755
dsa Folder 0755
extcon Folder 0755
firmware Folder 0755
fpga Folder 0755
framer Folder 0755
fsl Folder 0755
gpio Folder 0755
greybus Folder 0755
habanalabs Folder 0755
hsi Folder 0755
i3c Folder 0755
iio Folder 0755
input Folder 0755
io_uring Folder 0755
irqchip Folder 0755
isdn Folder 0755
lockd Folder 0755
lsm Folder 0755
mailbox Folder 0755
mdio Folder 0755
memory Folder 0755
mfd Folder 0755
misc Folder 0755
mlx4 Folder 0755
mlx5 Folder 0755
mmc Folder 0755
mtd Folder 0755
mux Folder 0755
net Folder 0755
netfilter Folder 0755
netfilter_arp Folder 0755
netfilter_bridge Folder 0755
netfilter_ipv4 Folder 0755
netfilter_ipv6 Folder 0755
pcs Folder 0755
pds Folder 0755
perf Folder 0755
phy Folder 0755
pinctrl Folder 0755
platform_data Folder 0755
power Folder 0755
pse-pd Folder 0755
pwrseq Folder 0755
qat Folder 0755
qed Folder 0755
raid Folder 0755
regulator Folder 0755
remoteproc Folder 0755
reset Folder 0755
rpmsg Folder 0755
rtc Folder 0755
sched Folder 0755
soc Folder 0755
soundwire Folder 0755
spi Folder 0755
ssb Folder 0755
sunrpc Folder 0755
surface_aggregator Folder 0755
ulpi Folder 0755
unaligned Folder 0755
usb Folder 0755
8250_pci.h File 1.01 KB 0644
acct.h File 2.45 KB 0644
acpi.h File 44.88 KB 0644
acpi_amd_wbrf.h File 2.24 KB 0644
acpi_dma.h File 2.95 KB 0644
acpi_iort.h File 2.64 KB 0644
acpi_mdio.h File 819 B 0644
acpi_pmtmr.h File 1.02 KB 0644
acpi_viot.h File 478 B 0644
adb.h File 1.79 KB 0644
adfs_fs.h File 574 B 0644
adreno-smmu-priv.h File 3.15 KB 0644
adxl.h File 310 B 0644
aer.h File 1.49 KB 0644
agp_backend.h File 3.45 KB 0644
agpgart.h File 3.79 KB 0644
ahci-remap.h File 607 B 0644
ahci_platform.h File 1.81 KB 0644
aio.h File 570 B 0644
alarmtimer.h File 1.83 KB 0644
alcor_pci.h File 8.74 KB 0644
align.h File 552 B 0644
alloc_tag.h File 6.4 KB 0644
altera_jtaguart.h File 379 B 0644
altera_uart.h File 397 B 0644
amd-iommu.h File 2.12 KB 0644
amd-pmf-io.h File 1.58 KB 0644
anon_inodes.h File 1021 B 0644
aperture.h File 1.61 KB 0644
apm-emulation.h File 1.56 KB 0644
apm_bios.h File 2.25 KB 0644
apple-gmux.h File 4.63 KB 0644
arch_topology.h File 2.93 KB 0644
args.h File 1021 B 0644
arm-cci.h File 1.39 KB 0644
arm-smccc.h File 20.7 KB 0644
arm_ffa.h File 14.71 KB 0644
arm_sdei.h File 2.67 KB 0644
armada-37xx-rwtm-mailbox.h File 431 B 0644
array_size.h File 332 B 0644
ascii85.h File 555 B 0644
asn1.h File 1.79 KB 0644
asn1_ber_bytecode.h File 2.52 KB 0644
asn1_decoder.h File 493 B 0644
asn1_encoder.h File 983 B 0644
assoc_array.h File 2.88 KB 0644
assoc_array_priv.h File 5.3 KB 0644
async.h File 4.36 KB 0644
async_tx.h File 6.7 KB 0644
ata.h File 30.39 KB 0644
ata_platform.h File 755 B 0644
atalk.h File 4.45 KB 0644
atm.h File 287 B 0644
atm_tcp.h File 542 B 0644
atmdev.h File 10.17 KB 0644
atmel-isc-media.h File 2.07 KB 0644
atmel-ssc.h File 9.74 KB 0644
atmel_pdc.h File 1.26 KB 0644
atomic.h File 2.58 KB 0644
attribute_container.h File 2.47 KB 0644
audit.h File 20.48 KB 0644
audit_arch.h File 559 B 0644
auto_dev-ioctl.h File 296 B 0644
auto_fs.h File 278 B 0644
auxiliary_bus.h File 10.33 KB 0644
auxvec.h File 304 B 0644
average.h File 2.42 KB 0644
backing-dev-defs.h File 8.4 KB 0644
backing-dev.h File 10.41 KB 0644
backing-file.h File 1.51 KB 0644
backlight.h File 11.9 KB 0644
badblocks.h File 2.66 KB 0644
balloon_compaction.h File 6 KB 0644
base64.h File 370 B 0644
bcd.h File 683 B 0644
bch.h File 2.1 KB 0644
bcm47xx_nvram.h File 1.2 KB 0644
bcm47xx_sprom.h File 616 B 0644
bcm47xx_wdt.h File 555 B 0644
bcm963xx_nvram.h File 2.96 KB 0644
bcm963xx_tag.h File 3.6 KB 0644
binfmts.h File 4.63 KB 0644
bio-integrity.h File 4.16 KB 0644
bio.h File 18.01 KB 0644
bit_spinlock.h File 2.3 KB 0644
bitfield.h File 6.39 KB 0644
bitmap-str.h File 842 B 0644
bitmap.h File 29.11 KB 0644
bitops.h File 10.14 KB 0644
bitrev.h File 2.53 KB 0644
bits.h File 1.57 KB 0644
blk-cgroup.h File 1.53 KB 0644
blk-crypto-profile.h File 5.3 KB 0644
blk-crypto.h File 4.13 KB 0644
blk-integrity.h File 3.99 KB 0644
blk-mq.h File 33.72 KB 0644
blk-pm.h File 647 B 0644
blk_types.h File 15.31 KB 0644
blkdev.h File 49.82 KB 0644
blkpg.h File 436 B 0644
blktrace_api.h File 3.55 KB 0644
blockgroup_lock.h File 810 B 0644
bma150.h File 1.25 KB 0644
bootconfig.h File 9.27 KB 0644
bootmem_info.h File 2.04 KB 0644
bottom_half.h File 1013 B 0644
bpf-cgroup-defs.h File 2.07 KB 0644
bpf-cgroup.h File 18.4 KB 0644
bpf-netns.h File 1.41 KB 0644
bpf.h File 110.52 KB 0644
bpf_crypto.h File 865 B 0644
bpf_lirc.h File 698 B 0644
bpf_local_storage.h File 6.61 KB 0644
bpf_lsm.h File 2.01 KB 0644
bpf_mem_alloc.h File 2.05 KB 0644
bpf_mprog.h File 9.29 KB 0644
bpf_trace.h File 166 B 0644
bpf_types.h File 6.1 KB 0644
bpf_verifier.h File 33.06 KB 0644
bpfptr.h File 2.09 KB 0644
brcmphy.h File 21.77 KB 0644
bsearch.h File 624 B 0644
bsg-lib.h File 1.71 KB 0644
bsg.h File 499 B 0644
btf.h File 20.05 KB 0644
btf_ids.h File 8.18 KB 0644
btree-128.h File 2.67 KB 0644
btree-type.h File 3.9 KB 0644
btree.h File 6.84 KB 0644
btrfs.h File 145 B 0644
buffer_head.h File 17.37 KB 0644
bug.h File 2.33 KB 0644
build-salt.h File 375 B 0644
build_bug.h File 2.99 KB 0644
buildid.h File 671 B 0644
bvec.h File 7.54 KB 0644
c2port.h File 1.35 KB 0644
cache.h File 5.51 KB 0644
cacheflush.h File 675 B 0644
cacheinfo.h File 4.92 KB 0644
call_once.h File 1.67 KB 0644
capability.h File 6.27 KB 0644
cb710.h File 5.36 KB 0644
cc_platform.h File 3.42 KB 0644
cciss_ioctl.h File 1.03 KB 0644
ccp.h File 18.14 KB 0644
cdev.h File 845 B 0644
cdrom.h File 8.92 KB 0644
cfag12864b.h File 1.07 KB 0644
cfi.h File 1.23 KB 0644
cfi_types.h File 1.06 KB 0644
cgroup-defs.h File 26.77 KB 0644
cgroup.h File 26.33 KB 0644
cgroup_api.h File 26 B 0644
cgroup_dmem.h File 1.91 KB 0644
cgroup_rdma.h File 1.18 KB 0644
cgroup_refcnt.h File 2.59 KB 0644
cgroup_subsys.h File 1.28 KB 0644
circ_buf.h File 1.09 KB 0644
cleanup.h File 13.45 KB 0644
clk-provider.h File 65.77 KB 0644
clk.h File 36.18 KB 0644
clkdev.h File 1.2 KB 0644
clockchips.h File 7.29 KB 0644
clocksource.h File 11.01 KB 0644
clocksource_ids.h File 333 B 0644
closure.h File 14.22 KB 0644
cma.h File 2.26 KB 0644
cmpxchg-emu.h File 435 B 0644
cn_proc.h File 1.85 KB 0644
cnt32_to_63.h File 3.46 KB 0644
coda.h File 2.16 KB 0644
codetag.h File 3.4 KB 0644
compaction.h File 4.5 KB 0644
compat.h File 32.32 KB 0644
compiler-clang.h File 4.13 KB 0644
compiler-gcc.h File 3.92 KB 0644
compiler-version.h File 517 B 0644
compiler.h File 12.26 KB 0644
compiler_attributes.h File 15.91 KB 0644
compiler_types.h File 18.79 KB 0644
completion.h File 4.14 KB 0644
component.h File 4.35 KB 0644
configfs.h File 8.54 KB 0644
connector.h File 4.01 KB 0644
console.h File 24.18 KB 0644
console_struct.h File 6.98 KB 0644
consolemap.h File 1.25 KB 0644
const.h File 100 B 0644
container.h File 616 B 0644
container_of.h File 1.3 KB 0644
context_tracking.h File 4.4 KB 0644
context_tracking_irq.h File 633 B 0644
context_tracking_state.h File 3.8 KB 0644
cookie.h File 1.22 KB 0644
cordic.h File 2.08 KB 0644
coredump.h File 2.17 KB 0644
coresight-pmu.h File 2.32 KB 0644
coresight-stm.h File 152 B 0644
coresight.h File 22.68 KB 0644
count_zeros.h File 1.42 KB 0644
counter.h File 21.48 KB 0644
cper.h File 17.59 KB 0644
cpu.h File 6.67 KB 0644
cpu_cooling.h File 1.83 KB 0644
cpu_pm.h File 2.38 KB 0644
cpu_rmap.h File 1.7 KB 0644
cpu_smt.h File 1.12 KB 0644
cpufeature.h File 1.71 KB 0644
cpufreq.h File 36.37 KB 0644
cpuhotplug.h File 16.95 KB 0644
cpuhplock.h File 1.52 KB 0644
cpuidle.h File 11.42 KB 0644
cpuidle_haltpoll.h File 312 B 0644
cpumask.h File 37.26 KB 0644
cpumask_api.h File 27 B 0644
cpumask_types.h File 2.18 KB 0644
cpuset.h File 8.01 KB 0644
crash_core.h File 2.65 KB 0644
crash_dump.h File 6.29 KB 0644
crash_reserve.h File 1.33 KB 0644
crc-ccitt.h File 369 B 0644
crc-itu-t.h File 530 B 0644
crc-t10dif.h File 759 B 0644
crc16.h File 540 B 0644
crc32.h File 4.23 KB 0644
crc32c.h File 346 B 0644
crc32poly.h File 610 B 0644
crc4.h File 192 B 0644
crc64.h File 539 B 0644
crc7.h File 316 B 0644
crc8.h File 3.66 KB 0644
cred.h File 11.95 KB 0644
crypto.h File 19.01 KB 0644
cs5535.h File 6.13 KB 0644
ctype.h File 1.87 KB 0644
cuda.h File 620 B 0644
damon.h File 33.47 KB 0644
dasd_mod.h File 204 B 0644
davinci_emac.h File 1.05 KB 0644
dax.h File 8.75 KB 0644
dca.h File 1.88 KB 0644
dcache.h File 18.81 KB 0644
dccp.h File 10.74 KB 0644
debug_locks.h File 1.57 KB 0644
debugfs.h File 15.87 KB 0644
debugobjects.h File 4.09 KB 0644
delay.h File 4.18 KB 0644
delayacct.h File 7.08 KB 0644
delayed_call.h File 709 B 0644
dev_printk.h File 9.74 KB 0644
devcoredump.h File 3.53 KB 0644
devfreq-event.h File 5.95 KB 0644
devfreq.h File 14.52 KB 0644
devfreq_cooling.h File 2.7 KB 0644
device-mapper.h File 21.11 KB 0644
device.h File 43.19 KB 0644
device_cgroup.h File 1.57 KB 0644
devm-helpers.h File 2.67 KB 0644
devpts_fs.h File 1.13 KB 0644
dfl.h File 2.72 KB 0644
digsig.h File 1.18 KB 0644
dim.h File 12.69 KB 0644
dio.h File 10.77 KB 0644
dirent.h File 215 B 0644
dlm.h File 6.44 KB 0644
dlm_plock.h File 642 B 0644
dm-bufio.h File 5.16 KB 0644
dm-dirty-log.h File 4 KB 0644
dm-io.h File 2.03 KB 0644
dm-kcopyd.h File 3.03 KB 0644
dm-region-hash.h File 3.16 KB 0644
dm-verity-loadpin.h File 617 B 0644
dm9000.h File 987 B 0644
dma-buf.h File 21.21 KB 0644
dma-direct.h File 4.16 KB 0644
dma-direction.h File 407 B 0644
dma-fence-array.h File 2.86 KB 0644
dma-fence-chain.h File 3.66 KB 0644
dma-fence-unwrap.h File 2.24 KB 0644
dma-fence.h File 22.94 KB 0644
dma-heap.h File 1.13 KB 0644
dma-map-ops.h File 15.89 KB 0644
dma-mapping.h File 21.19 KB 0644
dma-resv.h File 16.94 KB 0644
dmaengine.h File 55.21 KB 0644
dmapool.h File 1.79 KB 0644
dmar.h File 8.06 KB 0644
dmi.h File 4.27 KB 0644
dnotify.h File 1012 B 0644
dns_resolver.h File 1.36 KB 0644
dpll.h File 6.78 KB 0644
dqblk_qtree.h File 2.19 KB 0644
dqblk_v1.h File 327 B 0644
dqblk_v2.h File 406 B 0644
drbd.h File 9.92 KB 0644
drbd_config.h File 285 B 0644
drbd_genl.h File 21.49 KB 0644
drbd_genl_api.h File 1.76 KB 0644
drbd_limits.h File 7.92 KB 0644
ds2782_battery.h File 158 B 0644
dtlk.h File 3.5 KB 0644
dtpm.h File 1.46 KB 0644
dw_apb_timer.h File 1.32 KB 0644
dynamic_debug.h File 10.96 KB 0644
dynamic_queue_limits.h File 5.43 KB 0644
earlycpio.h File 359 B 0644
ecryptfs.h File 3.82 KB 0644
edac.h File 19.44 KB 0644
edd.h File 1.05 KB 0644
eeprom_93cx6.h File 2.64 KB 0644
efi-bgrt.h File 644 B 0644
efi.h File 44.59 KB 0644
efi_embedded_fw.h File 1.04 KB 0644
efs_vh.h File 1.55 KB 0644
eisa.h File 2.97 KB 0644
elf-fdpic.h File 2.39 KB 0644
elf-randomize.h File 583 B 0644
elf.h File 2.97 KB 0644
elfcore-compat.h File 1.43 KB 0644
elfcore.h File 3.93 KB 0644
elfnote-lto.h File 314 B 0644
elfnote.h File 3.54 KB 0644
enclosure.h File 4.02 KB 0644
energy_model.h File 13.12 KB 0644
entry-common.h File 18.62 KB 0644
entry-kvm.h File 2.77 KB 0644
err.h File 3.35 KB 0644
errname.h File 283 B 0644
errno.h File 1.45 KB 0644
error-injection.h File 630 B 0644
errqueue.h File 524 B 0644
errseq.h File 382 B 0644
etherdevice.h File 19.37 KB 0644
ethtool.h File 52.71 KB 0644
ethtool_netlink.h File 3.74 KB 0644
eventfd.h File 2.1 KB 0644
eventpoll.h File 2.41 KB 0644
evm.h File 2.12 KB 0644
execmem.h File 5.72 KB 0644
export-internal.h File 2.3 KB 0644
export.h File 2.67 KB 0644
exportfs.h File 11.19 KB 0644
ext2_fs.h File 967 B 0644
extable.h File 1.28 KB 0644
extcon-provider.h File 3.83 KB 0644
extcon.h File 9.99 KB 0644
f2fs_fs.h File 20.26 KB 0644
f75375s.h File 541 B 0644
falloc.h File 1.79 KB 0644
fanotify.h File 4.99 KB 0644
fault-inject-usercopy.h File 496 B 0644
fault-inject.h File 3.07 KB 0644
fb.h File 30.04 KB 0644
fbcon.h File 2.09 KB 0644
fcdevice.h File 774 B 0644
fcntl.h File 1.66 KB 0644
fd.h File 490 B 0644
fddidevice.h File 833 B 0644
fdtable.h File 3.08 KB 0644
fec.h File 463 B 0644
fiemap.h File 831 B 0644
file.h File 3.66 KB 0644
file_ref.h File 5.46 KB 0644
fileattr.h File 1.9 KB 0644
filelock.h File 13.17 KB 0644
filter.h File 48.89 KB 0644
find.h File 20.71 KB 0644
fips.h File 303 B 0644
firewire.h File 17.27 KB 0644
firmware-map.h File 959 B 0644
firmware.h File 6.3 KB 0644
fixp-arith.h File 4.21 KB 0644
flat.h File 2.57 KB 0644
flex_proportions.h File 1.98 KB 0644
folio_queue.h File 9.99 KB 0644
font.h File 1.7 KB 0644
fortify-string.h File 28.64 KB 0644
fprobe.h File 3.92 KB 0644
fpu.h File 246 B 0644
freezer.h File 2.34 KB 0644
fs.h File 129.11 KB 0644
fs_api.h File 22 B 0644
fs_context.h File 8.36 KB 0644
fs_parser.h File 5.01 KB 0644
fs_pin.h File 539 B 0644
fs_stack.h File 895 B 0644
fs_struct.h File 1.04 KB 0644
fs_types.h File 2.02 KB 0644
fscache-cache.h File 7.09 KB 0644
fscache.h File 24.09 KB 0644
fscrypt.h File 34.57 KB 0644
fsi-occ.h File 715 B 0644
fsi-sbefifo.h File 629 B 0644
fsi.h File 2.27 KB 0644
fsl-diu-fb.h File 3.87 KB 0644
fsl_devices.h File 4.16 KB 0644
fsl_hypervisor.h File 2.76 KB 0644
fsl_ifc.h File 24.48 KB 0644
fsldma.h File 202 B 0644
fsnotify.h File 13.17 KB 0644
fsnotify_backend.h File 31.2 KB 0644
fsverity.h File 9.29 KB 0644
ftrace.h File 43.74 KB 0644
ftrace_irq.h File 884 B 0644
ftrace_regs.h File 1.31 KB 0644
futex.h File 2.44 KB 0644
fw_table.h File 1.75 KB 0644
fwnode.h File 7.81 KB 0644
fwnode_mdio.h File 858 B 0644
gameport.h File 5.24 KB 0644
gcd.h File 193 B 0644
genalloc.h File 7.68 KB 0644
generic-radix-tree.h File 11.43 KB 0644
genl_magic_func.h File 11.67 KB 0644
genl_magic_struct.h File 7.58 KB 0644
getcpu.h File 641 B 0644
gfp.h File 14.84 KB 0644
gfp_api.h File 23 B 0644
gfp_types.h File 16.57 KB 0644
glob.h File 256 B 0644
gnss.h File 1.56 KB 0644
goldfish.h File 878 B 0644
gpio-pxa.h File 571 B 0644
gpio.h File 5.01 KB 0644
gpio_keys.h File 1.81 KB 0644
greybus.h File 3.57 KB 0644
group_cpus.h File 310 B 0644
hardirq.h File 3.25 KB 0644
hash.h File 2.93 KB 0644
hashtable.h File 6.67 KB 0644
hashtable_api.h File 29 B 0644
hdlc.h File 3.19 KB 0644
hdlcdrv.h File 6.32 KB 0644
hdmi.h File 12.84 KB 0644
hex.h File 884 B 0644
hid-debug.h File 1.42 KB 0644
hid-over-i2c.h File 3.53 KB 0644
hid-over-spi.h File 4.91 KB 0644
hid-roccat.h File 490 B 0644
hid-sensor-hub.h File 8.97 KB 0644
hid-sensor-ids.h File 7.85 KB 0644
hid.h File 39.52 KB 0644
hid_bpf.h File 8.19 KB 0644
hidden.h File 966 B 0644
hiddev.h File 1.42 KB 0644
hidraw.h File 1.13 KB 0644
highmem-internal.h File 6.62 KB 0644
highmem.h File 18.61 KB 0644
highuid.h File 3.12 KB 0644
hil.h File 18.42 KB 0644
hil_mlc.h File 5.13 KB 0644
hippidevice.h File 1.08 KB 0644
hisi_acc_qm.h File 14.13 KB 0644
hmm.h File 3.93 KB 0644
host1x.h File 13.67 KB 0644
host1x_context_bus.h File 337 B 0644
hp_sdc.h File 14.01 KB 0644
hpet.h File 2.55 KB 0644
hrtimer.h File 11.36 KB 0644
hrtimer_api.h File 27 B 0644
hrtimer_defs.h File 4.22 KB 0644
hrtimer_types.h File 1.53 KB 0644
hte.h File 7.37 KB 0644
huge_mm.h File 18.87 KB 0644
hugetlb.h File 36.03 KB 0644
hugetlb_cgroup.h File 6.78 KB 0644
hugetlb_inline.h File 374 B 0644
hw_breakpoint.h File 4.19 KB 0644
hw_random.h File 2.23 KB 0644
hwmon-sysfs.h File 2.8 KB 0644
hwmon-vid.h File 862 B 0644
hwmon.h File 15.94 KB 0644
hwspinlock.h File 15.79 KB 0644
hyperv.h File 49.31 KB 0644
hypervisor.h File 748 B 0644
i2c-algo-bit.h File 1.4 KB 0644
i2c-algo-pca.h File 2.89 KB 0644
i2c-algo-pcf.h File 1.21 KB 0644
i2c-atr.h File 3.95 KB 0644
i2c-dev.h File 371 B 0644
i2c-mux.h File 1.61 KB 0644
i2c-of-prober.h File 4.94 KB 0644
i2c-smbus.h File 1.69 KB 0644
i2c.h File 39.67 KB 0644
i8042.h File 2.45 KB 0644
i8253.h File 808 B 0644
i8254.h File 489 B 0644
icmp.h File 1 KB 0644
icmpv6.h File 2.87 KB 0644
idle_inject.h File 1.02 KB 0644
idr.h File 9.72 KB 0644
ieee80211.h File 180.45 KB 0644
ieee802154.h File 14.46 KB 0644
if_arp.h File 1.81 KB 0644
if_bridge.h File 5.42 KB 0644
if_eql.h File 1.13 KB 0644
if_ether.h File 1.26 KB 0644
if_fddi.h File 3.24 KB 0644
if_hsr.h File 1.5 KB 0644
if_link.h File 592 B 0644
if_macvlan.h File 2.76 KB 0644
if_phonet.h File 319 B 0644
if_pppol2tp.h File 501 B 0644
if_pppox.h File 2.83 KB 0644
if_rmnet.h File 2.06 KB 0644
if_tap.h File 2.21 KB 0644
if_team.h File 7.94 KB 0644
if_tun.h File 1.54 KB 0644
if_tunnel.h File 409 B 0644
if_vlan.h File 22.16 KB 0644
igmp.h File 4.42 KB 0644
ihex.h File 2.15 KB 0644
ima.h File 2.71 KB 0644
imx-media.h File 605 B 0644
in.h File 2.29 KB 0644
in6.h File 1.63 KB 0644
indirect_call_wrapper.h File 2.24 KB 0644
inet.h File 2.64 KB 0644
inet_diag.h File 2.76 KB 0644
inetdevice.h File 9.53 KB 0644
init.h File 12 KB 0644
init_ohci1394_dma.h File 196 B 0644
init_syscalls.h File 1.01 KB 0644
init_task.h File 1.1 KB 0644
initrd.h File 1008 B 0644
inotify.h File 628 B 0644
input.h File 20.81 KB 0644
instruction_pointer.h File 346 B 0644
instrumentation.h File 1.85 KB 0644
instrumented.h File 6.21 KB 0644
int_log.h File 1.26 KB 0644
integrity.h File 1.46 KB 0644
intel-ish-client-if.h File 4.13 KB 0644
intel_rapl.h File 6 KB 0644
intel_tcc.h File 466 B 0644
intel_th.h File 2.44 KB 0644
intel_tpmi.h File 1.99 KB 0644
intel_vsec.h File 4.24 KB 0644
interconnect-clk.h File 648 B 0644
interconnect-provider.h File 5.53 KB 0644
interconnect.h File 3.36 KB 0644
interrupt.h File 27.29 KB 0644
interval_tree.h File 2.88 KB 0644
interval_tree_generic.h File 6.7 KB 0644
io-64-nonatomic-hi-lo.h File 2.41 KB 0644
io-64-nonatomic-lo-hi.h File 2.41 KB 0644
io-mapping.h File 4.69 KB 0644
io-pgtable.h File 10.18 KB 0644
io.h File 5.51 KB 0644
io_uring.h File 1.04 KB 0644
io_uring_types.h File 18.69 KB 0644
ioam6.h File 226 B 0644
ioam6_genl.h File 266 B 0644
ioam6_iptunnel.h File 285 B 0644
iocontext.h File 4.16 KB 0644
iomap.h File 15.6 KB 0644
iommu-dma.h File 2.98 KB 0644
iommu-helper.h File 1.12 KB 0644
iommu.h File 53.6 KB 0644
iommufd.h File 7.34 KB 0644
iopoll.h File 7.9 KB 0644
ioport.h File 15.09 KB 0644
ioprio.h File 2.17 KB 0644
ioremap.h File 744 B 0644
iosys-map.h File 16.8 KB 0644
iov_iter.h File 10.36 KB 0644
iova.h File 4.2 KB 0644
iova_bitmap.h File 1.31 KB 0644
ip.h File 1.56 KB 0644
ipack.h File 8.69 KB 0644
ipc.h File 619 B 0644
ipc_namespace.h File 5.63 KB 0644
ipmi.h File 11.09 KB 0644
ipmi_smi.h File 9.83 KB 0644
ipv6.h File 8.23 KB 0644
ipv6_route.h File 372 B 0644
irq.h File 43.49 KB 0644
irq_poll.h File 575 B 0644
irq_sim.h File 1.35 KB 0644
irq_work.h File 2.04 KB 0644
irqbypass.h File 3.45 KB 0644
irqchip.h File 2.65 KB 0644
irqdesc.h File 8.04 KB 0644
irqdomain.h File 24.75 KB 0644
irqdomain_defs.h File 842 B 0644
irqflags.h File 7.96 KB 0644
irqflags_types.h File 563 B 0644
irqhandler.h File 284 B 0644
irqnr.h File 1.5 KB 0644
irqreturn.h File 529 B 0644
isa-dma.h File 276 B 0644
isa.h File 3.33 KB 0644
isapnp.h File 2.88 KB 0644
iscsi_boot_sysfs.h File 3.71 KB 0644
iscsi_ibft.h File 994 B 0644
ism.h File 2.2 KB 0644
iversion.h File 10.96 KB 0644
jbd2.h File 51.56 KB 0644
jhash.h File 4.56 KB 0644
jiffies.h File 20.07 KB 0644
journal-head.h File 2.91 KB 0644
joystick.h File 437 B 0644
jump_label.h File 16.45 KB 0644
jump_label_ratelimit.h File 2.77 KB 0644
jz4740-adc.h File 1023 B 0644
jz4780-nemc.h File 976 B 0644
kallsyms.h File 4.26 KB 0644
kasan-checks.h File 1.46 KB 0644
kasan-enabled.h File 639 B 0644
kasan-tags.h File 487 B 0644
kasan.h File 20.56 KB 0644
kbd_diacr.h File 198 B 0644
kbd_kern.h File 3.6 KB 0644
kbuild.h File 380 B 0644
kconfig.h File 2.63 KB 0644
kcore.h File 611 B 0644
kcov.h File 4.31 KB 0644
kcsan-checks.h File 18.63 KB 0644
kcsan.h File 2.19 KB 0644
kdb.h File 7.36 KB 0644
kdebug.h File 487 B 0644
kdev_t.h File 1.8 KB 0644
kern_levels.h File 1.57 KB 0644
kernel-page-flags.h File 522 B 0644
kernel.h File 12.88 KB 0644
kernel_read_file.h File 1.62 KB 0644
kernel_stat.h File 3.63 KB 0644
kernelcapi.h File 1.45 KB 0644
kernfs.h File 19.49 KB 0644
kexec.h File 12.68 KB 0644
key-type.h File 6.63 KB 0644
key.h File 16.05 KB 0644
keyboard.h File 665 B 0644
keyctl.h File 1.25 KB 0644
kfence.h File 8.7 KB 0644
kfifo.h File 28.9 KB 0644
kgdb.h File 12.02 KB 0644
khugepaged.h File 1.78 KB 0644
klist.h File 1.88 KB 0644
kmemleak.h File 3.24 KB 0644
kmod.h File 1.02 KB 0644
kmsan-checks.h File 2.86 KB 0644
kmsan.h File 11.52 KB 0644
kmsan_string.h File 681 B 0644
kmsan_types.h File 906 B 0644
kmsg_dump.h File 3.12 KB 0644
kobj_map.h File 545 B 0644
kobject.h File 6.96 KB 0644
kobject_api.h File 27 B 0644
kobject_ns.h File 1.79 KB 0644
kprobes.h File 16.25 KB 0644
kref.h File 3.84 KB 0644
kref_api.h File 24 B 0644
ks0108.h File 970 B 0644
ks8842.h File 632 B 0644
ks8851_mll.h File 472 B 0644
ksm.h File 4.08 KB 0644
kstrtox.h File 6.51 KB 0644
kthread.h File 8.48 KB 0644
ktime.h File 5.4 KB 0644
ktime_api.h File 25 B 0644
kvm_dirty_ring.h File 2.68 KB 0644
kvm_host.h File 77.92 KB 0644
kvm_irqfd.h File 1.99 KB 0644
kvm_para.h File 402 B 0644
kvm_types.h File 2.6 KB 0644
l2tp.h File 261 B 0644
lantiq.h File 365 B 0644
lapb.h File 1.78 KB 0644
latencytop.h File 1.06 KB 0644
lcd.h File 4.18 KB 0644
lcm.h File 275 B 0644
led-class-flash.h File 6.08 KB 0644
led-class-multicolor.h File 2.44 KB 0644
led-lm3530.h File 3.7 KB 0644
leds-bd2802.h File 476 B 0644
leds-expresswire.h File 1.13 KB 0644
leds-lp3944.h File 950 B 0644
leds-lp3952.h File 2.35 KB 0644
leds-pca9532.h File 866 B 0644
leds-regulator.h File 1.14 KB 0644
leds-ti-lmu-common.h File 1.12 KB 0644
leds.h File 23.34 KB 0644
libata.h File 69.91 KB 0644
libfdt.h File 202 B 0644
libfdt_env.h File 491 B 0644
libgcc.h File 875 B 0644
libnvdimm.h File 9.93 KB 0644
libps2.h File 2.47 KB 0644
license.h File 418 B 0644
limits.h File 809 B 0644
linear_range.h File 2.01 KB 0644
linkage.h File 9.56 KB 0644
linkmode.h File 2.17 KB 0644
linux_logo.h File 1.81 KB 0644
lis3lv02d.h File 5 KB 0644
list.h File 35.12 KB 0644
list_bl.h File 4.79 KB 0644
list_lru.h File 9.8 KB 0644
list_nulls.h File 4.22 KB 0644
list_sort.h File 374 B 0644
litex.h File 2.06 KB 0644
livepatch.h File 8.26 KB 0644
livepatch_sched.h File 802 B 0644
llc.h File 749 B 0644
llist.h File 10.43 KB 0644
llist_api.h File 25 B 0644
local_lock.h File 1.98 KB 0644
local_lock_internal.h File 4.24 KB 0644
lockdep.h File 20.9 KB 0644
lockdep_api.h File 27 B 0644
lockdep_types.h File 7.61 KB 0644
lockref.h File 1.65 KB 0644
log2.h File 6.24 KB 0644
logic_iomem.h File 2.07 KB 0644
logic_pio.h File 3.11 KB 0644
lp.h File 2.76 KB 0644
lru_cache.h File 11.67 KB 0644
lsm_audit.h File 3.22 KB 0644
lsm_count.h File 2.36 KB 0644
lsm_hook_defs.h File 24.09 KB 0644
lsm_hooks.h File 4.81 KB 0644
lwq.h File 3.69 KB 0644
lz4.h File 26.69 KB 0644
lzo.h File 1.93 KB 0644
mISDNdsp.h File 1.19 KB 0644
mISDNhw.h File 5.39 KB 0644
mISDNif.h File 14.9 KB 0644
mailbox_client.h File 1.78 KB 0644
mailbox_controller.h File 5.7 KB 0644
map_benchmark.h File 1.07 KB 0644
maple.h File 2.68 KB 0644
maple_tree.h File 28.94 KB 0644
marvell_phy.h File 1.94 KB 0644
math.h File 6.31 KB 0644
math64.h File 9 KB 0644
mbcache.h File 2.09 KB 0644
mbus.h File 3.09 KB 0644
mc146818rtc.h File 4.72 KB 0644
mc6821.h File 1.18 KB 0644
mcb.h File 3.62 KB 0644
mdev.h File 2.36 KB 0644
mdio-bitbang.h File 1.46 KB 0644
mdio-gpio.h File 177 B 0644
mdio-mux.h File 1021 B 0644
mdio.h File 22.72 KB 0644
mei_aux.h File 929 B 0644
mei_cl_bus.h File 4.6 KB 0644
mem_encrypt.h File 1.31 KB 0644
memblock.h File 20.4 KB 0644
memcontrol.h File 45.83 KB 0644
memfd.h File 950 B 0644
memory-tiers.h File 3.94 KB 0644
memory.h File 6.42 KB 0644
memory_hotplug.h File 10.77 KB 0644
mempolicy.h File 7.25 KB 0644
mempool.h File 4.28 KB 0644
memregion.h File 1.8 KB 0644
memremap.h File 7.67 KB 0644
memstick.h File 9.61 KB 0644
mhi.h File 27.42 KB 0644
mhi_ep.h File 10.63 KB 0644
micrel_phy.h File 2.1 KB 0644
microchipphy.h File 2.65 KB 0644
migrate.h File 7.72 KB 0644
migrate_mode.h File 713 B 0644
mii.h File 15.51 KB 0644
mii_timestamper.h File 3.66 KB 0644
min_heap.h File 15.78 KB 0644
minmax.h File 10 KB 0644
misc_cgroup.h File 3.23 KB 0644
miscdevice.h File 3.21 KB 0644
mm.h File 126.61 KB 0644
mm_api.h File 22 B 0644
mm_inline.h File 17.38 KB 0644
mm_types.h File 51.72 KB 0644
mm_types_task.h File 2.32 KB 0644
mman.h File 5.48 KB 0644
mmap_lock.h File 6.03 KB 0644
mmdebug.h File 4.28 KB 0644
mmiotrace.h File 3.05 KB 0644
mmu_context.h File 1.13 KB 0644
mmu_notifier.h File 21.93 KB 0644
mmzone.h File 66.74 KB 0644
mnt_idmapping.h File 6.88 KB 0644
mnt_namespace.h File 767 B 0644
mod_devicetable.h File 25.41 KB 0644
module.h File 27.85 KB 0644
module_signature.h File 1.22 KB 0644
module_symbol.h File 409 B 0644
moduleloader.h File 3.84 KB 0644
moduleparam.h File 22.51 KB 0644
most.h File 12.2 KB 0644
mount.h File 4.21 KB 0644
moxtet.h File 2.27 KB 0644
mpage.h File 644 B 0644
mpi.h File 3.17 KB 0644
mpls.h File 394 B 0644
mpls_iptunnel.h File 178 B 0644
mroute.h File 2.12 KB 0644
mroute6.h File 2.93 KB 0644
mroute_base.h File 12.45 KB 0644
msdos_fs.h File 273 B 0644
msdos_partition.h File 1.62 KB 0644
msg.h File 395 B 0644
msi.h File 22.01 KB 0644
msi_api.h File 1.93 KB 0644
mtio.h File 1.29 KB 0644
mutex.h File 5.82 KB 0644
mutex_api.h File 25 B 0644
mutex_types.h File 2.09 KB 0644
mv643xx_eth.h File 2 KB 0644
mv643xx_i2c.h File 335 B 0644
mvebu-pmsu.h File 520 B 0644
mxm-wmi.h File 399 B 0644
namei.h File 5.46 KB 0644
nd.h File 6.19 KB 0644
ndctl.h File 674 B 0644
net.h File 11.86 KB 0644
net_tstamp.h File 2.97 KB 0644
netdev_features.h File 10.5 KB 0644
netdevice.h File 170.32 KB 0644
netdevice_xmit.h File 223 B 0644
netfilter.h File 14.03 KB 0644
netfilter_bridge.h File 2.08 KB 0644
netfilter_defs.h File 242 B 0644
netfilter_ipv4.h File 1.05 KB 0644
netfilter_ipv6.h File 5.86 KB 0644
netfilter_netdev.h File 3.97 KB 0644
netfs.h File 21.8 KB 0644
netlink.h File 10.69 KB 0644
netpoll.h File 2.52 KB 0644
nfs.h File 1.71 KB 0644
nfs3.h File 260 B 0644
nfs4.h File 24.25 KB 0644
nfs_common.h File 458 B 0644
nfs_fs.h File 20.45 KB 0644
nfs_fs_i.h File 308 B 0644
nfs_fs_sb.h File 11.34 KB 0644
nfs_iostat.h File 3.92 KB 0644
nfs_page.h File 8.48 KB 0644
nfs_ssc.h File 2.01 KB 0644
nfs_xdr.h File 43.3 KB 0644
nfsacl.h File 1.4 KB 0644
nfslocalio.h File 3.47 KB 0644
nitro_enclaves.h File 267 B 0644
nl802154.h File 3.87 KB 0644
nls.h File 3.09 KB 0644
nmi.h File 7.21 KB 0644
node.h File 4.67 KB 0644
nodemask.h File 17.89 KB 0644
nodemask_types.h File 263 B 0644
nospec.h File 2.24 KB 0644
notifier.h File 8.18 KB 0644
ns_common.h File 284 B 0644
nsc_gpio.h File 1.42 KB 0644
nsproxy.h File 3.67 KB 0644
ntb.h File 52.43 KB 0644
ntb_transport.h File 3.8 KB 0644
nubus.h File 5.54 KB 0644
numa.h File 1.6 KB 0644
numa_memblks.h File 1.57 KB 0644
nvme-auth.h File 1.44 KB 0644
nvme-fc-driver.h File 46.78 KB 0644
nvme-fc.h File 9.72 KB 0644
nvme-keyring.h File 732 B 0644
nvme-rdma.h File 2.31 KB 0644
nvme-tcp.h File 4.67 KB 0644
nvme.h File 50.91 KB 0644
nvmem-consumer.h File 6.87 KB 0644
nvmem-provider.h File 8.03 KB 0644
nvram.h File 3.47 KB 0644
oa_tc6.h File 947 B 0644
objagg.h File 1.94 KB 0644
objpool.h File 9.58 KB 0644
objtool.h File 6.62 KB 0644
objtool_types.h File 2.08 KB 0644
of.h File 51.38 KB 0644
of_address.h File 5.5 KB 0644
of_clk.h File 819 B 0644
of_device.h File 2.23 KB 0644
of_dma.h File 2.3 KB 0644
of_fdt.h File 3.48 KB 0644
of_gpio.h File 878 B 0644
of_graph.h File 5.4 KB 0644
of_iommu.h File 671 B 0644
of_irq.h File 3.83 KB 0644
of_mdio.h File 3.91 KB 0644
of_net.h File 1.15 KB 0644
of_pci.h File 915 B 0644
of_pdt.h File 1.14 KB 0644
of_platform.h File 4.07 KB 0644
of_reserved_mem.h File 2.22 KB 0644
oid_registry.h File 6.02 KB 0644
olpc-ec.h File 2 KB 0644
omap-dma.h File 9.54 KB 0644
omap-gpmc.h File 2.29 KB 0644
omap-iommu.h File 880 B 0644
omap-mailbox.h File 272 B 0644
omapfb.h File 576 B 0644
once.h File 2.66 KB 0644
once_lite.h File 926 B 0644
oom.h File 2.81 KB 0644
openvswitch.h File 403 B 0644
osq_lock.h File 912 B 0644
overflow.h File 14.82 KB 0644
packing.h File 16 KB 0644
padata.h File 6.21 KB 0644
page-flags-layout.h File 3.73 KB 0644
page-flags.h File 39.15 KB 0644
page-isolation.h File 1.04 KB 0644
page_counter.h File 3.21 KB 0644
page_ext.h File 2.9 KB 0644
page_frag_cache.h File 1.71 KB 0644
page_idle.h File 1.95 KB 0644
page_owner.h File 2.38 KB 0644
page_ref.h File 7.6 KB 0644
page_reporting.h File 895 B 0644
page_table_check.h File 3.74 KB 0644
pageblock-flags.h File 2.8 KB 0644
pagemap.h File 51.01 KB 0644
pagevec.h File 2.62 KB 0644
pagewalk.h File 7.36 KB 0644
panic.h File 2.83 KB 0644
panic_notifier.h File 296 B 0644
papr_scm.h File 2.17 KB 0644
parman.h File 2.87 KB 0644
parport.h File 18.87 KB 0644
parport_pc.h File 6.62 KB 0644
parser.h File 1.17 KB 0644
part_stat.h File 2.38 KB 0644
pata_arasan_cf_data.h File 1.22 KB 0644
patchkey.h File 757 B 0644
path.h File 752 B 0644
pch_dma.h File 408 B 0644
pci-acpi.h File 4.18 KB 0644
pci-ats.h File 2.01 KB 0644
pci-bwctrl.h File 650 B 0644
pci-doe.h File 576 B 0644
pci-ecam.h File 3.43 KB 0644
pci-ep-cfs.h File 956 B 0644
pci-epc.h File 12.02 KB 0644
pci-epf.h File 7.84 KB 0644
pci-p2pdma.h File 3.01 KB 0644
pci-pwrctrl.h File 1.74 KB 0644
pci-tph.h File 1.44 KB 0644
pci.h File 98.79 KB 0644
pci_hotplug.h File 4.35 KB 0644
pci_ids.h File 125.8 KB 0644
pcs-lynx.h File 442 B 0644
pcs-rzn1-miic.h File 385 B 0644
pe.h File 16.73 KB 0644
peci-cpu.h File 2.29 KB 0644
peci.h File 3.08 KB 0644
percpu-defs.h File 17.3 KB 0644
percpu-refcount.h File 11.22 KB 0644
percpu-rwsem.h File 4.32 KB 0644
percpu.h File 5.17 KB 0644
percpu_counter.h File 6.81 KB 0644
perf_event.h File 59.38 KB 0644
perf_event_api.h File 30 B 0644
perf_regs.h File 1.05 KB 0644
personality.h File 393 B 0644
pfn.h File 666 B 0644
pfn_t.h File 3.21 KB 0644
pgalloc_tag.h File 6.2 KB 0644
pgtable.h File 53.52 KB 0644
pgtable_api.h File 27 B 0644
phonet.h File 537 B 0644
phy.h File 77.74 KB 0644
phy_fixed.h File 1.82 KB 0644
phy_led_triggers.h File 1.01 KB 0644
phy_link_topology.h File 1.74 KB 0644
phylib_stubs.h File 2.64 KB 0644
phylink.h File 29.83 KB 0644
pid.h File 9.4 KB 0644
pid_namespace.h File 3.29 KB 0644
pid_types.h File 282 B 0644
pidfs.h File 356 B 0644
pim.h File 2.67 KB 0644
pipe_fs_i.h File 10.26 KB 0644
pkeys.h File 990 B 0644
pktcdvd.h File 5.7 KB 0644
pl320-ipc.h File 209 B 0644
platform_device.h File 13.15 KB 0644
platform_profile.h File 2.02 KB 0644
pldmfw.h File 4.91 KB 0644
plist.h File 8.58 KB 0644
plist_types.h File 315 B 0644
pm-trace.h File 940 B 0644
pm.h File 36.63 KB 0644
pm_clock.h File 2.59 KB 0644
pm_domain.h File 16.68 KB 0644
pm_opp.h File 18.9 KB 0644
pm_qos.h File 10.41 KB 0644
pm_runtime.h File 20.47 KB 0644
pm_wakeirq.h File 1009 B 0644
pm_wakeup.h File 7.43 KB 0644
pmbus.h File 2.86 KB 0644
pmu.h File 2.45 KB 0644
pnp.h File 14.98 KB 0644
poison.h File 2.84 KB 0644
poll.h File 3.86 KB 0644
polynomial.h File 814 B 0644
posix-clock.h File 4.52 KB 0644
posix-timers.h File 7.09 KB 0644
posix-timers_types.h File 2.21 KB 0644
posix_acl.h File 4.32 KB 0644
posix_acl_xattr.h File 1.95 KB 0644
power_supply.h File 41.09 KB 0644
powercap.h File 11.98 KB 0644
ppp-comp.h File 2.97 KB 0644
ppp_channel.h File 3.04 KB 0644
ppp_defs.h File 663 B 0644
pps_gen_kernel.h File 1.95 KB 0644
pps_kernel.h File 2.94 KB 0644
pr.h File 1.33 KB 0644
prandom.h File 1.31 KB 0644
preempt.h File 15.9 KB 0644
prefetch.h File 1.55 KB 0644
prime_numbers.h File 1.35 KB 0644
printk.h File 23.79 KB 0644
prmt.h File 342 B 0644
proc_fs.h File 9.13 KB 0644
proc_ns.h File 2.52 KB 0644
processor.h File 1.84 KB 0644
profile.h File 1.39 KB 0644
projid.h File 2.22 KB 0644
property.h File 19.91 KB 0644
pruss_driver.h File 4.44 KB 0644
psci.h File 1.52 KB 0644
pseudo_fs.h File 401 B 0644
psi.h File 1.78 KB 0644
psi_types.h File 4.94 KB 0644
psp-platform-access.h File 1.86 KB 0644
psp-sev.h File 27.29 KB 0644
psp-tee.h File 2.65 KB 0644
psp.h File 697 B 0644
pstore.h File 7.77 KB 0644
pstore_blk.h File 1.53 KB 0644
pstore_ram.h File 883 B 0644
pstore_zone.h File 2.28 KB 0644
ptdump.h File 815 B 0644
pti.h File 251 B 0644
ptp_classify.h File 6.89 KB 0644
ptp_clock_kernel.h File 16.23 KB 0644
ptp_kvm.h File 505 B 0644
ptp_mock.h File 670 B 0644
ptp_pch.h File 666 B 0644
ptr_ring.h File 16.54 KB 0644
ptrace.h File 16.79 KB 0644
ptrace_api.h File 26 B 0644
purgatory.h File 590 B 0644
pvclock_gtod.h File 548 B 0644
pwm.h File 18.78 KB 0644
pwm_backlight.h File 649 B 0644
pxa168_eth.h File 728 B 0644
pxa2xx_ssp.h File 11.13 KB 0644
qnx6_fs.h File 3.27 KB 0644
quota.h File 18.76 KB 0644
quotaops.h File 10.27 KB 0644
radix-tree.h File 15.95 KB 0644
raid_class.h File 2.01 KB 0644
ramfs.h File 746 B 0644
random.h File 4.97 KB 0644
randomize_kstack.h File 3.96 KB 0644
range.h File 1.07 KB 0644
ras.h File 1.53 KB 0644
ratelimit.h File 1.72 KB 0644
ratelimit_types.h File 1.33 KB 0644
rational.h File 639 B 0644
rbtree.h File 11.32 KB 0644
rbtree_augmented.h File 10.18 KB 0644
rbtree_latch.h File 6.73 KB 0644
rbtree_types.h File 946 B 0644
rcu_node_tree.h File 3.73 KB 0644
rcu_notifier.h File 1.09 KB 0644
rcu_segcblist.h File 10.77 KB 0644
rcu_sync.h File 1.41 KB 0644
rculist.h File 30.59 KB 0644
rculist_bl.h File 3.29 KB 0644
rculist_nulls.h File 6.6 KB 0644
rcupdate.h File 42.48 KB 0644
rcupdate_trace.h File 3.27 KB 0644
rcupdate_wait.h File 2.55 KB 0644
rcuref.h File 4.66 KB 0644
rcutiny.h File 4.55 KB 0644
rcutree.h File 4.34 KB 0644
rcuwait.h File 2.32 KB 0644
rcuwait_api.h File 27 B 0644
reboot-mode.h File 600 B 0644
reboot.h File 5.3 KB 0644
reciprocal_div.h File 3.28 KB 0644
ref_tracker.h File 2.35 KB 0644
refcount.h File 11.83 KB 0644
refcount_api.h File 28 B 0644
refcount_types.h File 512 B 0644
regmap.h File 72.65 KB 0644
regset.h File 11.35 KB 0644
relay.h File 8.47 KB 0644
remoteproc.h File 25.08 KB 0644
resctrl.h File 11.58 KB 0644
reset-controller.h File 3.79 KB 0644
reset.h File 37.86 KB 0644
resource.h File 223 B 0644
resource_ext.h File 2.08 KB 0644
restart_block.h File 1.11 KB 0644
resume_user_mode.h File 1.88 KB 0644
rethook.h File 3.15 KB 0644
rfkill.h File 10.79 KB 0644
rhashtable-types.h File 3.72 KB 0644
rhashtable.h File 37.93 KB 0644
ring_buffer.h File 8.82 KB 0644
rio.h File 19.02 KB 0644
rio_drv.h File 14.32 KB 0644
rio_ids.h File 723 B 0644
rio_regs.h File 19.07 KB 0644
rmap.h File 25.2 KB 0644
rmi.h File 12.04 KB 0644
rndis.h File 16.86 KB 0644
rodata_test.h File 394 B 0644
rolling_buffer.h File 2.16 KB 0644
root_dev.h File 361 B 0644
rpmb.h File 3.16 KB 0644
rpmsg.h File 9.46 KB 0644
rseq.h File 2.99 KB 0644
rslib.h File 3.64 KB 0644
rtc.h File 9.32 KB 0644
rtmutex.h File 3.38 KB 0644
rtnetlink.h File 7.36 KB 0644
rtsx_common.h File 846 B 0644
rtsx_pci.h File 40.09 KB 0644
rtsx_usb.h File 15.51 KB 0644
rv.h File 1.56 KB 0644
rw_hint.h File 702 B 0644
rwbase_rt.h File 1 KB 0644
rwlock.h File 4.15 KB 0644
rwlock_api_smp.h File 7.85 KB 0644
rwlock_rt.h File 3.38 KB 0644
rwlock_types.h File 1.77 KB 0644
rwsem.h File 8.6 KB 0644
sbitmap.h File 17.82 KB 0644
scatterlist.h File 21.17 KB 0644
scc.h File 2.84 KB 0644
sched.h File 64.53 KB 0644
sched_clock.h File 1.46 KB 0644
scmi_imx_protocol.h File 1.54 KB 0644
scmi_protocol.h File 38.75 KB 0644
scpi_protocol.h File 2.67 KB 0644
screen_info.h File 3.35 KB 0644
scs.h File 2.25 KB 0644
sctp.h File 23.09 KB 0644
scx200.h File 1.82 KB 0644
scx200_gpio.h File 2.38 KB 0644
seccomp.h File 2.99 KB 0644
seccomp_types.h File 834 B 0644
secretmem.h File 706 B 0644
securebits.h File 239 B 0644
security.h File 64.62 KB 0644
sed-opal-key.h File 614 B 0644
sed-opal.h File 1.95 KB 0644
seg6.h File 121 B 0644
seg6_genl.h File 136 B 0644
seg6_hmac.h File 136 B 0644
seg6_iptunnel.h File 148 B 0644
seg6_local.h File 100 B 0644
selection.h File 1.67 KB 0644
sem.h File 515 B 0644
sem_types.h File 234 B 0644
semaphore.h File 1.58 KB 0644
seq_buf.h File 4.24 KB 0644
seq_file.h File 10.18 KB 0644
seq_file_net.h File 787 B 0644
seqlock.h File 37.14 KB 0644
seqlock_api.h File 27 B 0644
seqlock_types.h File 3.11 KB 0644
serdev.h File 10.12 KB 0644
serial.h File 1.03 KB 0644
serial_8250.h File 7.38 KB 0644
serial_bcm63xx.h File 4.73 KB 0644
serial_core.h File 39.9 KB 0644
serial_s3c.h File 9.54 KB 0644
serial_sci.h File 1.62 KB 0644
serio.h File 4.41 KB 0644
set_memory.h File 2.06 KB 0644
sfp.h File 16.54 KB 0644
sh_clk.h File 5.96 KB 0644
sh_dma.h File 3.47 KB 0644
sh_eth.h File 369 B 0644
sh_intc.h File 3.63 KB 0644
sh_timer.h File 172 B 0644
shdma-base.h File 4.27 KB 0644
shm.h File 835 B 0644
shmem_fs.h File 7.74 KB 0644
shrinker.h File 4.87 KB 0644
signal.h File 13.79 KB 0644
signal_types.h File 1.69 KB 0644
signalfd.h File 817 B 0644
siox.h File 2.26 KB 0644
siphash.h File 5.66 KB 0644
sizes.h File 1.68 KB 0644
skb_array.h File 5.43 KB 0644
skbuff.h File 148.33 KB 0644
skbuff_ref.h File 1.74 KB 0644
skmsg.h File 13.94 KB 0644
slab.h File 37.02 KB 0644
slimbus.h File 6.94 KB 0644
sm501-regs.h File 11.62 KB 0644
sm501.h File 4.02 KB 0644
smc91x.h File 1.57 KB 0644
smp.h File 8.03 KB 0644
smp_types.h File 1.35 KB 0644
smpboot.h File 1.68 KB 0644
smsc911x.h File 1.63 KB 0644
smscphy.h File 3.1 KB 0644
sock_diag.h File 2.42 KB 0644
socket.h File 15.52 KB 0644
sockptr.h File 4.05 KB 0644
softirq.h File 29 B 0644
sonet.h File 469 B 0644
sony-laptop.h File 1.41 KB 0644
sonypi.h File 1.71 KB 0644
sort.h File 348 B 0644
sound.h File 685 B 0644
soundcard.h File 1.59 KB 0644
spinlock.h File 17.55 KB 0644
spinlock_api.h File 28 B 0644
spinlock_api_smp.h File 5.23 KB 0644
spinlock_api_up.h File 3.38 KB 0644
spinlock_rt.h File 4.12 KB 0644
spinlock_types.h File 1.78 KB 0644
spinlock_types_raw.h File 1.69 KB 0644
spinlock_types_up.h File 732 B 0644
spinlock_up.h File 2.08 KB 0644
splice.h File 3.72 KB 0644
spmi.h File 5.85 KB 0644
sprintf.h File 1.24 KB 0644
sram.h File 437 B 0644
srcu.h File 15.35 KB 0644
srcutiny.h File 3.15 KB 0644
srcutree.h File 10.6 KB 0644
ssbi.h File 726 B 0644
stackdepot.h File 8.95 KB 0644
stackleak.h File 2.36 KB 0644
stackprotector.h File 859 B 0644
stacktrace.h File 4 KB 0644
start_kernel.h File 345 B 0644
stat.h File 1.82 KB 0644
statfs.h File 1.78 KB 0644
static_call.h File 10.66 KB 0644
static_call_types.h File 2.74 KB 0644
static_key.h File 30 B 0644
stdarg.h File 313 B 0644
stddef.h File 3.17 KB 0644
stm.h File 4.6 KB 0644
stmmac.h File 7.79 KB 0644
stmp3xxx_rtc_wdt.h File 331 B 0644
stmp_device.h File 412 B 0644
stop_machine.h File 4.94 KB 0644
string.h File 17.88 KB 0644
string_choices.h File 2.22 KB 0644
string_helpers.h File 3.29 KB 0644
stringhash.h File 2.65 KB 0644
stringify.h File 395 B 0644
sungem_phy.h File 3.97 KB 0644
sunserialcore.h File 1.08 KB 0644
sunxi-rsb.h File 2.89 KB 0644
surface_acpi_notify.h File 1.07 KB 0644
suspend.h File 20.63 KB 0644
svga.h File 3.75 KB 0644
sw842.h File 328 B 0644
swab.h File 912 B 0644
swait.h File 9.47 KB 0644
swait_api.h File 25 B 0644
swap.h File 21.47 KB 0644
swap_cgroup.h File 1004 B 0644
swap_slots.h File 721 B 0644
swapfile.h File 450 B 0644
swapops.h File 16.33 KB 0644
swiotlb.h File 9.09 KB 0644
switchtec.h File 10.92 KB 0644
sxgbe_platform.h File 1.23 KB 0644
sync_core.h File 1.03 KB 0644
sync_file.h File 1.57 KB 0644
synclink.h File 989 B 0644
sys.h File 960 B 0644
sys_soc.h File 1.26 KB 0644
syscall_user_dispatch.h File 1.31 KB 0644
syscall_user_dispatch_types.h File 388 B 0644
syscalls.h File 56.4 KB 0644
syscalls_api.h File 28 B 0644
syscore_ops.h File 633 B 0644
sysctl.h File 9.6 KB 0644
sysfb.h File 2.87 KB 0644
sysfs.h File 24.5 KB 0644
syslog.h File 1.29 KB 0644
sysrq.h File 1.95 KB 0644
sysv_fs.h File 9.03 KB 0644
t10-pi.h File 1.85 KB 0644
task_io_accounting.h File 1.13 KB 0644
task_io_accounting_ops.h File 2.55 KB 0644
task_work.h File 1.06 KB 0644
taskstats_kern.h File 957 B 0644
tboot.h File 3.26 KB 0644
tc.h File 3.46 KB 0644
tca6416_keypad.h File 683 B 0644
tcp.h File 20.67 KB 0644
tee_core.h File 9.67 KB 0644
tee_drv.h File 8.94 KB 0644
tegra-icc.h File 1.86 KB 0644
termios_internal.h File 1.48 KB 0644
text-patching.h File 349 B 0644
textsearch.h File 4.73 KB 0644
textsearch_fsm.h File 1.19 KB 0644
tfrc.h File 1.68 KB 0644
thermal.h File 11.63 KB 0644
thread_info.h File 7.75 KB 0644
threads.h File 1.31 KB 0644
thunderbolt.h File 21.38 KB 0644
ti-emif-sram.h File 4.75 KB 0644
ti_wilink_st.h File 13.47 KB 0644
tick.h File 9.89 KB 0644
tifm.h File 4.66 KB 0644
timb_dma.h File 1.17 KB 0644
timb_gpio.h File 717 B 0644
time.h File 3.14 KB 0644
time32.h File 1.75 KB 0644
time64.h File 4.68 KB 0644
time_namespace.h File 4.02 KB 0644
timecounter.h File 4.38 KB 0644
timekeeper_internal.h File 5.72 KB 0644
timekeeping.h File 8.82 KB 0644
timer.h File 7.4 KB 0644
timer_types.h File 477 B 0644
timerfd.h File 508 B 0644
timeriomem-rng.h File 432 B 0644
timerqueue.h File 1.18 KB 0644
timerqueue_types.h File 335 B 0644
timex.h File 6.41 KB 0644
tnum.h File 4.15 KB 0644
topology.h File 7.33 KB 0644
torture.h File 4.91 KB 0644
toshiba.h File 460 B 0644
tpm.h File 14.74 KB 0644
tpm_command.h File 847 B 0644
tpm_eventlog.h File 6.53 KB 0644
trace.h File 2.77 KB 0644
trace_clock.h File 667 B 0644
trace_events.h File 30.39 KB 0644
trace_recursion.h File 5 KB 0644
trace_seq.h File 4.52 KB 0644
tracefs.h File 3.79 KB 0644
tracepoint-defs.h File 2.46 KB 0644
tracepoint.h File 20.39 KB 0644
transport_class.h File 2.58 KB 0644
ts-nbus.h File 532 B 0644
tsacct_kern.h File 1.2 KB 0644
tsm.h File 3.78 KB 0644
tty.h File 17.21 KB 0644
tty_buffer.h File 1.29 KB 0644
tty_driver.h File 22.2 KB 0644
tty_flip.h File 2.68 KB 0644
tty_ldisc.h File 10.29 KB 0644
tty_port.h File 9.21 KB 0644
turris-omnia-mcu-interface.h File 11.13 KB 0644
typecheck.h File 782 B 0644
types.h File 6.04 KB 0644
u64_stats_sync.h File 5.45 KB 0644
u64_stats_sync_api.h File 34 B 0644
uacce.h File 4.37 KB 0644
uaccess.h File 18.83 KB 0644
ubsan.h File 307 B 0644
ucs2_string.h File 740 B 0644
udp.h File 6.09 KB 0644
uidgid.h File 4.27 KB 0644
uidgid_types.h File 241 B 0644
uio.h File 12.13 KB 0644
uio_driver.h File 5.25 KB 0644
umh.h File 1.82 KB 0644
unaligned.h File 3.14 KB 0644
unicode.h File 2.05 KB 0644
union_find.h File 1.14 KB 0644
units.h File 2.88 KB 0644
unroll.h File 1.77 KB 0644
uprobes.h File 9.44 KB 0644
usb.h File 78.94 KB 0644
usb_usual.h File 3.58 KB 0644
usbdevice_fs.h File 2.18 KB 0644
user-return-notifier.h File 1.18 KB 0644
user.h File 22 B 0644
user_events.h File 1.68 KB 0644
user_namespace.h File 6.42 KB 0644
userfaultfd_k.h File 13.22 KB 0644
usermode_driver.h File 515 B 0644
util_macros.h File 2.51 KB 0644
uts.h File 388 B 0644
utsname.h File 1.8 KB 0644
uuid.h File 2.49 KB 0644
vbox_utils.h File 1.75 KB 0644
vdpa.h File 22.11 KB 0644
verification.h File 1.86 KB 0644
vermagic.h File 1.24 KB 0644
vexpress.h File 297 B 0644
vfio.h File 13.34 KB 0644
vfio_pci_core.h File 5.59 KB 0644
vfs.h File 116 B 0644
vga_switcheroo.h File 8.62 KB 0644
vgaarb.h File 2.81 KB 0644
vhost_iotlb.h File 1.43 KB 0644
via-core.h File 6.57 KB 0644
via.h File 932 B 0644
via_i2c.h File 844 B 0644
videodev2.h File 2.7 KB 0644
virtio.h File 10.57 KB 0644
virtio_anchor.h File 507 B 0644
virtio_byteorder.h File 1.46 KB 0644
virtio_caif.h File 513 B 0644
virtio_config.h File 18.11 KB 0644
virtio_dma_buf.h File 1.12 KB 0644
virtio_net.h File 6.53 KB 0644
virtio_pci_admin.h File 1.47 KB 0644
virtio_pci_legacy.h File 1.37 KB 0644
virtio_pci_modern.h File 4.39 KB 0644
virtio_ring.h File 3.2 KB 0644
virtio_vsock.h File 7.44 KB 0644
vm_event_item.h File 4.29 KB 0644
vmalloc.h File 10.61 KB 0644
vmcore_info.h File 3.08 KB 0644
vmpressure.h File 1.68 KB 0644
vmstat.h File 16.78 KB 0644
vmw_vmci_api.h File 2.88 KB 0644
vmw_vmci_defs.h File 29.93 KB 0644
vringh.h File 9.35 KB 0644
vt.h File 611 B 0644
vt_buffer.h File 1.13 KB 0644
vt_kern.h File 5.32 KB 0644
vtime.h File 4.47 KB 0644
w1.h File 8.93 KB 0644
wait.h File 43.03 KB 0644
wait_api.h File 24 B 0644
wait_bit.h File 22.51 KB 0644
watch_queue.h File 3.83 KB 0644
watchdog.h File 8.21 KB 0644
win_minmax.h File 831 B 0644
wireless.h File 1.56 KB 0644
wkup_m3_ipc.h File 1.58 KB 0644
wm97xx.h File 10.44 KB 0644
wmi.h File 3.36 KB 0644
wordpart.h File 1.5 KB 0644
workqueue.h File 29.84 KB 0644
workqueue_api.h File 29 B 0644
workqueue_types.h File 564 B 0644
writeback.h File 12.67 KB 0644
ww_mutex.h File 13.38 KB 0644
wwan.h File 6 KB 0644
xarray.h File 58.06 KB 0644
xattr.h File 4.5 KB 0644
xxhash.h File 8.27 KB 0644
xz.h File 15.66 KB 0644
yam.h File 2.18 KB 0644
zconf.h File 1.73 KB 0644
zlib.h File 28.11 KB 0644
zorro.h File 3.57 KB 0644
zpool.h File 2.84 KB 0644
zsmalloc.h File 1.71 KB 0644
zstd.h File 22.47 KB 0644
zstd_errors.h File 3.09 KB 0644
zstd_lib.h File 144.05 KB 0644
zswap.h File 1.82 KB 0644
zutil.h File 2.73 KB 0644
Filemanager