mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-21 06:50:25 +00:00
103 lines
3.3 KiB
C
103 lines
3.3 KiB
C
![]() |
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
|
||
|
/*
|
||
|
* Copyright (C) 2024-2025 Intel Corporation
|
||
|
*/
|
||
|
|
||
|
#ifndef __session_protect_h__
|
||
|
#define __session_protect_h__
|
||
|
|
||
|
#include "mld.h"
|
||
|
#include "hcmd.h"
|
||
|
#include <net/mac80211.h>
|
||
|
#include "fw/api/mac-cfg.h"
|
||
|
|
||
|
/**
|
||
|
* DOC: session protection
|
||
|
*
|
||
|
* Session protection is an API from the firmware that allows the driver to
|
||
|
* request time on medium. This is needed before the association when we need
|
||
|
* to be on medium for the association frame exchange. Once we configure the
|
||
|
* firmware as 'associated', the firmware will allocate time on medium without
|
||
|
* needed a session protection.
|
||
|
*
|
||
|
* TDLS discover uses this API as well even after association to ensure that
|
||
|
* other activities internal to the firmware will not interrupt our presence
|
||
|
* on medium.
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* struct iwl_mld_session_protect - session protection parameters
|
||
|
* @end_jiffies: expected end_jiffies of current session protection.
|
||
|
* 0 if not active
|
||
|
* @duration: the duration in tu of current session
|
||
|
* @session_requested: A session protection command was sent and wasn't yet
|
||
|
* answered
|
||
|
*/
|
||
|
struct iwl_mld_session_protect {
|
||
|
unsigned long end_jiffies;
|
||
|
u32 duration;
|
||
|
bool session_requested;
|
||
|
};
|
||
|
|
||
|
#define IWL_MLD_SESSION_PROTECTION_ASSOC_TIME_MS 900
|
||
|
#define IWL_MLD_SESSION_PROTECTION_MIN_TIME_MS 400
|
||
|
|
||
|
/**
|
||
|
* iwl_mld_handle_session_prot_notif - handles %SESSION_PROTECTION_NOTIF
|
||
|
* @mld: the mld component
|
||
|
* @pkt: the RX packet containing the notification
|
||
|
*/
|
||
|
void iwl_mld_handle_session_prot_notif(struct iwl_mld *mld,
|
||
|
struct iwl_rx_packet *pkt);
|
||
|
|
||
|
/**
|
||
|
* iwl_mld_schedule_session_protection - schedule a session protection
|
||
|
* @mld: the mld component
|
||
|
* @vif: the virtual interface for which the protection issued
|
||
|
* @duration: the requested duration of the protection
|
||
|
* @min_duration: the minimum duration of the protection
|
||
|
* @link_id: The link to schedule a session protection for
|
||
|
*/
|
||
|
void iwl_mld_schedule_session_protection(struct iwl_mld *mld,
|
||
|
struct ieee80211_vif *vif,
|
||
|
u32 duration, u32 min_duration,
|
||
|
int link_id);
|
||
|
|
||
|
/**
|
||
|
* iwl_mld_start_session_protection - start a session protection
|
||
|
* @mld: the mld component
|
||
|
* @vif: the virtual interface for which the protection issued
|
||
|
* @duration: the requested duration of the protection
|
||
|
* @min_duration: the minimum duration of the protection
|
||
|
* @link_id: The link to schedule a session protection for
|
||
|
* @timeout: timeout for waiting
|
||
|
*
|
||
|
* This schedules the session protection, and waits for it to start
|
||
|
* (with timeout)
|
||
|
*
|
||
|
* Returns: 0 if successful, error code otherwise
|
||
|
*/
|
||
|
int iwl_mld_start_session_protection(struct iwl_mld *mld,
|
||
|
struct ieee80211_vif *vif,
|
||
|
u32 duration, u32 min_duration,
|
||
|
int link_id, unsigned long timeout);
|
||
|
|
||
|
/**
|
||
|
* iwl_mld_cancel_session_protection - cancel the session protection.
|
||
|
* @mld: the mld component
|
||
|
* @vif: the virtual interface for which the session is issued
|
||
|
* @link_id: cancel the session protection for given link
|
||
|
*
|
||
|
* This functions cancels the session protection which is an act of good
|
||
|
* citizenship. If it is not needed any more it should be canceled because
|
||
|
* the other mac contexts wait for the medium during that time.
|
||
|
*
|
||
|
* Returns: 0 if successful, error code otherwise
|
||
|
*
|
||
|
*/
|
||
|
int iwl_mld_cancel_session_protection(struct iwl_mld *mld,
|
||
|
struct ieee80211_vif *vif,
|
||
|
int link_id);
|
||
|
|
||
|
#endif /* __session_protect_h__ */
|