golden hour
/usr/include/linux
⬆️ Go Up
Upload
File/Folder
Size
Actions
a.out.h
6.73 KB
Del
OK
acct.h
3.82 KB
Del
OK
acrn.h
16.29 KB
Del
OK
adb.h
1.11 KB
Del
OK
adfs_fs.h
993 B
Del
OK
affs_hardblocks.h
1.54 KB
Del
OK
agpgart.h
3.85 KB
Del
OK
aio_abi.h
3.32 KB
Del
OK
am437x-vpfe.h
3.59 KB
Del
OK
android
-
Del
OK
apm_bios.h
3.6 KB
Del
OK
arcfb.h
213 B
Del
OK
arm_sdei.h
2.69 KB
Del
OK
aspeed-lpc-ctrl.h
1.74 KB
Del
OK
aspeed-p2a-ctrl.h
1.86 KB
Del
OK
atalk.h
1023 B
Del
OK
atm.h
7.7 KB
Del
OK
atm_eni.h
648 B
Del
OK
atm_he.h
406 B
Del
OK
atm_idt77105.h
955 B
Del
OK
atm_nicstar.h
1.25 KB
Del
OK
atm_tcp.h
1.58 KB
Del
OK
atm_zatm.h
1.5 KB
Del
OK
atmapi.h
952 B
Del
OK
atmarp.h
1.27 KB
Del
OK
atmbr2684.h
3.19 KB
Del
OK
atmclip.h
576 B
Del
OK
atmdev.h
7.5 KB
Del
OK
atmioc.h
1.61 KB
Del
OK
atmlec.h
2.33 KB
Del
OK
atmmpc.h
4.13 KB
Del
OK
atmppp.h
639 B
Del
OK
atmsap.h
4.85 KB
Del
OK
atmsvc.h
1.81 KB
Del
OK
audit.h
21.06 KB
Del
OK
auto_dev-ioctl.h
4.87 KB
Del
OK
auto_fs.h
6.28 KB
Del
OK
auto_fs4.h
451 B
Del
OK
auxvec.h
1.56 KB
Del
OK
ax25.h
2.76 KB
Del
OK
batadv_packet.h
19.87 KB
Del
OK
batman_adv.h
16.49 KB
Del
OK
baycom.h
883 B
Del
OK
bcm933xx_hcs.h
419 B
Del
OK
bfs_fs.h
1.86 KB
Del
OK
binfmts.h
776 B
Del
OK
bits.h
447 B
Del
OK
blkpg.h
904 B
Del
OK
blktrace_api.h
4.59 KB
Del
OK
blkzoned.h
6.34 KB
Del
OK
bpf.h
272.11 KB
Del
OK
bpf_common.h
1.33 KB
Del
OK
bpf_perf_event.h
529 B
Del
OK
bpfilter.h
465 B
Del
OK
bpqether.h
981 B
Del
OK
bsg.h
2.44 KB
Del
OK
bt-bmc.h
572 B
Del
OK
btf.h
5.46 KB
Del
OK
btrfs.h
29.85 KB
Del
OK
btrfs_tree.h
25.22 KB
Del
OK
byteorder
-
Del
OK
cachefiles.h
1.61 KB
Del
OK
caif
-
Del
OK
can
-
Del
OK
can.h
11.03 KB
Del
OK
capability.h
13.17 KB
Del
OK
capi.h
3.05 KB
Del
OK
cciss_defs.h
3.2 KB
Del
OK
cciss_ioctl.h
2.7 KB
Del
OK
ccs.h
767 B
Del
OK
cdrom.h
28.87 KB
Del
OK
cec-funcs.h
53.14 KB
Del
OK
cec.h
40.47 KB
Del
OK
cfm_bridge.h
1.42 KB
Del
OK
cgroupstats.h
2.17 KB
Del
OK
chio.h
5.16 KB
Del
OK
cifs
-
Del
OK
close_range.h
377 B
Del
OK
cm4000_cs.h
1.76 KB
Del
OK
cn_proc.h
4.05 KB
Del
OK
coda.h
17.79 KB
Del
OK
coff.h
12.25 KB
Del
OK
connector.h
2.2 KB
Del
OK
const.h
987 B
Del
OK
coresight-stm.h
747 B
Del
OK
cramfs_fs.h
3.47 KB
Del
OK
cryptouser.h
5.2 KB
Del
OK
cuda.h
905 B
Del
OK
cxl_mem.h
7.73 KB
Del
OK
cycx_cfm.h
2.92 KB
Del
OK
dcbnl.h
24.7 KB
Del
OK
dccp.h
6.29 KB
Del
OK
devlink.h
22.3 KB
Del
OK
dlm.h
2.49 KB
Del
OK
dlm_device.h
2.48 KB
Del
OK
dlm_netlink.h
1.13 KB
Del
OK
dlm_plock.h
894 B
Del
OK
dlmconstants.h
4.96 KB
Del
OK
dm-ioctl.h
11.48 KB
Del
OK
dm-log-userspace.h
14.83 KB
Del
OK
dma-buf.h
5.12 KB
Del
OK
dma-heap.h
1.36 KB
Del
OK
dn.h
4.53 KB
Del
OK
dns_resolver.h
3.86 KB
Del
OK
dpll.h
7.19 KB
Del
OK
dqblk_xfs.h
9.17 KB
Del
OK
dvb
-
Del
OK
edd.h
5.47 KB
Del
OK
efs_fs_sb.h
2.17 KB
Del
OK
elf-em.h
2.57 KB
Del
OK
elf-fdpic.h
1.1 KB
Del
OK
elf.h
14.69 KB
Del
OK
errno.h
23 B
Del
OK
errqueue.h
1.94 KB
Del
OK
erspan.h
1.03 KB
Del
OK
ethtool.h
100.09 KB
Del
OK
ethtool_netlink.h
29.87 KB
Del
OK
eventfd.h
264 B
Del
OK
eventpoll.h
2.84 KB
Del
OK
f2fs.h
3.22 KB
Del
OK
fadvise.h
842 B
Del
OK
falloc.h
3.5 KB
Del
OK
fanotify.h
6.64 KB
Del
OK
fb.h
16.09 KB
Del
OK
fcntl.h
4.22 KB
Del
OK
fd.h
11.83 KB
Del
OK
fdreg.h
5.24 KB
Del
OK
fib_rules.h
1.99 KB
Del
OK
fiemap.h
2.71 KB
Del
OK
filter.h
2.16 KB
Del
OK
firewire-cdev.h
43.2 KB
Del
OK
firewire-constants.h
3.16 KB
Del
OK
fou.h
819 B
Del
OK
fpga-dfl.h
8.52 KB
Del
OK
fs.h
12.88 KB
Del
OK
fscrypt.h
6.41 KB
Del
OK
fsi.h
2.2 KB
Del
OK
fsl_hypervisor.h
7.13 KB
Del
OK
fsl_mc.h
734 B
Del
OK
fsmap.h
4.29 KB
Del
OK
fsverity.h
3.11 KB
Del
OK
fuse.h
25.36 KB
Del
OK
futex.h
5.98 KB
Del
OK
gameport.h
897 B
Del
OK
gen_stats.h
1.49 KB
Del
OK
genetlink.h
2.19 KB
Del
OK
genwqe
-
Del
OK
gfs2_ondisk.h
14.43 KB
Del
OK
gpio.h
19.46 KB
Del
OK
gsmmux.h
4.4 KB
Del
OK
gtp.h
734 B
Del
OK
handshake.h
1.61 KB
Del
OK
hash_info.h
971 B
Del
OK
hdlc
-
Del
OK
hdlc.h
637 B
Del
OK
hdlcdrv.h
2.84 KB
Del
OK
hdreg.h
22.17 KB
Del
OK
hid.h
2.04 KB
Del
OK
hiddev.h
6.2 KB
Del
OK
hidraw.h
1.95 KB
Del
OK
hpet.h
743 B
Del
OK
hsi
-
Del
OK
hsr_netlink.h
1.08 KB
Del
OK
hw_breakpoint.h
742 B
Del
OK
hyperv.h
10.89 KB
Del
OK
i2c-dev.h
1.83 KB
Del
OK
i2c.h
6.73 KB
Del
OK
i2o-dev.h
11.28 KB
Del
OK
i8k.h
1.49 KB
Del
OK
icmp.h
4.67 KB
Del
OK
icmpv6.h
4.2 KB
Del
OK
idxd.h
9.11 KB
Del
OK
if.h
10.67 KB
Del
OK
if_addr.h
1.84 KB
Del
OK
if_addrlabel.h
721 B
Del
OK
if_alg.h
1.53 KB
Del
OK
if_arcnet.h
3.63 KB
Del
OK
if_arp.h
6.41 KB
Del
OK
if_bonding.h
5.02 KB
Del
OK
if_bridge.h
20.18 KB
Del
OK
if_cablemodem.h
986 B
Del
OK
if_eql.h
1.32 KB
Del
OK
if_ether.h
8.21 KB
Del
OK
if_fc.h
1.7 KB
Del
OK
if_fddi.h
4.27 KB
Del
OK
if_hippi.h
4.14 KB
Del
OK
if_infiniband.h
1.22 KB
Del
OK
if_link.h
52.83 KB
Del
OK
if_ltalk.h
210 B
Del
OK
if_macsec.h
6.35 KB
Del
OK
if_packet.h
7.99 KB
Del
OK
if_phonet.h
424 B
Del
OK
if_plip.h
660 B
Del
OK
if_ppp.h
29 B
Del
OK
if_pppol2tp.h
3.23 KB
Del
OK
if_pppox.h
4.76 KB
Del
OK
if_slip.h
872 B
Del
OK
if_team.h
2.54 KB
Del
OK
if_tun.h
4 KB
Del
OK
if_tunnel.h
5.36 KB
Del
OK
if_vlan.h
1.79 KB
Del
OK
if_x25.h
881 B
Del
OK
if_xdp.h
4.89 KB
Del
OK
ife.h
351 B
Del
OK
igmp.h
2.99 KB
Del
OK
iio
-
Del
OK
ila.h
1.22 KB
Del
OK
in.h
10.15 KB
Del
OK
in6.h
7.36 KB
Del
OK
in_route.h
936 B
Del
OK
inet_diag.h
4.9 KB
Del
OK
inotify.h
3.21 KB
Del
OK
input-event-codes.h
29.5 KB
Del
OK
input.h
15.84 KB
Del
OK
io_uring.h
20.4 KB
Del
OK
ioctl.h
163 B
Del
OK
iommufd.h
28.39 KB
Del
OK
ioprio.h
4.08 KB
Del
OK
ip.h
4.7 KB
Del
OK
ip6_tunnel.h
1.91 KB
Del
OK
ip_vs.h
13.8 KB
Del
OK
ipc.h
2.05 KB
Del
OK
ipmi.h
15.08 KB
Del
OK
ipmi_bmc.h
488 B
Del
OK
ipmi_msgdefs.h
3.35 KB
Del
OK
ipmi_ssif_bmc.h
441 B
Del
OK
ipsec.h
947 B
Del
OK
ipv6.h
4.07 KB
Del
OK
ipv6_route.h
1.86 KB
Del
OK
ipx.h
2.29 KB
Del
OK
irqnr.h
104 B
Del
OK
isdn
-
Del
OK
iso_fs.h
6.33 KB
Del
OK
isst_if.h
14.92 KB
Del
OK
ivtv.h
2.95 KB
Del
OK
ivtvfb.h
1.18 KB
Del
OK
jffs2.h
6.66 KB
Del
OK
joystick.h
3.35 KB
Del
OK
kcm.h
822 B
Del
OK
kcmp.h
522 B
Del
OK
kcov.h
1.92 KB
Del
OK
kd.h
6.3 KB
Del
OK
kdev_t.h
383 B
Del
OK
kernel-page-flags.h
900 B
Del
OK
kernel.h
194 B
Del
OK
kernelcapi.h
1019 B
Del
OK
kexec.h
2.05 KB
Del
OK
keyboard.h
13.14 KB
Del
OK
keyctl.h
5.86 KB
Del
OK
kfd_ioctl.h
56.75 KB
Del
OK
kfd_sysfs.h
5.1 KB
Del
OK
kvm.h
46.76 KB
Del
OK
kvm_para.h
1001 B
Del
OK
l2tp.h
5.61 KB
Del
OK
landlock.h
10.14 KB
Del
OK
libc-compat.h
8.09 KB
Del
OK
limits.h
937 B
Del
OK
lirc.h
7.95 KB
Del
OK
llc.h
3.09 KB
Del
OK
loadpin.h
834 B
Del
OK
loop.h
3.32 KB
Del
OK
lp.h
4.09 KB
Del
OK
lsm.h
1.51 KB
Del
OK
lwtunnel.h
2.31 KB
Del
OK
magic.h
3.73 KB
Del
OK
major.h
4.55 KB
Del
OK
map_to_7segment.h
6.45 KB
Del
OK
matroxfb.h
1.43 KB
Del
OK
max2175.h
1.01 KB
Del
OK
mdio.h
23.78 KB
Del
OK
media-bus-format.h
6.75 KB
Del
OK
media.h
12.46 KB
Del
OK
mei.h
3.4 KB
Del
OK
mei_uuid.h
738 B
Del
OK
membarrier.h
9.14 KB
Del
OK
memfd.h
1.43 KB
Del
OK
mempolicy.h
2.51 KB
Del
OK
meye.h
2.47 KB
Del
OK
mii.h
9.27 KB
Del
OK
minix_fs.h
2.07 KB
Del
OK
misc
-
Del
OK
mman.h
1.75 KB
Del
OK
mmc
-
Del
OK
mmtimer.h
2.07 KB
Del
OK
module.h
293 B
Del
OK
mount.h
4.9 KB
Del
OK
mpls.h
2.25 KB
Del
OK
mpls_iptunnel.h
761 B
Del
OK
mptcp.h
3.67 KB
Del
OK
mptcp_pm.h
4.3 KB
Del
OK
mqueue.h
2.15 KB
Del
OK
mroute.h
5.78 KB
Del
OK
mroute6.h
4.81 KB
Del
OK
mrp_bridge.h
1.67 KB
Del
OK
msdos_fs.h
6.57 KB
Del
OK
msg.h
3.31 KB
Del
OK
mtio.h
7.98 KB
Del
OK
nbd-netlink.h
2.35 KB
Del
OK
nbd.h
3.77 KB
Del
OK
ncsi.h
4.71 KB
Del
OK
ndctl.h
6.67 KB
Del
OK
neighbour.h
5.91 KB
Del
OK
net.h
2.04 KB
Del
OK
net_dropmon.h
2.85 KB
Del
OK
net_namespace.h
715 B
Del
OK
net_tstamp.h
5.97 KB
Del
OK
netconf.h
614 B
Del
OK
netdev.h
5.39 KB
Del
OK
netdevice.h
2.2 KB
Del
OK
netfilter
-
Del
OK
netfilter.h
1.69 KB
Del
OK
netfilter_arp
-
Del
OK
netfilter_arp.h
445 B
Del
OK
netfilter_bridge
-
Del
OK
netfilter_bridge.h
1.14 KB
Del
OK
netfilter_decnet.h
1.72 KB
Del
OK
netfilter_ipv4
-
Del
OK
netfilter_ipv4.h
1.45 KB
Del
OK
netfilter_ipv6
-
Del
OK
netfilter_ipv6.h
1.35 KB
Del
OK
netlink.h
12.09 KB
Del
OK
netlink_diag.h
1.49 KB
Del
OK
netrom.h
807 B
Del
OK
nexthop.h
3.97 KB
Del
OK
nfc.h
10.95 KB
Del
OK
nfs.h
4.36 KB
Del
OK
nfs2.h
1.43 KB
Del
OK
nfs3.h
2.4 KB
Del
OK
nfs4.h
6.54 KB
Del
OK
nfs4_mount.h
1.89 KB
Del
OK
nfs_fs.h
1.62 KB
Del
OK
nfs_idmap.h
2.19 KB
Del
OK
nfs_mount.h
2.09 KB
Del
OK
nfsacl.h
718 B
Del
OK
nfsd
-
Del
OK
nfsd_netlink.h
1.95 KB
Del
OK
nilfs2_api.h
7.41 KB
Del
OK
nilfs2_ondisk.h
17.66 KB
Del
OK
nitro_enclaves.h
12.85 KB
Del
OK
nl80211.h
338.95 KB
Del
OK
nsfs.h
639 B
Del
OK
nubus.h
8 KB
Del
OK
nvme_ioctl.h
2.43 KB
Del
OK
nvram.h
532 B
Del
OK
omap3isp.h
20.36 KB
Del
OK
omapfb.h
5.78 KB
Del
OK
oom.h
511 B
Del
OK
openat2.h
1.42 KB
Del
OK
openvswitch.h
40.41 KB
Del
OK
packet_diag.h
1.63 KB
Del
OK
param.h
141 B
Del
OK
parport.h
3.56 KB
Del
OK
patchkey.h
892 B
Del
OK
pci.h
1.35 KB
Del
OK
pci_regs.h
60.58 KB
Del
OK
pcitest.h
920 B
Del
OK
perf_event.h
42.43 KB
Del
OK
personality.h
2.05 KB
Del
OK
pfkeyv2.h
10.32 KB
Del
OK
pfrut.h
7.8 KB
Del
OK
pg.h
2.34 KB
Del
OK
phantom.h
1.62 KB
Del
OK
phonet.h
4.57 KB
Del
OK
pidfd.h
256 B
Del
OK
pkt_cls.h
18.65 KB
Del
OK
pkt_sched.h
28.66 KB
Del
OK
pktcdvd.h
2.63 KB
Del
OK
pmu.h
5.32 KB
Del
OK
poll.h
22 B
Del
OK
posix_acl.h
1.22 KB
Del
OK
posix_acl_xattr.h
1.09 KB
Del
OK
posix_types.h
1.07 KB
Del
OK
ppdev.h
3.21 KB
Del
OK
ppp-comp.h
2.47 KB
Del
OK
ppp-ioctl.h
5.59 KB
Del
OK
ppp_defs.h
5.43 KB
Del
OK
pps.h
4.62 KB
Del
OK
pr.h
1.59 KB
Del
OK
prctl.h
10.81 KB
Del
OK
psample.h
2.57 KB
Del
OK
psci.h
5.02 KB
Del
OK
psp-dbc.h
5.16 KB
Del
OK
psp-sev.h
6.26 KB
Del
OK
ptp_clock.h
7.35 KB
Del
OK
ptrace.h
4.29 KB
Del
OK
qemu_fw_cfg.h
2.41 KB
Del
OK
qnx4_fs.h
2.27 KB
Del
OK
qnxtypes.h
624 B
Del
OK
qrtr.h
893 B
Del
OK
quota.h
6.16 KB
Del
OK
radeonfb.h
360 B
Del
OK
raid
-
Del
OK
random.h
1.38 KB
Del
OK
rds.h
10.91 KB
Del
OK
reboot.h
1.31 KB
Del
OK
reiserfs_fs.h
775 B
Del
OK
reiserfs_xattr.h
533 B
Del
OK
remoteproc_cdev.h
1.08 KB
Del
OK
resource.h
2.32 KB
Del
OK
rfkill.h
6.45 KB
Del
OK
rio_cm_cdev.h
3.17 KB
Del
OK
rio_mport_cdev.h
9.11 KB
Del
OK
rkisp1-config.h
30.63 KB
Del
OK
romfs_fs.h
1.21 KB
Del
OK
rose.h
2.18 KB
Del
OK
route.h
2.28 KB
Del
OK
rpl.h
814 B
Del
OK
rpl_iptunnel.h
424 B
Del
OK
rpmsg.h
1.03 KB
Del
OK
rpmsg_types.h
288 B
Del
OK
rseq.h
4.79 KB
Del
OK
rtc.h
5.19 KB
Del
OK
rtnetlink.h
20.8 KB
Del
OK
rxrpc.h
4.81 KB
Del
OK
scc.h
4.52 KB
Del
OK
sched
-
Del
OK
sched.h
6.12 KB
Del
OK
scif_ioctl.h
6.23 KB
Del
OK
screen_info.h
2.42 KB
Del
OK
sctp.h
35.18 KB
Del
OK
seccomp.h
5.6 KB
Del
OK
securebits.h
2.64 KB
Del
OK
sed-opal.h
5.29 KB
Del
OK
seg6.h
1.14 KB
Del
OK
seg6_genl.h
589 B
Del
OK
seg6_hmac.h
423 B
Del
OK
seg6_iptunnel.h
984 B
Del
OK
seg6_local.h
3.78 KB
Del
OK
selinux_netlink.h
1.17 KB
Del
OK
sem.h
2.98 KB
Del
OK
serial.h
4.9 KB
Del
OK
serial_core.h
4.93 KB
Del
OK
serial_reg.h
15.65 KB
Del
OK
serio.h
2.09 KB
Del
OK
sev-guest.h
2.47 KB
Del
OK
shm.h
3.71 KB
Del
OK
signal.h
388 B
Del
OK
signalfd.h
1.2 KB
Del
OK
smc.h
8.31 KB
Del
OK
smc_diag.h
2.77 KB
Del
OK
smiapp.h
1.03 KB
Del
OK
snmp.h
13.92 KB
Del
OK
sock_diag.h
1.27 KB
Del
OK
socket.h
919 B
Del
OK
sockios.h
6.69 KB
Del
OK
sonet.h
2.24 KB
Del
OK
sonypi.h
5.18 KB
Del
OK
sound.h
1.21 KB
Del
OK
soundcard.h
44.96 KB
Del
OK
spi
-
Del
OK
stat.h
7.23 KB
Del
OK
stddef.h
1.69 KB
Del
OK
stm.h
1.25 KB
Del
OK
string.h
238 B
Del
OK
sunrpc
-
Del
OK
surface_aggregator
-
Del
OK
suspend_ioctls.h
1.4 KB
Del
OK
swab.h
6.76 KB
Del
OK
switchtec_ioctl.h
5.14 KB
Del
OK
sync_file.h
3.49 KB
Del
OK
synclink.h
8.77 KB
Del
OK
sysctl.h
25.3 KB
Del
OK
sysinfo.h
1.02 KB
Del
OK
target_core_user.h
4.52 KB
Del
OK
taskstats.h
8.13 KB
Del
OK
tc_act
-
Del
OK
tc_ematch
-
Del
OK
tcp.h
11.65 KB
Del
OK
tcp_metrics.h
1.94 KB
Del
OK
tdx-guest.h
1.27 KB
Del
OK
tee.h
13.09 KB
Del
OK
termios.h
172 B
Del
OK
thermal.h
3.23 KB
Del
OK
time.h
1.71 KB
Del
OK
time_types.h
1.24 KB
Del
OK
timerfd.h
936 B
Del
OK
times.h
278 B
Del
OK
timex.h
7.63 KB
Del
OK
tiocl.h
1.69 KB
Del
OK
tipc.h
8.62 KB
Del
OK
tipc_config.h
14.52 KB
Del
OK
tipc_netlink.h
9.17 KB
Del
OK
tipc_sockets_diag.h
468 B
Del
OK
tls.h
7.06 KB
Del
OK
toshiba.h
1.88 KB
Del
OK
tps6594_pfsm.h
1.13 KB
Del
OK
tty.h
1.55 KB
Del
OK
tty_flags.h
4.4 KB
Del
OK
types.h
1.6 KB
Del
OK
udf_fs_i.h
697 B
Del
OK
udmabuf.h
643 B
Del
OK
udp.h
1.65 KB
Del
OK
uhid.h
4.54 KB
Del
OK
uinput.h
9.04 KB
Del
OK
uio.h
732 B
Del
OK
uleds.h
798 B
Del
OK
ultrasound.h
4.46 KB
Del
OK
um_timetravel.h
3.87 KB
Del
OK
un.h
384 B
Del
OK
unistd.h
220 B
Del
OK
unix_diag.h
1.3 KB
Del
OK
usb
-
Del
OK
usbdevice_fs.h
8.12 KB
Del
OK
usbip.h
1.47 KB
Del
OK
userfaultfd.h
10.68 KB
Del
OK
userio.h
1.48 KB
Del
OK
utime.h
223 B
Del
OK
utsname.h
669 B
Del
OK
uuid.h
28 B
Del
OK
uvcvideo.h
2.57 KB
Del
OK
v4l2-common.h
2.01 KB
Del
OK
v4l2-controls.h
94.59 KB
Del
OK
v4l2-dv-timings.h
30.39 KB
Del
OK
v4l2-mediabus.h
5.3 KB
Del
OK
v4l2-subdev.h
9.76 KB
Del
OK
vbox_err.h
7.09 KB
Del
OK
vbox_vmmdev_types.h
11.38 KB
Del
OK
vboxguest.h
9.15 KB
Del
OK
vdpa.h
1.74 KB
Del
OK
vduse.h
9.58 KB
Del
OK
version.h
374 B
Del
OK
veth.h
224 B
Del
OK
vfio.h
70.12 KB
Del
OK
vfio_ccw.h
1.29 KB
Del
OK
vfio_zdev.h
2.48 KB
Del
OK
vhost.h
8.24 KB
Del
OK
vhost_types.h
4.77 KB
Del
OK
videodev2.h
98.83 KB
Del
OK
virtio_9p.h
2 KB
Del
OK
virtio_balloon.h
5.16 KB
Del
OK
virtio_blk.h
9.75 KB
Del
OK
virtio_bt.h
910 B
Del
OK
virtio_config.h
4.36 KB
Del
OK
virtio_console.h
3.08 KB
Del
OK
virtio_crypto.h
13.56 KB
Del
OK
virtio_fs.h
573 B
Del
OK
virtio_gpio.h
1.7 KB
Del
OK
virtio_gpu.h
11.28 KB
Del
OK
virtio_i2c.h
1.16 KB
Del
OK
virtio_ids.h
3.7 KB
Del
OK
virtio_input.h
2.46 KB
Del
OK
virtio_iommu.h
3.84 KB
Del
OK
virtio_mem.h
6.99 KB
Del
OK
virtio_mmio.h
4.85 KB
Del
OK
virtio_net.h
14.72 KB
Del
OK
virtio_pci.h
7.3 KB
Del
OK
virtio_pcidev.h
2.33 KB
Del
OK
virtio_pmem.h
641 B
Del
OK
virtio_ring.h
8.52 KB
Del
OK
virtio_rng.h
265 B
Del
OK
virtio_scmi.h
637 B
Del
OK
virtio_scsi.h
5.94 KB
Del
OK
virtio_snd.h
12.86 KB
Del
OK
virtio_types.h
2.1 KB
Del
OK
virtio_vsock.h
3.27 KB
Del
OK
vm_sockets.h
7.18 KB
Del
OK
vm_sockets_diag.h
963 B
Del
OK
vmcore.h
455 B
Del
OK
vsockmon.h
1.84 KB
Del
OK
vt.h
2.99 KB
Del
OK
vtpm_proxy.h
1.68 KB
Del
OK
wait.h
682 B
Del
OK
watch_queue.h
3.41 KB
Del
OK
watchdog.h
2.28 KB
Del
OK
wireguard.h
7.57 KB
Del
OK
wireless.h
41.7 KB
Del
OK
wmi.h
1.72 KB
Del
OK
wwan.h
295 B
Del
OK
x25.h
3.48 KB
Del
OK
xattr.h
2.95 KB
Del
OK
xdp_diag.h
1.43 KB
Del
OK
xfrm.h
12.33 KB
Del
OK
xilinx-v4l2-controls.h
2.91 KB
Del
OK
zorro.h
3.22 KB
Del
OK
zorro_ids.h
29.26 KB
Del
OK
Edit: iommufd.h
/* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ /* Copyright (c) 2021-2022, NVIDIA CORPORATION & AFFILIATES. */ #ifndef _IOMMUFD_H #define _IOMMUFD_H #include <linux/ioctl.h> #include <linux/types.h> #define IOMMUFD_TYPE (';') /** * DOC: General ioctl format * * The ioctl interface follows a general format to allow for extensibility. Each * ioctl is passed in a structure pointer as the argument providing the size of * the structure in the first u32. The kernel checks that any structure space * beyond what it understands is 0. This allows userspace to use the backward * compatible portion while consistently using the newer, larger, structures. * * ioctls use a standard meaning for common errnos: * * - ENOTTY: The IOCTL number itself is not supported at all * - E2BIG: The IOCTL number is supported, but the provided structure has * non-zero in a part the kernel does not understand. * - EOPNOTSUPP: The IOCTL number is supported, and the structure is * understood, however a known field has a value the kernel does not * understand or support. * - EINVAL: Everything about the IOCTL was understood, but a field is not * correct. * - ENOENT: An ID or IOVA provided does not exist. * - ENOMEM: Out of memory. * - EOVERFLOW: Mathematics overflowed. * * As well as additional errnos, within specific ioctls. */ enum { IOMMUFD_CMD_BASE = 0x80, IOMMUFD_CMD_DESTROY = IOMMUFD_CMD_BASE, IOMMUFD_CMD_IOAS_ALLOC = 0x81, IOMMUFD_CMD_IOAS_ALLOW_IOVAS = 0x82, IOMMUFD_CMD_IOAS_COPY = 0x83, IOMMUFD_CMD_IOAS_IOVA_RANGES = 0x84, IOMMUFD_CMD_IOAS_MAP = 0x85, IOMMUFD_CMD_IOAS_UNMAP = 0x86, IOMMUFD_CMD_OPTION = 0x87, IOMMUFD_CMD_VFIO_IOAS = 0x88, IOMMUFD_CMD_HWPT_ALLOC = 0x89, IOMMUFD_CMD_GET_HW_INFO = 0x8a, IOMMUFD_CMD_HWPT_SET_DIRTY_TRACKING = 0x8b, IOMMUFD_CMD_HWPT_GET_DIRTY_BITMAP = 0x8c, IOMMUFD_CMD_HWPT_INVALIDATE = 0x8d, IOMMUFD_CMD_FAULT_QUEUE_ALLOC = 0x8e, }; /** * struct iommu_destroy - ioctl(IOMMU_DESTROY) * @size: sizeof(struct iommu_destroy) * @id: iommufd object ID to destroy. Can be any destroyable object type. * * Destroy any object held within iommufd. */ struct iommu_destroy { __u32 size; __u32 id; }; #define IOMMU_DESTROY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DESTROY) /** * struct iommu_ioas_alloc - ioctl(IOMMU_IOAS_ALLOC) * @size: sizeof(struct iommu_ioas_alloc) * @flags: Must be 0 * @out_ioas_id: Output IOAS ID for the allocated object * * Allocate an IO Address Space (IOAS) which holds an IO Virtual Address (IOVA) * to memory mapping. */ struct iommu_ioas_alloc { __u32 size; __u32 flags; __u32 out_ioas_id; }; #define IOMMU_IOAS_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOC) /** * struct iommu_iova_range - ioctl(IOMMU_IOVA_RANGE) * @start: First IOVA * @last: Inclusive last IOVA * * An interval in IOVA space. */ struct iommu_iova_range { __aligned_u64 start; __aligned_u64 last; }; /** * struct iommu_ioas_iova_ranges - ioctl(IOMMU_IOAS_IOVA_RANGES) * @size: sizeof(struct iommu_ioas_iova_ranges) * @ioas_id: IOAS ID to read ranges from * @num_iovas: Input/Output total number of ranges in the IOAS * @__reserved: Must be 0 * @allowed_iovas: Pointer to the output array of struct iommu_iova_range * @out_iova_alignment: Minimum alignment required for mapping IOVA * * Query an IOAS for ranges of allowed IOVAs. Mapping IOVA outside these ranges * is not allowed. num_iovas will be set to the total number of iovas and * the allowed_iovas[] will be filled in as space permits. * * The allowed ranges are dependent on the HW path the DMA operation takes, and * can change during the lifetime of the IOAS. A fresh empty IOAS will have a * full range, and each attached device will narrow the ranges based on that * device's HW restrictions. Detaching a device can widen the ranges. Userspace * should query ranges after every attach/detach to know what IOVAs are valid * for mapping. * * On input num_iovas is the length of the allowed_iovas array. On output it is * the total number of iovas filled in. The ioctl will return -EMSGSIZE and set * num_iovas to the required value if num_iovas is too small. In this case the * caller should allocate a larger output array and re-issue the ioctl. * * out_iova_alignment returns the minimum IOVA alignment that can be given * to IOMMU_IOAS_MAP/COPY. IOVA's must satisfy:: * * starting_iova % out_iova_alignment == 0 * (starting_iova + length) % out_iova_alignment == 0 * * out_iova_alignment can be 1 indicating any IOVA is allowed. It cannot * be higher than the system PAGE_SIZE. */ struct iommu_ioas_iova_ranges { __u32 size; __u32 ioas_id; __u32 num_iovas; __u32 __reserved; __aligned_u64 allowed_iovas; __aligned_u64 out_iova_alignment; }; #define IOMMU_IOAS_IOVA_RANGES _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_IOVA_RANGES) /** * struct iommu_ioas_allow_iovas - ioctl(IOMMU_IOAS_ALLOW_IOVAS) * @size: sizeof(struct iommu_ioas_allow_iovas) * @ioas_id: IOAS ID to allow IOVAs from * @num_iovas: Input/Output total number of ranges in the IOAS * @__reserved: Must be 0 * @allowed_iovas: Pointer to array of struct iommu_iova_range * * Ensure a range of IOVAs are always available for allocation. If this call * succeeds then IOMMU_IOAS_IOVA_RANGES will never return a list of IOVA ranges * that are narrower than the ranges provided here. This call will fail if * IOMMU_IOAS_IOVA_RANGES is currently narrower than the given ranges. * * When an IOAS is first created the IOVA_RANGES will be maximally sized, and as * devices are attached the IOVA will narrow based on the device restrictions. * When an allowed range is specified any narrowing will be refused, ie device * attachment can fail if the device requires limiting within the allowed range. * * Automatic IOVA allocation is also impacted by this call. MAP will only * allocate within the allowed IOVAs if they are present. * * This call replaces the entire allowed list with the given list. */ struct iommu_ioas_allow_iovas { __u32 size; __u32 ioas_id; __u32 num_iovas; __u32 __reserved; __aligned_u64 allowed_iovas; }; #define IOMMU_IOAS_ALLOW_IOVAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_ALLOW_IOVAS) /** * enum iommufd_ioas_map_flags - Flags for map and copy * @IOMMU_IOAS_MAP_FIXED_IOVA: If clear the kernel will compute an appropriate * IOVA to place the mapping at * @IOMMU_IOAS_MAP_WRITEABLE: DMA is allowed to write to this mapping * @IOMMU_IOAS_MAP_READABLE: DMA is allowed to read from this mapping */ enum iommufd_ioas_map_flags { IOMMU_IOAS_MAP_FIXED_IOVA = 1 << 0, IOMMU_IOAS_MAP_WRITEABLE = 1 << 1, IOMMU_IOAS_MAP_READABLE = 1 << 2, }; /** * struct iommu_ioas_map - ioctl(IOMMU_IOAS_MAP) * @size: sizeof(struct iommu_ioas_map) * @flags: Combination of enum iommufd_ioas_map_flags * @ioas_id: IOAS ID to change the mapping of * @__reserved: Must be 0 * @user_va: Userspace pointer to start mapping from * @length: Number of bytes to map * @iova: IOVA the mapping was placed at. If IOMMU_IOAS_MAP_FIXED_IOVA is set * then this must be provided as input. * * Set an IOVA mapping from a user pointer. If FIXED_IOVA is specified then the * mapping will be established at iova, otherwise a suitable location based on * the reserved and allowed lists will be automatically selected and returned in * iova. * * If IOMMU_IOAS_MAP_FIXED_IOVA is specified then the iova range must currently * be unused, existing IOVA cannot be replaced. */ struct iommu_ioas_map { __u32 size; __u32 flags; __u32 ioas_id; __u32 __reserved; __aligned_u64 user_va; __aligned_u64 length; __aligned_u64 iova; }; #define IOMMU_IOAS_MAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_MAP) /** * struct iommu_ioas_copy - ioctl(IOMMU_IOAS_COPY) * @size: sizeof(struct iommu_ioas_copy) * @flags: Combination of enum iommufd_ioas_map_flags * @dst_ioas_id: IOAS ID to change the mapping of * @src_ioas_id: IOAS ID to copy from * @length: Number of bytes to copy and map * @dst_iova: IOVA the mapping was placed at. If IOMMU_IOAS_MAP_FIXED_IOVA is * set then this must be provided as input. * @src_iova: IOVA to start the copy * * Copy an already existing mapping from src_ioas_id and establish it in * dst_ioas_id. The src iova/length must exactly match a range used with * IOMMU_IOAS_MAP. * * This may be used to efficiently clone a subset of an IOAS to another, or as a * kind of 'cache' to speed up mapping. Copy has an efficiency advantage over * establishing equivalent new mappings, as internal resources are shared, and * the kernel will pin the user memory only once. */ struct iommu_ioas_copy { __u32 size; __u32 flags; __u32 dst_ioas_id; __u32 src_ioas_id; __aligned_u64 length; __aligned_u64 dst_iova; __aligned_u64 src_iova; }; #define IOMMU_IOAS_COPY _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_COPY) /** * struct iommu_ioas_unmap - ioctl(IOMMU_IOAS_UNMAP) * @size: sizeof(struct iommu_ioas_unmap) * @ioas_id: IOAS ID to change the mapping of * @iova: IOVA to start the unmapping at * @length: Number of bytes to unmap, and return back the bytes unmapped * * Unmap an IOVA range. The iova/length must be a superset of a previously * mapped range used with IOMMU_IOAS_MAP or IOMMU_IOAS_COPY. Splitting or * truncating ranges is not allowed. The values 0 to U64_MAX will unmap * everything. */ struct iommu_ioas_unmap { __u32 size; __u32 ioas_id; __aligned_u64 iova; __aligned_u64 length; }; #define IOMMU_IOAS_UNMAP _IO(IOMMUFD_TYPE, IOMMUFD_CMD_IOAS_UNMAP) /** * enum iommufd_option - ioctl(IOMMU_OPTION_RLIMIT_MODE) and * ioctl(IOMMU_OPTION_HUGE_PAGES) * @IOMMU_OPTION_RLIMIT_MODE: * Change how RLIMIT_MEMLOCK accounting works. The caller must have privilege * to invoke this. Value 0 (default) is user based accouting, 1 uses process * based accounting. Global option, object_id must be 0 * @IOMMU_OPTION_HUGE_PAGES: * Value 1 (default) allows contiguous pages to be combined when generating * iommu mappings. Value 0 disables combining, everything is mapped to * PAGE_SIZE. This can be useful for benchmarking. This is a per-IOAS * option, the object_id must be the IOAS ID. */ enum iommufd_option { IOMMU_OPTION_RLIMIT_MODE = 0, IOMMU_OPTION_HUGE_PAGES = 1, }; /** * enum iommufd_option_ops - ioctl(IOMMU_OPTION_OP_SET) and * ioctl(IOMMU_OPTION_OP_GET) * @IOMMU_OPTION_OP_SET: Set the option's value * @IOMMU_OPTION_OP_GET: Get the option's value */ enum iommufd_option_ops { IOMMU_OPTION_OP_SET = 0, IOMMU_OPTION_OP_GET = 1, }; /** * struct iommu_option - iommu option multiplexer * @size: sizeof(struct iommu_option) * @option_id: One of enum iommufd_option * @op: One of enum iommufd_option_ops * @__reserved: Must be 0 * @object_id: ID of the object if required * @val64: Option value to set or value returned on get * * Change a simple option value. This multiplexor allows controlling options * on objects. IOMMU_OPTION_OP_SET will load an option and IOMMU_OPTION_OP_GET * will return the current value. */ struct iommu_option { __u32 size; __u32 option_id; __u16 op; __u16 __reserved; __u32 object_id; __aligned_u64 val64; }; #define IOMMU_OPTION _IO(IOMMUFD_TYPE, IOMMUFD_CMD_OPTION) /** * enum iommufd_vfio_ioas_op - IOMMU_VFIO_IOAS_* ioctls * @IOMMU_VFIO_IOAS_GET: Get the current compatibility IOAS * @IOMMU_VFIO_IOAS_SET: Change the current compatibility IOAS * @IOMMU_VFIO_IOAS_CLEAR: Disable VFIO compatibility */ enum iommufd_vfio_ioas_op { IOMMU_VFIO_IOAS_GET = 0, IOMMU_VFIO_IOAS_SET = 1, IOMMU_VFIO_IOAS_CLEAR = 2, }; /** * struct iommu_vfio_ioas - ioctl(IOMMU_VFIO_IOAS) * @size: sizeof(struct iommu_vfio_ioas) * @ioas_id: For IOMMU_VFIO_IOAS_SET the input IOAS ID to set * For IOMMU_VFIO_IOAS_GET will output the IOAS ID * @op: One of enum iommufd_vfio_ioas_op * @__reserved: Must be 0 * * The VFIO compatibility support uses a single ioas because VFIO APIs do not * support the ID field. Set or Get the IOAS that VFIO compatibility will use. * When VFIO_GROUP_SET_CONTAINER is used on an iommufd it will get the * compatibility ioas, either by taking what is already set, or auto creating * one. From then on VFIO will continue to use that ioas and is not effected by * this ioctl. SET or CLEAR does not destroy any auto-created IOAS. */ struct iommu_vfio_ioas { __u32 size; __u32 ioas_id; __u16 op; __u16 __reserved; }; #define IOMMU_VFIO_IOAS _IO(IOMMUFD_TYPE, IOMMUFD_CMD_VFIO_IOAS) /** * enum iommufd_hwpt_alloc_flags - Flags for HWPT allocation * @IOMMU_HWPT_ALLOC_NEST_PARENT: If set, allocate a HWPT that can serve as * the parent HWPT in a nesting configuration. * @IOMMU_HWPT_ALLOC_DIRTY_TRACKING: Dirty tracking support for device IOMMU is * enforced on device attachment * @IOMMU_HWPT_FAULT_ID_VALID: The fault_id field of hwpt allocation data is * valid. */ enum iommufd_hwpt_alloc_flags { IOMMU_HWPT_ALLOC_NEST_PARENT = 1 << 0, IOMMU_HWPT_ALLOC_DIRTY_TRACKING = 1 << 1, IOMMU_HWPT_FAULT_ID_VALID = 1 << 2, }; /** * enum iommu_hwpt_vtd_s1_flags - Intel VT-d stage-1 page table * entry attributes * @IOMMU_VTD_S1_SRE: Supervisor request * @IOMMU_VTD_S1_EAFE: Extended access enable * @IOMMU_VTD_S1_WPE: Write protect enable */ enum iommu_hwpt_vtd_s1_flags { IOMMU_VTD_S1_SRE = 1 << 0, IOMMU_VTD_S1_EAFE = 1 << 1, IOMMU_VTD_S1_WPE = 1 << 2, }; /** * struct iommu_hwpt_vtd_s1 - Intel VT-d stage-1 page table * info (IOMMU_HWPT_DATA_VTD_S1) * @flags: Combination of enum iommu_hwpt_vtd_s1_flags * @pgtbl_addr: The base address of the stage-1 page table. * @addr_width: The address width of the stage-1 page table * @__reserved: Must be 0 */ struct iommu_hwpt_vtd_s1 { __aligned_u64 flags; __aligned_u64 pgtbl_addr; __u32 addr_width; __u32 __reserved; }; /** * enum iommu_hwpt_data_type - IOMMU HWPT Data Type * @IOMMU_HWPT_DATA_NONE: no data * @IOMMU_HWPT_DATA_VTD_S1: Intel VT-d stage-1 page table */ enum iommu_hwpt_data_type { IOMMU_HWPT_DATA_NONE = 0, IOMMU_HWPT_DATA_VTD_S1 = 1, }; /** * struct iommu_hwpt_alloc - ioctl(IOMMU_HWPT_ALLOC) * @size: sizeof(struct iommu_hwpt_alloc) * @flags: Combination of enum iommufd_hwpt_alloc_flags * @dev_id: The device to allocate this HWPT for * @pt_id: The IOAS or HWPT to connect this HWPT to * @out_hwpt_id: The ID of the new HWPT * @__reserved: Must be 0 * @data_type: One of enum iommu_hwpt_data_type * @data_len: Length of the type specific data * @data_uptr: User pointer to the type specific data * @fault_id: The ID of IOMMUFD_FAULT object. Valid only if flags field of * IOMMU_HWPT_FAULT_ID_VALID is set. * @__reserved2: Padding to 64-bit alignment. Must be 0. * * Explicitly allocate a hardware page table object. This is the same object * type that is returned by iommufd_device_attach() and represents the * underlying iommu driver's iommu_domain kernel object. * * A kernel-managed HWPT will be created with the mappings from the given * IOAS via the @pt_id. The @data_type for this allocation must be set to * IOMMU_HWPT_DATA_NONE. The HWPT can be allocated as a parent HWPT for a * nesting configuration by passing IOMMU_HWPT_ALLOC_NEST_PARENT via @flags. * * A user-managed nested HWPT will be created from a given parent HWPT via * @pt_id, in which the parent HWPT must be allocated previously via the * same ioctl from a given IOAS (@pt_id). In this case, the @data_type * must be set to a pre-defined type corresponding to an I/O page table * type supported by the underlying IOMMU hardware. * * If the @data_type is set to IOMMU_HWPT_DATA_NONE, @data_len and * @data_uptr should be zero. Otherwise, both @data_len and @data_uptr * must be given. */ struct iommu_hwpt_alloc { __u32 size; __u32 flags; __u32 dev_id; __u32 pt_id; __u32 out_hwpt_id; __u32 __reserved; __u32 data_type; __u32 data_len; __aligned_u64 data_uptr; __u32 fault_id; __u32 __reserved2; }; #define IOMMU_HWPT_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_ALLOC) /** * enum iommu_hw_info_vtd_flags - Flags for VT-d hw_info * @IOMMU_HW_INFO_VTD_ERRATA_772415_SPR17: If set, disallow read-only mappings * on a nested_parent domain. * https://www.intel.com/content/www/us/en/content-details/772415/content-details.html */ enum iommu_hw_info_vtd_flags { IOMMU_HW_INFO_VTD_ERRATA_772415_SPR17 = 1 << 0, }; /** * struct iommu_hw_info_vtd - Intel VT-d hardware information * * @flags: Combination of enum iommu_hw_info_vtd_flags * @__reserved: Must be 0 * * @cap_reg: Value of Intel VT-d capability register defined in VT-d spec * section 11.4.2 Capability Register. * @ecap_reg: Value of Intel VT-d capability register defined in VT-d spec * section 11.4.3 Extended Capability Register. * * User needs to understand the Intel VT-d specification to decode the * register value. */ struct iommu_hw_info_vtd { __u32 flags; __u32 __reserved; __aligned_u64 cap_reg; __aligned_u64 ecap_reg; }; /** * enum iommu_hw_info_type - IOMMU Hardware Info Types * @IOMMU_HW_INFO_TYPE_NONE: Used by the drivers that do not report hardware * info * @IOMMU_HW_INFO_TYPE_INTEL_VTD: Intel VT-d iommu info type */ enum iommu_hw_info_type { IOMMU_HW_INFO_TYPE_NONE = 0, IOMMU_HW_INFO_TYPE_INTEL_VTD = 1, }; /** * enum iommufd_hw_capabilities * @IOMMU_HW_CAP_DIRTY_TRACKING: IOMMU hardware support for dirty tracking * If available, it means the following APIs * are supported: * * IOMMU_HWPT_GET_DIRTY_BITMAP * IOMMU_HWPT_SET_DIRTY_TRACKING * */ enum iommufd_hw_capabilities { IOMMU_HW_CAP_DIRTY_TRACKING = 1 << 0, }; /** * struct iommu_hw_info - ioctl(IOMMU_GET_HW_INFO) * @size: sizeof(struct iommu_hw_info) * @flags: Must be 0 * @dev_id: The device bound to the iommufd * @data_len: Input the length of a user buffer in bytes. Output the length of * data that kernel supports * @data_uptr: User pointer to a user-space buffer used by the kernel to fill * the iommu type specific hardware information data * @out_data_type: Output the iommu hardware info type as defined in the enum * iommu_hw_info_type. * @out_capabilities: Output the generic iommu capability info type as defined * in the enum iommu_hw_capabilities. * @__reserved: Must be 0 * * Query an iommu type specific hardware information data from an iommu behind * a given device that has been bound to iommufd. This hardware info data will * be used to sync capabilities between the virtual iommu and the physical * iommu, e.g. a nested translation setup needs to check the hardware info, so * a guest stage-1 page table can be compatible with the physical iommu. * * To capture an iommu type specific hardware information data, @data_uptr and * its length @data_len must be provided. Trailing bytes will be zeroed if the * user buffer is larger than the data that kernel has. Otherwise, kernel only * fills the buffer using the given length in @data_len. If the ioctl succeeds, * @data_len will be updated to the length that kernel actually supports, * @out_data_type will be filled to decode the data filled in the buffer * pointed by @data_uptr. Input @data_len == zero is allowed. */ struct iommu_hw_info { __u32 size; __u32 flags; __u32 dev_id; __u32 data_len; __aligned_u64 data_uptr; __u32 out_data_type; __u32 __reserved; __aligned_u64 out_capabilities; }; #define IOMMU_GET_HW_INFO _IO(IOMMUFD_TYPE, IOMMUFD_CMD_GET_HW_INFO) /* * enum iommufd_hwpt_set_dirty_tracking_flags - Flags for steering dirty * tracking * @IOMMU_HWPT_DIRTY_TRACKING_ENABLE: Enable dirty tracking */ enum iommufd_hwpt_set_dirty_tracking_flags { IOMMU_HWPT_DIRTY_TRACKING_ENABLE = 1, }; /** * struct iommu_hwpt_set_dirty_tracking - ioctl(IOMMU_HWPT_SET_DIRTY_TRACKING) * @size: sizeof(struct iommu_hwpt_set_dirty_tracking) * @flags: Combination of enum iommufd_hwpt_set_dirty_tracking_flags * @hwpt_id: HW pagetable ID that represents the IOMMU domain * @__reserved: Must be 0 * * Toggle dirty tracking on an HW pagetable. */ struct iommu_hwpt_set_dirty_tracking { __u32 size; __u32 flags; __u32 hwpt_id; __u32 __reserved; }; #define IOMMU_HWPT_SET_DIRTY_TRACKING _IO(IOMMUFD_TYPE, \ IOMMUFD_CMD_HWPT_SET_DIRTY_TRACKING) /** * enum iommufd_hwpt_get_dirty_bitmap_flags - Flags for getting dirty bits * @IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR: Just read the PTEs without clearing * any dirty bits metadata. This flag * can be passed in the expectation * where the next operation is an unmap * of the same IOVA range. * */ enum iommufd_hwpt_get_dirty_bitmap_flags { IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR = 1, }; /** * struct iommu_hwpt_get_dirty_bitmap - ioctl(IOMMU_HWPT_GET_DIRTY_BITMAP) * @size: sizeof(struct iommu_hwpt_get_dirty_bitmap) * @hwpt_id: HW pagetable ID that represents the IOMMU domain * @flags: Combination of enum iommufd_hwpt_get_dirty_bitmap_flags * @__reserved: Must be 0 * @iova: base IOVA of the bitmap first bit * @length: IOVA range size * @page_size: page size granularity of each bit in the bitmap * @data: bitmap where to set the dirty bits. The bitmap bits each * represent a page_size which you deviate from an arbitrary iova. * * Checking a given IOVA is dirty: * * data[(iova / page_size) / 64] & (1ULL << ((iova / page_size) % 64)) * * Walk the IOMMU pagetables for a given IOVA range to return a bitmap * with the dirty IOVAs. In doing so it will also by default clear any * dirty bit metadata set in the IOPTE. */ struct iommu_hwpt_get_dirty_bitmap { __u32 size; __u32 hwpt_id; __u32 flags; __u32 __reserved; __aligned_u64 iova; __aligned_u64 length; __aligned_u64 page_size; __aligned_u64 data; }; #define IOMMU_HWPT_GET_DIRTY_BITMAP _IO(IOMMUFD_TYPE, \ IOMMUFD_CMD_HWPT_GET_DIRTY_BITMAP) /** * enum iommu_hwpt_invalidate_data_type - IOMMU HWPT Cache Invalidation * Data Type * @IOMMU_HWPT_INVALIDATE_DATA_VTD_S1: Invalidation data for VTD_S1 */ enum iommu_hwpt_invalidate_data_type { IOMMU_HWPT_INVALIDATE_DATA_VTD_S1 = 0, }; /** * enum iommu_hwpt_vtd_s1_invalidate_flags - Flags for Intel VT-d * stage-1 cache invalidation * @IOMMU_VTD_INV_FLAGS_LEAF: Indicates whether the invalidation applies * to all-levels page structure cache or just * the leaf PTE cache. */ enum iommu_hwpt_vtd_s1_invalidate_flags { IOMMU_VTD_INV_FLAGS_LEAF = 1 << 0, }; /** * struct iommu_hwpt_vtd_s1_invalidate - Intel VT-d cache invalidation * (IOMMU_HWPT_INVALIDATE_DATA_VTD_S1) * @addr: The start address of the range to be invalidated. It needs to * be 4KB aligned. * @npages: Number of contiguous 4K pages to be invalidated. * @flags: Combination of enum iommu_hwpt_vtd_s1_invalidate_flags * @__reserved: Must be 0 * * The Intel VT-d specific invalidation data for user-managed stage-1 cache * invalidation in nested translation. Userspace uses this structure to * tell the impacted cache scope after modifying the stage-1 page table. * * Invalidating all the caches related to the page table by setting @addr * to be 0 and @npages to be U64_MAX. * * The device TLB will be invalidated automatically if ATS is enabled. */ struct iommu_hwpt_vtd_s1_invalidate { __aligned_u64 addr; __aligned_u64 npages; __u32 flags; __u32 __reserved; }; /** * struct iommu_hwpt_invalidate - ioctl(IOMMU_HWPT_INVALIDATE) * @size: sizeof(struct iommu_hwpt_invalidate) * @hwpt_id: ID of a nested HWPT for cache invalidation * @data_uptr: User pointer to an array of driver-specific cache invalidation * data. * @data_type: One of enum iommu_hwpt_invalidate_data_type, defining the data * type of all the entries in the invalidation request array. It * should be a type supported by the hwpt pointed by @hwpt_id. * @entry_len: Length (in bytes) of a request entry in the request array * @entry_num: Input the number of cache invalidation requests in the array. * Output the number of requests successfully handled by kernel. * @__reserved: Must be 0. * * Invalidate the iommu cache for user-managed page table. Modifications on a * user-managed page table should be followed by this operation to sync cache. * Each ioctl can support one or more cache invalidation requests in the array * that has a total size of @entry_len * @entry_num. * * An empty invalidation request array by setting @entry_num==0 is allowed, and * @entry_len and @data_uptr would be ignored in this case. This can be used to * check if the given @data_type is supported or not by kernel. */ struct iommu_hwpt_invalidate { __u32 size; __u32 hwpt_id; __aligned_u64 data_uptr; __u32 data_type; __u32 entry_len; __u32 entry_num; __u32 __reserved; }; #define IOMMU_HWPT_INVALIDATE _IO(IOMMUFD_TYPE, IOMMUFD_CMD_HWPT_INVALIDATE) /** * enum iommu_hwpt_pgfault_flags - flags for struct iommu_hwpt_pgfault * @IOMMU_PGFAULT_FLAGS_PASID_VALID: The pasid field of the fault data is * valid. * @IOMMU_PGFAULT_FLAGS_LAST_PAGE: It's the last fault of a fault group. */ enum iommu_hwpt_pgfault_flags { IOMMU_PGFAULT_FLAGS_PASID_VALID = (1 << 0), IOMMU_PGFAULT_FLAGS_LAST_PAGE = (1 << 1), }; /** * enum iommu_hwpt_pgfault_perm - perm bits for struct iommu_hwpt_pgfault * @IOMMU_PGFAULT_PERM_READ: request for read permission * @IOMMU_PGFAULT_PERM_WRITE: request for write permission * @IOMMU_PGFAULT_PERM_EXEC: (PCIE 10.4.1) request with a PASID that has the * Execute Requested bit set in PASID TLP Prefix. * @IOMMU_PGFAULT_PERM_PRIV: (PCIE 10.4.1) request with a PASID that has the * Privileged Mode Requested bit set in PASID TLP * Prefix. */ enum iommu_hwpt_pgfault_perm { IOMMU_PGFAULT_PERM_READ = (1 << 0), IOMMU_PGFAULT_PERM_WRITE = (1 << 1), IOMMU_PGFAULT_PERM_EXEC = (1 << 2), IOMMU_PGFAULT_PERM_PRIV = (1 << 3), }; /** * struct iommu_hwpt_pgfault - iommu page fault data * @flags: Combination of enum iommu_hwpt_pgfault_flags * @dev_id: id of the originated device * @pasid: Process Address Space ID * @grpid: Page Request Group Index * @perm: Combination of enum iommu_hwpt_pgfault_perm * @__reserved: Must be 0. * @addr: Fault address * @length: a hint of how much data the requestor is expecting to fetch. For * example, if the PRI initiator knows it is going to do a 10MB * transfer, it could fill in 10MB and the OS could pre-fault in * 10MB of IOVA. It's default to 0 if there's no such hint. * @cookie: kernel-managed cookie identifying a group of fault messages. The * cookie number encoded in the last page fault of the group should * be echoed back in the response message. */ struct iommu_hwpt_pgfault { __u32 flags; __u32 dev_id; __u32 pasid; __u32 grpid; __u32 perm; __u32 __reserved; __aligned_u64 addr; __u32 length; __u32 cookie; }; /** * enum iommufd_page_response_code - Return status of fault handlers * @IOMMUFD_PAGE_RESP_SUCCESS: Fault has been handled and the page tables * populated, retry the access. This is the * "Success" defined in PCI 10.4.2.1. * @IOMMUFD_PAGE_RESP_INVALID: Could not handle this fault, don't retry the * access. This is the "Invalid Request" in PCI * 10.4.2.1. */ enum iommufd_page_response_code { IOMMUFD_PAGE_RESP_SUCCESS = 0, IOMMUFD_PAGE_RESP_INVALID = 1, }; /** * struct iommu_hwpt_page_response - IOMMU page fault response * @cookie: The kernel-managed cookie reported in the fault message. * @code: One of response code in enum iommufd_page_response_code. */ struct iommu_hwpt_page_response { __u32 cookie; __u32 code; }; /** * struct iommu_fault_alloc - ioctl(IOMMU_FAULT_QUEUE_ALLOC) * @size: sizeof(struct iommu_fault_alloc) * @flags: Must be 0 * @out_fault_id: The ID of the new FAULT * @out_fault_fd: The fd of the new FAULT * * Explicitly allocate a fault handling object. */ struct iommu_fault_alloc { __u32 size; __u32 flags; __u32 out_fault_id; __u32 out_fault_fd; }; #define IOMMU_FAULT_QUEUE_ALLOC _IO(IOMMUFD_TYPE, IOMMUFD_CMD_FAULT_QUEUE_ALLOC) #endif
Save