/
usr
/
include
/
linux
/
/usr/include/linux
mkdir
upload
Name
Size
Mode
Actions
android/
-
0755
rm
byteorder/
-
0755
rm
caif/
-
0755
rm
can/
-
0755
rm
cifs/
-
0755
rm
dvb/
-
0755
rm
genwqe/
-
0755
rm
hdlc/
-
0755
rm
hsi/
-
0755
rm
iio/
-
0755
rm
isdn/
-
0755
rm
mmc/
-
0755
rm
netfilter/
-
0755
rm
netfilter_arp/
-
0755
rm
netfilter_bridge/
-
0755
rm
netfilter_ipv4/
-
0755
rm
netfilter_ipv6/
-
0755
rm
nfsd/
-
0755
rm
raid/
-
0755
rm
sched/
-
0755
rm
spi/
-
0755
rm
sunrpc/
-
0755
rm
tc_act/
-
0755
rm
tc_ematch/
-
0755
rm
usb/
-
0755
rm
wimax/
-
0755
rm
a.out.h
6892
0644
edit
dl
rm
acct.h
3733
0644
edit
dl
rm
adb.h
1140
0644
edit
dl
rm
adfs_fs.h
993
0644
edit
dl
rm
affs_hardblocks.h
1578
0644
edit
dl
rm
agpgart.h
3940
0644
edit
dl
rm
aio_abi.h
3398
0644
edit
dl
rm
am437x-vpfe.h
3681
0644
edit
dl
rm
apm_bios.h
3683
0644
edit
dl
rm
arcfb.h
213
0644
edit
dl
rm
arm_sdei.h
2751
0644
edit
dl
rm
aspeed-lpc-ctrl.h
1780
0644
edit
dl
rm
aspeed-p2a-ctrl.h
1906
0644
edit
dl
rm
atalk.h
1023
0644
edit
dl
rm
atm.h
7888
0644
edit
dl
rm
atmapi.h
952
0644
edit
dl
rm
atmarp.h
1296
0644
edit
dl
rm
atmbr2684.h
3271
0644
edit
dl
rm
atmclip.h
576
0644
edit
dl
rm
atmdev.h
7677
0644
edit
dl
rm
atmioc.h
1646
0644
edit
dl
rm
atmlec.h
2381
0644
edit
dl
rm
atmmpc.h
4226
0644
edit
dl
rm
atmppp.h
639
0644
edit
dl
rm
atmsap.h
4970
0644
edit
dl
rm
atmsvc.h
1853
0644
edit
dl
rm
atm_eni.h
648
0644
edit
dl
rm
atm_he.h
406
0644
edit
dl
rm
atm_idt77105.h
955
0644
edit
dl
rm
atm_nicstar.h
1278
0644
edit
dl
rm
atm_tcp.h
1622
0644
edit
dl
rm
atm_zatm.h
1540
0644
edit
dl
rm
audit.h
20760
0644
edit
dl
rm
aufs_type.h
11159
0644
edit
dl
rm
auto_dev-ioctl.h
4986
0644
edit
dl
rm
auto_fs.h
6428
0644
edit
dl
rm
auto_fs4.h
451
0644
edit
dl
rm
auxvec.h
1496
0644
edit
dl
rm
ax25.h
2824
0644
edit
dl
rm
b1lli.h
1717
0644
edit
dl
rm
batadv_packet.h
20373
0644
edit
dl
rm
batman_adv.h
16306
0644
edit
dl
rm
baycom.h
883
0644
edit
dl
rm
bcache.h
8425
0644
edit
dl
rm
bcm933xx_hcs.h
419
0644
edit
dl
rm
bfs_fs.h
1905
0644
edit
dl
rm
binfmts.h
628
0644
edit
dl
rm
blkpg.h
1634
0644
edit
dl
rm
blktrace_api.h
4701
0644
edit
dl
rm
blkzoned.h
5393
0644
edit
dl
rm
bpf.h
138502
0644
edit
dl
rm
bpfilter.h
465
0644
edit
dl
rm
bpf_common.h
1367
0644
edit
dl
rm
bpf_perf_event.h
529
0644
edit
dl
rm
bpqether.h
981
0644
edit
dl
rm
bsg.h
2494
0644
edit
dl
rm
bt-bmc.h
572
0644
edit
dl
rm
btf.h
4624
0644
edit
dl
rm
btrfs.h
29309
0644
edit
dl
rm
btrfs_tree.h
25507
0644
edit
dl
rm
can.h
8213
0644
edit
dl
rm
capability.h
11781
0644
edit
dl
rm
capi.h
3124
0644
edit
dl
rm
cciss_defs.h
3281
0644
edit
dl
rm
cciss_ioctl.h
2761
0644
edit
dl
rm
cdrom.h
28859
0644
edit
dl
rm
cec-funcs.h
53625
0644
edit
dl
rm
cec.h
36468
0644
edit
dl
rm
cgroupstats.h
2219
0644
edit
dl
rm
chio.h
5344
0644
edit
dl
rm
cm4000_cs.h
1806
0644
edit
dl
rm
cn_proc.h
3456
0644
edit
dl
rm
coda.h
18216
0644
edit
dl
rm
coff.h
12549
0644
edit
dl
rm
connector.h
2253
0644
edit
dl
rm
const.h
991
0644
edit
dl
rm
coresight-stm.h
706
0644
edit
dl
rm
cramfs_fs.h
3555
0644
edit
dl
rm
cryptouser.h
5321
0644
edit
dl
rm
cuda.h
905
0644
edit
dl
rm
cyclades.h
17108
0644
edit
dl
rm
cycx_cfm.h
2990
0644
edit
dl
rm
dcbnl.h
25291
0644
edit
dl
rm
dccp.h
6436
0644
edit
dl
rm
devlink.h
14860
0644
edit
dl
rm
dlm.h
2553
0644
edit
dl
rm
dlmconstants.h
5080
0644
edit
dl
rm
dlm_device.h
2543
0644
edit
dl
rm
dlm_netlink.h
1159
0644
edit
dl
rm
dlm_plock.h
894
0644
edit
dl
rm
dm-ioctl.h
10988
0644
edit
dl
rm
dm-log-userspace.h
15191
0644
edit
dl
rm
dma-buf.h
1704
0644
edit
dl
rm
dns_resolver.h
3949
0644
edit
dl
rm
dqblk_xfs.h
8999
0644
edit
dl
rm
edd.h
5604
0644
edit
dl
rm
efs_fs_sb.h
2227
0644
edit
dl
rm
elf-em.h
2586
0644
edit
dl
rm
elf-fdpic.h
1124
0644
edit
dl
rm
elf.h
13642
0644
edit
dl
rm
elfcore.h
2995
0644
edit
dl
rm
errno.h
23
0644
edit
dl
rm
errqueue.h
1572
0644
edit
dl
rm
erspan.h
1059
0644
edit
dl
rm
ethtool.h
74784
0644
edit
dl
rm
eventpoll.h
2743
0644
edit
dl
rm
fadvise.h
842
0644
edit
dl
rm
falloc.h
3584
0644
edit
dl
rm
fanotify.h
5369
0644
edit
dl
rm
fb.h
16412
0644
edit
dl
rm
fcntl.h
3438
0644
edit
dl
rm
fd.h
11672
0644
edit
dl
rm
fdreg.h
5420
0644
edit
dl
rm
fib_rules.h
2036
0644
edit
dl
rm
fiemap.h
2775
0644
edit
dl
rm
filter.h
2216
0644
edit
dl
rm
firewire-cdev.h
44242
0644
edit
dl
rm
firewire-constants.h
3231
0644
edit
dl
rm
fou.h
894
0644
edit
dl
rm
fpga-dfl.h
6103
0644
edit
dl
rm
fs.h
12205
0644
edit
dl
rm
fscrypt.h
6120
0644
edit
dl
rm
fsi.h
2255
0644
edit
dl
rm
fsl_hypervisor.h
7301
0644
edit
dl
rm
fsmap.h
4393
0644
edit
dl
rm
fsverity.h
931
0644
edit
dl
rm
fuse.h
20407
0644
edit
dl
rm
futex.h
4993
0644
edit
dl
rm
gameport.h
897
0644
edit
dl
rm
genetlink.h
1923
0644
edit
dl
rm
gen_stats.h
1599
0644
edit
dl
rm
gfs2_ondisk.h
14651
0644
edit
dl
rm
gigaset_dev.h
1442
0644
edit
dl
rm
gpio.h
5753
0644
edit
dl
rm
gsmmux.h
1144
0644
edit
dl
rm
gtp.h
681
0644
edit
dl
rm
hash_info.h
971
0644
edit
dl
rm
hdlc.h
637
0644
edit
dl
rm
hdlcdrv.h
2908
0644
edit
dl
rm
hdreg.h
22703
0644
edit
dl
rm
hid.h
1901
0644
edit
dl
rm
hiddev.h
6345
0644
edit
dl
rm
hidraw.h
1511
0644
edit
dl
rm
hpet.h
743
0644
edit
dl
rm
hsr_netlink.h
1081
0644
edit
dl
rm
hw_breakpoint.h
742
0644
edit
dl
rm
hyperv.h
10569
0644
edit
dl
rm
hysdn_if.h
1382
0644
edit
dl
rm
i2c-dev.h
2612
0644
edit
dl
rm
i2c.h
7132
0644
edit
dl
rm
i2o-dev.h
11555
0644
edit
dl
rm
i8k.h
1528
0644
edit
dl
rm
icmp.h
2975
0644
edit
dl
rm
icmpv6.h
4112
0644
edit
dl
rm
if.h
10813
0644
edit
dl
rm
ife.h
351
0644
edit
dl
rm
if_addr.h
1886
0644
edit
dl
rm
if_addrlabel.h
721
0644
edit
dl
rm
if_alg.h
1534
0644
edit
dl
rm
if_arcnet.h
3717
0644
edit
dl
rm
if_arp.h
6565
0644
edit
dl
rm
if_bonding.h
4839
0644
edit
dl
rm
if_bridge.h
7266
0644
edit
dl
rm
if_cablemodem.h
986
0644
edit
dl
rm
if_eql.h
1349
0644
edit
dl
rm
if_ether.h
8227
0644
edit
dl
rm
if_fc.h
1738
0644
edit
dl
rm
if_fddi.h
4372
0644
edit
dl
rm
if_frad.h
3019
0644
edit
dl
rm
if_hippi.h
4235
0644
edit
dl
rm
if_infiniband.h
1245
0644
edit
dl
rm
if_link.h
23675
0644
edit
dl
rm
if_ltalk.h
210
0644
edit
dl
rm
if_macsec.h
5832
0644
edit
dl
rm
if_packet.h
7955
0644
edit
dl
rm
if_phonet.h
424
0644
edit
dl
rm
if_plip.h
660
0644
edit
dl
rm
if_ppp.h
29
0644
edit
dl
rm
if_pppol2tp.h
3292
0644
edit
dl
rm
if_pppox.h
4879
0644
edit
dl
rm
if_slip.h
872
0644
edit
dl
rm
if_team.h
2600
0644
edit
dl
rm
if_tun.h
4098
0644
edit
dl
rm
if_tunnel.h
4835
0644
edit
dl
rm
if_vlan.h
1831
0644
edit
dl
rm
if_x25.h
881
0644
edit
dl
rm
if_xdp.h
2819
0644
edit
dl
rm
igmp.h
3064
0644
edit
dl
rm
ila.h
1246
0644
edit
dl
rm
in.h
10075
0644
edit
dl
rm
in6.h
7505
0644
edit
dl
rm
inet_diag.h
4540
0644
edit
dl
rm
inotify.h
3292
0644
edit
dl
rm
input-event-codes.h
25568
0644
edit
dl
rm
input.h
15985
0644
edit
dl
rm
in_route.h
936
0644
edit
dl
rm
ioctl.h
163
0644
edit
dl
rm
iommu.h
4578
0644
edit
dl
rm
io_uring.h
3478
0644
edit
dl
rm
ip.h
4728
0644
edit
dl
rm
ip6_tunnel.h
1953
0644
edit
dl
rm
ipc.h
2101
0644
edit
dl
rm
ipmi.h
15049
0644
edit
dl
rm
ipmi_bmc.h
488
0644
edit
dl
rm
ipmi_msgdefs.h
3350
0644
edit
dl
rm
ipsec.h
947
0644
edit
dl
rm
ipv6.h
3967
0644
edit
dl
rm
ipv6_route.h
1908
0644
edit
dl
rm
ipx.h
2347
0644
edit
dl
rm
ip_vs.h
14135
0644
edit
dl
rm
irqnr.h
104
0644
edit
dl
rm
iso_fs.h
6485
0644
edit
dl
rm
isst_if.h
5408
0644
edit
dl
rm
ivtv.h
3022
0644
edit
dl
rm
ivtvfb.h
1207
0644
edit
dl
rm
jffs2.h
6815
0644
edit
dl
rm
joystick.h
3434
0644
edit
dl
rm
kcm.h
822
0644
edit
dl
rm
kcmp.h
522
0644
edit
dl
rm
kcov.h
1099
0644
edit
dl
rm
kd.h
6283
0644
edit
dl
rm
kdev_t.h
383
0644
edit
dl
rm
kernel-page-flags.h
900
0644
edit
dl
rm
kernel.h
194
0644
edit
dl
rm
kernelcapi.h
1019
0644
edit
dl
rm
kexec.h
1873
0644
edit
dl
rm
keyboard.h
13459
0644
edit
dl
rm
keyctl.h
5837
0644
edit
dl
rm
kfd_ioctl.h
16263
0644
edit
dl
rm
kvm.h
47620
0644
edit
dl
rm
kvm_para.h
968
0644
edit
dl
rm
l2tp.h
5672
0644
edit
dl
rm
libc-compat.h
8289
0644
edit
dl
rm
lightnvm.h
5042
0644
edit
dl
rm
limits.h
937
0644
edit
dl
rm
lirc.h
8102
0644
edit
dl
rm
llc.h
3164
0644
edit
dl
rm
loop.h
2520
0644
edit
dl
rm
lp.h
4190
0644
edit
dl
rm
lwtunnel.h
1273
0644
edit
dl
rm
magic.h
3685
0644
edit
dl
rm
major.h
4713
0644
edit
dl
rm
map_to_7segment.h
7251
0644
edit
dl
rm
matroxfb.h
1464
0644
edit
dl
rm
max2175.h
1035
0644
edit
dl
rm
mdio.h
15645
0644
edit
dl
rm
media-bus-format.h
6822
0644
edit
dl
rm
media.h
12641
0644
edit
dl
rm
mei.h
1993
0644
edit
dl
rm
membarrier.h
7899
0644
edit
dl
rm
memfd.h
1324
0644
edit
dl
rm
mempolicy.h
2154
0644
edit
dl
rm
meye.h
2529
0644
edit
dl
rm
mic_common.h
6519
0644
edit
dl
rm
mic_ioctl.h
2252
0644
edit
dl
rm
mii.h
8281
0644
edit
dl
rm
minix_fs.h
2122
0644
edit
dl
rm
mman.h
1508
0644
edit
dl
rm
mmtimer.h
2117
0644
edit
dl
rm
module.h
255
0644
edit
dl
rm
mount.h
4546
0644
edit
dl
rm
mpls.h
2302
0644
edit
dl
rm
mpls_iptunnel.h
761
0644
edit
dl
rm
mqueue.h
2201
0644
edit
dl
rm
mroute.h
5881
0644
edit
dl
rm
mroute6.h
4930
0644
edit
dl
rm
msdos_fs.h
6731
0644
edit
dl
rm
msg.h
3374
0644
edit
dl
rm
mtio.h
8175
0644
edit
dl
rm
nbd-netlink.h
2378
0644
edit
dl
rm
nbd.h
3024
0644
edit
dl
rm
ncsi.h
4828
0644
edit
dl
rm
ndctl.h
6770
0644
edit
dl
rm
neighbour.h
4406
0644
edit
dl
rm
net.h
2085
0644
edit
dl
rm
netconf.h
614
0644
edit
dl
rm
netdevice.h
2253
0644
edit
dl
rm
netfilter.h
1674
0644
edit
dl
rm
netfilter_arp.h
445
0644
edit
dl
rm
netfilter_bridge.h
1168
0644
edit
dl
rm
netfilter_ipv4.h
1488
0644
edit
dl
rm
netfilter_ipv6.h
1383
0644
edit
dl
rm
netlink.h
7835
0644
edit
dl
rm
netlink_diag.h
1524
0644
edit
dl
rm
netrom.h
807
0644
edit
dl
rm
net_dropmon.h
2839
0644
edit
dl
rm
net_namespace.h
715
0644
edit
dl
rm
net_tstamp.h
4914
0644
edit
dl
rm
nexthop.h
1534
0644
edit
dl
rm
nfc.h
11236
0644
edit
dl
rm
nfs.h
4500
0644
edit
dl
rm
nfs2.h
1468
0644
edit
dl
rm
nfs3.h
2359
0644
edit
dl
rm
nfs4.h
6432
0644
edit
dl
rm
nfs4_mount.h
1932
0644
edit
dl
rm
nfsacl.h
668
0644
edit
dl
rm
nfs_fs.h
1608
0644
edit
dl
rm
nfs_idmap.h
2243
0644
edit
dl
rm
nfs_mount.h
2142
0644
edit
dl
rm
nilfs2_api.h
7589
0644
edit
dl
rm
nilfs2_ondisk.h
18085
0644
edit
dl
rm
nl80211.h
280715
0644
edit
dl
rm
nsfs.h
639
0644
edit
dl
rm
nubus.h
8191
0644
edit
dl
rm
nvme_ioctl.h
1661
0644
edit
dl
rm
nvram.h
532
0644
edit
dl
rm
n_r3964.h
2410
0644
edit
dl
rm
omap3isp.h
20853
0644
edit
dl
rm
omapfb.h
5918
0644
edit
dl
rm
oom.h
511
0644
edit
dl
rm
openvswitch.h
37676
0644
edit
dl
rm
packet_diag.h
1672
0644
edit
dl
rm
param.h
141
0644
edit
dl
rm
parport.h
3644
0644
edit
dl
rm
patchkey.h
892
0644
edit
dl
rm
pci.h
1380
0644
edit
dl
rm
pcitest.h
711
0644
edit
dl
rm
pci_regs.h
57229
0644
edit
dl
rm
perf_event.h
34357
0644
edit
dl
rm
personality.h
2097
0644
edit
dl
rm
pfkeyv2.h
10569
0644
edit
dl
rm
pg.h
2394
0644
edit
dl
rm
phantom.h
1654
0644
edit
dl
rm
phonet.h
4677
0644
edit
dl
rm
pktcdvd.h
2687
0644
edit
dl
rm
pkt_cls.h
15441
0644
edit
dl
rm
pkt_sched.h
27694
0644
edit
dl
rm
pmu.h
5444
0644
edit
dl
rm
poll.h
22
0644
edit
dl
rm
posix_acl.h
1254
0644
edit
dl
rm
posix_acl_xattr.h
1115
0644
edit
dl
rm
posix_types.h
1098
0644
edit
dl
rm
ppdev.h
3285
0644
edit
dl
rm
ppp-comp.h
2527
0644
edit
dl
rm
ppp-ioctl.h
5438
0644
edit
dl
rm
ppp_defs.h
5107
0644
edit
dl
rm
pps.h
4734
0644
edit
dl
rm
pr.h
1073
0644
edit
dl
rm
prctl.h
8073
0644
edit
dl
rm
psample.h
798
0644
edit
dl
rm
psci.h
4328
0644
edit
dl
rm
psp-sev.h
4036
0644
edit
dl
rm
ptp_clock.h
6731
0644
edit
dl
rm
ptrace.h
4235
0644
edit
dl
rm
qemu_fw_cfg.h
2469
0644
edit
dl
rm
qnx4_fs.h
2328
0644
edit
dl
rm
qnxtypes.h
624
0644
edit
dl
rm
qrtr.h
893
0644
edit
dl
rm
quota.h
6291
0644
edit
dl
rm
radeonfb.h
360
0644
edit
dl
rm
random.h
1415
0644
edit
dl
rm
raw.h
365
0644
edit
dl
rm
rds.h
11081
0644
edit
dl
rm
reboot.h
1343
0644
edit
dl
rm
reiserfs_fs.h
775
0644
edit
dl
rm
reiserfs_xattr.h
533
0644
edit
dl
rm
resource.h
2373
0644
edit
dl
rm
rfkill.h
3682
0644
edit
dl
rm
rio_cm_cdev.h
3248
0644
edit
dl
rm
rio_mport_cdev.h
9330
0644
edit
dl
rm
romfs_fs.h
1238
0644
edit
dl
rm
rose.h
2232
0644
edit
dl
rm
route.h
2332
0644
edit
dl
rm
rpmsg.h
544
0644
edit
dl
rm
rseq.h
4904
0644
edit
dl
rm
rtc.h
4009
0644
edit
dl
rm
rtnetlink.h
19055
0644
edit
dl
rm
rxrpc.h
4897
0644
edit
dl
rm
scc.h
4597
0644
edit
dl
rm
sched.h
4647
0644
edit
dl
rm
scif_ioctl.h
6382
0644
edit
dl
rm
screen_info.h
2479
0644
edit
dl
rm
sctp.h
34783
0644
edit
dl
rm
sdla.h
2839
0644
edit
dl
rm
seccomp.h
4938
0644
edit
dl
rm
securebits.h
2704
0644
edit
dl
rm
sed-opal.h
3297
0644
edit
dl
rm
seg6.h
1170
0644
edit
dl
rm
seg6_genl.h
589
0644
edit
dl
rm
seg6_hmac.h
423
0644
edit
dl
rm
seg6_iptunnel.h
927
0644
edit
dl
rm
seg6_local.h
2060
0644
edit
dl
rm
selinux_netlink.h
1195
0644
edit
dl
rm
sem.h
3043
0644
edit
dl
rm
serial.h
3866
0644
edit
dl
rm
serial_core.h
6436
0644
edit
dl
rm
serial_reg.h
15552
0644
edit
dl
rm
serio.h
2099
0644
edit
dl
rm
shm.h
3785
0644
edit
dl
rm
signal.h
388
0644
edit
dl
rm
signalfd.h
1233
0644
edit
dl
rm
smc.h
780
0644
edit
dl
rm
smc_diag.h
2835
0644
edit
dl
rm
smiapp.h
1058
0644
edit
dl
rm
snmp.h
13014
0644
edit
dl
rm
socket.h
819
0644
edit
dl
rm
sockios.h
6846
0644
edit
dl
rm
sock_diag.h
727
0644
edit
dl
rm
sonet.h
2290
0644
edit
dl
rm
sonypi.h
5309
0644
edit
dl
rm
sound.h
1237
0644
edit
dl
rm
soundcard.h
46038
0644
edit
dl
rm
stat.h
6100
0644
edit
dl
rm
stddef.h
612
0644
edit
dl
rm
stm.h
1275
0644
edit
dl
rm
string.h
238
0644
edit
dl
rm
suspend_ioctls.h
1431
0644
edit
dl
rm
swab.h
6946
0644
edit
dl
rm
switchtec_ioctl.h
4768
0644
edit
dl
rm
synclink.h
8985
0644
edit
dl
rm
sync_file.h
2884
0644
edit
dl
rm
sysctl.h
25887
0644
edit
dl
rm
sysinfo.h
1049
0644
edit
dl
rm
target_core_user.h
3899
0644
edit
dl
rm
taskstats.h
7152
0644
edit
dl
rm
tcp.h
11204
0644
edit
dl
rm
tcp_metrics.h
1549
0644
edit
dl
rm
tee.h
12581
0644
edit
dl
rm
termios.h
506
0644
edit
dl
rm
thermal.h
924
0644
edit
dl
rm
time.h
1748
0644
edit
dl
rm
timerfd.h
936
0644
edit
dl
rm
times.h
278
0644
edit
dl
rm
timex.h
7817
0644
edit
dl
rm
time_types.h
996
0644
edit
dl
rm
tiocl.h
1729
0644
edit
dl
rm
tipc.h
8730
0644
edit
dl
rm
tipc_config.h
14848
0644
edit
dl
rm
tipc_netlink.h
9156
0644
edit
dl
rm
tipc_sockets_diag.h
468
0644
edit
dl
rm
tls.h
4288
0644
edit
dl
rm
toshiba.h
1930
0644
edit
dl
rm
tty.h
1585
0644
edit
dl
rm
tty_flags.h
4527
0644
edit
dl
rm
types.h
1476
0644
edit
dl
rm
udf_fs_i.h
697
0644
edit
dl
rm
udmabuf.h
643
0644
edit
dl
rm
udp.h
1613
0644
edit
dl
rm
uhid.h
4648
0644
edit
dl
rm
uinput.h
9261
0644
edit
dl
rm
uio.h
732
0644
edit
dl
rm
uleds.h
798
0644
edit
dl
rm
ultrasound.h
4562
0644
edit
dl
rm
un.h
384
0644
edit
dl
rm
unistd.h
220
0644
edit
dl
rm
unix_diag.h
1328
0644
edit
dl
rm
usbdevice_fs.h
8317
0644
edit
dl
rm
usbip.h
640
0644
edit
dl
rm
userfaultfd.h
6811
0644
edit
dl
rm
userio.h
1516
0644
edit
dl
rm
utime.h
215
0644
edit
dl
rm
utsname.h
669
0644
edit
dl
rm
uuid.h
1356
0644
edit
dl
rm
uvcvideo.h
2590
0644
edit
dl
rm
v4l2-common.h
4177
0644
edit
dl
rm
v4l2-controls.h
52061
0644
edit
dl
rm
v4l2-dv-timings.h
31562
0644
edit
dl
rm
v4l2-mediabus.h
5101
0644
edit
dl
rm
v4l2-subdev.h
6339
0644
edit
dl
rm
vboxguest.h
8699
0644
edit
dl
rm
vbox_err.h
7257
0644
edit
dl
rm
vbox_vmmdev_types.h
11509
0644
edit
dl
rm
version.h
117
0644
edit
dl
rm
veth.h
224
0644
edit
dl
rm
vfio.h
34188
0644
edit
dl
rm
vfio_ccw.h
836
0644
edit
dl
rm
vhost.h
5069
0644
edit
dl
rm
vhost_types.h
3164
0644
edit
dl
rm
videodev2.h
91337
0644
edit
dl
rm
virtio_9p.h
2041
0644
edit
dl
rm
virtio_balloon.h
5036
0644
edit
dl
rm
virtio_blk.h
6797
0644
edit
dl
rm
virtio_config.h
3836
0644
edit
dl
rm
virtio_console.h
3136
0644
edit
dl
rm
virtio_crypto.h
13933
0644
edit
dl
rm
virtio_fs.h
490
0644
edit
dl
rm
virtio_gpu.h
8540
0644
edit
dl
rm
virtio_ids.h
2592
0644
edit
dl
rm
virtio_input.h
2506
0644
edit
dl
rm
virtio_iommu.h
3783
0644
edit
dl
rm
virtio_mmio.h
4586
0644
edit
dl
rm
virtio_net.h
10549
0644
edit
dl
rm
virtio_pci.h
7079
0644
edit
dl
rm
virtio_pmem.h
639
0644
edit
dl
rm
virtio_ring.h
7430
0644
edit
dl
rm
virtio_rng.h
265
0644
edit
dl
rm
virtio_scsi.h
6035
0644
edit
dl
rm
virtio_types.h
2153
0644
edit
dl
rm
virtio_vsock.h
3086
0644
edit
dl
rm
vmcore.h
455
0644
edit
dl
rm
vm_sockets.h
5314
0644
edit
dl
rm
vm_sockets_diag.h
963
0644
edit
dl
rm
vsockmon.h
1885
0644
edit
dl
rm
vt.h
3059
0644
edit
dl
rm
vtpm_proxy.h
1719
0644
edit
dl
rm
wait.h
682
0644
edit
dl
rm
watchdog.h
2335
0644
edit
dl
rm
watch_queue.h
1768
0644
edit
dl
rm
wimax.h
8371
0644
edit
dl
rm
wireless.h
42715
0644
edit
dl
rm
wmi.h
1761
0644
edit
dl
rm
x25.h
3562
0644
edit
dl
rm
xattr.h
2860
0644
edit
dl
rm
xdp_diag.h
1259
0644
edit
dl
rm
xfrm.h
11994
0644
edit
dl
rm
xilinx-v4l2-controls.h
2976
0644
edit
dl
rm
zorro.h
3296
0644
edit
dl
rm
zorro_ids.h
30065
0644
edit
dl
rm
Edit:
/usr/include/linux/cec-funcs.h
(53625B)
/* SPDX-License-Identifier: ((GPL-2.0 WITH Linux-syscall-note) OR BSD-3-Clause) */ /* * cec - HDMI Consumer Electronics Control message functions * * Copyright 2016 Cisco Systems, Inc. and/or its affiliates. All rights reserved. */ #ifndef _CEC_UAPI_FUNCS_H #define _CEC_UAPI_FUNCS_H #include <linux/cec.h> /* One Touch Play Feature */ static __inline__ void cec_msg_active_source(struct cec_msg *msg, __u16 phys_addr) { msg->len = 4; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_ACTIVE_SOURCE; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; } static __inline__ void cec_ops_active_source(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } static __inline__ void cec_msg_image_view_on(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_IMAGE_VIEW_ON; } static __inline__ void cec_msg_text_view_on(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_TEXT_VIEW_ON; } /* Routing Control Feature */ static __inline__ void cec_msg_inactive_source(struct cec_msg *msg, __u16 phys_addr) { msg->len = 4; msg->msg[1] = CEC_MSG_INACTIVE_SOURCE; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; } static __inline__ void cec_ops_inactive_source(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } static __inline__ void cec_msg_request_active_source(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_REQUEST_ACTIVE_SOURCE; msg->reply = reply ? CEC_MSG_ACTIVE_SOURCE : 0; } static __inline__ void cec_msg_routing_information(struct cec_msg *msg, __u16 phys_addr) { msg->len = 4; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_ROUTING_INFORMATION; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; } static __inline__ void cec_ops_routing_information(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } static __inline__ void cec_msg_routing_change(struct cec_msg *msg, int reply, __u16 orig_phys_addr, __u16 new_phys_addr) { msg->len = 6; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_ROUTING_CHANGE; msg->msg[2] = orig_phys_addr >> 8; msg->msg[3] = orig_phys_addr & 0xff; msg->msg[4] = new_phys_addr >> 8; msg->msg[5] = new_phys_addr & 0xff; msg->reply = reply ? CEC_MSG_ROUTING_INFORMATION : 0; } static __inline__ void cec_ops_routing_change(const struct cec_msg *msg, __u16 *orig_phys_addr, __u16 *new_phys_addr) { *orig_phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *new_phys_addr = (msg->msg[4] << 8) | msg->msg[5]; } static __inline__ void cec_msg_set_stream_path(struct cec_msg *msg, __u16 phys_addr) { msg->len = 4; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_SET_STREAM_PATH; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; } static __inline__ void cec_ops_set_stream_path(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } /* Standby Feature */ static __inline__ void cec_msg_standby(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_STANDBY; } /* One Touch Record Feature */ static __inline__ void cec_msg_record_off(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_RECORD_OFF; msg->reply = reply ? CEC_MSG_RECORD_STATUS : 0; } struct cec_op_arib_data { __u16 transport_id; __u16 service_id; __u16 orig_network_id; }; struct cec_op_atsc_data { __u16 transport_id; __u16 program_number; }; struct cec_op_dvb_data { __u16 transport_id; __u16 service_id; __u16 orig_network_id; }; struct cec_op_channel_data { __u8 channel_number_fmt; __u16 major; __u16 minor; }; struct cec_op_digital_service_id { __u8 service_id_method; __u8 dig_bcast_system; union { struct cec_op_arib_data arib; struct cec_op_atsc_data atsc; struct cec_op_dvb_data dvb; struct cec_op_channel_data channel; }; }; struct cec_op_record_src { __u8 type; union { struct cec_op_digital_service_id digital; struct { __u8 ana_bcast_type; __u16 ana_freq; __u8 bcast_system; } analog; struct { __u8 plug; } ext_plug; struct { __u16 phys_addr; } ext_phys_addr; }; }; static __inline__ void cec_set_digital_service_id(__u8 *msg, const struct cec_op_digital_service_id *digital) { *msg++ = (digital->service_id_method << 7) | digital->dig_bcast_system; if (digital->service_id_method == CEC_OP_SERVICE_ID_METHOD_BY_CHANNEL) { *msg++ = (digital->channel.channel_number_fmt << 2) | (digital->channel.major >> 8); *msg++ = digital->channel.major & 0xff; *msg++ = digital->channel.minor >> 8; *msg++ = digital->channel.minor & 0xff; *msg++ = 0; *msg++ = 0; return; } switch (digital->dig_bcast_system) { case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_GEN: case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_CABLE: case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_SAT: case CEC_OP_DIG_SERVICE_BCAST_SYSTEM_ATSC_T: *msg++ = digital->atsc.transport_id >> 8; *msg++ = digital->atsc.transport_id & 0xff; *msg++ = digital->atsc.program_number >> 8; *msg++ = digital->atsc.program_number & 0xff; *msg++ = 0; *msg++ = 0; break; default: *msg++ = digital->dvb.transport_id >> 8; *msg++ = digital->dvb.transport_id & 0xff; *msg++ = digital->dvb.service_id >> 8; *msg++ = digital->dvb.service_id & 0xff; *msg++ = digital->dvb.orig_network_id >> 8; *msg++ = digital->dvb.orig_network_id & 0xff; break; } } static __inline__ void cec_get_digital_service_id(const __u8 *msg, struct cec_op_digital_service_id *digital) { digital->service_id_method = msg[0] >> 7; digital->dig_bcast_system = msg[0] & 0x7f; if (digital->service_id_method == CEC_OP_SERVICE_ID_METHOD_BY_CHANNEL) { digital->channel.channel_number_fmt = msg[1] >> 2; digital->channel.major = ((msg[1] & 3) << 6) | msg[2]; digital->channel.minor = (msg[3] << 8) | msg[4]; return; } digital->dvb.transport_id = (msg[1] << 8) | msg[2]; digital->dvb.service_id = (msg[3] << 8) | msg[4]; digital->dvb.orig_network_id = (msg[5] << 8) | msg[6]; } static __inline__ void cec_msg_record_on_own(struct cec_msg *msg) { msg->len = 3; msg->msg[1] = CEC_MSG_RECORD_ON; msg->msg[2] = CEC_OP_RECORD_SRC_OWN; } static __inline__ void cec_msg_record_on_digital(struct cec_msg *msg, const struct cec_op_digital_service_id *digital) { msg->len = 10; msg->msg[1] = CEC_MSG_RECORD_ON; msg->msg[2] = CEC_OP_RECORD_SRC_DIGITAL; cec_set_digital_service_id(msg->msg + 3, digital); } static __inline__ void cec_msg_record_on_analog(struct cec_msg *msg, __u8 ana_bcast_type, __u16 ana_freq, __u8 bcast_system) { msg->len = 7; msg->msg[1] = CEC_MSG_RECORD_ON; msg->msg[2] = CEC_OP_RECORD_SRC_ANALOG; msg->msg[3] = ana_bcast_type; msg->msg[4] = ana_freq >> 8; msg->msg[5] = ana_freq & 0xff; msg->msg[6] = bcast_system; } static __inline__ void cec_msg_record_on_plug(struct cec_msg *msg, __u8 plug) { msg->len = 4; msg->msg[1] = CEC_MSG_RECORD_ON; msg->msg[2] = CEC_OP_RECORD_SRC_EXT_PLUG; msg->msg[3] = plug; } static __inline__ void cec_msg_record_on_phys_addr(struct cec_msg *msg, __u16 phys_addr) { msg->len = 5; msg->msg[1] = CEC_MSG_RECORD_ON; msg->msg[2] = CEC_OP_RECORD_SRC_EXT_PHYS_ADDR; msg->msg[3] = phys_addr >> 8; msg->msg[4] = phys_addr & 0xff; } static __inline__ void cec_msg_record_on(struct cec_msg *msg, int reply, const struct cec_op_record_src *rec_src) { switch (rec_src->type) { case CEC_OP_RECORD_SRC_OWN: cec_msg_record_on_own(msg); break; case CEC_OP_RECORD_SRC_DIGITAL: cec_msg_record_on_digital(msg, &rec_src->digital); break; case CEC_OP_RECORD_SRC_ANALOG: cec_msg_record_on_analog(msg, rec_src->analog.ana_bcast_type, rec_src->analog.ana_freq, rec_src->analog.bcast_system); break; case CEC_OP_RECORD_SRC_EXT_PLUG: cec_msg_record_on_plug(msg, rec_src->ext_plug.plug); break; case CEC_OP_RECORD_SRC_EXT_PHYS_ADDR: cec_msg_record_on_phys_addr(msg, rec_src->ext_phys_addr.phys_addr); break; } msg->reply = reply ? CEC_MSG_RECORD_STATUS : 0; } static __inline__ void cec_ops_record_on(const struct cec_msg *msg, struct cec_op_record_src *rec_src) { rec_src->type = msg->msg[2]; switch (rec_src->type) { case CEC_OP_RECORD_SRC_OWN: break; case CEC_OP_RECORD_SRC_DIGITAL: cec_get_digital_service_id(msg->msg + 3, &rec_src->digital); break; case CEC_OP_RECORD_SRC_ANALOG: rec_src->analog.ana_bcast_type = msg->msg[3]; rec_src->analog.ana_freq = (msg->msg[4] << 8) | msg->msg[5]; rec_src->analog.bcast_system = msg->msg[6]; break; case CEC_OP_RECORD_SRC_EXT_PLUG: rec_src->ext_plug.plug = msg->msg[3]; break; case CEC_OP_RECORD_SRC_EXT_PHYS_ADDR: rec_src->ext_phys_addr.phys_addr = (msg->msg[3] << 8) | msg->msg[4]; break; } } static __inline__ void cec_msg_record_status(struct cec_msg *msg, __u8 rec_status) { msg->len = 3; msg->msg[1] = CEC_MSG_RECORD_STATUS; msg->msg[2] = rec_status; } static __inline__ void cec_ops_record_status(const struct cec_msg *msg, __u8 *rec_status) { *rec_status = msg->msg[2]; } static __inline__ void cec_msg_record_tv_screen(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_RECORD_TV_SCREEN; msg->reply = reply ? CEC_MSG_RECORD_ON : 0; } /* Timer Programming Feature */ static __inline__ void cec_msg_timer_status(struct cec_msg *msg, __u8 timer_overlap_warning, __u8 media_info, __u8 prog_info, __u8 prog_error, __u8 duration_hr, __u8 duration_min) { msg->len = 3; msg->msg[1] = CEC_MSG_TIMER_STATUS; msg->msg[2] = (timer_overlap_warning << 7) | (media_info << 5) | (prog_info ? 0x10 : 0) | (prog_info ? prog_info : prog_error); if (prog_info == CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE || prog_info == CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE || prog_error == CEC_OP_PROG_ERROR_DUPLICATE) { msg->len += 2; msg->msg[3] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[4] = ((duration_min / 10) << 4) | (duration_min % 10); } } static __inline__ void cec_ops_timer_status(const struct cec_msg *msg, __u8 *timer_overlap_warning, __u8 *media_info, __u8 *prog_info, __u8 *prog_error, __u8 *duration_hr, __u8 *duration_min) { *timer_overlap_warning = msg->msg[2] >> 7; *media_info = (msg->msg[2] >> 5) & 3; if (msg->msg[2] & 0x10) { *prog_info = msg->msg[2] & 0xf; *prog_error = 0; } else { *prog_info = 0; *prog_error = msg->msg[2] & 0xf; } if (*prog_info == CEC_OP_PROG_INFO_NOT_ENOUGH_SPACE || *prog_info == CEC_OP_PROG_INFO_MIGHT_NOT_BE_ENOUGH_SPACE || *prog_error == CEC_OP_PROG_ERROR_DUPLICATE) { *duration_hr = (msg->msg[3] >> 4) * 10 + (msg->msg[3] & 0xf); *duration_min = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); } else { *duration_hr = *duration_min = 0; } } static __inline__ void cec_msg_timer_cleared_status(struct cec_msg *msg, __u8 timer_cleared_status) { msg->len = 3; msg->msg[1] = CEC_MSG_TIMER_CLEARED_STATUS; msg->msg[2] = timer_cleared_status; } static __inline__ void cec_ops_timer_cleared_status(const struct cec_msg *msg, __u8 *timer_cleared_status) { *timer_cleared_status = msg->msg[2]; } static __inline__ void cec_msg_clear_analogue_timer(struct cec_msg *msg, int reply, __u8 day, __u8 month, __u8 start_hr, __u8 start_min, __u8 duration_hr, __u8 duration_min, __u8 recording_seq, __u8 ana_bcast_type, __u16 ana_freq, __u8 bcast_system) { msg->len = 13; msg->msg[1] = CEC_MSG_CLEAR_ANALOGUE_TIMER; msg->msg[2] = day; msg->msg[3] = month; /* Hours and minutes are in BCD format */ msg->msg[4] = ((start_hr / 10) << 4) | (start_hr % 10); msg->msg[5] = ((start_min / 10) << 4) | (start_min % 10); msg->msg[6] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[7] = ((duration_min / 10) << 4) | (duration_min % 10); msg->msg[8] = recording_seq; msg->msg[9] = ana_bcast_type; msg->msg[10] = ana_freq >> 8; msg->msg[11] = ana_freq & 0xff; msg->msg[12] = bcast_system; msg->reply = reply ? CEC_MSG_TIMER_CLEARED_STATUS : 0; } static __inline__ void cec_ops_clear_analogue_timer(const struct cec_msg *msg, __u8 *day, __u8 *month, __u8 *start_hr, __u8 *start_min, __u8 *duration_hr, __u8 *duration_min, __u8 *recording_seq, __u8 *ana_bcast_type, __u16 *ana_freq, __u8 *bcast_system) { *day = msg->msg[2]; *month = msg->msg[3]; /* Hours and minutes are in BCD format */ *start_hr = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); *start_min = (msg->msg[5] >> 4) * 10 + (msg->msg[5] & 0xf); *duration_hr = (msg->msg[6] >> 4) * 10 + (msg->msg[6] & 0xf); *duration_min = (msg->msg[7] >> 4) * 10 + (msg->msg[7] & 0xf); *recording_seq = msg->msg[8]; *ana_bcast_type = msg->msg[9]; *ana_freq = (msg->msg[10] << 8) | msg->msg[11]; *bcast_system = msg->msg[12]; } static __inline__ void cec_msg_clear_digital_timer(struct cec_msg *msg, int reply, __u8 day, __u8 month, __u8 start_hr, __u8 start_min, __u8 duration_hr, __u8 duration_min, __u8 recording_seq, const struct cec_op_digital_service_id *digital) { msg->len = 16; msg->reply = reply ? CEC_MSG_TIMER_CLEARED_STATUS : 0; msg->msg[1] = CEC_MSG_CLEAR_DIGITAL_TIMER; msg->msg[2] = day; msg->msg[3] = month; /* Hours and minutes are in BCD format */ msg->msg[4] = ((start_hr / 10) << 4) | (start_hr % 10); msg->msg[5] = ((start_min / 10) << 4) | (start_min % 10); msg->msg[6] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[7] = ((duration_min / 10) << 4) | (duration_min % 10); msg->msg[8] = recording_seq; cec_set_digital_service_id(msg->msg + 9, digital); } static __inline__ void cec_ops_clear_digital_timer(const struct cec_msg *msg, __u8 *day, __u8 *month, __u8 *start_hr, __u8 *start_min, __u8 *duration_hr, __u8 *duration_min, __u8 *recording_seq, struct cec_op_digital_service_id *digital) { *day = msg->msg[2]; *month = msg->msg[3]; /* Hours and minutes are in BCD format */ *start_hr = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); *start_min = (msg->msg[5] >> 4) * 10 + (msg->msg[5] & 0xf); *duration_hr = (msg->msg[6] >> 4) * 10 + (msg->msg[6] & 0xf); *duration_min = (msg->msg[7] >> 4) * 10 + (msg->msg[7] & 0xf); *recording_seq = msg->msg[8]; cec_get_digital_service_id(msg->msg + 9, digital); } static __inline__ void cec_msg_clear_ext_timer(struct cec_msg *msg, int reply, __u8 day, __u8 month, __u8 start_hr, __u8 start_min, __u8 duration_hr, __u8 duration_min, __u8 recording_seq, __u8 ext_src_spec, __u8 plug, __u16 phys_addr) { msg->len = 13; msg->msg[1] = CEC_MSG_CLEAR_EXT_TIMER; msg->msg[2] = day; msg->msg[3] = month; /* Hours and minutes are in BCD format */ msg->msg[4] = ((start_hr / 10) << 4) | (start_hr % 10); msg->msg[5] = ((start_min / 10) << 4) | (start_min % 10); msg->msg[6] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[7] = ((duration_min / 10) << 4) | (duration_min % 10); msg->msg[8] = recording_seq; msg->msg[9] = ext_src_spec; msg->msg[10] = plug; msg->msg[11] = phys_addr >> 8; msg->msg[12] = phys_addr & 0xff; msg->reply = reply ? CEC_MSG_TIMER_CLEARED_STATUS : 0; } static __inline__ void cec_ops_clear_ext_timer(const struct cec_msg *msg, __u8 *day, __u8 *month, __u8 *start_hr, __u8 *start_min, __u8 *duration_hr, __u8 *duration_min, __u8 *recording_seq, __u8 *ext_src_spec, __u8 *plug, __u16 *phys_addr) { *day = msg->msg[2]; *month = msg->msg[3]; /* Hours and minutes are in BCD format */ *start_hr = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); *start_min = (msg->msg[5] >> 4) * 10 + (msg->msg[5] & 0xf); *duration_hr = (msg->msg[6] >> 4) * 10 + (msg->msg[6] & 0xf); *duration_min = (msg->msg[7] >> 4) * 10 + (msg->msg[7] & 0xf); *recording_seq = msg->msg[8]; *ext_src_spec = msg->msg[9]; *plug = msg->msg[10]; *phys_addr = (msg->msg[11] << 8) | msg->msg[12]; } static __inline__ void cec_msg_set_analogue_timer(struct cec_msg *msg, int reply, __u8 day, __u8 month, __u8 start_hr, __u8 start_min, __u8 duration_hr, __u8 duration_min, __u8 recording_seq, __u8 ana_bcast_type, __u16 ana_freq, __u8 bcast_system) { msg->len = 13; msg->msg[1] = CEC_MSG_SET_ANALOGUE_TIMER; msg->msg[2] = day; msg->msg[3] = month; /* Hours and minutes are in BCD format */ msg->msg[4] = ((start_hr / 10) << 4) | (start_hr % 10); msg->msg[5] = ((start_min / 10) << 4) | (start_min % 10); msg->msg[6] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[7] = ((duration_min / 10) << 4) | (duration_min % 10); msg->msg[8] = recording_seq; msg->msg[9] = ana_bcast_type; msg->msg[10] = ana_freq >> 8; msg->msg[11] = ana_freq & 0xff; msg->msg[12] = bcast_system; msg->reply = reply ? CEC_MSG_TIMER_STATUS : 0; } static __inline__ void cec_ops_set_analogue_timer(const struct cec_msg *msg, __u8 *day, __u8 *month, __u8 *start_hr, __u8 *start_min, __u8 *duration_hr, __u8 *duration_min, __u8 *recording_seq, __u8 *ana_bcast_type, __u16 *ana_freq, __u8 *bcast_system) { *day = msg->msg[2]; *month = msg->msg[3]; /* Hours and minutes are in BCD format */ *start_hr = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); *start_min = (msg->msg[5] >> 4) * 10 + (msg->msg[5] & 0xf); *duration_hr = (msg->msg[6] >> 4) * 10 + (msg->msg[6] & 0xf); *duration_min = (msg->msg[7] >> 4) * 10 + (msg->msg[7] & 0xf); *recording_seq = msg->msg[8]; *ana_bcast_type = msg->msg[9]; *ana_freq = (msg->msg[10] << 8) | msg->msg[11]; *bcast_system = msg->msg[12]; } static __inline__ void cec_msg_set_digital_timer(struct cec_msg *msg, int reply, __u8 day, __u8 month, __u8 start_hr, __u8 start_min, __u8 duration_hr, __u8 duration_min, __u8 recording_seq, const struct cec_op_digital_service_id *digital) { msg->len = 16; msg->reply = reply ? CEC_MSG_TIMER_STATUS : 0; msg->msg[1] = CEC_MSG_SET_DIGITAL_TIMER; msg->msg[2] = day; msg->msg[3] = month; /* Hours and minutes are in BCD format */ msg->msg[4] = ((start_hr / 10) << 4) | (start_hr % 10); msg->msg[5] = ((start_min / 10) << 4) | (start_min % 10); msg->msg[6] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[7] = ((duration_min / 10) << 4) | (duration_min % 10); msg->msg[8] = recording_seq; cec_set_digital_service_id(msg->msg + 9, digital); } static __inline__ void cec_ops_set_digital_timer(const struct cec_msg *msg, __u8 *day, __u8 *month, __u8 *start_hr, __u8 *start_min, __u8 *duration_hr, __u8 *duration_min, __u8 *recording_seq, struct cec_op_digital_service_id *digital) { *day = msg->msg[2]; *month = msg->msg[3]; /* Hours and minutes are in BCD format */ *start_hr = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); *start_min = (msg->msg[5] >> 4) * 10 + (msg->msg[5] & 0xf); *duration_hr = (msg->msg[6] >> 4) * 10 + (msg->msg[6] & 0xf); *duration_min = (msg->msg[7] >> 4) * 10 + (msg->msg[7] & 0xf); *recording_seq = msg->msg[8]; cec_get_digital_service_id(msg->msg + 9, digital); } static __inline__ void cec_msg_set_ext_timer(struct cec_msg *msg, int reply, __u8 day, __u8 month, __u8 start_hr, __u8 start_min, __u8 duration_hr, __u8 duration_min, __u8 recording_seq, __u8 ext_src_spec, __u8 plug, __u16 phys_addr) { msg->len = 13; msg->msg[1] = CEC_MSG_SET_EXT_TIMER; msg->msg[2] = day; msg->msg[3] = month; /* Hours and minutes are in BCD format */ msg->msg[4] = ((start_hr / 10) << 4) | (start_hr % 10); msg->msg[5] = ((start_min / 10) << 4) | (start_min % 10); msg->msg[6] = ((duration_hr / 10) << 4) | (duration_hr % 10); msg->msg[7] = ((duration_min / 10) << 4) | (duration_min % 10); msg->msg[8] = recording_seq; msg->msg[9] = ext_src_spec; msg->msg[10] = plug; msg->msg[11] = phys_addr >> 8; msg->msg[12] = phys_addr & 0xff; msg->reply = reply ? CEC_MSG_TIMER_STATUS : 0; } static __inline__ void cec_ops_set_ext_timer(const struct cec_msg *msg, __u8 *day, __u8 *month, __u8 *start_hr, __u8 *start_min, __u8 *duration_hr, __u8 *duration_min, __u8 *recording_seq, __u8 *ext_src_spec, __u8 *plug, __u16 *phys_addr) { *day = msg->msg[2]; *month = msg->msg[3]; /* Hours and minutes are in BCD format */ *start_hr = (msg->msg[4] >> 4) * 10 + (msg->msg[4] & 0xf); *start_min = (msg->msg[5] >> 4) * 10 + (msg->msg[5] & 0xf); *duration_hr = (msg->msg[6] >> 4) * 10 + (msg->msg[6] & 0xf); *duration_min = (msg->msg[7] >> 4) * 10 + (msg->msg[7] & 0xf); *recording_seq = msg->msg[8]; *ext_src_spec = msg->msg[9]; *plug = msg->msg[10]; *phys_addr = (msg->msg[11] << 8) | msg->msg[12]; } static __inline__ void cec_msg_set_timer_program_title(struct cec_msg *msg, const char *prog_title) { unsigned int len = strlen(prog_title); if (len > 14) len = 14; msg->len = 2 + len; msg->msg[1] = CEC_MSG_SET_TIMER_PROGRAM_TITLE; memcpy(msg->msg + 2, prog_title, len); } static __inline__ void cec_ops_set_timer_program_title(const struct cec_msg *msg, char *prog_title) { unsigned int len = msg->len > 2 ? msg->len - 2 : 0; if (len > 14) len = 14; memcpy(prog_title, msg->msg + 2, len); prog_title[len] = '\0'; } /* System Information Feature */ static __inline__ void cec_msg_cec_version(struct cec_msg *msg, __u8 cec_version) { msg->len = 3; msg->msg[1] = CEC_MSG_CEC_VERSION; msg->msg[2] = cec_version; } static __inline__ void cec_ops_cec_version(const struct cec_msg *msg, __u8 *cec_version) { *cec_version = msg->msg[2]; } static __inline__ void cec_msg_get_cec_version(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GET_CEC_VERSION; msg->reply = reply ? CEC_MSG_CEC_VERSION : 0; } static __inline__ void cec_msg_report_physical_addr(struct cec_msg *msg, __u16 phys_addr, __u8 prim_devtype) { msg->len = 5; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_REPORT_PHYSICAL_ADDR; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; msg->msg[4] = prim_devtype; } static __inline__ void cec_ops_report_physical_addr(const struct cec_msg *msg, __u16 *phys_addr, __u8 *prim_devtype) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *prim_devtype = msg->msg[4]; } static __inline__ void cec_msg_give_physical_addr(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_PHYSICAL_ADDR; msg->reply = reply ? CEC_MSG_REPORT_PHYSICAL_ADDR : 0; } static __inline__ void cec_msg_set_menu_language(struct cec_msg *msg, const char *language) { msg->len = 5; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_SET_MENU_LANGUAGE; memcpy(msg->msg + 2, language, 3); } static __inline__ void cec_ops_set_menu_language(const struct cec_msg *msg, char *language) { memcpy(language, msg->msg + 2, 3); language[3] = '\0'; } static __inline__ void cec_msg_get_menu_language(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GET_MENU_LANGUAGE; msg->reply = reply ? CEC_MSG_SET_MENU_LANGUAGE : 0; } /* * Assumes a single RC Profile byte and a single Device Features byte, * i.e. no extended features are supported by this helper function. * * As of CEC 2.0 no extended features are defined, should those be added * in the future, then this function needs to be adapted or a new function * should be added. */ static __inline__ void cec_msg_report_features(struct cec_msg *msg, __u8 cec_version, __u8 all_device_types, __u8 rc_profile, __u8 dev_features) { msg->len = 6; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_REPORT_FEATURES; msg->msg[2] = cec_version; msg->msg[3] = all_device_types; msg->msg[4] = rc_profile; msg->msg[5] = dev_features; } static __inline__ void cec_ops_report_features(const struct cec_msg *msg, __u8 *cec_version, __u8 *all_device_types, const __u8 **rc_profile, const __u8 **dev_features) { const __u8 *p = &msg->msg[4]; *cec_version = msg->msg[2]; *all_device_types = msg->msg[3]; *rc_profile = p; *dev_features = NULL; while (p < &msg->msg[14] && (*p & CEC_OP_FEAT_EXT)) p++; if (!(*p & CEC_OP_FEAT_EXT)) { *dev_features = p + 1; while (p < &msg->msg[15] && (*p & CEC_OP_FEAT_EXT)) p++; } if (*p & CEC_OP_FEAT_EXT) *rc_profile = *dev_features = NULL; } static __inline__ void cec_msg_give_features(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_FEATURES; msg->reply = reply ? CEC_MSG_REPORT_FEATURES : 0; } /* Deck Control Feature */ static __inline__ void cec_msg_deck_control(struct cec_msg *msg, __u8 deck_control_mode) { msg->len = 3; msg->msg[1] = CEC_MSG_DECK_CONTROL; msg->msg[2] = deck_control_mode; } static __inline__ void cec_ops_deck_control(const struct cec_msg *msg, __u8 *deck_control_mode) { *deck_control_mode = msg->msg[2]; } static __inline__ void cec_msg_deck_status(struct cec_msg *msg, __u8 deck_info) { msg->len = 3; msg->msg[1] = CEC_MSG_DECK_STATUS; msg->msg[2] = deck_info; } static __inline__ void cec_ops_deck_status(const struct cec_msg *msg, __u8 *deck_info) { *deck_info = msg->msg[2]; } static __inline__ void cec_msg_give_deck_status(struct cec_msg *msg, int reply, __u8 status_req) { msg->len = 3; msg->msg[1] = CEC_MSG_GIVE_DECK_STATUS; msg->msg[2] = status_req; msg->reply = (reply && status_req != CEC_OP_STATUS_REQ_OFF) ? CEC_MSG_DECK_STATUS : 0; } static __inline__ void cec_ops_give_deck_status(const struct cec_msg *msg, __u8 *status_req) { *status_req = msg->msg[2]; } static __inline__ void cec_msg_play(struct cec_msg *msg, __u8 play_mode) { msg->len = 3; msg->msg[1] = CEC_MSG_PLAY; msg->msg[2] = play_mode; } static __inline__ void cec_ops_play(const struct cec_msg *msg, __u8 *play_mode) { *play_mode = msg->msg[2]; } /* Tuner Control Feature */ struct cec_op_tuner_device_info { __u8 rec_flag; __u8 tuner_display_info; __u8 is_analog; union { struct cec_op_digital_service_id digital; struct { __u8 ana_bcast_type; __u16 ana_freq; __u8 bcast_system; } analog; }; }; static __inline__ void cec_msg_tuner_device_status_analog(struct cec_msg *msg, __u8 rec_flag, __u8 tuner_display_info, __u8 ana_bcast_type, __u16 ana_freq, __u8 bcast_system) { msg->len = 7; msg->msg[1] = CEC_MSG_TUNER_DEVICE_STATUS; msg->msg[2] = (rec_flag << 7) | tuner_display_info; msg->msg[3] = ana_bcast_type; msg->msg[4] = ana_freq >> 8; msg->msg[5] = ana_freq & 0xff; msg->msg[6] = bcast_system; } static __inline__ void cec_msg_tuner_device_status_digital(struct cec_msg *msg, __u8 rec_flag, __u8 tuner_display_info, const struct cec_op_digital_service_id *digital) { msg->len = 10; msg->msg[1] = CEC_MSG_TUNER_DEVICE_STATUS; msg->msg[2] = (rec_flag << 7) | tuner_display_info; cec_set_digital_service_id(msg->msg + 3, digital); } static __inline__ void cec_msg_tuner_device_status(struct cec_msg *msg, const struct cec_op_tuner_device_info *tuner_dev_info) { if (tuner_dev_info->is_analog) cec_msg_tuner_device_status_analog(msg, tuner_dev_info->rec_flag, tuner_dev_info->tuner_display_info, tuner_dev_info->analog.ana_bcast_type, tuner_dev_info->analog.ana_freq, tuner_dev_info->analog.bcast_system); else cec_msg_tuner_device_status_digital(msg, tuner_dev_info->rec_flag, tuner_dev_info->tuner_display_info, &tuner_dev_info->digital); } static __inline__ void cec_ops_tuner_device_status(const struct cec_msg *msg, struct cec_op_tuner_device_info *tuner_dev_info) { tuner_dev_info->is_analog = msg->len < 10; tuner_dev_info->rec_flag = msg->msg[2] >> 7; tuner_dev_info->tuner_display_info = msg->msg[2] & 0x7f; if (tuner_dev_info->is_analog) { tuner_dev_info->analog.ana_bcast_type = msg->msg[3]; tuner_dev_info->analog.ana_freq = (msg->msg[4] << 8) | msg->msg[5]; tuner_dev_info->analog.bcast_system = msg->msg[6]; return; } cec_get_digital_service_id(msg->msg + 3, &tuner_dev_info->digital); } static __inline__ void cec_msg_give_tuner_device_status(struct cec_msg *msg, int reply, __u8 status_req) { msg->len = 3; msg->msg[1] = CEC_MSG_GIVE_TUNER_DEVICE_STATUS; msg->msg[2] = status_req; msg->reply = (reply && status_req != CEC_OP_STATUS_REQ_OFF) ? CEC_MSG_TUNER_DEVICE_STATUS : 0; } static __inline__ void cec_ops_give_tuner_device_status(const struct cec_msg *msg, __u8 *status_req) { *status_req = msg->msg[2]; } static __inline__ void cec_msg_select_analogue_service(struct cec_msg *msg, __u8 ana_bcast_type, __u16 ana_freq, __u8 bcast_system) { msg->len = 6; msg->msg[1] = CEC_MSG_SELECT_ANALOGUE_SERVICE; msg->msg[2] = ana_bcast_type; msg->msg[3] = ana_freq >> 8; msg->msg[4] = ana_freq & 0xff; msg->msg[5] = bcast_system; } static __inline__ void cec_ops_select_analogue_service(const struct cec_msg *msg, __u8 *ana_bcast_type, __u16 *ana_freq, __u8 *bcast_system) { *ana_bcast_type = msg->msg[2]; *ana_freq = (msg->msg[3] << 8) | msg->msg[4]; *bcast_system = msg->msg[5]; } static __inline__ void cec_msg_select_digital_service(struct cec_msg *msg, const struct cec_op_digital_service_id *digital) { msg->len = 9; msg->msg[1] = CEC_MSG_SELECT_DIGITAL_SERVICE; cec_set_digital_service_id(msg->msg + 2, digital); } static __inline__ void cec_ops_select_digital_service(const struct cec_msg *msg, struct cec_op_digital_service_id *digital) { cec_get_digital_service_id(msg->msg + 2, digital); } static __inline__ void cec_msg_tuner_step_decrement(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_TUNER_STEP_DECREMENT; } static __inline__ void cec_msg_tuner_step_increment(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_TUNER_STEP_INCREMENT; } /* Vendor Specific Commands Feature */ static __inline__ void cec_msg_device_vendor_id(struct cec_msg *msg, __u32 vendor_id) { msg->len = 5; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_DEVICE_VENDOR_ID; msg->msg[2] = vendor_id >> 16; msg->msg[3] = (vendor_id >> 8) & 0xff; msg->msg[4] = vendor_id & 0xff; } static __inline__ void cec_ops_device_vendor_id(const struct cec_msg *msg, __u32 *vendor_id) { *vendor_id = (msg->msg[2] << 16) | (msg->msg[3] << 8) | msg->msg[4]; } static __inline__ void cec_msg_give_device_vendor_id(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_DEVICE_VENDOR_ID; msg->reply = reply ? CEC_MSG_DEVICE_VENDOR_ID : 0; } static __inline__ void cec_msg_vendor_command(struct cec_msg *msg, __u8 size, const __u8 *vendor_cmd) { if (size > 14) size = 14; msg->len = 2 + size; msg->msg[1] = CEC_MSG_VENDOR_COMMAND; memcpy(msg->msg + 2, vendor_cmd, size); } static __inline__ void cec_ops_vendor_command(const struct cec_msg *msg, __u8 *size, const __u8 **vendor_cmd) { *size = msg->len - 2; if (*size > 14) *size = 14; *vendor_cmd = msg->msg + 2; } static __inline__ void cec_msg_vendor_command_with_id(struct cec_msg *msg, __u32 vendor_id, __u8 size, const __u8 *vendor_cmd) { if (size > 11) size = 11; msg->len = 5 + size; msg->msg[1] = CEC_MSG_VENDOR_COMMAND_WITH_ID; msg->msg[2] = vendor_id >> 16; msg->msg[3] = (vendor_id >> 8) & 0xff; msg->msg[4] = vendor_id & 0xff; memcpy(msg->msg + 5, vendor_cmd, size); } static __inline__ void cec_ops_vendor_command_with_id(const struct cec_msg *msg, __u32 *vendor_id, __u8 *size, const __u8 **vendor_cmd) { *size = msg->len - 5; if (*size > 11) *size = 11; *vendor_id = (msg->msg[2] << 16) | (msg->msg[3] << 8) | msg->msg[4]; *vendor_cmd = msg->msg + 5; } static __inline__ void cec_msg_vendor_remote_button_down(struct cec_msg *msg, __u8 size, const __u8 *rc_code) { if (size > 14) size = 14; msg->len = 2 + size; msg->msg[1] = CEC_MSG_VENDOR_REMOTE_BUTTON_DOWN; memcpy(msg->msg + 2, rc_code, size); } static __inline__ void cec_ops_vendor_remote_button_down(const struct cec_msg *msg, __u8 *size, const __u8 **rc_code) { *size = msg->len - 2; if (*size > 14) *size = 14; *rc_code = msg->msg + 2; } static __inline__ void cec_msg_vendor_remote_button_up(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_VENDOR_REMOTE_BUTTON_UP; } /* OSD Display Feature */ static __inline__ void cec_msg_set_osd_string(struct cec_msg *msg, __u8 disp_ctl, const char *osd) { unsigned int len = strlen(osd); if (len > 13) len = 13; msg->len = 3 + len; msg->msg[1] = CEC_MSG_SET_OSD_STRING; msg->msg[2] = disp_ctl; memcpy(msg->msg + 3, osd, len); } static __inline__ void cec_ops_set_osd_string(const struct cec_msg *msg, __u8 *disp_ctl, char *osd) { unsigned int len = msg->len > 3 ? msg->len - 3 : 0; *disp_ctl = msg->msg[2]; if (len > 13) len = 13; memcpy(osd, msg->msg + 3, len); osd[len] = '\0'; } /* Device OSD Transfer Feature */ static __inline__ void cec_msg_set_osd_name(struct cec_msg *msg, const char *name) { unsigned int len = strlen(name); if (len > 14) len = 14; msg->len = 2 + len; msg->msg[1] = CEC_MSG_SET_OSD_NAME; memcpy(msg->msg + 2, name, len); } static __inline__ void cec_ops_set_osd_name(const struct cec_msg *msg, char *name) { unsigned int len = msg->len > 2 ? msg->len - 2 : 0; if (len > 14) len = 14; memcpy(name, msg->msg + 2, len); name[len] = '\0'; } static __inline__ void cec_msg_give_osd_name(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_OSD_NAME; msg->reply = reply ? CEC_MSG_SET_OSD_NAME : 0; } /* Device Menu Control Feature */ static __inline__ void cec_msg_menu_status(struct cec_msg *msg, __u8 menu_state) { msg->len = 3; msg->msg[1] = CEC_MSG_MENU_STATUS; msg->msg[2] = menu_state; } static __inline__ void cec_ops_menu_status(const struct cec_msg *msg, __u8 *menu_state) { *menu_state = msg->msg[2]; } static __inline__ void cec_msg_menu_request(struct cec_msg *msg, int reply, __u8 menu_req) { msg->len = 3; msg->msg[1] = CEC_MSG_MENU_REQUEST; msg->msg[2] = menu_req; msg->reply = reply ? CEC_MSG_MENU_STATUS : 0; } static __inline__ void cec_ops_menu_request(const struct cec_msg *msg, __u8 *menu_req) { *menu_req = msg->msg[2]; } struct cec_op_ui_command { __u8 ui_cmd; __u8 has_opt_arg; union { struct cec_op_channel_data channel_identifier; __u8 ui_broadcast_type; __u8 ui_sound_presentation_control; __u8 play_mode; __u8 ui_function_media; __u8 ui_function_select_av_input; __u8 ui_function_select_audio_input; }; }; static __inline__ void cec_msg_user_control_pressed(struct cec_msg *msg, const struct cec_op_ui_command *ui_cmd) { msg->len = 3; msg->msg[1] = CEC_MSG_USER_CONTROL_PRESSED; msg->msg[2] = ui_cmd->ui_cmd; if (!ui_cmd->has_opt_arg) return; switch (ui_cmd->ui_cmd) { case 0x56: case 0x57: case 0x60: case 0x68: case 0x69: case 0x6a: /* The optional operand is one byte for all these ui commands */ msg->len++; msg->msg[3] = ui_cmd->play_mode; break; case 0x67: msg->len += 4; msg->msg[3] = (ui_cmd->channel_identifier.channel_number_fmt << 2) | (ui_cmd->channel_identifier.major >> 8); msg->msg[4] = ui_cmd->channel_identifier.major & 0xff; msg->msg[5] = ui_cmd->channel_identifier.minor >> 8; msg->msg[6] = ui_cmd->channel_identifier.minor & 0xff; break; } } static __inline__ void cec_ops_user_control_pressed(const struct cec_msg *msg, struct cec_op_ui_command *ui_cmd) { ui_cmd->ui_cmd = msg->msg[2]; ui_cmd->has_opt_arg = 0; if (msg->len == 3) return; switch (ui_cmd->ui_cmd) { case 0x56: case 0x57: case 0x60: case 0x68: case 0x69: case 0x6a: /* The optional operand is one byte for all these ui commands */ ui_cmd->play_mode = msg->msg[3]; ui_cmd->has_opt_arg = 1; break; case 0x67: if (msg->len < 7) break; ui_cmd->has_opt_arg = 1; ui_cmd->channel_identifier.channel_number_fmt = msg->msg[3] >> 2; ui_cmd->channel_identifier.major = ((msg->msg[3] & 3) << 6) | msg->msg[4]; ui_cmd->channel_identifier.minor = (msg->msg[5] << 8) | msg->msg[6]; break; } } static __inline__ void cec_msg_user_control_released(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_USER_CONTROL_RELEASED; } /* Remote Control Passthrough Feature */ /* Power Status Feature */ static __inline__ void cec_msg_report_power_status(struct cec_msg *msg, __u8 pwr_state) { msg->len = 3; msg->msg[1] = CEC_MSG_REPORT_POWER_STATUS; msg->msg[2] = pwr_state; } static __inline__ void cec_ops_report_power_status(const struct cec_msg *msg, __u8 *pwr_state) { *pwr_state = msg->msg[2]; } static __inline__ void cec_msg_give_device_power_status(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_DEVICE_POWER_STATUS; msg->reply = reply ? CEC_MSG_REPORT_POWER_STATUS : 0; } /* General Protocol Messages */ static __inline__ void cec_msg_feature_abort(struct cec_msg *msg, __u8 abort_msg, __u8 reason) { msg->len = 4; msg->msg[1] = CEC_MSG_FEATURE_ABORT; msg->msg[2] = abort_msg; msg->msg[3] = reason; } static __inline__ void cec_ops_feature_abort(const struct cec_msg *msg, __u8 *abort_msg, __u8 *reason) { *abort_msg = msg->msg[2]; *reason = msg->msg[3]; } /* This changes the current message into a feature abort message */ static __inline__ void cec_msg_reply_feature_abort(struct cec_msg *msg, __u8 reason) { cec_msg_set_reply_to(msg, msg); msg->len = 4; msg->msg[2] = msg->msg[1]; msg->msg[3] = reason; msg->msg[1] = CEC_MSG_FEATURE_ABORT; } static __inline__ void cec_msg_abort(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_ABORT; } /* System Audio Control Feature */ static __inline__ void cec_msg_report_audio_status(struct cec_msg *msg, __u8 aud_mute_status, __u8 aud_vol_status) { msg->len = 3; msg->msg[1] = CEC_MSG_REPORT_AUDIO_STATUS; msg->msg[2] = (aud_mute_status << 7) | (aud_vol_status & 0x7f); } static __inline__ void cec_ops_report_audio_status(const struct cec_msg *msg, __u8 *aud_mute_status, __u8 *aud_vol_status) { *aud_mute_status = msg->msg[2] >> 7; *aud_vol_status = msg->msg[2] & 0x7f; } static __inline__ void cec_msg_give_audio_status(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_AUDIO_STATUS; msg->reply = reply ? CEC_MSG_REPORT_AUDIO_STATUS : 0; } static __inline__ void cec_msg_set_system_audio_mode(struct cec_msg *msg, __u8 sys_aud_status) { msg->len = 3; msg->msg[1] = CEC_MSG_SET_SYSTEM_AUDIO_MODE; msg->msg[2] = sys_aud_status; } static __inline__ void cec_ops_set_system_audio_mode(const struct cec_msg *msg, __u8 *sys_aud_status) { *sys_aud_status = msg->msg[2]; } static __inline__ void cec_msg_system_audio_mode_request(struct cec_msg *msg, int reply, __u16 phys_addr) { msg->len = phys_addr == 0xffff ? 2 : 4; msg->msg[1] = CEC_MSG_SYSTEM_AUDIO_MODE_REQUEST; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; msg->reply = reply ? CEC_MSG_SET_SYSTEM_AUDIO_MODE : 0; } static __inline__ void cec_ops_system_audio_mode_request(const struct cec_msg *msg, __u16 *phys_addr) { if (msg->len < 4) *phys_addr = 0xffff; else *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } static __inline__ void cec_msg_system_audio_mode_status(struct cec_msg *msg, __u8 sys_aud_status) { msg->len = 3; msg->msg[1] = CEC_MSG_SYSTEM_AUDIO_MODE_STATUS; msg->msg[2] = sys_aud_status; } static __inline__ void cec_ops_system_audio_mode_status(const struct cec_msg *msg, __u8 *sys_aud_status) { *sys_aud_status = msg->msg[2]; } static __inline__ void cec_msg_give_system_audio_mode_status(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_GIVE_SYSTEM_AUDIO_MODE_STATUS; msg->reply = reply ? CEC_MSG_SYSTEM_AUDIO_MODE_STATUS : 0; } static __inline__ void cec_msg_report_short_audio_descriptor(struct cec_msg *msg, __u8 num_descriptors, const __u32 *descriptors) { unsigned int i; if (num_descriptors > 4) num_descriptors = 4; msg->len = 2 + num_descriptors * 3; msg->msg[1] = CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR; for (i = 0; i < num_descriptors; i++) { msg->msg[2 + i * 3] = (descriptors[i] >> 16) & 0xff; msg->msg[3 + i * 3] = (descriptors[i] >> 8) & 0xff; msg->msg[4 + i * 3] = descriptors[i] & 0xff; } } static __inline__ void cec_ops_report_short_audio_descriptor(const struct cec_msg *msg, __u8 *num_descriptors, __u32 *descriptors) { unsigned int i; *num_descriptors = (msg->len - 2) / 3; if (*num_descriptors > 4) *num_descriptors = 4; for (i = 0; i < *num_descriptors; i++) descriptors[i] = (msg->msg[2 + i * 3] << 16) | (msg->msg[3 + i * 3] << 8) | msg->msg[4 + i * 3]; } static __inline__ void cec_msg_request_short_audio_descriptor(struct cec_msg *msg, int reply, __u8 num_descriptors, const __u8 *audio_format_id, const __u8 *audio_format_code) { unsigned int i; if (num_descriptors > 4) num_descriptors = 4; msg->len = 2 + num_descriptors; msg->msg[1] = CEC_MSG_REQUEST_SHORT_AUDIO_DESCRIPTOR; msg->reply = reply ? CEC_MSG_REPORT_SHORT_AUDIO_DESCRIPTOR : 0; for (i = 0; i < num_descriptors; i++) msg->msg[2 + i] = (audio_format_id[i] << 6) | (audio_format_code[i] & 0x3f); } static __inline__ void cec_ops_request_short_audio_descriptor(const struct cec_msg *msg, __u8 *num_descriptors, __u8 *audio_format_id, __u8 *audio_format_code) { unsigned int i; *num_descriptors = msg->len - 2; if (*num_descriptors > 4) *num_descriptors = 4; for (i = 0; i < *num_descriptors; i++) { audio_format_id[i] = msg->msg[2 + i] >> 6; audio_format_code[i] = msg->msg[2 + i] & 0x3f; } } /* Audio Rate Control Feature */ static __inline__ void cec_msg_set_audio_rate(struct cec_msg *msg, __u8 audio_rate) { msg->len = 3; msg->msg[1] = CEC_MSG_SET_AUDIO_RATE; msg->msg[2] = audio_rate; } static __inline__ void cec_ops_set_audio_rate(const struct cec_msg *msg, __u8 *audio_rate) { *audio_rate = msg->msg[2]; } /* Audio Return Channel Control Feature */ static __inline__ void cec_msg_report_arc_initiated(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_REPORT_ARC_INITIATED; } static __inline__ void cec_msg_initiate_arc(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_INITIATE_ARC; msg->reply = reply ? CEC_MSG_REPORT_ARC_INITIATED : 0; } static __inline__ void cec_msg_request_arc_initiation(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_REQUEST_ARC_INITIATION; msg->reply = reply ? CEC_MSG_INITIATE_ARC : 0; } static __inline__ void cec_msg_report_arc_terminated(struct cec_msg *msg) { msg->len = 2; msg->msg[1] = CEC_MSG_REPORT_ARC_TERMINATED; } static __inline__ void cec_msg_terminate_arc(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_TERMINATE_ARC; msg->reply = reply ? CEC_MSG_REPORT_ARC_TERMINATED : 0; } static __inline__ void cec_msg_request_arc_termination(struct cec_msg *msg, int reply) { msg->len = 2; msg->msg[1] = CEC_MSG_REQUEST_ARC_TERMINATION; msg->reply = reply ? CEC_MSG_TERMINATE_ARC : 0; } /* Dynamic Audio Lipsync Feature */ /* Only for CEC 2.0 and up */ static __inline__ void cec_msg_report_current_latency(struct cec_msg *msg, __u16 phys_addr, __u8 video_latency, __u8 low_latency_mode, __u8 audio_out_compensated, __u8 audio_out_delay) { msg->len = 6; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_REPORT_CURRENT_LATENCY; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; msg->msg[4] = video_latency; msg->msg[5] = (low_latency_mode << 2) | audio_out_compensated; if (audio_out_compensated == 3) msg->msg[msg->len++] = audio_out_delay; } static __inline__ void cec_ops_report_current_latency(const struct cec_msg *msg, __u16 *phys_addr, __u8 *video_latency, __u8 *low_latency_mode, __u8 *audio_out_compensated, __u8 *audio_out_delay) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *video_latency = msg->msg[4]; *low_latency_mode = (msg->msg[5] >> 2) & 1; *audio_out_compensated = msg->msg[5] & 3; if (*audio_out_compensated == 3 && msg->len >= 7) *audio_out_delay = msg->msg[6]; else *audio_out_delay = 0; } static __inline__ void cec_msg_request_current_latency(struct cec_msg *msg, int reply, __u16 phys_addr) { msg->len = 4; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_REQUEST_CURRENT_LATENCY; msg->msg[2] = phys_addr >> 8; msg->msg[3] = phys_addr & 0xff; msg->reply = reply ? CEC_MSG_REPORT_CURRENT_LATENCY : 0; } static __inline__ void cec_ops_request_current_latency(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } /* Capability Discovery and Control Feature */ static __inline__ void cec_msg_cdc_hec_inquire_state(struct cec_msg *msg, __u16 phys_addr1, __u16 phys_addr2) { msg->len = 9; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_INQUIRE_STATE; msg->msg[5] = phys_addr1 >> 8; msg->msg[6] = phys_addr1 & 0xff; msg->msg[7] = phys_addr2 >> 8; msg->msg[8] = phys_addr2 & 0xff; } static __inline__ void cec_ops_cdc_hec_inquire_state(const struct cec_msg *msg, __u16 *phys_addr, __u16 *phys_addr1, __u16 *phys_addr2) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *phys_addr1 = (msg->msg[5] << 8) | msg->msg[6]; *phys_addr2 = (msg->msg[7] << 8) | msg->msg[8]; } static __inline__ void cec_msg_cdc_hec_report_state(struct cec_msg *msg, __u16 target_phys_addr, __u8 hec_func_state, __u8 host_func_state, __u8 enc_func_state, __u8 cdc_errcode, __u8 has_field, __u16 hec_field) { msg->len = has_field ? 10 : 8; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_REPORT_STATE; msg->msg[5] = target_phys_addr >> 8; msg->msg[6] = target_phys_addr & 0xff; msg->msg[7] = (hec_func_state << 6) | (host_func_state << 4) | (enc_func_state << 2) | cdc_errcode; if (has_field) { msg->msg[8] = hec_field >> 8; msg->msg[9] = hec_field & 0xff; } } static __inline__ void cec_ops_cdc_hec_report_state(const struct cec_msg *msg, __u16 *phys_addr, __u16 *target_phys_addr, __u8 *hec_func_state, __u8 *host_func_state, __u8 *enc_func_state, __u8 *cdc_errcode, __u8 *has_field, __u16 *hec_field) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *target_phys_addr = (msg->msg[5] << 8) | msg->msg[6]; *hec_func_state = msg->msg[7] >> 6; *host_func_state = (msg->msg[7] >> 4) & 3; *enc_func_state = (msg->msg[7] >> 4) & 3; *cdc_errcode = msg->msg[7] & 3; *has_field = msg->len >= 10; *hec_field = *has_field ? ((msg->msg[8] << 8) | msg->msg[9]) : 0; } static __inline__ void cec_msg_cdc_hec_set_state(struct cec_msg *msg, __u16 phys_addr1, __u16 phys_addr2, __u8 hec_set_state, __u16 phys_addr3, __u16 phys_addr4, __u16 phys_addr5) { msg->len = 10; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_INQUIRE_STATE; msg->msg[5] = phys_addr1 >> 8; msg->msg[6] = phys_addr1 & 0xff; msg->msg[7] = phys_addr2 >> 8; msg->msg[8] = phys_addr2 & 0xff; msg->msg[9] = hec_set_state; if (phys_addr3 != CEC_PHYS_ADDR_INVALID) { msg->msg[msg->len++] = phys_addr3 >> 8; msg->msg[msg->len++] = phys_addr3 & 0xff; if (phys_addr4 != CEC_PHYS_ADDR_INVALID) { msg->msg[msg->len++] = phys_addr4 >> 8; msg->msg[msg->len++] = phys_addr4 & 0xff; if (phys_addr5 != CEC_PHYS_ADDR_INVALID) { msg->msg[msg->len++] = phys_addr5 >> 8; msg->msg[msg->len++] = phys_addr5 & 0xff; } } } } static __inline__ void cec_ops_cdc_hec_set_state(const struct cec_msg *msg, __u16 *phys_addr, __u16 *phys_addr1, __u16 *phys_addr2, __u8 *hec_set_state, __u16 *phys_addr3, __u16 *phys_addr4, __u16 *phys_addr5) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *phys_addr1 = (msg->msg[5] << 8) | msg->msg[6]; *phys_addr2 = (msg->msg[7] << 8) | msg->msg[8]; *hec_set_state = msg->msg[9]; *phys_addr3 = *phys_addr4 = *phys_addr5 = CEC_PHYS_ADDR_INVALID; if (msg->len >= 12) *phys_addr3 = (msg->msg[10] << 8) | msg->msg[11]; if (msg->len >= 14) *phys_addr4 = (msg->msg[12] << 8) | msg->msg[13]; if (msg->len >= 16) *phys_addr5 = (msg->msg[14] << 8) | msg->msg[15]; } static __inline__ void cec_msg_cdc_hec_set_state_adjacent(struct cec_msg *msg, __u16 phys_addr1, __u8 hec_set_state) { msg->len = 8; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_SET_STATE_ADJACENT; msg->msg[5] = phys_addr1 >> 8; msg->msg[6] = phys_addr1 & 0xff; msg->msg[7] = hec_set_state; } static __inline__ void cec_ops_cdc_hec_set_state_adjacent(const struct cec_msg *msg, __u16 *phys_addr, __u16 *phys_addr1, __u8 *hec_set_state) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *phys_addr1 = (msg->msg[5] << 8) | msg->msg[6]; *hec_set_state = msg->msg[7]; } static __inline__ void cec_msg_cdc_hec_request_deactivation(struct cec_msg *msg, __u16 phys_addr1, __u16 phys_addr2, __u16 phys_addr3) { msg->len = 11; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_REQUEST_DEACTIVATION; msg->msg[5] = phys_addr1 >> 8; msg->msg[6] = phys_addr1 & 0xff; msg->msg[7] = phys_addr2 >> 8; msg->msg[8] = phys_addr2 & 0xff; msg->msg[9] = phys_addr3 >> 8; msg->msg[10] = phys_addr3 & 0xff; } static __inline__ void cec_ops_cdc_hec_request_deactivation(const struct cec_msg *msg, __u16 *phys_addr, __u16 *phys_addr1, __u16 *phys_addr2, __u16 *phys_addr3) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *phys_addr1 = (msg->msg[5] << 8) | msg->msg[6]; *phys_addr2 = (msg->msg[7] << 8) | msg->msg[8]; *phys_addr3 = (msg->msg[9] << 8) | msg->msg[10]; } static __inline__ void cec_msg_cdc_hec_notify_alive(struct cec_msg *msg) { msg->len = 5; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_NOTIFY_ALIVE; } static __inline__ void cec_ops_cdc_hec_notify_alive(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } static __inline__ void cec_msg_cdc_hec_discover(struct cec_msg *msg) { msg->len = 5; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HEC_DISCOVER; } static __inline__ void cec_ops_cdc_hec_discover(const struct cec_msg *msg, __u16 *phys_addr) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; } static __inline__ void cec_msg_cdc_hpd_set_state(struct cec_msg *msg, __u8 input_port, __u8 hpd_state) { msg->len = 6; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HPD_SET_STATE; msg->msg[5] = (input_port << 4) | hpd_state; } static __inline__ void cec_ops_cdc_hpd_set_state(const struct cec_msg *msg, __u16 *phys_addr, __u8 *input_port, __u8 *hpd_state) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *input_port = msg->msg[5] >> 4; *hpd_state = msg->msg[5] & 0xf; } static __inline__ void cec_msg_cdc_hpd_report_state(struct cec_msg *msg, __u8 hpd_state, __u8 hpd_error) { msg->len = 6; msg->msg[0] |= 0xf; /* broadcast */ msg->msg[1] = CEC_MSG_CDC_MESSAGE; /* msg[2] and msg[3] (phys_addr) are filled in by the CEC framework */ msg->msg[4] = CEC_MSG_CDC_HPD_REPORT_STATE; msg->msg[5] = (hpd_state << 4) | hpd_error; } static __inline__ void cec_ops_cdc_hpd_report_state(const struct cec_msg *msg, __u16 *phys_addr, __u8 *hpd_state, __u8 *hpd_error) { *phys_addr = (msg->msg[2] << 8) | msg->msg[3]; *hpd_state = msg->msg[5] >> 4; *hpd_error = msg->msg[5] & 0xf; } #endif
Save
cmd:
run