STRUCT CEC_LOG_ADDRS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ struct cec_log_addrs(9) πŸŽ€

ok so this is a page from the Kernel API Manual and bestie, we're diving into struct cec_log_addrs β€” the CEC logical addresses structure. yes it's a struct. yes it's important. let's go πŸ’…


✨ NAME ✨

struct cec_log_addrs β€” the CEC logical addresses structure, periodt.


🌸 SYNOPSIS 🌸

struct cec_log_addrs {
    __u8 log_addr[CEC_MAX_LOG_ADDRS];
    __u16 log_addr_mask;
    __u8 cec_version;
    __u8 num_log_addrs;
    __u32 vendor_id;
    __u32 flags;
    char osd_name[15];
    __u8 primary_device_type[CEC_MAX_LOG_ADDRS];
    __u8 log_addr_type[CEC_MAX_LOG_ADDRS];
    __u8 all_device_types[CEC_MAX_LOG_ADDRS];
    __u8 features[CEC_MAX_LOG_ADDRS][12];
};

look at her. iconic. every field copied exactly, no cap 🫢


πŸ¦‹ Members πŸ¦‹

okay so now we go field by field, and each one tells you who's allowed to touch it (that's the "set by" bit, and it's literally the whole vibe check of this struct) ✨

  • log_addr β€” the claimed logical addresses. set by the driver πŸ”₯
  • log_addr_mask β€” the current logical address mask. set by the driver πŸ”₯
  • cec_version β€” the CEC version that the adapter should implement. set by the caller πŸ‘‘
  • num_log_addrs β€” how many logical addresses should be claimed. set by the caller πŸ‘‘
  • vendor_id β€” the vendor ID of the device. set by the caller πŸ‘‘
  • flags β€” flags. (that's it, that's the description, short and mysterious, main character energy honestly πŸ’€)
  • osd_name β€” the OSD name of the device. set by the caller πŸ‘‘
  • primary_device_type β€” the primary device type for each logical address. set by the caller πŸ‘‘
  • log_addr_type β€” the logical address types. set by the caller πŸ‘‘
  • all_device_types β€” CEC 2.0: all device types represented by the logical address. set by the caller πŸ‘‘
  • features β€” CEC 2.0: the logical address features. set by the caller πŸ‘‘
ngl the driver/caller split is the thing to remember here β€” driver fills in log_addr and log_addr_mask, you (the caller) fill in literally everything else πŸ’–

πŸ’œ SEE ALSO πŸ’œ

go read these next, bestie, they're all in the kernel file ./include/uapi/linux/cec.h and they all ate:

struct cec_msg(9), cec_msg_initiator(9), cec_msg_destination(9), cec_msg_opcode(9), cec_msg_is_broadcast(9), cec_msg_init(9), cec_msg_set_reply_to(9), cec_msg_recv_is_tx_result(9), cec_msg_recv_is_rx_result(9), struct cec_caps(9), struct cec_drm_connector_info(9), struct cec_connector_info(9), struct cec_event_state_change(9), struct cec_event_lost_msgs(9), struct cec_event(9)


and that's the whole page!! πŸŽ€ this one lives in ./include/uapi/linux, dated October 2026, and that's your sign-off bestie β€” go claim those logical addresses, slay, and remember: driver does two fields, you do the rest πŸŒˆπŸ’–βœ¨

πŸ“¦ where this page comes from