| /* |
| * Copyright (c) 2009 Mindspeed Technologies, Inc. |
| * |
| * This program is free software; you can redistribute it and/or |
| * modify it under the terms of the GNU General Public License |
| * as published by the Free Software Foundation; either version 2 |
| * of the License, or (at your option) any later version. |
| |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| |
| * You should have received a copy of the GNU General Public License |
| * along with this program; if not, write to the Free Software |
| * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| * |
| * |
| */ |
| |
| |
| #ifndef _FPP_GLOBALS_H_ |
| #define _FPP_GLOBALS_H_ |
| |
| #include "types.h" |
| #include "modules.h" |
| #include "system.h" |
| #include "fppdiag_lib.h" |
| |
| #ifdef COMCERTO_2000_CONTROL |
| typedef struct _tControlGlobals{ |
| U32 FG_udp_unidir_timeout; |
| U32 FG_udp_bidir_timeout; |
| U32 FG_tcp_timeout; |
| U32 FG_other_proto_timeout; |
| U32 FG_4o6_udp_unidir_timeout; |
| U32 FG_4o6_udp_bidir_timeout; |
| U32 FG_4o6_tcp_timeout; |
| U32 FG_4o6_other_proto_timeout; |
| //U8 FG_tx_channel[MAX_PHY_PORTS]; |
| U32 FG_PPPoE_entries; |
| }tControlGlobals; |
| #endif |
| |
| |
| typedef struct _tFppGlobals { |
| #if !defined(COMCERTO_2000) |
| EVENTHANDLER FG_gEventDataTable[EVENT_MAX]; |
| U32 FG_gEventStatusReg; |
| U32 FG_gIRQEventStatusReg; |
| STIME FG_cpu_idle_end; |
| U32 FG_cpu_busy_cycles; |
| U32 FG_cpu_idle_cycles; |
| HANDLE FG_hGlobalHeap; |
| HANDLE FG_hGlobalAramHeap; |
| |
| U32 FG_ipv4_fill_cntr; |
| U32 FG_ipv4_free_cntr; |
| U32 FG_ipv6_fill_cntr; |
| U32 FG_ipv6_free_cntr; |
| U16 FG_IPv6fragTimeout; |
| U16 FG_IPv4fragTimeout; |
| U16 FG_IPv6fragExpiryDrop; |
| U16 FG_IPv4fragExpiryDrop; |
| U16 FG_IPv4samfragTimeout; |
| U32 FG_ct_proto_timeout[MAX_L4_PROTO]; /* Will hold the timeouts for TCP, UDP(unidir),IPIP */ |
| U32 FG_4o6_proto_timeout[MAX_L4_PROTO]; /* Will hold the timeouts for TCP, UDP(unidir),IPIP */ |
| U32 FG_udp_bidir_timeout; |
| U32 FG_4o6_udp_bidir_timeout; |
| U32 FG_PPPoE_entries; |
| U8 FG_tx_channel[MAX_PHY_PORTS]; |
| #else |
| #endif |
| U32 FG_ct_bin_start; |
| |
| U32 FG_ct_timer; |
| U32 FG_identification; |
| U32 FG_g_mc6_mode; |
| |
| void *FG_preload_addr; |
| |
| #if !defined(COMCERTO_2000) |
| #ifdef CFG_STATS |
| U32 FG_statFeatureBitMask; |
| #endif |
| U8 FG_L2Bridge_mode; |
| |
| struct { |
| U8 used; |
| U8 enabled; |
| U16 onif_index; |
| } FG_L2bridge_enabled[MAX_PHY_PORTS]; |
| #endif |
| |
| channel_t FG_RxOutputChannel[MAX_L3_PROTO]; |
| |
| U32 FG_L2Bridge_entries; |
| U16 FG_L2Bridge_timeout; |
| U16 FG_L2Bridge_bin_number; |
| U16 FG_L2Bridge_l3_bin_number; |
| |
| U8 FG_ff_enable; |
| U8 FG_ipsec_pre_frag; |
| |
| #if defined(COMCERTO_1000) |
| U16 FG_TX_Q_Sizes[8]; |
| U32 POOL_A_BASE; |
| U32 POOL_A_SIZE; |
| U32 POOL_B_BASE; |
| U32 POOL_B_SIZE; |
| #endif |
| } tFppGlobals; |
| |
| extern tFppGlobals gFppGlobals; |
| #if defined(COMCERTO_2000_CONTROL) |
| extern tFppGlobals CLASS_VARNAME2(gFppGlobals); |
| extern struct physical_port_util UTIL_DMEM_SH2(phy_port)[MAX_PHY_PORTS_FAST]; |
| #endif |
| #if defined (COMCERTO_2000_UTIL) |
| extern struct physical_port_util phy_port[MAX_PHY_PORTS_FAST]; |
| #else |
| extern struct physical_port phy_port[MAX_PHY_PORTS_FAST]; |
| extern struct physical_port phy_port_slow[MAX_PHY_PORTS_SLOW]; |
| #endif |
| |
| #if !defined(COMCERTO_2000) |
| #define gEventDataTable gFppGlobals.FG_gEventDataTable |
| #define gEventStatusReg gFppGlobals.FG_gEventStatusReg |
| #define gIRQEventStatusReg gFppGlobals.FG_gIRQEventStatusReg |
| #endif |
| #define tx_channel gFppGlobals.FG_tx_channel |
| |
| |
| #ifdef COMCERTO_1000 |
| #define TX_Q_Sizes gFppGlobals.FG_TX_Q_Sizes |
| #define gPOOL_A_BASE (gFppGlobals.POOL_A_BASE) |
| #define gPOOL_A_SIZE (gFppGlobals.POOL_A_SIZE) |
| #define gPOOL_B_BASE (gFppGlobals.POOL_B_BASE) |
| #define gPOOL_B_SIZE (gFppGlobals.POOL_B_SIZE) |
| #endif |
| |
| #if defined (COMCERTO_2000_CONTROL) |
| extern tControlGlobals gCtrlGlobals __attribute__((aligned(32))); |
| #define udp_unidir_timeout gCtrlGlobals.FG_udp_unidir_timeout |
| #define udp_bidir_timeout gCtrlGlobals.FG_udp_bidir_timeout |
| #define tcp_timeout gCtrlGlobals.FG_tcp_timeout |
| #define other_proto_timeout gCtrlGlobals.FG_other_proto_timeout |
| #define udp_4o6_unidir_timeout gCtrlGlobals.FG_4o6_udp_unidir_timeout |
| #define udp_4o6_bidir_timeout gCtrlGlobals.FG_4o6_udp_bidir_timeout |
| #define tcp_4o6_timeout gCtrlGlobals.FG_4o6_tcp_timeout |
| #define other_4o6_proto_timeout gCtrlGlobals.FG_4o6_other_proto_timeout |
| #define PPPoE_entries gCtrlGlobals.FG_PPPoE_entries |
| #endif |
| |
| |
| |
| #define RxOutputChannel gFppGlobals.FG_RxOutputChannel |
| #define cpu_busy_cycles (gFppGlobals.FG_cpu_busy_cycles) |
| #define cpu_idle_cycles (gFppGlobals.FG_cpu_idle_cycles) |
| #define cpu_idle_end gFppGlobals.FG_cpu_idle_end |
| #define hGlobalHeap (gFppGlobals.FG_hGlobalHeap) |
| #define hGlobalAramHeap (gFppGlobals.FG_hGlobalAramHeap) |
| #define ct_timer gFppGlobals.FG_ct_timer |
| #define ct_bin_start gFppGlobals.FG_ct_bin_start |
| #if !defined (COMCERTO_2000_UTIL) |
| #define fpp_ident gFppGlobals.FG_identification |
| #endif |
| #define ff_enable gFppGlobals.FG_ff_enable |
| #if defined (COMCERTO_2000) |
| |
| #define phy_port_get(port) ((port < MAX_PHY_PORTS_FAST)? &phy_port[port] : (struct physical_port *)&phy_port_slow[port - MAX_PHY_PORTS_FAST]) |
| //#define udp_unidir_timeout gFppGlobals.FG_udp_unidir_timeout |
| //#define udp_bidir_timeout gFppGlobals.FG_udp_bidir_timeout |
| //#define tcp_timeout gFppGlobals.FG_tcp_timeout |
| //#define other_proto_timeout gFppGlobals.FG_other_proto_timeout |
| //#define udp_4o6_unidir_timeout gFppGlobals.FG_4o6_udp_unidir_timeout |
| //#define udp_4o6_bidir_timeout gFppGlobals.FG_4o6_udp_bidir_timeout |
| //#define tcp_4o6_timeout gFppGlobals.FG_4o6_tcp_timeout |
| //#define other_4o6_proto_timeout gFppGlobals.FG_4o6_other_proto_timeout |
| #else |
| #define phy_port_get(port) (&phy_port[port]) |
| #define udp_bidir_timeout gFppGlobals.FG_udp_bidir_timeout |
| #define ct_proto_timeout gFppGlobals.FG_ct_proto_timeout |
| #define udp_unidir_timeout ct_proto_timeout[PROTO_L4_UDP] |
| #define tcp_timeout ct_proto_timeout[PROTO_L4_TCP] |
| #define other_proto_timeout ct_proto_timeout[PROTO_L4_UNKNOWN] |
| #define FG_4o6_proto_timeout 4o6_proto_timeout |
| #define udp_4o6_unidir_timeout 4o6_proto_timeout[PROTO_L4_UDP] |
| #define tcp_4o6_timeout 4o6_proto_timeout[PROTO_L4_TCP] |
| #define other_4o6_proto_timeout 4o6_proto_timeout[PROTO_L4_UNKNOWN] |
| #define ipv6_frag_timeout gFppGlobals.FG_IPv6fragTimeout |
| #define ipv4_frag_timeout gFppGlobals.FG_IPv4fragTimeout |
| #define ipv6_frag_expirydrop gFppGlobals.FG_IPv6fragExpiryDrop |
| #define ipv4_frag_expirydrop gFppGlobals.FG_IPv4fragExpiryDrop |
| #define ipv4_fill_cntr gFppGlobals.FG_ipv4_fill_cntr |
| #define ipv4_free_cntr gFppGlobals.FG_ipv4_free_cntr |
| #define ipv6_fill_cntr gFppGlobals.FG_ipv6_fill_cntr |
| #define ipv6_free_cntr gFppGlobals.FG_ipv6_free_cntr |
| #define PPPoE_entries gFppGlobals.FG_PPPoE_entries |
| #endif |
| #define g_mc6_mode gFppGlobals.FG_g_mc6_mode |
| #define preload_addr gFppGlobals.FG_preload_addr |
| |
| |
| |
| #if !defined(COMCERTO_2000) |
| #define L2bridge_enabled gFppGlobals.FG_L2bridge_enabled |
| #define L2Bridge_entries gFppGlobals.FG_L2Bridge_entries |
| #define L2Bridge_mode gFppGlobals.FG_L2Bridge_mode |
| #define L2Bridge_timeout gFppGlobals.FG_L2Bridge_timeout |
| #define L2Bridge_bin_number gFppGlobals.FG_L2Bridge_bin_number |
| #define L2Bridge_l3_bin_number gFppGlobals.FG_L2Bridge_l3_bin_number |
| #endif |
| |
| #define ipsec_pre_frag gFppGlobals.FG_ipsec_pre_frag |
| |
| #ifdef CFG_DEBUG_COUNTERS |
| #ifdef COMCERTO_2000 |
| typedef struct _tDebugCounters { |
| U32 DEBUG_packets_received[5]; // offset 0x00 |
| U32 DEBUG_packets_received_expt[5]; // offset 0x14 |
| U32 DEBUG_packets_transmitted[5]; // offset 0x28 |
| U32 DEBUG_packets_transmitted_expt[5]; // offset 0x3c |
| //U32 DEBUG_packets_dropped_qm[5]; // offset 0x50 |
| U32 DEBUG_packets_dropped_tx[5]; // offset 0x64 |
| U32 DEBUG_packets_dropped_rxerror[5]; // offset 0x78 |
| U32 DEBUG_packets_dropped_icc[5]; // offset 0x8c |
| U32 DEBUG_packets_dropped_expt[5]; // offset 0xa0 |
| //U32 DEBUG_rx_no_metadata; // offset 0xb4 |
| U32 DEBUG_packets_dropped_expt_invalid_port; // offset 0xb8 |
| U32 DEBUG_packets_dropped_ipv4_cksum; // offset 0xbc |
| U32 DEBUG_packets_dropped_ipv4_fragmenter; // offset 0xc0 |
| U32 DEBUG_packets_dropped_ipv6_fragmenter; // offset 0xc4 |
| //U32 DEBUG_packets_dropped_channel_full; // offset 0xc8 |
| U32 DEBUG_packets_dropped_socket_not_bound1; // offset 0xcc |
| U32 DEBUG_packets_dropped_socket_not_bound2; // offset 0xd0 |
| U32 DEBUG_packets_dropped_socket_not_bound3; // offset 0xd4 |
| U32 DEBUG_packets_dropped_socket_no_route; // offset 0xd8 |
| |
| U32 DEBUG_packets_dropped_rtp_relay_no_flow; // offset 0xdc |
| U32 DEBUG_packets_dropped_rtp_relay_no_socket; // offset 0xe0 |
| U32 DEBUG_packets_dropped_rtp_relay_discard; // offset 0xe4 |
| U32 DEBUG_packets_dropped_rtp_relay_misc; // offset 0xe8 |
| |
| U32 DEBUG_packets_dropped_ipsec_inbound; // offset 0xec |
| U32 DEBUG_packets_dropped_ipsec_outbound; // offset 0xf0 |
| U32 DEBUG_packets_dropped_ipsec_rate_limiter; // offset 0xf4 |
| |
| U32 DEBUG_packets_dropped_natt; // offset 0xf8 |
| U32 DEBUG_packets_dropped_natpt; // offset 0xfc |
| |
| U32 DEBUG_packets_dropped_mc4; // offset 0x100 |
| U32 DEBUG_packets_dropped_mc6; // offset 0x104 |
| U32 DEBUG_packets_dropped_fragments; // offset 0x108 |
| U32 DEBUG_packets_dropped_expt_rx_ipsec; // offset 0x10c |
| } tDebugCounters; |
| #else |
| typedef struct _tDebugCounters { |
| U32 DEBUG_packets_received[4]; // offset 0x00 |
| U32 DEBUG_packets_received_expt[4]; // offset 0x10 |
| U32 DEBUG_packets_transmitted[4]; // offset 0x20 |
| U32 DEBUG_packets_transmitted_expt[4]; // offset 0x30 |
| U32 DEBUG_packets_dropped_qm[4]; // offset 0x40 |
| U32 DEBUG_packets_dropped_tx[4]; // offset 0x50 |
| U32 DEBUG_packets_dropped_rxerror[4]; // offset 0x60 |
| U32 DEBUG_packets_dropped_icc[4]; // offset 0x70 |
| U32 DEBUG_packets_dropped_expt[4]; // offset 0x80 |
| U32 DEBUG_packets_dropped_poolA; // offset 0x90 |
| U32 DEBUG_packets_dropped_poolB; // offset 0x94 |
| U32 DEBUG_rx_no_metadata; // offset 0x98 |
| U32 DEBUG_packets_dropped_expt_invalid_port; // offset 0x9c |
| U32 DEBUG_packets_dropped_ipv4_cksum; // offset 0xa0 |
| U32 DEBUG_packets_dropped_ipv4_fragmenter; // offset 0xa4 |
| U32 DEBUG_packets_dropped_ipv6_fragmenter; // offset 0xa8 |
| U32 DEBUG_packets_dropped_channel_full; // offset 0xac |
| U32 DEBUG_packets_dropped_socket_not_bound1; // offset 0xb0 |
| U32 DEBUG_packets_dropped_socket_not_bound2; // offset 0xb4 |
| U32 DEBUG_packets_dropped_socket_not_bound3; // offset 0xb8 |
| U32 DEBUG_packets_dropped_socket_no_route; // offset 0xbc |
| U32 DEBUG_packets_dropped_rtp_relay_no_flow; // offset 0xc0 |
| U32 DEBUG_packets_dropped_rtp_relay_no_socket; // offset 0xc4 |
| U32 DEBUG_packets_dropped_rtp_relay_discard; // offset 0xc8 |
| U32 DEBUG_packets_dropped_rtp_relay_misc; // offset 0xcc |
| U32 DEBUG_packets_dropped_ipsec_inbound; // offset 0xd0 |
| U32 DEBUG_packets_dropped_ipsec_outbound; // offset 0xd4 |
| U32 DEBUG_packets_dropped_ipsec_rate_limiter; // offset 0xd8 |
| U32 DEBUG_packets_dropped_natt; // offset 0xdc |
| U32 DEBUG_packets_dropped_natpt; // offset 0xe0 |
| U32 DEBUG_packets_dropped_mc4; // offset 0xe4 |
| U32 DEBUG_packets_dropped_mc6; // offset 0xe8 |
| U32 DEBUG_packets_dropped_fragments; // offset 0xec |
| U32 DEBUG_packets_dropped_expt_rx_ipsec; // offset 0xf0 |
| U32 pad[3]; |
| U32 DEBUG_debug[16][4]; // offset 0x100 |
| } tDebugCounters; |
| #endif |
| |
| extern tDebugCounters gDebugCounters __attribute__((aligned(32))); |
| |
| #define COUNTER_INCREMENT(counter) do { (gDebugCounters.DEBUG_##counter) += 1; } while(0) |
| #define COUNTER_ADD(counter, add_amount) do { (gDebugCounters.DEBUG_##counter) += add_amount; } while(0) |
| #define COUNTER_SET(counter, value) do { (gDebugCounters.DEBUG_##counter) = value; } while(0) |
| #define COUNTER_GET(counter) (gDebugCounters.DEBUG_##counter) |
| #else |
| #define COUNTER_INCREMENT(counter) do {} while(0) |
| #define COUNTER_ADD(counter, add_amount) do {} while(0) |
| #define COUNTER_SET(counter, value) do {} while(0) |
| #define COUNTER_GET(counter) do {} while {0} |
| #endif |
| |
| |
| #if defined(COMCERTO_2000_CLASS) |
| extern U32 regMask[CLASS_MAX_PBUFFERS]; |
| extern U32 pe_id; |
| extern U32 pe_ip_ident_mask; |
| #endif |
| #endif /* _FPP_GLOBALS_H_ */ |