/usr/src/linux-headers-5.15.0-190/include/linux
NameSizeModeActions
amba/-0755rm
atomic/-0755rm
avf/-0755rm
bcma/-0755rm
byteorder/-0755rm
can/-0755rm
ceph/-0755rm
clk/-0755rm
crush/-0755rm
decompress/-0755rm
device/-0755rm
dma/-0755rm
dsa/-0755rm
extcon/-0755rm
firmware/-0755rm
fpga/-0755rm
fsl/-0755rm
gpio/-0755rm
greybus/-0755rm
hsi/-0755rm
i3c/-0755rm
iio/-0755rm
input/-0755rm
irqchip/-0755rm
isdn/-0755rm
lockd/-0755rm
mailbox/-0755rm
mdio/-0755rm
mfd/-0755rm
mlx4/-0755rm
mlx5/-0755rm
mmc/-0755rm
mtd/-0755rm
mux/-0755rm
net/-0755rm
netfilter/-0755rm
netfilter_arp/-0755rm
netfilter_bridge/-0755rm
netfilter_ipv4/-0755rm
netfilter_ipv6/-0755rm
pcs/-0755rm
perf/-0755rm
phy/-0755rm
pinctrl/-0755rm
platform_data/-0755rm
power/-0755rm
qed/-0755rm
raid/-0755rm
regulator/-0755rm
remoteproc/-0755rm
reset/-0755rm
rpmsg/-0755rm
rtc/-0755rm
sched/-0755rm
soc/-0755rm
soundwire/-0755rm
spi/-0755rm
ssb/-0755rm
sunrpc/-0755rm
surface_aggregator/-0755rm
ulpi/-0755rm
unaligned/-0755rm
usb/-0755rm
8250_pci.h10380644editdlrm
a.out.h3540644editdlrm
acct.h25510644editdlrm
acpi.h409020644editdlrm
acpi_dma.h31540644editdlrm
acpi_iort.h24030644editdlrm
acpi_mdio.h8190644editdlrm
acpi_pmtmr.h6740644editdlrm
acpi_viot.h4780644editdlrm
adb.h18320644editdlrm
adfs_fs.h5740644editdlrm
adreno-smmu-priv.h28070644editdlrm
adxl.h3100644editdlrm
aer.h18220644editdlrm
agpgart.h38810644editdlrm
agp_backend.h35340644editdlrm
ahci-remap.h6070644editdlrm
ahci_platform.h17470644editdlrm
aio.h6510644editdlrm
alarmtimer.h19900644editdlrm
alcor_pci.h90430644editdlrm
align.h5520644editdlrm
altera_jtaguart.h3790644editdlrm
altera_uart.h3970644editdlrm
amd-iommu.h63250644editdlrm
anon_inodes.h6700644editdlrm
apm-emulation.h15990644editdlrm
apm_bios.h23050644editdlrm
apple-gmux.h9180644editdlrm
apple_bl.h4980644editdlrm
arch_topology.h25510644editdlrm
arm-cci.h13900644editdlrm
arm-smccc.h173820644editdlrm
armada-37xx-rwtm-mailbox.h4310644editdlrm
arm_ffa.h75450644editdlrm
arm_sdei.h27300644editdlrm
array_size.h3320644editdlrm
ascii85.h5550644editdlrm
asn1.h18320644editdlrm
asn1_ber_bytecode.h25760644editdlrm
asn1_decoder.h4680644editdlrm
asn1_encoder.h10060644editdlrm
assoc_array.h29490644editdlrm
assoc_array_priv.h54230644editdlrm
async.h44390644editdlrm
async_tx.h68600644editdlrm
ata.h337990644editdlrm
atalk.h45860644editdlrm
ata_platform.h7490644editdlrm
ath9k_platform.h14770644editdlrm
atm.h2870644editdlrm
atmdev.h104770644editdlrm
atmel-isc-media.h21150644editdlrm
atmel-mci.h14290644editdlrm
atmel-ssc.h99710644editdlrm
atmel_pdc.h12950644editdlrm
atm_tcp.h5110644editdlrm
atomic.h26440644editdlrm
attribute_container.h28030644editdlrm
audit.h199210644editdlrm
auto_dev-ioctl.h2960644editdlrm
auto_fs.h2780644editdlrm
auxiliary_bus.h25390644editdlrm
auxvec.h3040644editdlrm
average.h24810644editdlrm
backing-dev-defs.h87530644editdlrm
backing-dev.h121890644editdlrm
backlight.h134470644editdlrm
badblocks.h21880644editdlrm
balloon_compaction.h58920644editdlrm
bcd.h5590644editdlrm
bch.h21520644editdlrm
bcm47xx_nvram.h10330644editdlrm
bcm47xx_sprom.h6160644editdlrm
bcm47xx_wdt.h5550644editdlrm
bcm963xx_nvram.h30360644editdlrm
bcm963xx_tag.h36850644editdlrm
binfmts.h46830644editdlrm
bio.h201080644editdlrm
bitfield.h54600644editdlrm
bitmap.h226640644editdlrm
bitops.h87330644editdlrm
bitrev.h25940644editdlrm
bits.h13870644editdlrm
bit_spinlock.h23600644editdlrm
blk-cgroup.h226480644editdlrm
blk-crypto.h41170644editdlrm
blk-mq-pci.h2690644editdlrm
blk-mq-rdma.h2730644editdlrm
blk-mq-virtio.h2930644editdlrm
blk-mq.h198340644editdlrm
blk-pm.h7080644editdlrm
blkdev.h580410644editdlrm
blkpg.h4360644editdlrm
blktrace_api.h38580644editdlrm
blk_types.h156690644editdlrm
blockgroup_lock.h8100644editdlrm
bma150.h12860644editdlrm
bootconfig.h87120644editdlrm
bootmem_info.h17330644editdlrm
bottom_half.h9740644editdlrm
bpf-cgroup.h187960644editdlrm
bpf-netns.h15590644editdlrm
bpf.h762120644editdlrm
bpfilter.h7910644editdlrm
bpfptr.h20290644editdlrm
bpf_lirc.h6980644editdlrm
bpf_local_storage.h53590644editdlrm
bpf_lsm.h14560644editdlrm
bpf_trace.h1660644editdlrm
bpf_types.h55360644editdlrm
bpf_verifier.h208650644editdlrm
brcmphy.h139940644editdlrm
bsearch.h6240644editdlrm
bsg-lib.h17590644editdlrm
bsg.h4920644editdlrm
btf.h74320644editdlrm
btf_ids.h54630644editdlrm
btree-128.h27370644editdlrm
btree-type.h39910644editdlrm
btree.h70000644editdlrm
btrfs.h1450644editdlrm
buffer_head.h148140644editdlrm
bug.h22200644editdlrm
build-salt.h3750644editdlrm
buildid.h5610644editdlrm
build_bug.h28230644editdlrm
bvec.h63190644editdlrm
c2port.h13840644editdlrm
cache.h26160644editdlrm
cacheinfo.h38370644editdlrm
capability.h84860644editdlrm
cb710.h54900644editdlrm
cciss_ioctl.h10530644editdlrm
ccp.h185770644editdlrm
cc_platform.h23780644editdlrm
cdev.h8450644editdlrm
cdrom.h92680644editdlrm
cfag12864b.h15090644editdlrm
cfi.h11520644editdlrm
cgroup-defs.h248150644editdlrm
cgroup.h288400644editdlrm
cgroup_rdma.h12060644editdlrm
cgroup_subsys.h12590644editdlrm
circ_buf.h11200644editdlrm
cleancache.h39820644editdlrm
cleanup.h49860644editdlrm
clk-provider.h593300644editdlrm
clk.h344180644editdlrm
clkdev.h13220644editdlrm
clockchips.h74450644editdlrm
clocksource.h102270644editdlrm
clocksource_ids.h2470644editdlrm
cm4000_cs.h1990644editdlrm
cma.h20040644editdlrm
cnt32_to_63.h35450644editdlrm
cn_proc.h18900644editdlrm
coda.h22150644editdlrm
compaction.h73190644editdlrm
compat.h321220644editdlrm
compiler-clang.h41500644editdlrm
compiler-gcc.h50210644editdlrm
compiler-intel.h9490644editdlrm
compiler-version.h5170644editdlrm
compiler.h85530644editdlrm
compiler_attributes.h135570644editdlrm
compiler_types.h110230644editdlrm
completion.h41010644editdlrm
component.h41630644editdlrm
configfs.h86830644editdlrm
connector.h39270644editdlrm
console.h77580644editdlrm
consolemap.h10760644editdlrm
console_struct.h72530644editdlrm
const.h4210644editdlrm
container.h6100644editdlrm
context_tracking.h33620644editdlrm
context_tracking_state.h16160644editdlrm
cookie.h12540644editdlrm
cordic.h21320644editdlrm
coredump.h11540644editdlrm
coresight-pmu.h13550644editdlrm
coresight-stm.h1520644editdlrm
coresight.h184490644editdlrm
counter.h153180644editdlrm
count_zeros.h14530644editdlrm
cper.h169630644editdlrm
cpu.h84850644editdlrm
cpufeature.h17510644editdlrm
cpufreq.h335390644editdlrm
cpuhotplug.h169490644editdlrm
cpuidle.h105160644editdlrm
cpuidle_haltpoll.h3120644editdlrm
cpumask.h300890644editdlrm
cpuset.h83510644editdlrm
cpu_cooling.h19010644editdlrm
cpu_pm.h24330644editdlrm
cpu_rmap.h17210644editdlrm
crash_core.h34650644editdlrm
crash_dump.h41490644editdlrm
crc-ccitt.h6090644editdlrm
crc-itu-t.h5310644editdlrm
crc-t10dif.h4530644editdlrm
crc4.h1920644editdlrm
crc7.h3160644editdlrm
crc8.h37470644editdlrm
crc16.h5400644editdlrm
crc32.h28940644editdlrm
crc32c.h3310644editdlrm
crc32poly.h6100644editdlrm
crc64.h2800644editdlrm
cred.h128040644editdlrm
crypto.h278900644editdlrm
cs5535.h62770644editdlrm
ctype.h19120644editdlrm
cuda.h6130644editdlrm
damon.h106010644editdlrm
dasd_mod.h2040644editdlrm
davinci_emac.h10800644editdlrm
dax.h67190644editdlrm
dca.h19220644editdlrm
dcache.h190760644editdlrm
dccp.h109880644editdlrm
debugfs.h122530644editdlrm
debugobjects.h40850644editdlrm
debug_locks.h16270644editdlrm
delay.h24900644editdlrm
delayacct.h55840644editdlrm
delayed_call.h7090644editdlrm
devcoredump.h22660644editdlrm
devfreq-event.h60950644editdlrm
devfreq.h143700644editdlrm
devfreq_cooling.h27630644editdlrm
device-mapper.h193710644editdlrm
device.h352260644editdlrm
device_cgroup.h16090644editdlrm
devm-helpers.h27400644editdlrm
devpts_fs.h11560644editdlrm
dev_printk.h98830644editdlrm
dfl.h24350644editdlrm
digsig.h12120644editdlrm
dim.h94210644editdlrm
dio.h110190644editdlrm
dirent.h2150644editdlrm
dlm.h60050644editdlrm
dlm_plock.h5320644editdlrm
dm-bufio.h49920644editdlrm
dm-dirty-log.h40380644editdlrm
dm-io.h19800644editdlrm
dm-kcopyd.h30130644editdlrm
dm-region-hash.h31820644editdlrm
dm9000.h9870644editdlrm
dma-buf-map.h83180644editdlrm
dma-buf.h209620644editdlrm
dma-direct.h36810644editdlrm
dma-direction.h4070644editdlrm
dma-fence-array.h21910644editdlrm
dma-fence-chain.h31440644editdlrm
dma-fence.h213570644editdlrm
dma-heap.h16160644editdlrm
dma-iommu.h22650644editdlrm
dma-map-ops.h131970644editdlrm
dma-mapping.h205960644editdlrm
dma-resv.h122360644editdlrm
dmaengine.h548510644editdlrm
dmapool.h18320644editdlrm
dmar.h79290644editdlrm
dmi.h45120644editdlrm
dnotify.h10440644editdlrm
dns_resolver.h13900644editdlrm
dqblk_qtree.h22380644editdlrm
dqblk_v1.h3270644editdlrm
dqblk_v2.h4060644editdlrm
drbd.h103110644editdlrm
drbd_genl.h220100644editdlrm
drbd_genl_api.h18080644editdlrm
drbd_limits.h80030644editdlrm
ds2782_battery.h1580644editdlrm
dtlk.h35840644editdlrm
dtpm.h16840644editdlrm
dw_apb_timer.h15660644editdlrm
dynamic_debug.h64710644editdlrm
dynamic_queue_limits.h38120644editdlrm
earlycpio.h3590644editdlrm
ecryptfs.h39150644editdlrm
edac.h199240644editdlrm
edd.h10770644editdlrm
eeprom_93cx6.h27070644editdlrm
eeprom_93xx46.h10620644editdlrm
efi-bgrt.h6440644editdlrm
efi.h430380644editdlrm
efi_embedded_fw.h10600644editdlrm
efs_vh.h15850644editdlrm
eisa.h30310644editdlrm
elevator.h56530644editdlrm
elf-fdpic.h20300644editdlrm
elf-randomize.h5830644editdlrm
elf.h30300644editdlrm
elfcore-compat.h13020644editdlrm
elfcore.h42090644editdlrm
elfnote-lto.h3140644editdlrm
elfnote.h36260644editdlrm
enclosure.h41120644editdlrm
energy_model.h83610644editdlrm
entry-common.h173590644editdlrm
entry-kvm.h28000644editdlrm
err.h15270644editdlrm
errname.h2830644editdlrm
errno.h14810644editdlrm
error-injection.h6070644editdlrm
errqueue.h5240644editdlrm
errseq.h3820644editdlrm
etherdevice.h176070644editdlrm
ethtool.h325050644editdlrm
ethtool_netlink.h20290644editdlrm
eventfd.h23360644editdlrm
eventpoll.h24720644editdlrm
evm.h35000644editdlrm
export.h53940644editdlrm
exportfs.h84210644editdlrm
ext2_fs.h9670644editdlrm
extable.h13090644editdlrm
extcon-provider.h39190644editdlrm
extcon.h103990644editdlrm
f2fs_fs.h194710644editdlrm
f75375s.h5410644editdlrm
falloc.h16240644editdlrm
fanotify.h45470644editdlrm
fault-inject-usercopy.h4960644editdlrm
fault-inject.h19750644editdlrm
fb.h289580644editdlrm
fbcon.h22560644editdlrm
fcdevice.h7740644editdlrm
fcntl.h16980644editdlrm
fd.h4900644editdlrm
fddidevice.h8330644editdlrm
fdtable.h35710644editdlrm
fec.h4630644editdlrm
fiemap.h7130644editdlrm
file.h31580644editdlrm
fileattr.h19520644editdlrm
filter.h439950644editdlrm
fips.h3030644editdlrm
firewire.h137180644editdlrm
firmware-map.h9590644editdlrm
firmware.h33480644editdlrm
fixp-arith.h42900644editdlrm
flat.h26290644editdlrm
flex_proportions.h28810644editdlrm
font.h17140644editdlrm
fortify-string.h93290644editdlrm
freelist.h38900644editdlrm
freezer.h91930644editdlrm
frontswap.h31180644editdlrm
fs.h1255060644editdlrm
fscache-cache.h190250644editdlrm
fscache.h303030644editdlrm
fscrypt.h306220644editdlrm
fsi-occ.h6810644editdlrm
fsi-sbefifo.h6290644editdlrm
fsi.h23180644editdlrm
fsl-diu-fb.h39630644editdlrm
fsldma.h2020644editdlrm
fsl_devices.h42610644editdlrm
fsl_hypervisor.h28240644editdlrm
fsl_ifc.h250630644editdlrm
fsnotify.h102870644editdlrm
fsnotify_backend.h300760644editdlrm
fsverity.h69140644editdlrm
fs_context.h88180644editdlrm
fs_enet_pd.h34570644editdlrm
fs_parser.h45430644editdlrm
fs_pin.h5390644editdlrm
fs_stack.h8110644editdlrm
fs_struct.h10660644editdlrm
fs_types.h20710644editdlrm
fs_uart_pd.h15230644editdlrm
ftrace.h355970644editdlrm
ftrace_irq.h8840644editdlrm
futex.h24970644editdlrm
fwnode.h75350644editdlrm
fwnode_mdio.h8580644editdlrm
gameport.h55490644editdlrm
gcd.h1930644editdlrm
genalloc.h79120644editdlrm
generic-radix-tree.h65040644editdlrm
genetlink.h5890644editdlrm
genhd.h90550644editdlrm
genl_magic_func.h118090644editdlrm
genl_magic_struct.h77930644editdlrm
getcpu.h6410644editdlrm
gfp.h268920644editdlrm
glob.h2560644editdlrm
gnss.h16010644editdlrm
goldfish.h8780644editdlrm
gpio-pxa.h5710644editdlrm
gpio.h54230644editdlrm
gpio_keys.h17820644editdlrm
greybus.h42400644editdlrm
hardirq.h35160644editdlrm
hash.h30710644editdlrm
hashtable.h68270644editdlrm
hdlc.h32670644editdlrm
hdlcdrv.h64680644editdlrm
hdmi.h127050644editdlrm
hid-debug.h14580644editdlrm
hid-roccat.h4840644editdlrm
hid-sensor-hub.h91900644editdlrm
hid-sensor-ids.h76170644editdlrm
hid.h389230644editdlrm
hidden.h9660644editdlrm
hiddev.h14580644editdlrm
hidraw.h11460644editdlrm
highmem-internal.h52390644editdlrm
highmem.h97310644editdlrm
highuid.h31940644editdlrm
hil.h188570644editdlrm
hil_mlc.h52480644editdlrm
hippidevice.h10520644editdlrm
hmm.h41680644editdlrm
host1x.h109930644editdlrm
hpet.h26150644editdlrm
hp_sdc.h143520644editdlrm
hrtimer.h165150644editdlrm
hrtimer_defs.h6600644editdlrm
htcpld.h6170644editdlrm
hugetlb.h306060644editdlrm
hugetlb_cgroup.h72410644editdlrm
hugetlb_inline.h3740644editdlrm
huge_mm.h135930644editdlrm
hwmon-sysfs.h28400644editdlrm
hwmon-vid.h8620644editdlrm
hwmon.h151310644editdlrm
hwspinlock.h161740644editdlrm
hw_breakpoint.h42480644editdlrm
hw_random.h21680644editdlrm
hyperv.h502180644editdlrm
hypervisor.h6080644editdlrm
i2c-algo-bit.h14360644editdlrm
i2c-algo-pca.h29560644editdlrm
i2c-algo-pcf.h12360644editdlrm
i2c-dev.h3710644editdlrm
i2c-mux.h16670644editdlrm
i2c-smbus.h17400644editdlrm
i2c.h395260644editdlrm
i8042.h20410644editdlrm
i8253.h8080644editdlrm
icmp.h10290644editdlrm
icmpv6.h27610644editdlrm
idle_inject.h9320644editdlrm
idr.h99350644editdlrm
ieee80211.h1271320644editdlrm
ieee802154.h113850644editdlrm
if_arp.h18580644editdlrm
if_bridge.h49190644editdlrm
if_eql.h11000644editdlrm
if_ether.h12950644editdlrm
if_fddi.h33150644editdlrm
if_hsr.h5860644editdlrm
if_link.h5920644editdlrm
if_ltalk.h1880644editdlrm
if_macvlan.h27570644editdlrm
if_phonet.h3190644editdlrm
if_pppol2tp.h5160644editdlrm
if_pppox.h29130644editdlrm
if_rmnet.h20840644editdlrm
if_tap.h22660644editdlrm
if_team.h80890644editdlrm
if_tun.h15870644editdlrm
if_tunnel.h4090644editdlrm
if_vlan.h216930644editdlrm
igmp.h44130644editdlrm
ihex.h22060644editdlrm
ima.h59340644editdlrm
imx-media.h6050644editdlrm
in.h23450644editdlrm
in6.h16710644editdlrm
indirect_call_wrapper.h24260644editdlrm
inet.h27070644editdlrm
inetdevice.h90850644editdlrm
inet_diag.h28010644editdlrm
init.h116630644editdlrm
initrd.h10440644editdlrm
init_ohci1394_dma.h1960644editdlrm
init_syscalls.h10370644editdlrm
init_task.h13310644editdlrm
inotify.h7130644editdlrm
input.h203620644editdlrm
instrumentation.h19720644editdlrm
instrumented.h36850644editdlrm
integrity.h11790644editdlrm
intel-iommu.h279340644editdlrm
intel-ish-client-if.h40660644editdlrm
intel-svm.h15810644editdlrm
intel_rapl.h42390644editdlrm
intel_th.h25010644editdlrm
interconnect-provider.h56390644editdlrm
interconnect.h29510644editdlrm
interrupt.h258330644editdlrm
interval_tree.h8310644editdlrm
interval_tree_generic.h68630644editdlrm
io-64-nonatomic-hi-lo.h24680644editdlrm
io-64-nonatomic-lo-hi.h24680644editdlrm
io-mapping.h47570644editdlrm
io-pgtable.h88570644editdlrm
io.h51410644editdlrm
ioam6.h2260644editdlrm
ioam6_genl.h2660644editdlrm
ioam6_iptunnel.h2850644editdlrm
ioasid.h21190644editdlrm
iocontext.h46990644editdlrm
iomap.h121980644editdlrm
iommu-helper.h11460644editdlrm
iommu.h348730644editdlrm
iopoll.h77950644editdlrm
ioport.h125770644editdlrm
ioprio.h17720644editdlrm
iova.h63420644editdlrm
io_uring.h8810644editdlrm
ip.h10240644editdlrm
ipack.h89000644editdlrm
ipc.h6130644editdlrm
ipc_namespace.h57640644editdlrm
ipmi.h111460644editdlrm
ipmi_smi.h81690644editdlrm
ipv6.h89120644editdlrm
ipv6_route.h3720644editdlrm
irq.h427640644editdlrm
irqbypass.h35350644editdlrm
irqchip.h23870644editdlrm
irqdesc.h79320644editdlrm
irqdomain.h207270644editdlrm
irqflags.h81000644editdlrm
irqhandler.h3000644editdlrm
irqnr.h8560644editdlrm
irqreturn.h5030644editdlrm
irq_poll.h5750644editdlrm
irq_sim.h7890644editdlrm
irq_work.h18620644editdlrm
isa.h21670644editdlrm
isapnp.h29440644editdlrm
iscsi_boot_sysfs.h37960644editdlrm
iscsi_ibft.h8470644editdlrm
iversion.h126700644editdlrm
jbd2.h524330644editdlrm
jhash.h46730644editdlrm
jiffies.h154300644editdlrm
journal-head.h29840644editdlrm
joystick.h4370644editdlrm
jump_label.h164360644editdlrm
jump_label_ratelimit.h28410644editdlrm
jz4740-adc.h10230644editdlrm
jz4780-nemc.h9760644editdlrm
kallsyms.h47570644editdlrm
kasan-checks.h14950644editdlrm
kasan-tags.h4870644editdlrm
kasan.h137180644editdlrm
kbd_diacr.h1980644editdlrm
kbd_kern.h36870644editdlrm
kbuild.h3800644editdlrm
kconfig.h26910644editdlrm
kcore.h8910644editdlrm
kcov.h25350644editdlrm
kcsan-checks.h162450644editdlrm
kcsan.h19300644editdlrm
kdb.h75080644editdlrm
kdebug.h4870644editdlrm
kdev_t.h18430644editdlrm
kernel-page-flags.h5280644editdlrm
kernel.h174180644editdlrm
kernelcapi.h14850644editdlrm
kernel_read_file.h16760644editdlrm
kernel_stat.h30450644editdlrm
kernfs.h186840644editdlrm
kern_levels.h16110644editdlrm
kexec.h127420644editdlrm
key-type.h67880644editdlrm
key.h161280644editdlrm
keyboard.h6650644editdlrm
keyctl.h12760644editdlrm
keyslot-manager.h38680644editdlrm
kfence.h87680644editdlrm
kfifo.h268040644editdlrm
kgdb.h123420644editdlrm
khugepaged.h28100644editdlrm
klist.h19220644editdlrm
kmemleak.h33490644editdlrm
kmod.h10450644editdlrm
kmsg_dump.h27720644editdlrm
kobject.h78830644editdlrm
kobject_ns.h19430644editdlrm
kobj_map.h5450644editdlrm
kprobes.h150740644editdlrm
kref.h31550644editdlrm
ks0108.h9700644editdlrm
ks8842.h6320644editdlrm
ks8851_mll.h4720644editdlrm
ksm.h25330644editdlrm
kstrtox.h67510644editdlrm
kthread.h78720644editdlrm
ktime.h55120644editdlrm
kvm_dirty_ring.h27940644editdlrm
kvm_host.h600340644editdlrm
kvm_irqfd.h20430644editdlrm
kvm_para.h4020644editdlrm
kvm_types.h22220644editdlrm
l2tp.h2610644editdlrm
lantiq.h3650644editdlrm
lapb.h17520644editdlrm
latencytop.h11920644editdlrm
lcd.h38670644editdlrm
lcm.h2750644editdlrm
led-class-flash.h69000644editdlrm
led-class-multicolor.h33380644editdlrm
led-lm3530.h37860644editdlrm
leds-bd2802.h4760644editdlrm
leds-lp3944.h9500644editdlrm
leds-lp3952.h24100644editdlrm
leds-pca9532.h8660644editdlrm
leds-regulator.h11680644editdlrm
leds-ti-lmu-common.h11490644editdlrm
leds.h184920644editdlrm
libata.h690460644editdlrm
libfdt.h2020644editdlrm
libfdt_env.h4910644editdlrm
libgcc.h4630644editdlrm
libnvdimm.h106240644editdlrm
libps2.h19310644editdlrm
license.h4180644editdlrm
limits.h7150644editdlrm
linear_range.h17660644editdlrm
linkage.h98260644editdlrm
linkmode.h25590644editdlrm
linux_logo.h19560644editdlrm
lis3lv02d.h51250644editdlrm
list.h312000644editdlrm
list_bl.h49050644editdlrm
list_lru.h74630644editdlrm
list_nulls.h43220644editdlrm
list_sort.h3740644editdlrm
litex.h21070644editdlrm
livepatch.h84190644editdlrm
llc.h7490644editdlrm
llist.h92800644editdlrm
local_lock.h13620644editdlrm
local_lock_internal.h34990644editdlrm
lockdep.h220030644editdlrm
lockdep_types.h53080644editdlrm
lockref.h15410644editdlrm
log2.h63660644editdlrm
logic_iomem.h21240644editdlrm
logic_pio.h33100644editdlrm
lp.h28270644editdlrm
lru_cache.h121110644editdlrm
lsm_audit.h28730644editdlrm
lsm_hooks.h761740644editdlrm
lsm_hook_defs.h215110644editdlrm
lz4.h270750644editdlrm
lzo.h19800644editdlrm
mailbox_client.h17540644editdlrm
mailbox_controller.h58350644editdlrm
maple.h27750644editdlrm
marvell_phy.h17340644editdlrm
math.h51850644editdlrm
math64.h76560644editdlrm
mbcache.h22080644editdlrm
mbus.h31680644editdlrm
mc6821.h12090644editdlrm
mc146818rtc.h48000644editdlrm
mcb.h37960644editdlrm
mdev.h60810644editdlrm
mdio-bitbang.h13380644editdlrm
mdio-gpio.h1770644editdlrm
mdio-mux.h10210644editdlrm
mdio.h129900644editdlrm
mei_cl_bus.h38430644editdlrm
memblock.h203530644editdlrm
memcontrol.h446280644editdlrm
memfd.h7190644editdlrm
memory.h61320644editdlrm
memory_hotplug.h116890644editdlrm
mempolicy.h75480644editdlrm
mempool.h34300644editdlrm
memregion.h4170644editdlrm
memremap.h57490644editdlrm
memstick.h98320644editdlrm
mem_encrypt.h8850644editdlrm
mhi.h266640644editdlrm
micrel_phy.h18800644editdlrm
microchipphy.h27100644editdlrm
migrate.h55370644editdlrm
migrate_mode.h7580644editdlrm
mii.h167260644editdlrm
mii_timestamper.h36530644editdlrm
minmax.h102420644editdlrm
min_heap.h33770644editdlrm
miscdevice.h32780644editdlrm
misc_cgroup.h30210644editdlrm
mISDNdsp.h12170644editdlrm
mISDNhw.h55230644editdlrm
mISDNif.h152500644editdlrm
mm.h1082270644editdlrm
mman.h40530644editdlrm
mmap_lock.h43530644editdlrm
mmdebug.h23080644editdlrm
mmiotrace.h31220644editdlrm
mmu_context.h8550644editdlrm
mmu_notifier.h252290644editdlrm
mmzone.h485300644editdlrm
mm_inline.h29860644editdlrm
mm_types.h258110644editdlrm
mm_types_task.h25550644editdlrm
mnt_idmapping.h78380644editdlrm
mnt_namespace.h6970644editdlrm
module.h246150644editdlrm
moduleloader.h34980644editdlrm
moduleparam.h227780644editdlrm
module_signature.h12500644editdlrm
mod_devicetable.h240640644editdlrm
most.h124910644editdlrm
mount.h40230644editdlrm
moxtet.h24210644editdlrm
mpage.h7370644editdlrm
mpi.h86120644editdlrm
mpls.h3940644editdlrm
mpls_iptunnel.h1780644editdlrm
mroute.h20040644editdlrm
mroute6.h24660644editdlrm
mroute_base.h124630644editdlrm
msdos_fs.h2730644editdlrm
msdos_partition.h16550644editdlrm
msg.h3950644editdlrm
msi.h157270644editdlrm
mtio.h13170644editdlrm
mutex.h74830644editdlrm
mv643xx.h522710644editdlrm
mv643xx_eth.h20010644editdlrm
mv643xx_i2c.h3350644editdlrm
mvebu-pmsu.h5200644editdlrm
mxm-wmi.h3990644editdlrm
namei.h46830644editdlrm
nd.h56850644editdlrm
ndctl.h6740644editdlrm
net.h117490644editdlrm
netdevice.h1727810644editdlrm
netdev_features.h110100644editdlrm
netfilter.h138860644editdlrm
netfilter_bridge.h21280644editdlrm
netfilter_defs.h2420644editdlrm
netfilter_ingress.h14740644editdlrm
netfilter_ipv4.h10770644editdlrm
netfilter_ipv6.h59880644editdlrm
netfs.h81250644editdlrm
netlink.h80700644editdlrm
netpoll.h24730644editdlrm
nfs.h15020644editdlrm
nfs3.h2600644editdlrm
nfs4.h198360644editdlrm
nfsacl.h14350644editdlrm
nfs_common.h4020644editdlrm
nfs_fs.h208790644editdlrm
nfs_fs_i.h3080644editdlrm
nfs_fs_sb.h104950644editdlrm
nfs_iostat.h42850644editdlrm
nfs_page.h69640644editdlrm
nfs_ssc.h20610644editdlrm
nfs_xdr.h432720644editdlrm
nitro_enclaves.h2670644editdlrm
nl802154.h39380644editdlrm
nls.h31620644editdlrm
nmi.h69260644editdlrm
node.h47870644editdlrm
nodemask.h175770644editdlrm
nospec.h22900644editdlrm
notifier.h80320644editdlrm
nsc_gpio.h14590644editdlrm
nsproxy.h31650644editdlrm
ns_common.h2830644editdlrm
ntb.h536910644editdlrm
ntb_transport.h38920644editdlrm
nubus.h56750644editdlrm
numa.h12780644editdlrm
nvme-fc-driver.h469580644editdlrm
nvme-fc.h99550644editdlrm
nvme-rdma.h20850644editdlrm
nvme-tcp.h45220644editdlrm
nvme.h392350644editdlrm
nvmem-consumer.h69420644editdlrm
nvmem-provider.h47720644editdlrm
nvram.h35500644editdlrm
objagg.h19830644editdlrm
objtool.h53680644editdlrm
of.h445450644editdlrm
of_address.h42700644editdlrm
of_clk.h8190644editdlrm
of_device.h30350644editdlrm
of_dma.h23530644editdlrm
of_fdt.h37330644editdlrm
of_gpio.h41700644editdlrm
of_graph.h36360644editdlrm
of_iommu.h5050644editdlrm
of_irq.h38430644editdlrm
of_mdio.h39990644editdlrm
of_net.h10090644editdlrm
of_pci.h9150644editdlrm
of_pdt.h11630644editdlrm
of_platform.h39740644editdlrm
of_reserved_mem.h22980644editdlrm
oid_registry.h57670644editdlrm
olpc-ec.h20000644editdlrm
omap-dma.h100210644editdlrm
omap-gpmc.h27040644editdlrm
omap-iommu.h8800644editdlrm
omap-mailbox.h6890644editdlrm
omapfb.h5760644editdlrm
once.h28650644editdlrm
once_lite.h9250644editdlrm
oom.h33410644editdlrm
openvswitch.h4030644editdlrm
osq_lock.h10660644editdlrm
overflow.h80070644editdlrm
packing.h18030644editdlrm
padata.h61040644editdlrm
page-flags-layout.h32870644editdlrm
page-flags.h286730644editdlrm
page-isolation.h16800644editdlrm
pageblock-flags.h23630644editdlrm
pagemap.h312340644editdlrm
pagevec.h20900644editdlrm
pagewalk.h43170644editdlrm
page_counter.h23590644editdlrm
page_ext.h18770644editdlrm
page_idle.h26710644editdlrm
page_owner.h23610644editdlrm
page_ref.h50730644editdlrm
page_reporting.h8950644editdlrm
panic.h26560644editdlrm
panic_notifier.h2960644editdlrm
parman.h29340644editdlrm
parport.h195440644editdlrm
parport_pc.h67130644editdlrm
parser.h11950644editdlrm
part_stat.h24330644editdlrm
pata_arasan_cf_data.h12500644editdlrm
patchkey.h7570644editdlrm
path.h5720644editdlrm
pch_dma.h4080644editdlrm
pci-acpi.h39440644editdlrm
pci-ats.h18020644editdlrm
pci-dma-compat.h37490644editdlrm
pci-ecam.h32800644editdlrm
pci-ep-cfs.h9560644editdlrm
pci-epc.h96980644editdlrm
pci-epf.h72270644editdlrm
pci-p2pdma.h40490644editdlrm
pci.h928510644editdlrm
pci_hotplug.h44580644editdlrm
pci_ids.h1241410644editdlrm
pcs-lynx.h4250644editdlrm
pda_power.h10050644editdlrm
pe.h165540644editdlrm
percpu-defs.h185580644editdlrm
percpu-refcount.h111020644editdlrm
percpu-rwsem.h42570644editdlrm
percpu.h48500644editdlrm
percpu_counter.h56090644editdlrm
perf_event.h483650644editdlrm
perf_regs.h10760644editdlrm
personality.h3930644editdlrm
pfn.h6660644editdlrm
pfn_t.h32870644editdlrm
pgalloc.h9480644editdlrm
pgtable.h455000644editdlrm
phonet.h5370644editdlrm
phy.h594750644editdlrm
phylink.h199390644editdlrm
phy_fixed.h18140644editdlrm
phy_led_triggers.h10350644editdlrm
pid.h65210644editdlrm
pid_namespace.h21330644editdlrm
pim.h27370644editdlrm
pipe_fs_i.h94330644editdlrm
pkeys.h9900644editdlrm
pktcdvd.h60110644editdlrm
pl320-ipc.h2090644editdlrm
platform_device.h130740644editdlrm
platform_profile.h11500644editdlrm
pldmfw.h48790644editdlrm
plist.h88720644editdlrm
pm-trace.h9400644editdlrm
pm.h357090644editdlrm
pmbus.h25430644editdlrm
pmu.h25020644editdlrm
pm_clock.h26370644editdlrm
pm_domain.h135010644editdlrm
pm_opp.h154660644editdlrm
pm_qos.h106630644editdlrm
pm_runtime.h201650644editdlrm
pm_wakeirq.h15180644editdlrm
pm_wakeup.h64270644editdlrm
pnfs_osd_xdr.h94900644editdlrm
pnp.h152530644editdlrm
poison.h25400644editdlrm
poll.h43700644editdlrm
posix-clock.h48080644editdlrm
posix-timers.h73860644editdlrm
posix_acl.h33470644editdlrm
posix_acl_xattr.h19090644editdlrm
powercap.h122630644editdlrm
power_supply.h182270644editdlrm
ppp-comp.h30230644editdlrm
ppp_channel.h30640644editdlrm
ppp_defs.h11470644editdlrm
pps_kernel.h30100644editdlrm
pr.h5660644editdlrm
prandom.h34580644editdlrm
preempt.h150480644editdlrm
prefetch.h17400644editdlrm
prime_numbers.h13840644editdlrm
printk.h227630644editdlrm
prmt.h1430644editdlrm
processor.h18890644editdlrm
proc_fs.h88110644editdlrm
proc_ns.h26270644editdlrm
profile.h26840644editdlrm
projid.h22690644editdlrm
property.h180690644editdlrm
pruss_driver.h12970644editdlrm
psci.h15590644editdlrm
pseudo_fs.h3550644editdlrm
psi.h15960644editdlrm
psi_types.h44160644editdlrm
psp-sev.h181880644editdlrm
psp-tee.h27160644editdlrm
pstore.h78080644editdlrm
pstore_blk.h15670644editdlrm
pstore_ram.h39070644editdlrm
pstore_zone.h23360644editdlrm
ptdump.h5670644editdlrm
pti.h2400644editdlrm
ptp_classify.h49650644editdlrm
ptp_clock_kernel.h124900644editdlrm
ptp_kvm.h4600644editdlrm
ptp_pch.h6230644editdlrm
ptrace.h150010644editdlrm
ptr_ring.h166790644editdlrm
purgatory.h5900644editdlrm
pvclock_gtod.h5480644editdlrm
pwm.h168510644editdlrm
pwm_backlight.h7220644editdlrm
pxa2xx_ssp.h113920644editdlrm
pxa168_eth.h7280644editdlrm
qcom-geni-se.h140650644editdlrm
qcom_scm.h39000644editdlrm
qnx6_fs.h33490644editdlrm
quota.h192170644editdlrm
quotaops.h102960644editdlrm
radix-tree.h160080644editdlrm
raid_class.h20480644editdlrm
ramfs.h7460644editdlrm
random.h40730644editdlrm
randomize_kstack.h25220644editdlrm
range.h7750644editdlrm
ras.h10440644editdlrm
ratelimit.h17610644editdlrm
ratelimit_types.h13570644editdlrm
rational.h6390644editdlrm
rbtree.h91480644editdlrm
rbtree_augmented.h97560644editdlrm
rbtree_latch.h68190644editdlrm
rbtree_types.h9460644editdlrm
rculist.h292420644editdlrm
rculist_bl.h33740644editdlrm
rculist_nulls.h88880644editdlrm
rcupdate.h396200644editdlrm
rcupdate_trace.h31580644editdlrm
rcupdate_wait.h17690644editdlrm
rcutiny.h33970644editdlrm
rcutree.h24010644editdlrm
rcuwait.h18840644editdlrm
rcu_node_tree.h38180644editdlrm
rcu_segcblist.h102730644editdlrm
rcu_sync.h14940644editdlrm
reboot-mode.h6000644editdlrm
reboot.h22350644editdlrm
reciprocal_div.h33560644editdlrm
refcount.h123050644editdlrm
regmap.h655030644editdlrm
regset.h116260644editdlrm
relay.h86690644editdlrm
remoteproc.h253600644editdlrm
resctrl.h66510644editdlrm
reset-controller.h36550644editdlrm
reset.h309640644editdlrm
resource.h3390644editdlrm
resource_ext.h21350644editdlrm
restart_block.h11380644editdlrm
rfkill.h107750644editdlrm
rhashtable-types.h35360644editdlrm
rhashtable.h384920644editdlrm
ring_buffer.h77390644editdlrm
rio.h194720644editdlrm
rio_drv.h146600644editdlrm
rio_ids.h11040644editdlrm
rio_regs.h195240644editdlrm
rmap.h93460644editdlrm
rmi.h123300644editdlrm
rndis.h172690644editdlrm
rodata_test.h3940644editdlrm
root_dev.h6190644editdlrm
rpmsg.h89780644editdlrm
rslib.h37530644editdlrm
rtc.h88610644editdlrm
rtmutex.h30370644editdlrm
rtnetlink.h45620644editdlrm
rtsx_common.h8900644editdlrm
rtsx_pci.h407740644editdlrm
rtsx_usb.h157470644editdlrm
rwbase_rt.h8760644editdlrm
rwlock.h46640644editdlrm
rwlock_api_smp.h78290644editdlrm
rwlock_rt.h30530644editdlrm
rwlock_types.h18140644editdlrm
rwsem.h78100644editdlrm
s3c_adc_battery.h9230644editdlrm
sbitmap.h173060644editdlrm
scatterlist.h179810644editdlrm
scc.h29050644editdlrm
sched.h662820644editdlrm
sched_clock.h14720644editdlrm
scmi_protocol.h266810644editdlrm
scpi_protocol.h27290644editdlrm
screen_info.h1910644editdlrm
scs.h18690644editdlrm
sctp.h234310644editdlrm
scx200.h18630644editdlrm
scx200_gpio.h24380644editdlrm
sdb.h42700644editdlrm
seccomp.h35330644editdlrm
secretmem.h11690644editdlrm
securebits.h2390644editdlrm
security.h603660644editdlrm
sed-opal.h16960644editdlrm
seg6.h1210644editdlrm
seg6_genl.h1360644editdlrm
seg6_hmac.h1360644editdlrm
seg6_iptunnel.h1480644editdlrm
seg6_local.h1000644editdlrm
selection.h18540644editdlrm
sem.h5990644editdlrm
semaphore.h13840644editdlrm
seqlock.h404550644editdlrm
seqno-fence.h36550644editdlrm
seq_buf.h40300644editdlrm
seq_file.h92200644editdlrm
seq_file_net.h7300644editdlrm
serdev.h100510644editdlrm
serial.h6300644editdlrm
serial_8250.h67280644editdlrm
serial_bcm63xx.h48430644editdlrm
serial_core.h209500644editdlrm
serial_max3100.h12160644editdlrm
serial_s3c.h96490644editdlrm
serial_sci.h16350644editdlrm
serio.h43830644editdlrm
set_memory.h16980644editdlrm
sfp.h162530644editdlrm
shdma-base.h43700644editdlrm
shm.h9680644editdlrm
shmem_fs.h59540644editdlrm
shrinker.h33280644editdlrm
sh_clk.h60980644editdlrm
sh_dma.h35500644editdlrm
sh_eth.h3690644editdlrm
sh_intc.h36790644editdlrm
sh_timer.h1720644editdlrm
signal.h140830644editdlrm
signalfd.h8170644editdlrm
signal_types.h17250644editdlrm
siox.h23130644editdlrm
siphash.h57250644editdlrm
sizes.h13050644editdlrm
skbuff.h1415090644editdlrm
skb_array.h53050644editdlrm
skmsg.h137620644editdlrm
slab.h243130644editdlrm
slab_def.h30910644editdlrm
slimbus.h70960644editdlrm
slub_def.h63670644editdlrm
sm501-regs.h119000644editdlrm
sm501.h41140644editdlrm
smc91x.h16040644editdlrm
smc911x.h2940644editdlrm
smp.h78180644editdlrm
smpboot.h17250644editdlrm
smp_types.h13820644editdlrm
smsc911x.h16700644editdlrm
smscphy.h12830644editdlrm
socket.h154600644editdlrm
sockptr.h24140644editdlrm
sock_diag.h23700644editdlrm
sonet.h4690644editdlrm
sony-laptop.h14400644editdlrm
sonypi.h17550644editdlrm
sort.h3460644editdlrm
sound.h6850644editdlrm
soundcard.h16310644editdlrm
spinlock.h154370644editdlrm
spinlock_api_smp.h56050644editdlrm
spinlock_api_up.h33940644editdlrm
spinlock_rt.h42090644editdlrm
spinlock_types.h18260644editdlrm
spinlock_types_raw.h17260644editdlrm
spinlock_types_up.h7260644editdlrm
spinlock_up.h22110644editdlrm
splice.h33900644editdlrm
spmi.h57250644editdlrm
sram.h8440644editdlrm
srcu.h72430644editdlrm
srcutiny.h28130644editdlrm
srcutree.h49160644editdlrm
ssbi.h7260644editdlrm
stackdepot.h6860644editdlrm
stackleak.h9020644editdlrm
stackprotector.h3610644editdlrm
stacktrace.h40660644editdlrm
start_kernel.h4150644editdlrm
stat.h13660644editdlrm
statfs.h18270644editdlrm
static_call.h105000644editdlrm
static_call_types.h28090644editdlrm
static_key.h300644editdlrm
stdarg.h3130644editdlrm
stddef.h32760644editdlrm
stm.h44490644editdlrm
stmmac.h70290644editdlrm
stmp3xxx_rtc_wdt.h3310644editdlrm
stmp_device.h4120644editdlrm
stop_machine.h45170644editdlrm
string.h102480644editdlrm
stringhash.h27150644editdlrm
stringify.h3410644editdlrm
string_helpers.h27580644editdlrm
sungem_phy.h40310644editdlrm
sunserialcore.h11020644editdlrm
sunxi-rsb.h29560644editdlrm
superhyway.h28780644editdlrm
surface_acpi_notify.h10910644editdlrm
suspend.h204960644editdlrm
svga.h38370644editdlrm
sw842.h3280644editdlrm
swab.h5690644editdlrm
swait.h96780644editdlrm
swap.h239920644editdlrm
swapfile.h5560644editdlrm
swapops.h100840644editdlrm
swap_cgroup.h9710644editdlrm
swap_slots.h8410644editdlrm
swiotlb.h54900644editdlrm
switchtec.h111580644editdlrm
sxgbe_platform.h12610644editdlrm
synclink.h9890644editdlrm
sync_core.h5810644editdlrm
sync_file.h16060644editdlrm
sys.h9600644editdlrm
syscalls.h568930644editdlrm
syscall_user_dispatch.h9300644editdlrm
syscore_ops.h6330644editdlrm
sysctl.h88000644editdlrm
sysfb.h27390644editdlrm
sysfs.h180600644editdlrm
syslog.h12660644editdlrm
sysrq.h20020644editdlrm
sysv_fs.h92500644editdlrm
sys_soc.h12940644editdlrm
t10-pi.h15380644editdlrm
taskstats_kern.h9570644editdlrm
task_io_accounting.h11590644editdlrm
task_io_accounting_ops.h26100644editdlrm
task_work.h9340644editdlrm
tboot.h34070644editdlrm
tc.h35340644editdlrm
tca6416_keypad.h6830644editdlrm
tcp.h175530644editdlrm
tee_drv.h187910644editdlrm
textsearch.h48670644editdlrm
textsearch_fsm.h12140644editdlrm
tfrc.h17220644editdlrm
thermal.h158090644editdlrm
threads.h13140644editdlrm
thread_info.h70560644editdlrm
thunderbolt.h212790644editdlrm
ti-emif-sram.h52700644editdlrm
tick.h102880644editdlrm
tifm.h47700644editdlrm
timb_dma.h11930644editdlrm
timb_gpio.h7170644editdlrm
time.h32160644editdlrm
time32.h17950644editdlrm
time64.h45960644editdlrm
timecounter.h42430644editdlrm
timekeeper_internal.h54550644editdlrm
timekeeping.h77890644editdlrm
timer.h80900644editdlrm
timerfd.h5080644editdlrm
timeriomem-rng.h4320644editdlrm
timerqueue.h14300644editdlrm
timex.h68260644editdlrm
time_namespace.h39070644editdlrm
ti_wilink_st.h137810644editdlrm
tnum.h34670644editdlrm
topology.h53770644editdlrm
torture.h45840644editdlrm
toshiba.h4600644editdlrm
tpm.h113400644editdlrm
tpm_command.h8470644editdlrm
tpm_eventlog.h67480644editdlrm
trace.h27900644editdlrm
tracefs.h10180644editdlrm
tracehook.h81580644editdlrm
tracepoint-defs.h23950644editdlrm
tracepoint.h184320644editdlrm
trace_clock.h6670644editdlrm
trace_events.h283420644editdlrm
trace_recursion.h56180644editdlrm
trace_seq.h40390644editdlrm
transport_class.h26410644editdlrm
ts-nbus.h5320644editdlrm
tsacct_kern.h12300644editdlrm
tty.h148690644editdlrm
tty_buffer.h13080644editdlrm
tty_driver.h160620644editdlrm
tty_flip.h17340644editdlrm
tty_ldisc.h86650644editdlrm
tty_port.h74130644editdlrm
typecheck.h7820644editdlrm
types.h58130644editdlrm
u64_stats_sync.h65630644editdlrm
uacce.h38770644editdlrm
uaccess.h133780644editdlrm
ucb1400.h42210644editdlrm
ucs2_string.h6620644editdlrm
udp.h54280644editdlrm
uidgid.h41710644editdlrm
uio.h93190644editdlrm
uio_driver.h48220644editdlrm
umh.h18370644editdlrm
unicode.h10460644editdlrm
units.h26540644editdlrm
uprobes.h61960644editdlrm
usb.h799540644editdlrm
usbdevice_fs.h22340644editdlrm
usb_usual.h36710644editdlrm
user-return-notifier.h12050644editdlrm
user.h220644editdlrm
userfaultfd_k.h65900644editdlrm
usermode_driver.h5150644editdlrm
user_namespace.h61790644editdlrm
util_macros.h25480644editdlrm
uts.h3880644editdlrm
utsname.h18270644editdlrm
uuid.h24000644editdlrm
vbox_utils.h17900644editdlrm
vdpa.h147230644editdlrm
verification.h18150644editdlrm
vermagic.h13080644editdlrm
vexpress.h2970644editdlrm
vfio.h84970644editdlrm
vfio_pci_core.h82660644editdlrm
vfs.h1160644editdlrm
vgaarb.h39720644editdlrm
vga_switcheroo.h88280644editdlrm
vhost_iotlb.h13690644editdlrm
via-core.h67230644editdlrm
via-gpio.h3100644editdlrm
via.h9320644editdlrm
via_i2c.h8440644editdlrm
videodev2.h27690644editdlrm
virtio.h68570644editdlrm
virtio_byteorder.h14910644editdlrm
virtio_caif.h5130644editdlrm
virtio_config.h166430644editdlrm
virtio_console.h19740644editdlrm
virtio_dma_buf.h11470644editdlrm
virtio_net.h61530644editdlrm
virtio_pci_modern.h33310644editdlrm
virtio_ring.h30200644editdlrm
virtio_vsock.h49070644editdlrm
visorbus.h125250644editdlrm
vlynq.h33000644editdlrm
vmacache.h7220644editdlrm
vmalloc.h85970644editdlrm
vme.h57950644editdlrm
vmpressure.h17240644editdlrm
vmstat.h151400644editdlrm
vmw_vmci_api.h29540644editdlrm
vmw_vmci_defs.h307510644editdlrm
vm_event_item.h35380644editdlrm
vringh.h88300644editdlrm
vsc.h19190644editdlrm
vt.h6110644editdlrm
vtime.h47090644editdlrm
vt_buffer.h15300644editdlrm
vt_kern.h54330644editdlrm
w1-gpio.h4930644editdlrm
w1.h91400644editdlrm
wait.h430530644editdlrm
wait_bit.h114680644editdlrm
watchdog.h84090644editdlrm
watch_queue.h39150644editdlrm
win_minmax.h8320644editdlrm
wireless.h16070644editdlrm
wkup_m3_ipc.h17950644editdlrm
wl12xx.h8100644editdlrm
wm97xx.h108420644editdlrm
wmi.h15980644editdlrm
workqueue.h229770644editdlrm
writeback.h131380644editdlrm
wwan.h52550644editdlrm
ww_mutex.h134260644editdlrm
xarray.h578090644editdlrm
xattr.h39770644editdlrm
xxhash.h84730644editdlrm
xz.h114270644editdlrm
yam.h22300644editdlrm
z2_battery.h2990644editdlrm
zconf.h17700644editdlrm
zlib.h287850644editdlrm
zorro.h36530644editdlrm
zpool.h33180644editdlrm
zsmalloc.h16680644editdlrm
zstd.h497460644editdlrm
zutil.h27930644editdlrm
Edit: /usr/src/linux-headers-5.15.0-190/include/linux/phy.h (59475B)
/* 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 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define PHY_DEFAULT_FEATURES (SUPPORTED_Autoneg | \ SUPPORTED_TP | \ SUPPORTED_MII) #define PHY_10BT_FEATURES (SUPPORTED_10baseT_Half | \ SUPPORTED_10baseT_Full) #define PHY_100BT_FEATURES (SUPPORTED_100baseT_Half | \ SUPPORTED_100baseT_Full) #define PHY_1000BT_FEATURES (SUPPORTED_1000baseT_Half | \ SUPPORTED_1000baseT_Full) 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_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; #define PHY_BASIC_FEATURES ((unsigned long *)&phy_basic_features) #define PHY_BASIC_T1_FEATURES ((unsigned long *)&phy_basic_t1_features) #define PHY_GBIT_FEATURES ((unsigned long *)&phy_gbit_features) #define PHY_GBIT_FIBRE_FEATURES ((unsigned long *)&phy_gbit_fibre_features) #define PHY_GBIT_ALL_PORTS_FEATURES ((unsigned long *)&phy_gbit_all_ports_features) #define PHY_10GBIT_FEATURES ((unsigned long *)&phy_10gbit_features) #define PHY_10GBIT_FEC_FEATURES ((unsigned long *)&phy_10gbit_fec_features) #define PHY_10GBIT_FULL_FEATURES ((unsigned long *)&phy_10gbit_full_features) extern const int phy_basic_ports_array[3]; extern const int phy_fibre_port_array[1]; extern const int phy_all_ports_features_array[7]; extern const int phy_10_100_features_array[4]; extern const int phy_basic_t1_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 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: Median-independent interface * @PHY_INTERFACE_MODE_GMII: Gigabit median-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: ??? 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_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_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_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_MAX, } phy_interface_t; /* * 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_QSGMII: return "qsgmii"; case PHY_INTERFACE_MODE_TRGMII: return "trgmii"; case PHY_INTERFACE_MODE_1000BASEX: return "1000base-x"; 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"; default: return "unknown"; } } #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 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 * @addr: Common PHY address used to combine PHYs in one package * @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 { int addr; 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); /** @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; /** @probe_capabilities: bus capabilities, used for probing */ enum { MDIOBUS_NO_CAP = 0, MDIOBUS_C22, MDIOBUS_C45, MDIOBUS_C22_C45, } probe_capabilities; /** @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(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. Or * PHY is in an error state. * - phy_start moves to @PHY_UP */ enum phy_state { PHY_DOWN = 0, PHY_READY, PHY_HALTED, 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 * @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 * @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) * @phy_timer: The timer for handling the state machine * @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 * @lp_advertising: Current link partner advertised linkmodes * @eee_broken_modes: Energy efficient ethernet modes which should be prohibited * @autoneg: Flag autoneg being used * @link: Current link state * @autoneg_complete: Flag auto negotiation of the link has completed * @mdix: Current crossover * @mdix_ctrl: User setting of crossover * @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 * @interface: enum phy_interface_t value * @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 * @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 * @lock: Mutex for serialization access to PHY * @state_queue: Work queue for state machine * @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 */ struct phy_driver *drv; 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 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; enum phy_state state; u32 dev_flags; phy_interface_t interface; /* * 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); /* Energy efficient ethernet modes which should be prohibited */ u32 eee_broken_modes; #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 /* * 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; u8 mdix; u8 mdix_ctrl; 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 }; static inline struct phy_device *to_phy_device(const struct device *dev) { return container_of(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 /** * 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); /* 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_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); }; #define to_phy_driver(d) container_of(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) /* 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); /* 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); int phy_speed_down_core(struct phy_device *phydev); /** * 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 = read_poll_timeout(phy_read, val, (cond) || val < 0, \ 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). Should be less than ~20ms since usleep_range * is used (see Documentation/timers/timers-howto.rst). * @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 = read_poll_timeout(phy_read_mmd, val, (cond) || val < 0, \ 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; 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 ifreq *ifr) { return phydev->mii_ts->hwtstamp(phydev->mii_ts, ifr); } 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 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_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(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); 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_aneg_done(struct phy_device *phydev); int phy_speed_down(struct phy_device *phydev, bool sync); int phy_speed_up(struct phy_device *phydev); 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 int phy_cable_test_result(struct phy_device *phydev, u8 pair, u16 result); int phy_cable_test_fault_length(struct phy_device *phydev, u8 pair, u16 cm); 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_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_eee_advert(struct phy_device *phydev); 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_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); /* 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_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_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); /* 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_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_support_sym_pause(struct phy_device *phydev); void phy_support_asym_pause(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); 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_init_eee(struct phy_device *phydev, bool clk_stop_enable); int phy_get_eee_err(struct phy_device *phydev); int phy_ethtool_set_eee(struct phy_device *phydev, struct ethtool_eee *data); int phy_ethtool_get_eee(struct phy_device *phydev, struct ethtool_eee *data); 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 addr, 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 addr, size_t priv_size); #if IS_ENABLED(CONFIG_PHYLIB) int __init mdio_bus_init(void); void mdio_bus_exit(void); #endif 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); static inline int phy_package_read(struct phy_device *phydev, u32 regnum) { struct phy_package_shared *shared = phydev->shared; if (!shared) return -EIO; return mdiobus_read(phydev->mdio.bus, shared->addr, regnum); } static inline int __phy_package_read(struct phy_device *phydev, u32 regnum) { struct phy_package_shared *shared = phydev->shared; if (!shared) return -EIO; return __mdiobus_read(phydev->mdio.bus, shared->addr, regnum); } static inline int phy_package_write(struct phy_device *phydev, u32 regnum, u16 val) { struct phy_package_shared *shared = phydev->shared; if (!shared) return -EIO; return mdiobus_write(phydev->mdio.bus, shared->addr, regnum, val); } static inline int __phy_package_write(struct phy_device *phydev, u32 regnum, u16 val) { struct phy_package_shared *shared = phydev->shared; if (!shared) return -EIO; return __mdiobus_write(phydev->mdio.bus, shared->addr, regnum, 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 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 */