1*d39a76e7Sxw161283 /* 2*d39a76e7Sxw161283 * CDDL HEADER START 3*d39a76e7Sxw161283 * 4*d39a76e7Sxw161283 * The contents of this file are subject to the terms of the 5*d39a76e7Sxw161283 * Common Development and Distribution License (the "License"). 6*d39a76e7Sxw161283 * You may not use this file except in compliance with the License. 7*d39a76e7Sxw161283 * 8*d39a76e7Sxw161283 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*d39a76e7Sxw161283 * or http://www.opensolaris.org/os/licensing. 10*d39a76e7Sxw161283 * See the License for the specific language governing permissions 11*d39a76e7Sxw161283 * and limitations under the License. 12*d39a76e7Sxw161283 * 13*d39a76e7Sxw161283 * When distributing Covered Code, include this CDDL HEADER in each 14*d39a76e7Sxw161283 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*d39a76e7Sxw161283 * If applicable, add the following below this CDDL HEADER, with the 16*d39a76e7Sxw161283 * fields enclosed by brackets "[]" replaced with your own identifying 17*d39a76e7Sxw161283 * information: Portions Copyright [yyyy] [name of copyright owner] 18*d39a76e7Sxw161283 * 19*d39a76e7Sxw161283 * CDDL HEADER END 20*d39a76e7Sxw161283 */ 21*d39a76e7Sxw161283 22*d39a76e7Sxw161283 /* 23*d39a76e7Sxw161283 * Copyright 2005 Sun Microsystems, Inc. All rights reserved. 24*d39a76e7Sxw161283 * Use is subject to license terms. 25*d39a76e7Sxw161283 */ 26*d39a76e7Sxw161283 27*d39a76e7Sxw161283 /* 28*d39a76e7Sxw161283 * This file is part of the Chelsio T1 Ethernet driver. 29*d39a76e7Sxw161283 * 30*d39a76e7Sxw161283 * Copyright (C) 2003-2005 Chelsio Communications. All rights reserved. 31*d39a76e7Sxw161283 */ 32*d39a76e7Sxw161283 33*d39a76e7Sxw161283 #ifndef _CHELSIO_OSCHTOE_H 34*d39a76e7Sxw161283 #define _CHELSIO_OSCHTOE_H 35*d39a76e7Sxw161283 36*d39a76e7Sxw161283 #pragma ident "%Z%%M% %I% %E% SMI" 37*d39a76e7Sxw161283 38*d39a76e7Sxw161283 #ifdef __cplusplus 39*d39a76e7Sxw161283 extern "C" { 40*d39a76e7Sxw161283 #endif 41*d39a76e7Sxw161283 42*d39a76e7Sxw161283 typedef struct _pesge pesge; 43*d39a76e7Sxw161283 44*d39a76e7Sxw161283 /* looks like this should really be with mc5.h */ 45*d39a76e7Sxw161283 #define DEFAULT_SERVER_REGION_LEN 256 46*d39a76e7Sxw161283 #define DEFAULT_RT_REGION_LEN 1024 47*d39a76e7Sxw161283 48*d39a76e7Sxw161283 /* 49*d39a76e7Sxw161283 * Bits used to configure driver behavior. 50*d39a76e7Sxw161283 */ 51*d39a76e7Sxw161283 #define CFGDMP_RSPQ 0x00000001 /* dump respq info */ 52*d39a76e7Sxw161283 #define CFGDMP_CMDQ0 0x00000010 /* dump cmdq0 info */ 53*d39a76e7Sxw161283 #define CFGDMP_CMDQ0MB 0x00000020 /* dump cmdq0 mbufs */ 54*d39a76e7Sxw161283 #define CFGDMP_CMDQ1 0x00000040 /* dump cmdq1 info */ 55*d39a76e7Sxw161283 #define CFGDMP_CMDQ1MB 0x00000080 /* dump cmdq1 mbufs */ 56*d39a76e7Sxw161283 #define CFGDMP_FLQ0 0x00000100 /* dump flq0 info */ 57*d39a76e7Sxw161283 #define CFGDMP_FLQ0MB 0x00000200 /* dump flq0 mbufs */ 58*d39a76e7Sxw161283 #define CFGDMP_FLQ1 0x00000400 /* dump flq1 info */ 59*d39a76e7Sxw161283 #define CFGDMP_FLQ1MB 0x00000800 /* dump flq1 mbufs */ 60*d39a76e7Sxw161283 #define CFGDMP_ISRC 0x00001000 /* dump ISR 32 bit cause */ 61*d39a76e7Sxw161283 #define CFGDMP_ISR 0x00002000 /* dump ISR info */ 62*d39a76e7Sxw161283 #define CFGDMP_OUT 0x00004000 /* dump OUT info */ 63*d39a76e7Sxw161283 #define CFGDMP_GMACC 0x00010000 /* dump GMAC cause bits */ 64*d39a76e7Sxw161283 #define CFGDMP_PCIXC 0x00020000 /* dump PCIX cause bits */ 65*d39a76e7Sxw161283 #define CFGDMP_TPC 0x00040000 /* dump TP cause bits */ 66*d39a76e7Sxw161283 #define CFGDMP_MC5C 0x00080000 /* dump MC5 cause bits */ 67*d39a76e7Sxw161283 68*d39a76e7Sxw161283 #define CFGMD_RINGB 0x00100000 /* Store all packets in ring buffer */ 69*d39a76e7Sxw161283 #define CFGMD_PROFILE 0x00200000 /* Enable driver profiling */ 70*d39a76e7Sxw161283 71*d39a76e7Sxw161283 #define CFGDMP_ERR 0x01000000 /* dump errors */ 72*d39a76e7Sxw161283 #define CFGDMP_WRN 0x02000000 /* dump warnings */ 73*d39a76e7Sxw161283 #define CFGDMP_STA 0x04000000 /* dump status info */ 74*d39a76e7Sxw161283 #define CFGDMP_PTH 0x08000000 /* dump function paths */ 75*d39a76e7Sxw161283 76*d39a76e7Sxw161283 #define CFGMD_TUNNEL 0x10000000 /* Global tunnel mode ( 0-offload mode ) */ 77*d39a76e7Sxw161283 #define CFGMD_144BIT 0x20000000 /* Puts MC5 in 144 bit mode */ 78*d39a76e7Sxw161283 #define CFGMD_CPLBPF 0x40000000 /* Include CPL header when bpf_map called */ 79*d39a76e7Sxw161283 80*d39a76e7Sxw161283 /* 81*d39a76e7Sxw161283 * Structure used to store drivers configuration information. 82*d39a76e7Sxw161283 * Some of this information will be move out later or 83*d39a76e7Sxw161283 * stored elsewhere. For now, it helps with development. 84*d39a76e7Sxw161283 */ 85*d39a76e7Sxw161283 typedef struct pe_config_data { 86*d39a76e7Sxw161283 uint32_t gtm; /* run in Global Tunnel Mode */ 87*d39a76e7Sxw161283 uint32_t global_config; /* override global debug value */ 88*d39a76e7Sxw161283 89*d39a76e7Sxw161283 uint32_t is_asic; 90*d39a76e7Sxw161283 91*d39a76e7Sxw161283 /* 92*d39a76e7Sxw161283 * 5-auto-neg 93*d39a76e7Sxw161283 * 2-1000Gbps(force); 94*d39a76e7Sxw161283 * 1-100Gbps(force); 95*d39a76e7Sxw161283 * 0-10Gbps(force) 96*d39a76e7Sxw161283 */ 97*d39a76e7Sxw161283 uint32_t link_speed; 98*d39a76e7Sxw161283 99*d39a76e7Sxw161283 uint32_t num_of_ports; /* Set the number of ports [1-4] */ 100*d39a76e7Sxw161283 101*d39a76e7Sxw161283 uint32_t tp_reset_cm; /* reset CM memory map */ 102*d39a76e7Sxw161283 103*d39a76e7Sxw161283 uint32_t phy_tx_fifo; /* phy's tx fifo depth */ 104*d39a76e7Sxw161283 uint32_t phy_rx_fifo; /* phy's rx fifo depth */ 105*d39a76e7Sxw161283 uint32_t phy_force_master; /* force link always in master mode */ 106*d39a76e7Sxw161283 107*d39a76e7Sxw161283 uint32_t mc5_rtbl_size; /* TCAM routing table size */ 108*d39a76e7Sxw161283 uint32_t mc5_dbsvr_size; /* TCAM server size */ 109*d39a76e7Sxw161283 uint32_t mc5_mode; /* 72 bit or 144 bit mode */ 110*d39a76e7Sxw161283 uint32_t mc5_parity; /* Enable parity error checking */ 111*d39a76e7Sxw161283 uint32_t mc5_issue_syn; /* Allow for transaction overlap */ 112*d39a76e7Sxw161283 113*d39a76e7Sxw161283 uint32_t packet_tracing; 114*d39a76e7Sxw161283 115*d39a76e7Sxw161283 uint32_t server_region_len; 116*d39a76e7Sxw161283 uint32_t rt_region_len; 117*d39a76e7Sxw161283 118*d39a76e7Sxw161283 uint32_t offload_ip_cksum; /* on/off checksum offloading */ 119*d39a76e7Sxw161283 uint32_t offload_udp_cksum; 120*d39a76e7Sxw161283 uint32_t offload_tcp_cksum; 121*d39a76e7Sxw161283 122*d39a76e7Sxw161283 uint32_t sge_cmdq_sp; /* set sw schedule policy */ 123*d39a76e7Sxw161283 uint32_t sge_cmdq_threshold; /* used w/ sw schedule policy */ 124*d39a76e7Sxw161283 uint32_t sge_flq_threshold; /* set SGE's flq threshold register */ 125*d39a76e7Sxw161283 126*d39a76e7Sxw161283 uint32_t sge_cmdq0_cnt; /* set # entries of cmdq0 */ 127*d39a76e7Sxw161283 uint32_t sge_cmdq1_cnt; /* set # entries of cmdq1 */ 128*d39a76e7Sxw161283 uint32_t sge_flq0_cnt; /* set # entries of flq0 */ 129*d39a76e7Sxw161283 uint32_t sge_flq1_cnt; /* set # entries of flq1 */ 130*d39a76e7Sxw161283 uint32_t sge_respq_cnt; /* set # entries of respq */ 131*d39a76e7Sxw161283 132*d39a76e7Sxw161283 133*d39a76e7Sxw161283 /* 134*d39a76e7Sxw161283 * Update MAC stats automatically. 135*d39a76e7Sxw161283 * Sometimes we don't want this to 136*d39a76e7Sxw161283 * happen when debugging 137*d39a76e7Sxw161283 */ 138*d39a76e7Sxw161283 uint32_t stats; 139*d39a76e7Sxw161283 140*d39a76e7Sxw161283 /* 141*d39a76e7Sxw161283 * Add microsecond delay to packets 142*d39a76e7Sxw161283 * sent in Tx direction. This is useful 143*d39a76e7Sxw161283 * in testing hardware. 144*d39a76e7Sxw161283 */ 145*d39a76e7Sxw161283 uint32_t tx_delay_us; 146*d39a76e7Sxw161283 147*d39a76e7Sxw161283 /* 148*d39a76e7Sxw161283 * Can change chip revision support 149*d39a76e7Sxw161283 * settting -1 default. Uses hardware 150*d39a76e7Sxw161283 * lookup table. 151*d39a76e7Sxw161283 * 0 force T1A 152*d39a76e7Sxw161283 * 1 force T1B 153*d39a76e7Sxw161283 */ 154*d39a76e7Sxw161283 uint32_t chip; 155*d39a76e7Sxw161283 156*d39a76e7Sxw161283 /* 157*d39a76e7Sxw161283 * Used to only initialize PCI so 158*d39a76e7Sxw161283 * read/write registers work. The 159*d39a76e7Sxw161283 * driver does not initialize anything 160*d39a76e7Sxw161283 * of the HW blocks. 161*d39a76e7Sxw161283 */ 162*d39a76e7Sxw161283 uint32_t exit_early; 163*d39a76e7Sxw161283 164*d39a76e7Sxw161283 /* local ring buffer */ 165*d39a76e7Sxw161283 uint32_t rb_num_of_entries; /* number of entries */ 166*d39a76e7Sxw161283 uint32_t rb_size_of_entries; /* bytes size of an entry */ 167*d39a76e7Sxw161283 uint32_t rb_flag; /* varies flags */ 168*d39a76e7Sxw161283 169*d39a76e7Sxw161283 /* Opt values used to store CATP options. */ 170*d39a76e7Sxw161283 uint32_t type; 171*d39a76e7Sxw161283 uint64_t cat_opt0; 172*d39a76e7Sxw161283 uint64_t cat_opt1; 173*d39a76e7Sxw161283 174*d39a76e7Sxw161283 } pe_config_data_t; 175*d39a76e7Sxw161283 176*d39a76e7Sxw161283 struct pe_port_t { 177*d39a76e7Sxw161283 uint8_t enaddr[6]; 178*d39a76e7Sxw161283 struct cmac *mac; 179*d39a76e7Sxw161283 struct cphy *phy; 180*d39a76e7Sxw161283 struct link_config link_config; 181*d39a76e7Sxw161283 u32 line_up; 182*d39a76e7Sxw161283 }; 183*d39a76e7Sxw161283 184*d39a76e7Sxw161283 #define DBGASSERT(c) ASSERT(c) 185*d39a76e7Sxw161283 186*d39a76e7Sxw161283 #define t1_is_T1A(adap) adapter_matches_type(adap, CHBT_TERM_T1, TERM_T1A) 187*d39a76e7Sxw161283 #define t1_is_T1B(adap) adapter_matches_type(adap, CHBT_TERM_T1, TERM_T1B) 188*d39a76e7Sxw161283 #define t1_is_T1C(adap) adapter_matches_type(adap, CHBT_TERM_T1, TERM_T1C) 189*d39a76e7Sxw161283 190*d39a76e7Sxw161283 #ifdef __cplusplus 191*d39a76e7Sxw161283 } 192*d39a76e7Sxw161283 #endif 193*d39a76e7Sxw161283 194*d39a76e7Sxw161283 #endif /* _CHELSIO_OSCHTOE_H */ 195