root/include/linux/ieee80211-p2p.h
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * WFA P2P definitions
 *
 * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen
 * <jkmaline@cc.hut.fi>
 * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi>
 * Copyright (c) 2005, Devicescape Software, Inc.
 * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
 * Copyright (c) 2013 - 2014 Intel Mobile Communications GmbH
 * Copyright (c) 2016 - 2017 Intel Deutschland GmbH
 * Copyright (c) 2018 - 2025 Intel Corporation
 */

#ifndef LINUX_IEEE80211_P2P_H
#define LINUX_IEEE80211_P2P_H

#include <linux/types.h>
/*
 * Peer-to-Peer IE attribute related definitions.
 */
/*
 * enum ieee80211_p2p_attr_id - identifies type of peer-to-peer attribute.
 */
enum ieee80211_p2p_attr_id {
        IEEE80211_P2P_ATTR_STATUS = 0,
        IEEE80211_P2P_ATTR_MINOR_REASON,
        IEEE80211_P2P_ATTR_CAPABILITY,
        IEEE80211_P2P_ATTR_DEVICE_ID,
        IEEE80211_P2P_ATTR_GO_INTENT,
        IEEE80211_P2P_ATTR_GO_CONFIG_TIMEOUT,
        IEEE80211_P2P_ATTR_LISTEN_CHANNEL,
        IEEE80211_P2P_ATTR_GROUP_BSSID,
        IEEE80211_P2P_ATTR_EXT_LISTEN_TIMING,
        IEEE80211_P2P_ATTR_INTENDED_IFACE_ADDR,
        IEEE80211_P2P_ATTR_MANAGABILITY,
        IEEE80211_P2P_ATTR_CHANNEL_LIST,
        IEEE80211_P2P_ATTR_ABSENCE_NOTICE,
        IEEE80211_P2P_ATTR_DEVICE_INFO,
        IEEE80211_P2P_ATTR_GROUP_INFO,
        IEEE80211_P2P_ATTR_GROUP_ID,
        IEEE80211_P2P_ATTR_INTERFACE,
        IEEE80211_P2P_ATTR_OPER_CHANNEL,
        IEEE80211_P2P_ATTR_INVITE_FLAGS,
        /* 19 - 220: Reserved */
        IEEE80211_P2P_ATTR_VENDOR_SPECIFIC = 221,

        IEEE80211_P2P_ATTR_MAX
};

/* Notice of Absence attribute - described in P2P spec 4.1.14 */
/* Typical max value used here */
#define IEEE80211_P2P_NOA_DESC_MAX      4

struct ieee80211_p2p_noa_desc {
        u8 count;
        __le32 duration;
        __le32 interval;
        __le32 start_time;
} __packed;

struct ieee80211_p2p_noa_attr {
        u8 index;
        u8 oppps_ctwindow;
        struct ieee80211_p2p_noa_desc desc[IEEE80211_P2P_NOA_DESC_MAX];
} __packed;

#define IEEE80211_P2P_OPPPS_ENABLE_BIT          BIT(7)
#define IEEE80211_P2P_OPPPS_CTWINDOW_MASK       0x7F

#endif /* LINUX_IEEE80211_P2P_H */