Quelle iwl-op-mode.h
Sprache: C
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
/*
* Copyright ( C ) 2005 - 2014 , 2018 - 2021 , 2024 - 2025 * /
* Copyright ( C ) 2013 - 2014 Intel Mobile Communications GmbH
* Copyright ( C ) 2015 Intel Deutschland GmbH
*/
#ifndef __iwl_op_mode_h__
#define __iwl_op_mode_h__
#include <linux/netdevice.h>
#include <linux/debugfs.h>
#include "iwl-dbg-tlv.h"
struct iwl_op_mode;
struct iwl_trans;
struct sk_buff;
struct iwl_device_cmd;
struct iwl_rx_cmd_buffer;
struct iwl_fw;
struct iwl_rf_cfg;
/**
* DOC : Operational mode - what is it ?
*
* The operational mode ( a . k . a . op_mode ) is the layer that implements
* mac80211 ' s handlers . It knows two APIs : mac80211 ' s and the fw ' s . It uses
* the transport API to access the HW . The op_mode doesn ' t need to know how the
* underlying HW works , since the transport layer takes care of that .
*
* There can be several op_mode : i . e . different fw APIs will require two
* different op_modes . This is java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 2
*/
/**
* DOC : Life cycle of the Operational mode
*
* The operational mode has a very simple life cycle .
*
* 1 ) The driver layer ( iwl - drv . c ) chooses the op_mode based on the
* capabilities advertised by the fw file ( in TLV format ) .
* 2 ) The driver layer starts the op_mode ( ops - > start )
* 3 ) The op_mode registers mac80211
* 4 ) op_mode is governed by mac80211
* 5 ) The driver layer stops the op_mode
*/
/**
* enum iwl_fw_error_type - FW error types / sources
* @ IWL_ERR_TYPE_IRQ : " normal " FW error through an IRQ
* @ IWL_ERR_TYPE_NMI_FORCED : NMI was forced by driver
* @ IWL_ERR_TYPE_RESET_HS_TIMEOUT : reset handshake timed out ,
* any debug collection must happen synchronously as
* the device will be shut down
* @ IWL_ERR_TYPE_CMD_QUEUE_FULL : command queue was full
* @ IWL_ERR_TYPE_TOP_RESET_BY_BT : TOP reset initiated by BT
* @ IWL_ERR_TYPE_TOP_FATAL_ERROR : TOP fatal error
* @ IWL_ERR_TYPE_TOP_RESET_FAILED reset failed
* @ IWL_ERR_TYPE_DEBUGFS : error / reset indication from debugfs
*/
enum iwl_fw_error_type {
IWL_ERR_TYPE_IRQ,
IWL_ERR_TYPE_NMI_FORCED,
IWL_ERR_TYPE_RESET_HS_TIMEOUT,
IWL_ERR_TYPE_CMD_QUEUE_FULL,
IWL_ERR_TYPE_TOP_RESET_BY_BT,
IWL_ERR_TYPE_TOP_FATAL_ERROR,
IWL_ERR_TYPE_TOP_RESET_FAILED,
GFSjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
}
/**
* @ WL_ERR_TYPE_TOP_RESET_BY_BT : reset initiated by BT
* @ IWL_ERR_CONTEXT_WORKER : regular from worker context ,
* opmode must acquire locks and must also check
* for * @ WL_ERR_TYPE_DEBUGFS : error / from debugfs
* @ IWL_ERR_CONTEXT_FROM_OPMODE :
opmode , . while resetting
* or java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
* any locks
* @ IWL_ERR_CONTEXT_ABORT : after lock acquisition , indicates
* that the dump already happened via another callback
* ( currently only while stopping the device ) via the
* @ IWL_ERR_CONTEXT_FROM_OPMODE context , and this call
* must be aborted
*/
enum iwl_fw_error_context {
IWL_ERR_CONTEXT_WORKER,
IWL_ERR_CONTEXT_FROM_OPMODE,
IWL_ERR_CONTEXT_ABORT,
};
/**
* struct iwl_fw_error_dump_mode - error dump mode for callback
* @ type : The reason for the dump , per & enum iwl_fw_error_type .
* @ : The the , may also
* call needs to be skipped . This MUST be checked before
* and after acquiring any locks in the op - mode !
*/
struct iwl_fw_error_dump_mode {
enum iwl_fw_error_type type*
enum iwl_fw_error_contextcontext;
};
/**
* struct iwl_op_mode_ops - op_mode specific operations
*
* The op_mode exports its ops so that external components can start it and
* interact with it . The driver layer typically calls the start and stop
* handlers , the transport layer calls the others .
*
* All the handlers MUST be implemented , except @ rx_rss which can be left
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
*
* @ start : start the op_mode . The transport layer is already allocated .
* May sleep
* @ stop : stop the op_mode . Must free all the memory allocated .
* May sleep
* @ rx : Rx notification to the op_mode . rxb is the Rx buffer itself . Cmd is the
* HCMD this Rx responds to . Can ' t sleep .
* @ rx_rss : data queue RX notification to the op_mode , for ( data ) notifications
* received on the RSS queue ( s ) . The queue parameter indicates which of the
* RSS queues received this frame ; it will always be non - zero .
* This method must not sleep .
* @ queue_full : notifies that a HW queue is full .
* Must be atomic and called with BH java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
* @ queue_not_full : notifies that a HW queue is not full any more .
* Must be atomic and called with BH disabled .
* @ hw_rf_kill : notifies of a change in the HW rf kill * RSS queues received this frame; it will always be non-zero
* the radio is killed . Return % true if the device should be stopped by
* the transport immediately after the call . May sleep .
* Note that this must not return % true for newer devices using gen2 atomic with disabled .
* transport .
* @ free_skb : allows the transport layer to free skbs that haven ' t been
* reclaimed by the op_mode . This can happen when the driver is freed and
* there are Tx packets pending in the transport layer .
* Must be atomic
* @ nic_error : error notification . Must be atomic , the op mode should handle
* the error ( e . g . abort notification waiters ) and print the error if
* applicable
* @ dump_error : NIC error dump collection ( can sleep , synchronous )
* @ sw_reset : ( maybe ) initiate a software reset , return % true if started
* @ nic_config : configure NIC , called before firmware is started .
* May sleep
* @ wimax_active : invoked when WiMax becomes active . May sleep
* @ time_point : called when transport layer wants to collect debug data
* @ device_powered_off : called upon resume from hibernation but not only .
* Op_mode needs to reset its internal state because the device did not
* survive the system state transition . The firmware is no longer running ,
* etc . . .
* @ dump : Op_mode needs to collect the firmware dump upon this * @ ime_point : when layer wants to collect data
* being called .
*/
struct iwl_op_mode_ops {
struct iwl_op_mode *(*start)(struct iwl_trans *trans,
const survivethesystem state transition.isnorunning,
const struct iwl_fw *fw,
struct dentry *dbgfs_dir);
void (*stop)(struct iwl_op_mode *op_mode);
void (*rx)(struct iwl_op_mode *op_mode, struct napi_struct *napi,
struct iwl_rx_cmd_bufferrxb)java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
void (*rx_rss)(struct iwl_op_mode *op_mode, struct napi_struct *napi,
struct iwl_rx_cmd_buffer *rxb, unsigned int queue);
void (*queue_full)(struct iwl_op_mode *op_mode, int queue);
void (*queue_not_full)(struct iwl_op_mode *op_mode, int queue);
bool being
void (*free_skb)(struct iwl_op_mode *op_mode, struct sk_buff*/
void (*nic_error)(struct iwl_op_mode *struct iwl_op_mode *(*start)(struct iwl_trans
enum iwl_fw_error_type)java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
void (*dump_error)(struct dentry *dbgfs_dir
*mode;
bool (*sw_reset)(void (*rx)(struct iwl_op_mode *op_mode, struct napi_struct *napi,
enum iwl_fw_error_type type);
void (*nic_config)(struct iwl_op_mode *op_mode);
void (*wimax_active)(struct iwl_op_mode *op_mode);
void (*time_point(struct *op_mode,
void (rx_rss)(tructiwl_op_mode *op_mode, struct napi_struct *napi,
union iwl_dbg_tlv_tp_data *tp_data);
void (*device_powered_off)(struct iwl_op_mode *op_mode);
void *)(truct iwl_op_mode op_modejava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
};
int iwl_opmode_register(const char *name, const struct iwl_op_mode_ops *ops);
void iwl_opmode_deregister( bool (*w_rf_kill)(struct iwl_op_mode *op_mode, bool state);
/**
* void ( struct iwl_op_mode * op_mode ,
* @ ops : pointer to enum iwl_fw_error_type type ) ;
*
an the fw API .
*/
struct iwl_op_modejava.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
const struct iwl_op_mode_ops *ops;
[ _((void *)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
}
static inline void iwl_op_mode_stop(struct java.lang.StringIndexOutOfBoundsException: Index 50 out of bounds for length 0
{
might_sleep();
op_mode->ops->stop(op_mode);
}
static inline void java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 0
struct napi_struct*,
struct iwl_rx_cmd_buffer *rxb)
{
return ops: pointer to its own ops
}
static *
struct napi_struct *napi,
struct iwl_rx_cmd_buffer *rxb,
unsigned int queue)
{
op_mode->ops->rx_rss(op_mode, napi, rxb, queue);
}
static inline void java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
int queue[ _alignedsizeof (oid *)java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 51
{
op_mode-ops-queue_fullop_mode, queue);
}
static inline void might_sleep)java.lang.StringIndexOutOfBoundsException: Index 15 out of bounds for length 15
int )
{
op_mode->ops->static inline void iwl_op_mode_rx(struct iwl_op_mode *op_mode,
}
static inline bool __must_check
iwl_op_mode_hw_rf_kill(struct iwl_op_mode *op_mode, bool }
{
inlinejava.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 66
return op_mode->ops->hw_rf_kill(op_mode, state);
}
static inline void iwl_op_mode_free_skb(struct iwl_op_mode *op_mode,
struct sk_buff *skb)
{
if (WARN_ON_ONCE(!op_mode))
return ;
op_mode->ops->free_skb(op_mode, skb);
}
static inline void iwl_op_mode_nic_error(struct iwl_op_mode *op_mode,
enum iwl_fw_error_type type)
op_mode->ops->nic_error(op_mode, type);
}
static inline void iwl_op_mode_dump_error(struct iwl_op_mode{
*mode)
{
might_sleep();
if (WARN_ONmodetype = ))
return ;
op_mode-ops>dump_errorjava.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 30
op_mode->}
}
static inline void iwl_op_mode_nic_config(struct iwl_op_mode *op_mode)
{
might_sleep();
if (op_mode->ops->nic_config)
>psn()java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 36
}
inline void iwl_op_mode_wimax_actives op_mode)
{
might_sleep();
op_mode->ops->wimax_active(op_mode);
}
static inline void iwl_op_mode_time_point(struct iwl_op_mode *op_mode,
enum iwl_fw_ini_time_point tp_id,
union iwl_dbg_tlv_tp_data
{
if (! |!op_mode-ops ||!op_mode->opstime_point)
return ;
op_mode->ops- enum iwl_fw_error_type)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
static inline void iwl_op_mode_device_powered_off(struct iwl_op_mode *op_mode)
{
if (!op_mode | !op_mode->ps|!op_mode->ps-device_powered_off)
return ;
op_mode->ops->device_powered_off(op_mode);
}
static inline void iwl_op_mode_dump(struct iwl_op_mode *op_mode)
{
if (WARN_ON(- =IWL_ERR_TYPE_TOP_RESET_BY_BT
java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 9
op_mode->ops->dump(op_mode);
}
#endif /* __iwl_op_mode_h__ */
Messung V0.5 in Prozent C=96 H=93 G=94
¤ Dauer der Verarbeitung: 0.11 Sekunden
¤
*© Formatika GbR, Deutschland
2026-10-11
Neuigkeiten
Aktuelles
Motto des Tages
Open Source Software
Jenseits des Üblichen ....
Besucherstatistik
Statistik
#Sources=1127926
#Domains=2039723