Changeset View
Changeset View
Standalone View
Standalone View
head/sys/dev/sfxge/common/efx.h
Show First 20 Lines • Show All 2,224 Lines • ▼ Show 20 Lines | |||||
#if EFSYS_OPT_FILTER | #if EFSYS_OPT_FILTER | ||||
#define EFX_ETHER_TYPE_IPV4 0x0800 | #define EFX_ETHER_TYPE_IPV4 0x0800 | ||||
#define EFX_ETHER_TYPE_IPV6 0x86DD | #define EFX_ETHER_TYPE_IPV6 0x86DD | ||||
#define EFX_IPPROTO_TCP 6 | #define EFX_IPPROTO_TCP 6 | ||||
#define EFX_IPPROTO_UDP 17 | #define EFX_IPPROTO_UDP 17 | ||||
#define EFX_IPPROTO_GRE 47 | |||||
/* Use RSS to spread across multiple queues */ | /* Use RSS to spread across multiple queues */ | ||||
#define EFX_FILTER_FLAG_RX_RSS 0x01 | #define EFX_FILTER_FLAG_RX_RSS 0x01 | ||||
/* Enable RX scatter */ | /* Enable RX scatter */ | ||||
#define EFX_FILTER_FLAG_RX_SCATTER 0x02 | #define EFX_FILTER_FLAG_RX_SCATTER 0x02 | ||||
/* | /* | ||||
* Override an automatic filter (priority EFX_FILTER_PRI_AUTO). | * Override an automatic filter (priority EFX_FILTER_PRI_AUTO). | ||||
* May only be set by the filter implementation for each type. | * May only be set by the filter implementation for each type. | ||||
* A removal request will restore the automatic filter in its place. | * A removal request will restore the automatic filter in its place. | ||||
*/ | */ | ||||
#define EFX_FILTER_FLAG_RX_OVER_AUTO 0x04 | #define EFX_FILTER_FLAG_RX_OVER_AUTO 0x04 | ||||
/* Filter is for RX */ | /* Filter is for RX */ | ||||
#define EFX_FILTER_FLAG_RX 0x08 | #define EFX_FILTER_FLAG_RX 0x08 | ||||
/* Filter is for TX */ | /* Filter is for TX */ | ||||
#define EFX_FILTER_FLAG_TX 0x10 | #define EFX_FILTER_FLAG_TX 0x10 | ||||
typedef unsigned int efx_filter_flags_t; | typedef unsigned int efx_filter_flags_t; | ||||
/* | |||||
* Flags which specify the fields to match on. The values are the same as in the | |||||
* MC_CMD_FILTER_OP/MC_CMD_FILTER_OP_EXT commands. | |||||
*/ | |||||
typedef enum efx_filter_match_flags_e { | typedef enum efx_filter_match_flags_e { | ||||
EFX_FILTER_MATCH_REM_HOST = 0x0001, /* Match by remote IP host | EFX_FILTER_MATCH_REM_HOST = 0x0001, /* Match by remote IP host | ||||
* address */ | * address */ | ||||
EFX_FILTER_MATCH_LOC_HOST = 0x0002, /* Match by local IP host | EFX_FILTER_MATCH_LOC_HOST = 0x0002, /* Match by local IP host | ||||
* address */ | * address */ | ||||
EFX_FILTER_MATCH_REM_MAC = 0x0004, /* Match by remote MAC address */ | EFX_FILTER_MATCH_REM_MAC = 0x0004, /* Match by remote MAC address */ | ||||
EFX_FILTER_MATCH_REM_PORT = 0x0008, /* Match by remote TCP/UDP port */ | EFX_FILTER_MATCH_REM_PORT = 0x0008, /* Match by remote TCP/UDP port */ | ||||
EFX_FILTER_MATCH_LOC_MAC = 0x0010, /* Match by remote TCP/UDP port */ | EFX_FILTER_MATCH_LOC_MAC = 0x0010, /* Match by remote TCP/UDP port */ | ||||
EFX_FILTER_MATCH_LOC_PORT = 0x0020, /* Match by local TCP/UDP port */ | EFX_FILTER_MATCH_LOC_PORT = 0x0020, /* Match by local TCP/UDP port */ | ||||
EFX_FILTER_MATCH_ETHER_TYPE = 0x0040, /* Match by Ether-type */ | EFX_FILTER_MATCH_ETHER_TYPE = 0x0040, /* Match by Ether-type */ | ||||
EFX_FILTER_MATCH_INNER_VID = 0x0080, /* Match by inner VLAN ID */ | EFX_FILTER_MATCH_INNER_VID = 0x0080, /* Match by inner VLAN ID */ | ||||
EFX_FILTER_MATCH_OUTER_VID = 0x0100, /* Match by outer VLAN ID */ | EFX_FILTER_MATCH_OUTER_VID = 0x0100, /* Match by outer VLAN ID */ | ||||
EFX_FILTER_MATCH_IP_PROTO = 0x0200, /* Match by IP transport | EFX_FILTER_MATCH_IP_PROTO = 0x0200, /* Match by IP transport | ||||
* protocol */ | * protocol */ | ||||
/* For encapsulated packets, match all multicast inner frames */ | |||||
EFX_FILTER_MATCH_IFRM_UNKNOWN_MCAST_DST = 0x01000000, | |||||
/* For encapsulated packets, match all unicast inner frames */ | |||||
EFX_FILTER_MATCH_IFRM_UNKNOWN_UCAST_DST = 0x02000000, | |||||
/* Match otherwise-unmatched multicast and broadcast packets */ | /* Match otherwise-unmatched multicast and broadcast packets */ | ||||
EFX_FILTER_MATCH_UNKNOWN_MCAST_DST = 0x40000000, | EFX_FILTER_MATCH_UNKNOWN_MCAST_DST = 0x40000000, | ||||
/* Match otherwise-unmatched unicast packets */ | /* Match otherwise-unmatched unicast packets */ | ||||
EFX_FILTER_MATCH_UNKNOWN_UCAST_DST = 0x80000000, | EFX_FILTER_MATCH_UNKNOWN_UCAST_DST = 0x80000000, | ||||
} efx_filter_match_flags_t; | } efx_filter_match_flags_t; | ||||
typedef enum efx_filter_priority_s { | typedef enum efx_filter_priority_s { | ||||
EFX_FILTER_PRI_HINT = 0, /* Performance hint */ | EFX_FILTER_PRI_HINT = 0, /* Performance hint */ | ||||
Show All 9 Lines | |||||
} efx_filter_priority_t; | } efx_filter_priority_t; | ||||
/* | /* | ||||
* FIXME: All these fields are assumed to be in little-endian byte order. | * FIXME: All these fields are assumed to be in little-endian byte order. | ||||
* It may be better for some to be big-endian. See bug42804. | * It may be better for some to be big-endian. See bug42804. | ||||
*/ | */ | ||||
typedef struct efx_filter_spec_s { | typedef struct efx_filter_spec_s { | ||||
uint32_t efs_match_flags; | uint32_t efs_match_flags; | ||||
uint32_t efs_priority:2; | uint32_t efs_priority:2; | ||||
uint32_t efs_flags:6; | uint32_t efs_flags:6; | ||||
uint32_t efs_dmaq_id:12; | uint32_t efs_dmaq_id:12; | ||||
uint32_t efs_rss_context; | uint32_t efs_rss_context; | ||||
uint16_t efs_outer_vid; | uint16_t efs_outer_vid; | ||||
uint16_t efs_inner_vid; | uint16_t efs_inner_vid; | ||||
uint8_t efs_loc_mac[EFX_MAC_ADDR_LEN]; | uint8_t efs_loc_mac[EFX_MAC_ADDR_LEN]; | ||||
uint8_t efs_rem_mac[EFX_MAC_ADDR_LEN]; | uint8_t efs_rem_mac[EFX_MAC_ADDR_LEN]; | ||||
uint16_t efs_ether_type; | uint16_t efs_ether_type; | ||||
uint8_t efs_ip_proto; | uint8_t efs_ip_proto; | ||||
efx_tunnel_protocol_t efs_encap_type; | |||||
uint16_t efs_loc_port; | uint16_t efs_loc_port; | ||||
uint16_t efs_rem_port; | uint16_t efs_rem_port; | ||||
efx_oword_t efs_rem_host; | efx_oword_t efs_rem_host; | ||||
efx_oword_t efs_loc_host; | efx_oword_t efs_loc_host; | ||||
} efx_filter_spec_t; | } efx_filter_spec_t; | ||||
/* Default values for use in filter specifications */ | /* Default values for use in filter specifications */ | ||||
#define EFX_FILTER_SPEC_RSS_CONTEXT_DEFAULT 0xffffffff | #define EFX_FILTER_SPEC_RSS_CONTEXT_DEFAULT 0xffffffff | ||||
#define EFX_FILTER_SPEC_RX_DMAQ_ID_DROP 0xfff | #define EFX_FILTER_SPEC_RX_DMAQ_ID_DROP 0xfff | ||||
#define EFX_FILTER_SPEC_VID_UNSPEC 0xffff | #define EFX_FILTER_SPEC_VID_UNSPEC 0xffff | ||||
▲ Show 20 Lines • Show All 55 Lines • ▼ Show 20 Lines | efx_filter_spec_set_ipv4_full( | ||||
__in uint16_t rport); | __in uint16_t rport); | ||||
extern __checkReturn efx_rc_t | extern __checkReturn efx_rc_t | ||||
efx_filter_spec_set_eth_local( | efx_filter_spec_set_eth_local( | ||||
__inout efx_filter_spec_t *spec, | __inout efx_filter_spec_t *spec, | ||||
__in uint16_t vid, | __in uint16_t vid, | ||||
__in const uint8_t *addr); | __in const uint8_t *addr); | ||||
extern void | |||||
efx_filter_spec_set_ether_type( | |||||
__inout efx_filter_spec_t *spec, | |||||
__in uint16_t ether_type); | |||||
extern __checkReturn efx_rc_t | extern __checkReturn efx_rc_t | ||||
efx_filter_spec_set_uc_def( | efx_filter_spec_set_uc_def( | ||||
__inout efx_filter_spec_t *spec); | __inout efx_filter_spec_t *spec); | ||||
extern __checkReturn efx_rc_t | extern __checkReturn efx_rc_t | ||||
efx_filter_spec_set_mc_def( | efx_filter_spec_set_mc_def( | ||||
__inout efx_filter_spec_t *spec); | __inout efx_filter_spec_t *spec); | ||||
typedef enum efx_filter_inner_frame_match_e { | |||||
EFX_FILTER_INNER_FRAME_MATCH_OTHER = 0, | |||||
EFX_FILTER_INNER_FRAME_MATCH_UNKNOWN_MCAST_DST, | |||||
EFX_FILTER_INNER_FRAME_MATCH_UNKNOWN_UCAST_DST | |||||
} efx_filter_inner_frame_match_t; | |||||
extern __checkReturn efx_rc_t | |||||
efx_filter_spec_set_encap_type( | |||||
__inout efx_filter_spec_t *spec, | |||||
__in efx_tunnel_protocol_t encap_type, | |||||
__in efx_filter_inner_frame_match_t inner_frame_match); | |||||
#endif /* EFSYS_OPT_FILTER */ | #endif /* EFSYS_OPT_FILTER */ | ||||
/* HASH */ | /* HASH */ | ||||
extern __checkReturn uint32_t | extern __checkReturn uint32_t | ||||
efx_hash_dwords( | efx_hash_dwords( | ||||
__in_ecount(count) uint32_t const *input, | __in_ecount(count) uint32_t const *input, | ||||
▲ Show 20 Lines • Show All 161 Lines • Show Last 20 Lines |