linux/drivers/net/wireless/intel/iwlwifi/fw/api/filter.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
   2/*
   3 * Copyright (C) 2012-2014 Intel Corporation
   4 * Copyright (C) 2013-2015 Intel Mobile Communications GmbH
   5 * Copyright (C) 2016-2017 Intel Deutschland GmbH
   6 */
   7#ifndef __iwl_fw_api_filter_h__
   8#define __iwl_fw_api_filter_h__
   9
  10#include "fw/api/mac.h"
  11
  12#define MAX_PORT_ID_NUM 2
  13#define MAX_MCAST_FILTERING_ADDRESSES 256
  14
  15/**
  16 * struct iwl_mcast_filter_cmd - configure multicast filter.
  17 * @filter_own: Set 1 to filter out multicast packets sent by station itself
  18 * @port_id:    Multicast MAC addresses array specifier. This is a strange way
  19 *              to identify network interface adopted in host-device IF.
  20 *              It is used by FW as index in array of addresses. This array has
  21 *              MAX_PORT_ID_NUM members.
  22 * @count:      Number of MAC addresses in the array
  23 * @pass_all:   Set 1 to pass all multicast packets.
  24 * @bssid:      current association BSSID.
  25 * @reserved:   reserved
  26 * @addr_list:  Place holder for array of MAC addresses.
  27 *              IMPORTANT: add padding if necessary to ensure DWORD alignment.
  28 */
  29struct iwl_mcast_filter_cmd {
  30        u8 filter_own;
  31        u8 port_id;
  32        u8 count;
  33        u8 pass_all;
  34        u8 bssid[6];
  35        u8 reserved[2];
  36        u8 addr_list[0];
  37} __packed; /* MCAST_FILTERING_CMD_API_S_VER_1 */
  38
  39#define MAX_BCAST_FILTERS 8
  40#define MAX_BCAST_FILTER_ATTRS 2
  41
  42/**
  43 * enum iwl_mvm_bcast_filter_attr_offset - written by fw for each Rx packet
  44 * @BCAST_FILTER_OFFSET_PAYLOAD_START: offset is from payload start.
  45 * @BCAST_FILTER_OFFSET_IP_END: offset is from ip header end (i.e.
  46 *      start of ip payload).
  47 */
  48enum iwl_mvm_bcast_filter_attr_offset {
  49        BCAST_FILTER_OFFSET_PAYLOAD_START = 0,
  50        BCAST_FILTER_OFFSET_IP_END = 1,
  51};
  52
  53/**
  54 * struct iwl_fw_bcast_filter_attr - broadcast filter attribute
  55 * @offset_type:        &enum iwl_mvm_bcast_filter_attr_offset.
  56 * @offset:     starting offset of this pattern.
  57 * @reserved1:  reserved
  58 * @val:        value to match - big endian (MSB is the first
  59 *              byte to match from offset pos).
  60 * @mask:       mask to match (big endian).
  61 */
  62struct iwl_fw_bcast_filter_attr {
  63        u8 offset_type;
  64        u8 offset;
  65        __le16 reserved1;
  66        __be32 val;
  67        __be32 mask;
  68} __packed; /* BCAST_FILTER_ATT_S_VER_1 */
  69
  70/**
  71 * enum iwl_mvm_bcast_filter_frame_type - filter frame type
  72 * @BCAST_FILTER_FRAME_TYPE_ALL: consider all frames.
  73 * @BCAST_FILTER_FRAME_TYPE_IPV4: consider only ipv4 frames
  74 */
  75enum iwl_mvm_bcast_filter_frame_type {
  76        BCAST_FILTER_FRAME_TYPE_ALL = 0,
  77        BCAST_FILTER_FRAME_TYPE_IPV4 = 1,
  78};
  79
  80/**
  81 * struct iwl_fw_bcast_filter - broadcast filter
  82 * @discard: discard frame (1) or let it pass (0).
  83 * @frame_type: &enum iwl_mvm_bcast_filter_frame_type.
  84 * @reserved1: reserved
  85 * @num_attrs: number of valid attributes in this filter.
  86 * @attrs: attributes of this filter. a filter is considered matched
  87 *      only when all its attributes are matched (i.e. AND relationship)
  88 */
  89struct iwl_fw_bcast_filter {
  90        u8 discard;
  91        u8 frame_type;
  92        u8 num_attrs;
  93        u8 reserved1;
  94        struct iwl_fw_bcast_filter_attr attrs[MAX_BCAST_FILTER_ATTRS];
  95} __packed; /* BCAST_FILTER_S_VER_1 */
  96
  97/**
  98 * struct iwl_fw_bcast_mac - per-mac broadcast filtering configuration.
  99 * @default_discard: default action for this mac (discard (1) / pass (0)).
 100 * @reserved1: reserved
 101 * @attached_filters: bitmap of relevant filters for this mac.
 102 */
 103struct iwl_fw_bcast_mac {
 104        u8 default_discard;
 105        u8 reserved1;
 106        __le16 attached_filters;
 107} __packed; /* BCAST_MAC_CONTEXT_S_VER_1 */
 108
 109/**
 110 * struct iwl_bcast_filter_cmd - broadcast filtering configuration
 111 * @disable: enable (0) / disable (1)
 112 * @max_bcast_filters: max number of filters (MAX_BCAST_FILTERS)
 113 * @max_macs: max number of macs (NUM_MAC_INDEX_DRIVER)
 114 * @reserved1: reserved
 115 * @filters: broadcast filters
 116 * @macs: broadcast filtering configuration per-mac
 117 */
 118struct iwl_bcast_filter_cmd {
 119        u8 disable;
 120        u8 max_bcast_filters;
 121        u8 max_macs;
 122        u8 reserved1;
 123        struct iwl_fw_bcast_filter filters[MAX_BCAST_FILTERS];
 124        struct iwl_fw_bcast_mac macs[NUM_MAC_INDEX_DRIVER];
 125} __packed; /* BCAST_FILTERING_HCMD_API_S_VER_1 */
 126
 127#endif /* __iwl_fw_api_filter_h__ */
 128