17956Sxiuyan.wang@Sun.COM /* 27956Sxiuyan.wang@Sun.COM * CDDL HEADER START 37956Sxiuyan.wang@Sun.COM * 47956Sxiuyan.wang@Sun.COM * The contents of this file are subject to the terms of the 57956Sxiuyan.wang@Sun.COM * Common Development and Distribution License (the "License"). 67956Sxiuyan.wang@Sun.COM * You may not use this file except in compliance with the License. 77956Sxiuyan.wang@Sun.COM * 87956Sxiuyan.wang@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 97956Sxiuyan.wang@Sun.COM * or http://www.opensolaris.org/os/licensing. 107956Sxiuyan.wang@Sun.COM * See the License for the specific language governing permissions 117956Sxiuyan.wang@Sun.COM * and limitations under the License. 127956Sxiuyan.wang@Sun.COM * 137956Sxiuyan.wang@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 147956Sxiuyan.wang@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 157956Sxiuyan.wang@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 167956Sxiuyan.wang@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 177956Sxiuyan.wang@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 187956Sxiuyan.wang@Sun.COM * 197956Sxiuyan.wang@Sun.COM * CDDL HEADER END 207956Sxiuyan.wang@Sun.COM */ 218687SJing.Xiong@Sun.COM 227956Sxiuyan.wang@Sun.COM /* 237956Sxiuyan.wang@Sun.COM * Copyright 2008 NetXen, Inc. All rights reserved. 247956Sxiuyan.wang@Sun.COM * Use is subject to license terms. 257956Sxiuyan.wang@Sun.COM */ 268687SJing.Xiong@Sun.COM 278687SJing.Xiong@Sun.COM #ifndef _UNM_INC_H_ 288687SJing.Xiong@Sun.COM #define _UNM_INC_H_ 298687SJing.Xiong@Sun.COM 308687SJing.Xiong@Sun.COM #ifdef __cplusplus 318687SJing.Xiong@Sun.COM extern "C" { 328687SJing.Xiong@Sun.COM #endif 337956Sxiuyan.wang@Sun.COM 347956Sxiuyan.wang@Sun.COM #include "nx_errorcode.h" 357956Sxiuyan.wang@Sun.COM 367956Sxiuyan.wang@Sun.COM #define PREALIGN(x) 377956Sxiuyan.wang@Sun.COM #define POSTALIGN(x) 387956Sxiuyan.wang@Sun.COM 397956Sxiuyan.wang@Sun.COM typedef char __int8_t; 407956Sxiuyan.wang@Sun.COM typedef short __int16_t; 417956Sxiuyan.wang@Sun.COM typedef int __int32_t; 427956Sxiuyan.wang@Sun.COM typedef long long __int64_t; 437956Sxiuyan.wang@Sun.COM typedef unsigned char __uint8_t; 447956Sxiuyan.wang@Sun.COM typedef unsigned short __uint16_t; 457956Sxiuyan.wang@Sun.COM typedef unsigned int __uint32_t; 467956Sxiuyan.wang@Sun.COM typedef unsigned long long __uint64_t; 477956Sxiuyan.wang@Sun.COM typedef __uint64_t jiffies_t; 487956Sxiuyan.wang@Sun.COM 497956Sxiuyan.wang@Sun.COM typedef uint8_t u8; 507956Sxiuyan.wang@Sun.COM typedef uint8_t U8; 517956Sxiuyan.wang@Sun.COM typedef uint16_t U16; 527956Sxiuyan.wang@Sun.COM typedef uint32_t u32; 537956Sxiuyan.wang@Sun.COM typedef uint32_t U32; 547956Sxiuyan.wang@Sun.COM typedef unsigned long long u64; 557956Sxiuyan.wang@Sun.COM typedef unsigned long long U64; 567956Sxiuyan.wang@Sun.COM 577956Sxiuyan.wang@Sun.COM #define UNUSED __attribute__((unused)) 587956Sxiuyan.wang@Sun.COM #define NOINLINE __attribute__((noinline)) 597956Sxiuyan.wang@Sun.COM 607956Sxiuyan.wang@Sun.COM #include "nx_hw_pci_regs.h" 617956Sxiuyan.wang@Sun.COM 627956Sxiuyan.wang@Sun.COM #define UNM_CONF_X86 3 637956Sxiuyan.wang@Sun.COM 647956Sxiuyan.wang@Sun.COM #define bzero(A, B) memset((A), 0, (B)) 657956Sxiuyan.wang@Sun.COM 667956Sxiuyan.wang@Sun.COM /* 677956Sxiuyan.wang@Sun.COM * MAX_RCV_CTX : The number of receive contexts that are available on 687956Sxiuyan.wang@Sun.COM * the phantom. 697956Sxiuyan.wang@Sun.COM */ 707956Sxiuyan.wang@Sun.COM #define MAX_RCV_CTX 1 717956Sxiuyan.wang@Sun.COM 727956Sxiuyan.wang@Sun.COM /* ------------------------------------------------------------------------ */ 737956Sxiuyan.wang@Sun.COM /* CRB Hub and Agent addressing */ 747956Sxiuyan.wang@Sun.COM /* ------------------------------------------------------------------------ */ 757956Sxiuyan.wang@Sun.COM /* 767956Sxiuyan.wang@Sun.COM * WARNING: pex_tgt_adr.v assumes if MSB of hub adr is set then it is an 777956Sxiuyan.wang@Sun.COM * ILLEGAL hub!!!!! 787956Sxiuyan.wang@Sun.COM */ 797956Sxiuyan.wang@Sun.COM #define UNM_HW_H0_CH_HUB_ADR 0x05 807956Sxiuyan.wang@Sun.COM #define UNM_HW_H1_CH_HUB_ADR 0x0E 817956Sxiuyan.wang@Sun.COM #define UNM_HW_H2_CH_HUB_ADR 0x03 827956Sxiuyan.wang@Sun.COM #define UNM_HW_H3_CH_HUB_ADR 0x01 837956Sxiuyan.wang@Sun.COM #define UNM_HW_H4_CH_HUB_ADR 0x06 847956Sxiuyan.wang@Sun.COM #define UNM_HW_H5_CH_HUB_ADR 0x07 857956Sxiuyan.wang@Sun.COM #define UNM_HW_H6_CH_HUB_ADR 0x08 867956Sxiuyan.wang@Sun.COM /* 877956Sxiuyan.wang@Sun.COM * WARNING: pex_tgt_adr.v assumes if MSB of hub adr is set then it is an 887956Sxiuyan.wang@Sun.COM * ILLEGAL hub!!!!! 897956Sxiuyan.wang@Sun.COM */ 907956Sxiuyan.wang@Sun.COM 917956Sxiuyan.wang@Sun.COM /* Hub 0 */ 927956Sxiuyan.wang@Sun.COM #define UNM_HW_MN_CRB_AGT_ADR 0x15 937956Sxiuyan.wang@Sun.COM #define UNM_HW_MS_CRB_AGT_ADR 0x25 947956Sxiuyan.wang@Sun.COM 957956Sxiuyan.wang@Sun.COM /* Hub 1 */ 967956Sxiuyan.wang@Sun.COM #define UNM_HW_PS_CRB_AGT_ADR 0x73 977956Sxiuyan.wang@Sun.COM #define UNM_HW_SS_CRB_AGT_ADR 0x20 987956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX3_CRB_AGT_ADR 0x0b 997956Sxiuyan.wang@Sun.COM #define UNM_HW_QMS_CRB_AGT_ADR 0x00 1007956Sxiuyan.wang@Sun.COM #define UNM_HW_SQGS0_CRB_AGT_ADR 0x01 1017956Sxiuyan.wang@Sun.COM #define UNM_HW_SQGS1_CRB_AGT_ADR 0x02 1027956Sxiuyan.wang@Sun.COM #define UNM_HW_SQGS2_CRB_AGT_ADR 0x03 1037956Sxiuyan.wang@Sun.COM #define UNM_HW_SQGS3_CRB_AGT_ADR 0x04 1047956Sxiuyan.wang@Sun.COM #define UNM_HW_C2C0_CRB_AGT_ADR 0x58 1057956Sxiuyan.wang@Sun.COM #define UNM_HW_C2C1_CRB_AGT_ADR 0x59 1067956Sxiuyan.wang@Sun.COM #define UNM_HW_C2C2_CRB_AGT_ADR 0x5a 1077956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX2_CRB_AGT_ADR 0x0a 1087956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX4_CRB_AGT_ADR 0x0c 1097956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX7_CRB_AGT_ADR 0x0f 1107956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX9_CRB_AGT_ADR 0x12 1117956Sxiuyan.wang@Sun.COM #define UNM_HW_SMB_CRB_AGT_ADR 0x18 1127956Sxiuyan.wang@Sun.COM 1137956Sxiuyan.wang@Sun.COM /* Hub 2 */ 1147956Sxiuyan.wang@Sun.COM #define UNM_HW_NIU_CRB_AGT_ADR 0x31 1157956Sxiuyan.wang@Sun.COM #define UNM_HW_I2C0_CRB_AGT_ADR 0x19 1167956Sxiuyan.wang@Sun.COM #define UNM_HW_I2C1_CRB_AGT_ADR 0x29 1177956Sxiuyan.wang@Sun.COM 1187956Sxiuyan.wang@Sun.COM #define UNM_HW_SN_CRB_AGT_ADR 0x10 1197956Sxiuyan.wang@Sun.COM #define UNM_HW_I2Q_CRB_AGT_ADR 0x20 1207956Sxiuyan.wang@Sun.COM #define UNM_HW_LPC_CRB_AGT_ADR 0x22 1217956Sxiuyan.wang@Sun.COM #define UNM_HW_ROMUSB_CRB_AGT_ADR 0x21 1227956Sxiuyan.wang@Sun.COM #define UNM_HW_QM_CRB_AGT_ADR 0x66 1237956Sxiuyan.wang@Sun.COM #define UNM_HW_SQG0_CRB_AGT_ADR 0x60 1247956Sxiuyan.wang@Sun.COM #define UNM_HW_SQG1_CRB_AGT_ADR 0x61 1257956Sxiuyan.wang@Sun.COM #define UNM_HW_SQG2_CRB_AGT_ADR 0x62 1267956Sxiuyan.wang@Sun.COM #define UNM_HW_SQG3_CRB_AGT_ADR 0x63 1277956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX1_CRB_AGT_ADR 0x09 1287956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX5_CRB_AGT_ADR 0x0d 1297956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX6_CRB_AGT_ADR 0x0e 1307956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX8_CRB_AGT_ADR 0x11 1317956Sxiuyan.wang@Sun.COM 1327956Sxiuyan.wang@Sun.COM /* Hub 3 */ 1337956Sxiuyan.wang@Sun.COM #define UNM_HW_PH_CRB_AGT_ADR 0x1A 1347956Sxiuyan.wang@Sun.COM #define UNM_HW_SRE_CRB_AGT_ADR 0x50 1357956Sxiuyan.wang@Sun.COM #define UNM_HW_EG_CRB_AGT_ADR 0x51 1367956Sxiuyan.wang@Sun.COM #define UNM_HW_RPMX0_CRB_AGT_ADR 0x08 1377956Sxiuyan.wang@Sun.COM 1387956Sxiuyan.wang@Sun.COM /* Hub 4 */ 1397956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGN0_CRB_AGT_ADR 0x40 1407956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGN1_CRB_AGT_ADR 0x41 1417956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGN2_CRB_AGT_ADR 0x42 1427956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGN3_CRB_AGT_ADR 0x43 1437956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGNI_CRB_AGT_ADR 0x44 1447956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGND_CRB_AGT_ADR 0x45 1457956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGNC_CRB_AGT_ADR 0x46 1467956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGR0_CRB_AGT_ADR 0x47 1477956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGR1_CRB_AGT_ADR 0x48 1487956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGR2_CRB_AGT_ADR 0x49 1497956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGR3_CRB_AGT_ADR 0x4a 1507956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGN4_CRB_AGT_ADR 0x4b 1517956Sxiuyan.wang@Sun.COM 1527956Sxiuyan.wang@Sun.COM /* Hub 5 */ 1537956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGS0_CRB_AGT_ADR 0x40 1547956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGS1_CRB_AGT_ADR 0x41 1557956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGS2_CRB_AGT_ADR 0x42 1567956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGS3_CRB_AGT_ADR 0x43 1577956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGSI_CRB_AGT_ADR 0x44 1587956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGSD_CRB_AGT_ADR 0x45 1597956Sxiuyan.wang@Sun.COM #define UNM_HW_PEGSC_CRB_AGT_ADR 0x46 1607956Sxiuyan.wang@Sun.COM 1617956Sxiuyan.wang@Sun.COM /* Hub 6 */ 1627956Sxiuyan.wang@Sun.COM #define UNM_HW_CAS0_CRB_AGT_ADR 0x46 1637956Sxiuyan.wang@Sun.COM #define UNM_HW_CAS1_CRB_AGT_ADR 0x47 1647956Sxiuyan.wang@Sun.COM #define UNM_HW_CAS2_CRB_AGT_ADR 0x48 1657956Sxiuyan.wang@Sun.COM #define UNM_HW_CAS3_CRB_AGT_ADR 0x49 1667956Sxiuyan.wang@Sun.COM #define UNM_HW_NCM_CRB_AGT_ADR 0x16 1677956Sxiuyan.wang@Sun.COM #define UNM_HW_TMR_CRB_AGT_ADR 0x17 1687956Sxiuyan.wang@Sun.COM #define UNM_HW_XDMA_CRB_AGT_ADR 0x05 1697956Sxiuyan.wang@Sun.COM #define UNM_HW_OCM0_CRB_AGT_ADR 0x06 1707956Sxiuyan.wang@Sun.COM #define UNM_HW_OCM1_CRB_AGT_ADR 0x07 1717956Sxiuyan.wang@Sun.COM 1727956Sxiuyan.wang@Sun.COM /* This field defines PCI/X adr [25:20] of agents on the CRB */ 1737956Sxiuyan.wang@Sun.COM /* */ 1747956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PH 0 1757956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PS 1 1767956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_MN 2 1777956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_MS 3 1787956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SRE 5 1797956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_NIU 6 1807956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_QMN 7 1817956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQN0 8 1827956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQN1 9 1837956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQN2 10 1847956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQN3 11 1857956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_QMS 12 1867956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQS0 13 1877956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQS1 14 1887956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQS2 15 1897956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SQS3 16 1907956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGN0 17 1917956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGN1 18 1927956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGN2 19 1937956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGN3 20 1947956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGND 21 1957956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGNI 22 1967956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGS0 23 1977956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGS1 24 1987956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGS2 25 1997956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGS3 26 2007956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGSD 27 2017956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGSI 28 2027956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SN 29 2037956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_EG 31 2047956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PH2 32 2057956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PS2 33 2067956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_CAM 34 2077956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_CAS0 35 2087956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_CAS1 36 2097956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_CAS2 37 2107956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_C2C0 38 2117956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_C2C1 39 2127956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_TIMR 40 2137956Sxiuyan.wang@Sun.COM /* N/A: Not use in either Phantom1 or Phantom2 => use for TIMR */ 2147956Sxiuyan.wang@Sun.COM /* #define PX_MAP_CRB_C2C2 40 */ 2157956Sxiuyan.wang@Sun.COM /* #define PX_MAP_CRB_SS 41 */ 2167956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX1 42 2177956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX2 43 2187956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX3 44 2197956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX4 45 2207956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX5 46 2217956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX6 47 2227956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX7 48 2237956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_XDMA 49 2247956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_I2Q 50 2257956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_ROMUSB 51 2267956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_CAS3 52 2277956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX0 53 2287956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX8 54 2297956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_RPMX9 55 2307956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_OCM0 56 2317956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_OCM1 57 2327956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_SMB 58 2337956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_I2C0 59 2347956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_I2C1 60 2357956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_LPC 61 2367956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGNC 62 2377956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGR0 63 2387956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGR1 4 2397956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGR2 30 2407956Sxiuyan.wang@Sun.COM #define UNM_HW_PX_MAP_CRB_PGR3 41 2417956Sxiuyan.wang@Sun.COM 2427956Sxiuyan.wang@Sun.COM /* This field defines CRB adr [31:20] of the agents */ 2437956Sxiuyan.wang@Sun.COM /* */ 2447956Sxiuyan.wang@Sun.COM 2457956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_MN ((UNM_HW_H0_CH_HUB_ADR << 7) \ 2467956Sxiuyan.wang@Sun.COM | UNM_HW_MN_CRB_AGT_ADR) 2477956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PH ((UNM_HW_H0_CH_HUB_ADR << 7) \ 2487956Sxiuyan.wang@Sun.COM | UNM_HW_PH_CRB_AGT_ADR) 2497956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_MS ((UNM_HW_H0_CH_HUB_ADR << 7) \ 2507956Sxiuyan.wang@Sun.COM | UNM_HW_MS_CRB_AGT_ADR) 2517956Sxiuyan.wang@Sun.COM 2527956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PS ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2537956Sxiuyan.wang@Sun.COM | UNM_HW_PS_CRB_AGT_ADR) 2547956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SS ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2557956Sxiuyan.wang@Sun.COM | UNM_HW_SS_CRB_AGT_ADR) 2567956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX3 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2577956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX3_CRB_AGT_ADR) 2587956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_QMS ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2597956Sxiuyan.wang@Sun.COM | UNM_HW_QMS_CRB_AGT_ADR) 2607956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQS0 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2617956Sxiuyan.wang@Sun.COM | UNM_HW_SQGS0_CRB_AGT_ADR) 2627956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQS1 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2637956Sxiuyan.wang@Sun.COM | UNM_HW_SQGS1_CRB_AGT_ADR) 2647956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQS2 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2657956Sxiuyan.wang@Sun.COM | UNM_HW_SQGS2_CRB_AGT_ADR) 2667956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQS3 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2677956Sxiuyan.wang@Sun.COM | UNM_HW_SQGS3_CRB_AGT_ADR) 2687956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_C2C0 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2697956Sxiuyan.wang@Sun.COM | UNM_HW_C2C0_CRB_AGT_ADR) 2707956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_C2C1 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2717956Sxiuyan.wang@Sun.COM | UNM_HW_C2C1_CRB_AGT_ADR) 2727956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX2 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2737956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX2_CRB_AGT_ADR) 2747956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX4 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2757956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX4_CRB_AGT_ADR) 2767956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX7 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2777956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX7_CRB_AGT_ADR) 2787956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX9 ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2797956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX9_CRB_AGT_ADR) 2807956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SMB ((UNM_HW_H1_CH_HUB_ADR << 7) \ 2817956Sxiuyan.wang@Sun.COM | UNM_HW_SMB_CRB_AGT_ADR) 2827956Sxiuyan.wang@Sun.COM 2837956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_NIU ((UNM_HW_H2_CH_HUB_ADR << 7) \ 2847956Sxiuyan.wang@Sun.COM | UNM_HW_NIU_CRB_AGT_ADR) 2857956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_I2C0 ((UNM_HW_H2_CH_HUB_ADR << 7) \ 2867956Sxiuyan.wang@Sun.COM | UNM_HW_I2C0_CRB_AGT_ADR) 2877956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_I2C1 ((UNM_HW_H2_CH_HUB_ADR << 7) \ 2887956Sxiuyan.wang@Sun.COM | UNM_HW_I2C1_CRB_AGT_ADR) 2897956Sxiuyan.wang@Sun.COM 2907956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SRE ((UNM_HW_H3_CH_HUB_ADR << 7) \ 2917956Sxiuyan.wang@Sun.COM | UNM_HW_SRE_CRB_AGT_ADR) 2927956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_EG ((UNM_HW_H3_CH_HUB_ADR << 7) \ 2937956Sxiuyan.wang@Sun.COM | UNM_HW_EG_CRB_AGT_ADR) 2947956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX0 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 2957956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX0_CRB_AGT_ADR) 2967956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_QMN ((UNM_HW_H3_CH_HUB_ADR << 7) \ 2977956Sxiuyan.wang@Sun.COM | UNM_HW_QM_CRB_AGT_ADR) 2987956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQN0 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 2997956Sxiuyan.wang@Sun.COM | UNM_HW_SQG0_CRB_AGT_ADR) 3007956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQN1 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3017956Sxiuyan.wang@Sun.COM | UNM_HW_SQG1_CRB_AGT_ADR) 3027956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQN2 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3037956Sxiuyan.wang@Sun.COM | UNM_HW_SQG2_CRB_AGT_ADR) 3047956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SQN3 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3057956Sxiuyan.wang@Sun.COM | UNM_HW_SQG3_CRB_AGT_ADR) 3067956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX1 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3077956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX1_CRB_AGT_ADR) 3087956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX5 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3097956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX5_CRB_AGT_ADR) 3107956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX6 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3117956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX6_CRB_AGT_ADR) 3127956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_RPMX8 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3137956Sxiuyan.wang@Sun.COM | UNM_HW_RPMX8_CRB_AGT_ADR) 3147956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_CAS0 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3157956Sxiuyan.wang@Sun.COM | UNM_HW_CAS0_CRB_AGT_ADR) 3167956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_CAS1 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3177956Sxiuyan.wang@Sun.COM | UNM_HW_CAS1_CRB_AGT_ADR) 3187956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_CAS2 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3197956Sxiuyan.wang@Sun.COM | UNM_HW_CAS2_CRB_AGT_ADR) 3207956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_CAS3 ((UNM_HW_H3_CH_HUB_ADR << 7) \ 3217956Sxiuyan.wang@Sun.COM | UNM_HW_CAS3_CRB_AGT_ADR) 3227956Sxiuyan.wang@Sun.COM 3237956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGNI ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3247956Sxiuyan.wang@Sun.COM | UNM_HW_PEGNI_CRB_AGT_ADR) 3257956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGND ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3267956Sxiuyan.wang@Sun.COM | UNM_HW_PEGND_CRB_AGT_ADR) 3277956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGN0 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3287956Sxiuyan.wang@Sun.COM | UNM_HW_PEGN0_CRB_AGT_ADR) 3297956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGN1 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3307956Sxiuyan.wang@Sun.COM | UNM_HW_PEGN1_CRB_AGT_ADR) 3317956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGN2 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3327956Sxiuyan.wang@Sun.COM | UNM_HW_PEGN2_CRB_AGT_ADR) 3337956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGN3 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3347956Sxiuyan.wang@Sun.COM | UNM_HW_PEGN3_CRB_AGT_ADR) 3357956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGN4 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3367956Sxiuyan.wang@Sun.COM | UNM_HW_PEGN4_CRB_AGT_ADR) 3377956Sxiuyan.wang@Sun.COM 3387956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGNC ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3397956Sxiuyan.wang@Sun.COM | UNM_HW_PEGNC_CRB_AGT_ADR) 3407956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGR0 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3417956Sxiuyan.wang@Sun.COM | UNM_HW_PEGR0_CRB_AGT_ADR) 3427956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGR1 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3437956Sxiuyan.wang@Sun.COM | UNM_HW_PEGR1_CRB_AGT_ADR) 3447956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGR2 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3457956Sxiuyan.wang@Sun.COM | UNM_HW_PEGR2_CRB_AGT_ADR) 3467956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGR3 ((UNM_HW_H4_CH_HUB_ADR << 7) \ 3477956Sxiuyan.wang@Sun.COM | UNM_HW_PEGR3_CRB_AGT_ADR) 3487956Sxiuyan.wang@Sun.COM 3497956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGSI ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3507956Sxiuyan.wang@Sun.COM | UNM_HW_PEGSI_CRB_AGT_ADR) 3517956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGSD ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3527956Sxiuyan.wang@Sun.COM | UNM_HW_PEGSD_CRB_AGT_ADR) 3537956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGS0 ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3547956Sxiuyan.wang@Sun.COM | UNM_HW_PEGS0_CRB_AGT_ADR) 3557956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGS1 ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3567956Sxiuyan.wang@Sun.COM | UNM_HW_PEGS1_CRB_AGT_ADR) 3577956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGS2 ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3587956Sxiuyan.wang@Sun.COM | UNM_HW_PEGS2_CRB_AGT_ADR) 3597956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGS3 ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3607956Sxiuyan.wang@Sun.COM | UNM_HW_PEGS3_CRB_AGT_ADR) 3617956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_PGSC ((UNM_HW_H5_CH_HUB_ADR << 7) \ 3627956Sxiuyan.wang@Sun.COM | UNM_HW_PEGSC_CRB_AGT_ADR) 3637956Sxiuyan.wang@Sun.COM 3647956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_CAM ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3657956Sxiuyan.wang@Sun.COM | UNM_HW_NCM_CRB_AGT_ADR) 3667956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_TIMR ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3677956Sxiuyan.wang@Sun.COM | UNM_HW_TMR_CRB_AGT_ADR) 3687956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_XDMA ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3697956Sxiuyan.wang@Sun.COM | UNM_HW_XDMA_CRB_AGT_ADR) 3707956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_SN ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3717956Sxiuyan.wang@Sun.COM | UNM_HW_SN_CRB_AGT_ADR) 3727956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_I2Q ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3737956Sxiuyan.wang@Sun.COM | UNM_HW_I2Q_CRB_AGT_ADR) 3747956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_ROMUSB ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3757956Sxiuyan.wang@Sun.COM | UNM_HW_ROMUSB_CRB_AGT_ADR) 3767956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_OCM0 ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3777956Sxiuyan.wang@Sun.COM | UNM_HW_OCM0_CRB_AGT_ADR) 3787956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_OCM1 ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3797956Sxiuyan.wang@Sun.COM | UNM_HW_OCM1_CRB_AGT_ADR) 3807956Sxiuyan.wang@Sun.COM #define UNM_HW_CRB_HUB_AGT_ADR_LPC ((UNM_HW_H6_CH_HUB_ADR << 7) \ 3817956Sxiuyan.wang@Sun.COM | UNM_HW_LPC_CRB_AGT_ADR) 3827956Sxiuyan.wang@Sun.COM 3837956Sxiuyan.wang@Sun.COM /* 3847956Sxiuyan.wang@Sun.COM * ROM USB CRB space is divided into 4 regions depending on decode of 3857956Sxiuyan.wang@Sun.COM * address bits [19:16] 3867956Sxiuyan.wang@Sun.COM */ 3877956Sxiuyan.wang@Sun.COM #define ROMUSB_GLB (UNM_CRB_ROMUSB + 0x00000) 3887956Sxiuyan.wang@Sun.COM #define ROMUSB_ROM (UNM_CRB_ROMUSB + 0x10000) 3897956Sxiuyan.wang@Sun.COM #define ROMUSB_USB (UNM_CRB_ROMUSB + 0x20000) 3907956Sxiuyan.wang@Sun.COM #define ROMUSB_DIRECT_ROM (UNM_CRB_ROMUSB + 0x30000) 3917956Sxiuyan.wang@Sun.COM #define ROMUSB_TAP (UNM_CRB_ROMUSB + 0x40000) 3927956Sxiuyan.wang@Sun.COM 3937956Sxiuyan.wang@Sun.COM /* ROMUSB GLB register definitions */ 3947956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_CONTROL (ROMUSB_GLB + 0x0000) 3957956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_STATUS (ROMUSB_GLB + 0x0004) 3967956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_SW_RESET (ROMUSB_GLB + 0x0008) 3977956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PAD_GPIO_I (ROMUSB_GLB + 0x000c) 3987956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_RNG_PLL_CTL (ROMUSB_GLB + 0x0010) 3997956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_TEST_MUX_O (ROMUSB_GLB + 0x0014) 4007956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PLL0_CTRL (ROMUSB_GLB + 0x0018) 4017956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PLL1_CTRL (ROMUSB_GLB + 0x001c) 4027956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PLL2_CTRL (ROMUSB_GLB + 0x0020) 4037956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PLL3_CTRL (ROMUSB_GLB + 0x0024) 4047956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PLL_LOCK (ROMUSB_GLB + 0x0028) 4057956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_EXTERN_INT (ROMUSB_GLB + 0x002c) 4067956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PH_RST (ROMUSB_GLB + 0x0030) 4077956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PS_RST (ROMUSB_GLB + 0x0034) 4087956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_CAS_RST (ROMUSB_GLB + 0x0038) 4097956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_MIU_RST (ROMUSB_GLB + 0x003c) 4107956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_CRB_RST (ROMUSB_GLB + 0x0040) 4117956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_TEST_MUX_SEL (ROMUSB_GLB + 0x0044) 4127956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_MN_COM_A2T (ROMUSB_GLB + 0x0050) 4137956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_REV_ID (ROMUSB_GLB + 0x0054) 4147956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_PEGTUNE_DONE (ROMUSB_GLB + 0x005c) 4157956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_VENDOR_DEV_ID (ROMUSB_GLB + 0x0058) 4167956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GLB_CHIP_CLK_CTRL (ROMUSB_GLB + 0x00a8) 4177956Sxiuyan.wang@Sun.COM 4187956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_GPIO(n) ((n) <= 15 ? (ROMUSB_GLB + 0x60 + (4 * (n))): \ 4197956Sxiuyan.wang@Sun.COM ((n) <= 18)?(ROMUSB_GLB + 0x70 + (4 * (n))): \ 4207956Sxiuyan.wang@Sun.COM (ROMUSB_GLB + 0x70 + (4 * (19)))) 4217956Sxiuyan.wang@Sun.COM 4227956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_CONTROL (ROMUSB_ROM + 0x0000) 4237956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_INSTR_OPCODE (ROMUSB_ROM + 0x0004) 4247956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_ADDRESS (ROMUSB_ROM + 0x0008) 4257956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_WDATA (ROMUSB_ROM + 0x000c) 4267956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_ABYTE_CNT (ROMUSB_ROM + 0x0010) 4277956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_DUMMY_BYTE_CNT (ROMUSB_ROM + 0x0014) 4287956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_RDATA (ROMUSB_ROM + 0x0018) 4297956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_AGT_TAG (ROMUSB_ROM + 0x001c) 4307956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_TIME_PARM (ROMUSB_ROM + 0x0020) 4317956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_CLK_DIV (ROMUSB_ROM + 0x0024) 4327956Sxiuyan.wang@Sun.COM #define UNM_ROMUSB_ROM_MISS_INSTR (ROMUSB_ROM + 0x0028) 4337956Sxiuyan.wang@Sun.COM 4347956Sxiuyan.wang@Sun.COM /* Lock IDs for ROM lock */ 4357956Sxiuyan.wang@Sun.COM #define ROM_LOCK_DRIVER 0x0d417340 4367956Sxiuyan.wang@Sun.COM 4377956Sxiuyan.wang@Sun.COM /* Lock IDs for PHY lock */ 4387956Sxiuyan.wang@Sun.COM #define PHY_LOCK_DRIVER 0x44524956 4397956Sxiuyan.wang@Sun.COM 4407956Sxiuyan.wang@Sun.COM #define UNM_PCI_CRB_WINDOWSIZE 0x00100000 /* all are 1MB windows */ 4417956Sxiuyan.wang@Sun.COM #define UNM_PCI_CRB_WINDOW(A) (UNM_PCI_CRBSPACE + (A)*UNM_PCI_CRB_WINDOWSIZE) 4427956Sxiuyan.wang@Sun.COM #define UNM_CRB_C2C_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C0) 4437956Sxiuyan.wang@Sun.COM #define UNM_CRB_C2C_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C1) 4447956Sxiuyan.wang@Sun.COM #define UNM_CRB_C2C_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_C2C2) 4457956Sxiuyan.wang@Sun.COM #define UNM_CRB_CAM UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAM) 4467956Sxiuyan.wang@Sun.COM #define UNM_CRB_CASPER UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS) 4477956Sxiuyan.wang@Sun.COM #define UNM_CRB_CASPER_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS0) 4487956Sxiuyan.wang@Sun.COM #define UNM_CRB_CASPER_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS1) 4497956Sxiuyan.wang@Sun.COM #define UNM_CRB_CASPER_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_CAS2) 4507956Sxiuyan.wang@Sun.COM #define UNM_CRB_DDR_MD UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_MS) 4517956Sxiuyan.wang@Sun.COM #define UNM_CRB_DDR_NET UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_MN) 4527956Sxiuyan.wang@Sun.COM #define UNM_CRB_EPG UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_EG) 4537956Sxiuyan.wang@Sun.COM #define UNM_CRB_I2Q UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2Q) 4547956Sxiuyan.wang@Sun.COM #define UNM_CRB_NIU UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_NIU) 4557956Sxiuyan.wang@Sun.COM /* HACK upon HACK upon HACK (for PCIE builds) */ 4567956Sxiuyan.wang@Sun.COM #define UNM_CRB_PCIX_HOST UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PH) 4577956Sxiuyan.wang@Sun.COM #define UNM_CRB_PCIX_HOST2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PH2) 4587956Sxiuyan.wang@Sun.COM #define UNM_CRB_PCIX_MD UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PS) 4597956Sxiuyan.wang@Sun.COM #define UNM_CRB_PCIE UNM_CRB_PCIX_MD 4607956Sxiuyan.wang@Sun.COM // window 1 pcie slot 4617956Sxiuyan.wang@Sun.COM #define UNM_CRB_PCIE2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PS2) 4627956Sxiuyan.wang@Sun.COM 4637956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_MD_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS0) 4647956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_MD_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS1) 4657956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_MD_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS2) 4667956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_MD_3 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGS3) 4677956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_MD_D UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGSD) 4687956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_MD_I UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGSI) 4697956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_NET_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN0) 4707956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_NET_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN1) 4717956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_NET_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN2) 4727956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_NET_3 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGN3) 4737956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_NET_D UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGND) 4747956Sxiuyan.wang@Sun.COM #define UNM_CRB_PEG_NET_I UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_PGNI) 4757956Sxiuyan.wang@Sun.COM #define UNM_CRB_PQM_MD UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_QMS) 4767956Sxiuyan.wang@Sun.COM #define UNM_CRB_PQM_NET UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_QMN) 4777956Sxiuyan.wang@Sun.COM #define UNM_CRB_QDR_MD UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SS) 4787956Sxiuyan.wang@Sun.COM #define UNM_CRB_QDR_NET UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SN) 4797956Sxiuyan.wang@Sun.COM #define UNM_CRB_ROMUSB UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_ROMUSB) 4807956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX0) 4817956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX1) 4827956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX2) 4837956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_3 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX3) 4847956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_4 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX4) 4857956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_5 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX5) 4867956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_6 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX6) 4877956Sxiuyan.wang@Sun.COM #define UNM_CRB_RPMX_7 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_RPMX7) 4887956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_MD_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS0) 4897956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_MD_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS1) 4907956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_MD_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS2) 4917956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_MD_3 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQS3) 4927956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_NET_0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN0) 4937956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_NET_1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN1) 4947956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_NET_2 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN2) 4957956Sxiuyan.wang@Sun.COM #define UNM_CRB_SQM_NET_3 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SQN3) 4967956Sxiuyan.wang@Sun.COM #define UNM_CRB_SRE UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SRE) 4977956Sxiuyan.wang@Sun.COM #define UNM_CRB_TIMER UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_TIMR) 4987956Sxiuyan.wang@Sun.COM #define UNM_CRB_XDMA UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_XDMA) 4997956Sxiuyan.wang@Sun.COM #define UNM_CRB_I2C0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2C0) 5007956Sxiuyan.wang@Sun.COM #define UNM_CRB_I2C1 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_I2C1) 5017956Sxiuyan.wang@Sun.COM #define UNM_CRB_OCM0 UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_OCM0) 5027956Sxiuyan.wang@Sun.COM #define UNM_CRB_SMB UNM_PCI_CRB_WINDOW(UNM_HW_PX_MAP_CRB_SMB) 5037956Sxiuyan.wang@Sun.COM 5047956Sxiuyan.wang@Sun.COM #define UNM_CRB_MAX UNM_PCI_CRB_WINDOW(64) 5057956Sxiuyan.wang@Sun.COM 5067956Sxiuyan.wang@Sun.COM /* 5077956Sxiuyan.wang@Sun.COM * ====================== BASE ADDRESSES ON-CHIP ====================== 5087956Sxiuyan.wang@Sun.COM * Base addresses of major components on-chip. 5097956Sxiuyan.wang@Sun.COM * ====================== BASE ADDRESSES ON-CHIP ====================== 5107956Sxiuyan.wang@Sun.COM */ 5117956Sxiuyan.wang@Sun.COM #define UNM_ADDR_DDR_NET (0x0000000000000000ULL) 5127956Sxiuyan.wang@Sun.COM #define UNM_ADDR_DDR_NET_MAX (0x000000000fffffffULL) 5137956Sxiuyan.wang@Sun.COM 5147956Sxiuyan.wang@Sun.COM /* 5157956Sxiuyan.wang@Sun.COM * Imbus address bit used to indicate a host address. This bit is 5167956Sxiuyan.wang@Sun.COM * eliminated by the pcie bar and bar select before presentation 5177956Sxiuyan.wang@Sun.COM * over pcie. 5187956Sxiuyan.wang@Sun.COM */ 5197956Sxiuyan.wang@Sun.COM /* host memory via IMBUS */ 5207956Sxiuyan.wang@Sun.COM #define NX_P2_ADDR_PCIE (0x0000000800000000ULL) 5217956Sxiuyan.wang@Sun.COM #define NX_P3_ADDR_PCIE (0x0000008000000000ULL) 5227956Sxiuyan.wang@Sun.COM 5237956Sxiuyan.wang@Sun.COM #define UNM_ADDR_PCIE_MAX (0x0000000FFFFFFFFFULL) 5247956Sxiuyan.wang@Sun.COM #define UNM_ADDR_OCM0 (0x0000000200000000ULL) 5257956Sxiuyan.wang@Sun.COM #define UNM_ADDR_OCM0_MAX (0x00000002000fffffULL) 5267956Sxiuyan.wang@Sun.COM #define UNM_ADDR_OCM1 (0x0000000200400000ULL) 5277956Sxiuyan.wang@Sun.COM #define UNM_ADDR_OCM1_MAX (0x00000002004fffffULL) 5287956Sxiuyan.wang@Sun.COM #define UNM_ADDR_QDR_NET (0x0000000300000000ULL) 5297956Sxiuyan.wang@Sun.COM 5307956Sxiuyan.wang@Sun.COM #define NX_P2_ADDR_QDR_NET_MAX (0x00000003001fffffULL) 5317956Sxiuyan.wang@Sun.COM #define NX_P3_ADDR_QDR_NET_MAX (0x0000000303ffffffULL) 5327956Sxiuyan.wang@Sun.COM /* 5337956Sxiuyan.wang@Sun.COM * The ifdef at the bottom should go. All drivers should start using the 5347956Sxiuyan.wang@Sun.COM * above 2 defines. 5357956Sxiuyan.wang@Sun.COM */ 5367956Sxiuyan.wang@Sun.COM #ifdef P3 5377956Sxiuyan.wang@Sun.COM #define UNM_ADDR_QDR_NET_MAX NX_P3_ADDR_QDR_NET_MAX 5387956Sxiuyan.wang@Sun.COM #else 5397956Sxiuyan.wang@Sun.COM #define UNM_ADDR_QDR_NET_MAX NX_P2_ADDR_QDR_NET_MAX 5407956Sxiuyan.wang@Sun.COM #endif 5417956Sxiuyan.wang@Sun.COM 5427956Sxiuyan.wang@Sun.COM #define D3_CRB_REG_FUN0 (UNM_PCIX_PS_REG(0x0084)) 5437956Sxiuyan.wang@Sun.COM #define D3_CRB_REG_FUN1 (UNM_PCIX_PS_REG(0x1084)) 5447956Sxiuyan.wang@Sun.COM #define D3_CRB_REG_FUN2 (UNM_PCIX_PS_REG(0x2084)) 5457956Sxiuyan.wang@Sun.COM #define D3_CRB_REG_FUN3 (UNM_PCIX_PS_REG(0x3084)) 5467956Sxiuyan.wang@Sun.COM 5477956Sxiuyan.wang@Sun.COM 5487956Sxiuyan.wang@Sun.COM #define ISR_I2Q_CLR_PCI_LO (UNM_PCIX_PS_REG(UNM_I2Q_CLR_PCI_LO)) 5497956Sxiuyan.wang@Sun.COM #define ISR_I2Q_CLR_PCI_HI (UNM_PCIX_PS_REG(UNM_I2Q_CLR_PCI_HI)) 5507956Sxiuyan.wang@Sun.COM #define UNM_PCI_ARCH_CRB_BASE (UNM_PCI_DIRECT_CRB) 5517956Sxiuyan.wang@Sun.COM 5527956Sxiuyan.wang@Sun.COM /* we're mapping 128MB of mem on the PCI bus */ 5537956Sxiuyan.wang@Sun.COM #define UNM_PCI_MAPSIZE 128 5547956Sxiuyan.wang@Sun.COM #define UNM_PCI_DDR_NET (unsigned long)0x00000000 5557956Sxiuyan.wang@Sun.COM #define UNM_PCI_DDR_NET_MAX (unsigned long)0x01ffffff 5567956Sxiuyan.wang@Sun.COM #define UNM_PCI_DDR_MD (unsigned long)0x02000000 5577956Sxiuyan.wang@Sun.COM #define UNM_PCI_DDR_MD_MAX (unsigned long)0x03ffffff 5587956Sxiuyan.wang@Sun.COM #define UNM_PCI_QDR_NET (unsigned long)0x04000000 5597956Sxiuyan.wang@Sun.COM #define UNM_PCI_QDR_NET_MAX (unsigned long)0x043fffff 5607956Sxiuyan.wang@Sun.COM #define UNM_PCI_DIRECT_CRB (unsigned long)0x04400000 5617956Sxiuyan.wang@Sun.COM #define UNM_PCI_DIRECT_CRB_MAX (unsigned long)0x047fffff 5627956Sxiuyan.wang@Sun.COM #define UNM_PCI_CAMQM (unsigned long)0x04800000 5637956Sxiuyan.wang@Sun.COM #define UNM_PCI_CAMQM_MAX (unsigned long)0x04ffffff 5647956Sxiuyan.wang@Sun.COM #define UNM_PCI_OCM0 (unsigned long)0x05000000 5657956Sxiuyan.wang@Sun.COM #define UNM_PCI_OCM0_MAX (unsigned long)0x050fffff 5667956Sxiuyan.wang@Sun.COM #define UNM_PCI_OCM1 (unsigned long)0x05100000 5677956Sxiuyan.wang@Sun.COM #define UNM_PCI_OCM1_MAX (unsigned long)0x051fffff 5687956Sxiuyan.wang@Sun.COM #define UNM_PCI_CRBSPACE (unsigned long)0x06000000 5697956Sxiuyan.wang@Sun.COM #define UNM_PCI_CRBSPACE_MAX (unsigned long)0x07ffffff 5707956Sxiuyan.wang@Sun.COM #define UNM_PCI_128MB_SIZE (unsigned long)0x08000000 5717956Sxiuyan.wang@Sun.COM #define UNM_PCI_32MB_SIZE (unsigned long)0x02000000 5727956Sxiuyan.wang@Sun.COM #define UNM_PCI_2MB_SIZE (unsigned long)0x00200000 5737956Sxiuyan.wang@Sun.COM 5747956Sxiuyan.wang@Sun.COM /* 5757956Sxiuyan.wang@Sun.COM * The basic unit of access when reading/writing control registers. 5767956Sxiuyan.wang@Sun.COM */ 5777956Sxiuyan.wang@Sun.COM typedef long native_t; /* most efficient integer on h/w */ 5787956Sxiuyan.wang@Sun.COM typedef __uint64_t unm_dataword_t; /* single word in data space */ 5797956Sxiuyan.wang@Sun.COM typedef __uint64_t unm64ptr_t; /* a pointer that occupies 64 bits */ 5807956Sxiuyan.wang@Sun.COM #define UNM64PTR(P) ((unm64ptr_t)((native_t)(P))) /* convert for us */ 5817956Sxiuyan.wang@Sun.COM 5827956Sxiuyan.wang@Sun.COM typedef __uint32_t unm_crbword_t; /* single word in CRB space */ 5837956Sxiuyan.wang@Sun.COM 5847956Sxiuyan.wang@Sun.COM /* 5857956Sxiuyan.wang@Sun.COM * Definitions relating to access/control of the Network Interface Unit 5867956Sxiuyan.wang@Sun.COM * h/w block. 5877956Sxiuyan.wang@Sun.COM */ 5887956Sxiuyan.wang@Sun.COM /* 5897956Sxiuyan.wang@Sun.COM * Configuration registers. 5907956Sxiuyan.wang@Sun.COM */ 5917956Sxiuyan.wang@Sun.COM #define UNM_NIU_MODE (UNM_CRB_NIU + 0x00000) 5927956Sxiuyan.wang@Sun.COM 5937956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_SINGLE_TERM (UNM_CRB_NIU + 0x00004) 5947956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_DRIVE_HI (UNM_CRB_NIU + 0x00008) 5957956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_DRIVE_LO (UNM_CRB_NIU + 0x0000c) 5967956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_DTX (UNM_CRB_NIU + 0x00010) 5977956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_DEQ (UNM_CRB_NIU + 0x00014) 5987956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_WORD_ALIGN (UNM_CRB_NIU + 0x00018) 5997956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_RESET (UNM_CRB_NIU + 0x0001c) 6007956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_POWER_DOWN (UNM_CRB_NIU + 0x00020) 6017956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_RESET_PLL (UNM_CRB_NIU + 0x00024) 6027956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_SERDES_LOOPBACK (UNM_CRB_NIU + 0x00028) 6037956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_DO_BYTE_ALIGN (UNM_CRB_NIU + 0x0002c) 6047956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_TX_ENABLE (UNM_CRB_NIU + 0x00030) 6057956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_RX_ENABLE (UNM_CRB_NIU + 0x00034) 6067956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_STATUS (UNM_CRB_NIU + 0x00038) 6077956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_PAUSE_THRESHOLD (UNM_CRB_NIU + 0x0003c) 6087956Sxiuyan.wang@Sun.COM #define UNM_NIU_INT_MASK (UNM_CRB_NIU + 0x00040) 6097956Sxiuyan.wang@Sun.COM #define UNM_NIU_ACTIVE_INT (UNM_CRB_NIU + 0x00044) 6107956Sxiuyan.wang@Sun.COM #define UNM_NIU_MASKABLE_INT (UNM_CRB_NIU + 0x00048) 6117956Sxiuyan.wang@Sun.COM #define UNM_NIU_TEST_MUX_CTL (UNM_CRB_NIU + 0x00094) 6127956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_PAUSE_CTL (UNM_CRB_NIU + 0x00098) 6137956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_PAUSE_LEVEL (UNM_CRB_NIU + 0x000dc) 6147956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_SEL (UNM_CRB_NIU + 0x00128) 6157956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_PAUSE_CTL (UNM_CRB_NIU + 0x0030c) 6167956Sxiuyan.wang@Sun.COM #define UNM_NIU_FULL_LEVEL_XG (UNM_CRB_NIU + 0x00450) 6177956Sxiuyan.wang@Sun.COM 6187956Sxiuyan.wang@Sun.COM 6197956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_RESET (UNM_CRB_NIU + 0x0011c) 6207956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_POWER_DOWN (UNM_CRB_NIU + 0x00120) 6217956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_RESET_PLL (UNM_CRB_NIU + 0x00124) 6227956Sxiuyan.wang@Sun.COM 6237956Sxiuyan.wang@Sun.COM #define UNM_NIU_STRAP_VALUE_SAVE_HIGHER (UNM_CRB_NIU + 0x0004c) 6247956Sxiuyan.wang@Sun.COM 6257956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_SERDES_RESET (UNM_CRB_NIU + 0x00050) 6267956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB0_GMII_MODE (UNM_CRB_NIU + 0x00054) 6277956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB0_MII_MODE (UNM_CRB_NIU + 0x00058) 6287956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB1_GMII_MODE (UNM_CRB_NIU + 0x0005c) 6297956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB1_MII_MODE (UNM_CRB_NIU + 0x00060) 6307956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB2_GMII_MODE (UNM_CRB_NIU + 0x00064) 6317956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB2_MII_MODE (UNM_CRB_NIU + 0x00068) 6327956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB3_GMII_MODE (UNM_CRB_NIU + 0x0006c) 6337956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB3_MII_MODE (UNM_CRB_NIU + 0x00070) 6347956Sxiuyan.wang@Sun.COM #define UNM_NIU_REMOTE_LOOPBACK (UNM_CRB_NIU + 0x00074) 6357956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB0_HALF_DUPLEX (UNM_CRB_NIU + 0x00078) 6367956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB1_HALF_DUPLEX (UNM_CRB_NIU + 0x0007c) 6377956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB2_HALF_DUPLEX (UNM_CRB_NIU + 0x00080) 6387956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB3_HALF_DUPLEX (UNM_CRB_NIU + 0x00084) 6397956Sxiuyan.wang@Sun.COM #define UNM_NIU_RESET_SYS_FIFOS (UNM_CRB_NIU + 0x00088) 6407956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_CRC_DROP (UNM_CRB_NIU + 0x0008c) 6417956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_DROP_WRONGADDR (UNM_CRB_NIU + 0x00090) 6427956Sxiuyan.wang@Sun.COM #define UNM_NIU_TEST_MUX_CTL (UNM_CRB_NIU + 0x00094) 6437956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_PAUSE_CTL (UNM_CRB_NIU + 0x00098) 6447956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB0_PAUSE_LEVEL (UNM_CRB_NIU + 0x000cc) 6457956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB1_PAUSE_LEVEL (UNM_CRB_NIU + 0x000d0) 6467956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB2_PAUSE_LEVEL (UNM_CRB_NIU + 0x000d4) 6477956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB3_PAUSE_LEVEL (UNM_CRB_NIU + 0x000d8) 6487956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_PAUSE_LEVEL (UNM_CRB_NIU + 0x000dc) 6497956Sxiuyan.wang@Sun.COM #define UNM_NIU_FRAME_COUNT_SELECT (UNM_CRB_NIU + 0x000ac) 6507956Sxiuyan.wang@Sun.COM #define UNM_NIU_FRAME_COUNT (UNM_CRB_NIU + 0x000b0) 6517956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG_SE (UNM_CRB_NIU + 0x00128) 6527956Sxiuyan.wang@Sun.COM #define UNM_NIU_FULL_LEVEL_XG (UNM_CRB_NIU + 0x00450) 6537956Sxiuyan.wang@Sun.COM 6547956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_RX_STATUS(I) (UNM_CRB_NIU + 0x10000 + (I)*0x10000) 6557956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_RX_COMMA_DETECT(I) (UNM_CRB_NIU + 0x10004 + (I)*0x10000) 6567956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_LASER_UNSAFE(I) (UNM_CRB_NIU + 0x10008 + (I)*0x10000) 6577956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_TX_CONTROL(I) (UNM_CRB_NIU + 0x1000c + (I)*0x10000) 6587956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_ON_OFFLINE_CTL(I) (UNM_CRB_NIU + 0x10010 + (I)*0x10000) 6597956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_PORT_ACTIVE_STAT(I) (UNM_CRB_NIU + 0x10014 + (I)*0x10000) 6607956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_PORT_INACTIVE_STAT(I)(UNM_CRB_NIU + 0x10018 + (I)*0x10000) 6617956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_LINK_FAILURE_CNT(I) (UNM_CRB_NIU + 0x1001c + (I)*0x10000) 6627956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_LOSS_SYNC_CNT(I) (UNM_CRB_NIU + 0x10020 + (I)*0x10000) 6637956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_LOSS_SIGNAL_CNT(I) (UNM_CRB_NIU + 0x10024 + (I)*0x10000) 6647956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_PRIM_SEQ_ERR_CNT(I) (UNM_CRB_NIU + 0x10028 + (I)*0x10000) 6657956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_INVLD_TX_WORD_CNT(I) (UNM_CRB_NIU + 0x1002c + (I)*0x10000) 6667956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_INVLD_CRC_CNT(I) (UNM_CRB_NIU + 0x10030 + (I)*0x10000) 6677956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_RX_CELL_CNT(I) (UNM_CRB_NIU + 0x10034 + (I)*0x10000) 6687956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_TX_CELL_CNT(I) (UNM_CRB_NIU + 0x10038 + (I)*0x10000) 6697956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_B2B_CREDIT(I) (UNM_CRB_NIU + 0x1003c + (I)*0x10000) 6707956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_LOGIN_DONE(I) (UNM_CRB_NIU + 0x10040 + (I)*0x10000) 6717956Sxiuyan.wang@Sun.COM #define UNM_NIU_FC_OPERATING_SPEED(I) (UNM_CRB_NIU + 0x10044 + (I)*0x10000) 6727956Sxiuyan.wang@Sun.COM 6737956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MAC_CONFIG_0(I) (UNM_CRB_NIU + 0x30000 + (I)*0x10000) 6747956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MAC_CONFIG_1(I) (UNM_CRB_NIU + 0x30004 + (I)*0x10000) 6757956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MAC_IPG_IFG(I) (UNM_CRB_NIU + 0x30008 + (I)*0x10000) 6767956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_HALF_DUPLEX_CTRL(I) (UNM_CRB_NIU + 0x3000c + (I)*0x10000) 6777956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MAX_FRAME_SIZE(I) (UNM_CRB_NIU + 0x30010 + (I)*0x10000) 6787956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_TEST_REG(I) (UNM_CRB_NIU + 0x3001c + (I)*0x10000) 6797956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MII_MGMT_CONFIG(I) (UNM_CRB_NIU + 0x30020 + (I)*0x10000) 6807956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MII_MGMT_COMMAND(I) (UNM_CRB_NIU + 0x30024 + (I)*0x10000) 6817956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MII_MGMT_ADDR(I) (UNM_CRB_NIU + 0x30028 + (I)*0x10000) 6827956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MII_MGMT_CTRL(I) (UNM_CRB_NIU + 0x3002c + (I)*0x10000) 6837956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MII_MGMT_STATUS(I) (UNM_CRB_NIU + 0x30030 + (I)*0x10000) 6847956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_MII_MGMT_INDICATE(I) (UNM_CRB_NIU + 0x30034 + (I)*0x10000) 6857956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_INTERFACE_CTRL(I) (UNM_CRB_NIU + 0x30038 + (I)*0x10000) 6867956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_INTERFACE_STATUS(I) (UNM_CRB_NIU + 0x3003c + (I)*0x10000) 6877956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_STATION_ADDR_0(I) (UNM_CRB_NIU + 0x30040 + (I)*0x10000) 6887956Sxiuyan.wang@Sun.COM #define UNM_NIU_GB_STATION_ADDR_1(I) (UNM_CRB_NIU + 0x30044 + (I)*0x10000) 6897956Sxiuyan.wang@Sun.COM 6907956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_CONFIG_0 (UNM_CRB_NIU + 0x70000) 6917956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_CONFIG_1 (UNM_CRB_NIU + 0x70004) 6927956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_IPG (UNM_CRB_NIU + 0x70008) 6937956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_STATION_ADDR_0_HI (UNM_CRB_NIU + 0x7000c) 6947956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_STATION_ADDR_0_1 (UNM_CRB_NIU + 0x70010) 6957956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_STATION_ADDR_1_LO (UNM_CRB_NIU + 0x70014) 6967956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_STATUS (UNM_CRB_NIU + 0x70018) 6977956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_MAX_FRAME_SIZE (UNM_CRB_NIU + 0x7001c) 6987956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_PAUSE_FRAME_VALUE (UNM_CRB_NIU + 0x70020) 6997956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_TX_BYTE_CNT (UNM_CRB_NIU + 0x70024) 7007956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_TX_FRAME_CNT (UNM_CRB_NIU + 0x70028) 7017956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_RX_BYTE_CNT (UNM_CRB_NIU + 0x7002c) 7027956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_RX_FRAME_CNT (UNM_CRB_NIU + 0x70030) 7037956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_AGGR_ERROR_CNT (UNM_CRB_NIU + 0x70034) 7047956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_MULTICAST_FRAME_CNT (UNM_CRB_NIU + 0x70038) 7057956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_UNICAST_FRAME_CNT (UNM_CRB_NIU + 0x7003c) 7067956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_CRC_ERROR_CNT (UNM_CRB_NIU + 0x70040) 7077956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_OVERSIZE_FRAME_ERR (UNM_CRB_NIU + 0x70044) 7087956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_UNDERSIZE_FRAME_ERR (UNM_CRB_NIU + 0x70048) 7097956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_LOCAL_ERROR_CNT (UNM_CRB_NIU + 0x7004c) 7107956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_REMOTE_ERROR_CNT (UNM_CRB_NIU + 0x70050) 7117956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_CONTROL_CHAR_CNT (UNM_CRB_NIU + 0x70054) 7127956Sxiuyan.wang@Sun.COM #define UNM_NIU_XGE_PAUSE_FRAME_CNT (UNM_CRB_NIU + 0x70058) 7137956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_CONFIG_0 (UNM_CRB_NIU + 0x80000) 7147956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_CONFIG_1 (UNM_CRB_NIU + 0x80004) 7157956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_IPG (UNM_CRB_NIU + 0x80008) 7167956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_STATION_ADDR_0_HI (UNM_CRB_NIU + 0x8000c) 7177956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_STATION_ADDR_0_1 (UNM_CRB_NIU + 0x80010) 7187956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_STATION_ADDR_1_LO (UNM_CRB_NIU + 0x80014) 7197956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_STATUS (UNM_CRB_NIU + 0x80018) 7207956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_MAX_FRAME_SIZE (UNM_CRB_NIU + 0x8001c) 7217956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_PAUSE_FRAME_VALUE (UNM_CRB_NIU + 0x80020) 7227956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_TX_BYTE_CNT (UNM_CRB_NIU + 0x80024) 7237956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_TX_FRAME_CNT (UNM_CRB_NIU + 0x80028) 7247956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_RX_BYTE_CNT (UNM_CRB_NIU + 0x8002c) 7257956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_RX_FRAME_CNT (UNM_CRB_NIU + 0x80030) 7267956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_AGGR_ERROR_CNT (UNM_CRB_NIU + 0x80034) 7277956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_MULTICAST_FRAME_CNT (UNM_CRB_NIU + 0x80038) 7287956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_UNICAST_FRAME_CNT (UNM_CRB_NIU + 0x8003c) 7297956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_CRC_ERROR_CNT (UNM_CRB_NIU + 0x80040) 7307956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_OVERSIZE_FRAME_ERR (UNM_CRB_NIU + 0x80044) 7317956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_UNDERSIZE_FRAME_ERR (UNM_CRB_NIU + 0x80048) 7327956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_LOCAL_ERROR_CNT (UNM_CRB_NIU + 0x8004c) 7337956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_REMOTE_ERROR_CNT (UNM_CRB_NIU + 0x80050) 7347956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_CONTROL_CHAR_CNT (UNM_CRB_NIU + 0x80054) 7357956Sxiuyan.wang@Sun.COM #define UNM_NIU_XG1_PAUSE_FRAME_CNT (UNM_CRB_NIU + 0x80058) 7367956Sxiuyan.wang@Sun.COM 7377956Sxiuyan.wang@Sun.COM #define UNM_TIMER_GT_TICKCTL (UNM_CRB_TIMER + 0x00200) 7387956Sxiuyan.wang@Sun.COM #define UNM_TIMER_GLOBAL_TIMESTAMP_LO (UNM_CRB_TIMER + 0x00220) 7397956Sxiuyan.wang@Sun.COM #define UNM_TIMER_TIMESTAMP (UNM_CRB_TIMER + 0x00208) 7407956Sxiuyan.wang@Sun.COM 7417956Sxiuyan.wang@Sun.COM #define UNM_PEXQ_REQ_HDR_LO (UNM_CRB_XDMA + 0x00110) 7427956Sxiuyan.wang@Sun.COM #define UNM_PEXQ_REQ_HDR_HI (UNM_CRB_XDMA + 0x00114) 7437956Sxiuyan.wang@Sun.COM 7447956Sxiuyan.wang@Sun.COM /* P3 802.3ap */ 7457956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MAC_CONFIG_0(I) (UNM_CRB_NIU + 0xa0000 + (I)*0x10000) 7467956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MAC_CONFIG_1(I) (UNM_CRB_NIU + 0xa0004 + (I)*0x10000) 7477956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MAC_IPG_IFG(I) (UNM_CRB_NIU + 0xa0008 + (I)*0x10000) 7487956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_HALF_DUPLEX_CTRL(I) (UNM_CRB_NIU + 0xa000c + (I)*0x10000) 7497956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MAX_FRAME_SIZE(I) (UNM_CRB_NIU + 0xa0010 + (I)*0x10000) 7507956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_TEST_REG(I) (UNM_CRB_NIU + 0xa001c + (I)*0x10000) 7517956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MII_MGMT_CONFIG(I) (UNM_CRB_NIU + 0xa0020 + (I)*0x10000) 7527956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MII_MGMT_COMMAND(I) (UNM_CRB_NIU + 0xa0024 + (I)*0x10000) 7537956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MII_MGMT_ADDR(I) (UNM_CRB_NIU + 0xa0028 + (I)*0x10000) 7547956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MII_MGMT_CTRL(I) (UNM_CRB_NIU + 0xa002c + (I)*0x10000) 7557956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MII_MGMT_STATUS(I) (UNM_CRB_NIU + 0xa0030 + (I)*0x10000) 7567956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_MII_MGMT_INDICATE(I) (UNM_CRB_NIU + 0xa0034 + (I)*0x10000) 7577956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_INTERFACE_CTRL(I) (UNM_CRB_NIU + 0xa0038 + (I)*0x10000) 7587956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_INTERFACE_STATUS(I) (UNM_CRB_NIU + 0xa003c + (I)*0x10000) 7597956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_STATION_ADDR_0(I) (UNM_CRB_NIU + 0xa0040 + (I)*0x10000) 7607956Sxiuyan.wang@Sun.COM #define UNM_NIU_AP_STATION_ADDR_1(I) (UNM_CRB_NIU + 0xa0044 + (I)*0x10000) 7617956Sxiuyan.wang@Sun.COM 7627956Sxiuyan.wang@Sun.COM /* 7637956Sxiuyan.wang@Sun.COM * Register offsets for MN 7647956Sxiuyan.wang@Sun.COM */ 7657956Sxiuyan.wang@Sun.COM #define MIU_CONTROL (0x000) 7667956Sxiuyan.wang@Sun.COM #define MIU_TAG (0x004) 7677956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_CTRL (0x090) 7687956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_ADDR_LO (0x094) 7697956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_ADDR_HI (0x098) 7707956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_WRDATA_LO (0x0a0) 7717956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_WRDATA_HI (0x0a4) 7727956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_WRDATA(i) (0x0a0+(4*(i))) 7737956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_RDDATA_LO (0x0a8) 7747956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_RDDATA_HI (0x0ac) 7757956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_RDDATA(i) (0x0a8+(4*(i))) 7767956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_ADDR_MASK 0xfffffff8 7777956Sxiuyan.wang@Sun.COM #define MIU_TEST_AGT_UPPER_ADDR(off) (0) 7787956Sxiuyan.wang@Sun.COM 7797956Sxiuyan.wang@Sun.COM /* MIU_TEST_AGT_CTRL flags. work for SIU as well */ 7807956Sxiuyan.wang@Sun.COM #define MIU_TA_CTL_START 1 7817956Sxiuyan.wang@Sun.COM #define MIU_TA_CTL_ENABLE 2 7827956Sxiuyan.wang@Sun.COM #define MIU_TA_CTL_WRITE 4 7837956Sxiuyan.wang@Sun.COM #define MIU_TA_CTL_BUSY 8 7847956Sxiuyan.wang@Sun.COM 7857956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_CTRL (0x060) 7867956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_ADDR_LO (0x064) 7877956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_ADDR_HI (0x078) 7887956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_WRDATA_LO (0x068) 7897956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_WRDATA_HI (0x06c) 7907956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_WRDATA(i) (0x068+(4*(i))) 7917956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_RDDATA_LO (0x070) 7927956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_RDDATA_HI (0x074) 7937956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_RDDATA(i) (0x070+(4*(i))) 7947956Sxiuyan.wang@Sun.COM 7957956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_ADDR_MASK 0x3ffff8 7967956Sxiuyan.wang@Sun.COM #define SIU_TEST_AGT_UPPER_ADDR(off) ((off)>>22) 7977956Sxiuyan.wang@Sun.COM 7987956Sxiuyan.wang@Sun.COM /* XG Link status */ 7997956Sxiuyan.wang@Sun.COM #define XG_LINK_UP 0x10 8007956Sxiuyan.wang@Sun.COM 8017956Sxiuyan.wang@Sun.COM 8027956Sxiuyan.wang@Sun.COM /* ====================== Configuration Constants ======================== */ 8037956Sxiuyan.wang@Sun.COM #define UNM_NIU_PHY_WAITLEN 200000 /* 200ms delay in each loop */ 8047956Sxiuyan.wang@Sun.COM #define UNM_NIU_PHY_WAITMAX 50 /* 10 seconds before we give up */ 8057956Sxiuyan.wang@Sun.COM #define UNM_NIU_MAX_GBE_PORTS 4 8067956Sxiuyan.wang@Sun.COM #define UNM_NIU_MAX_XG_PORTS 2 8077956Sxiuyan.wang@Sun.COM 8087956Sxiuyan.wang@Sun.COM typedef __uint8_t unm_ethernet_macaddr_t[6]; 8097956Sxiuyan.wang@Sun.COM 8107956Sxiuyan.wang@Sun.COM #define MIN_CORE_CLK_SPEED 200 8117956Sxiuyan.wang@Sun.COM #define MAX_CORE_CLK_SPEED 400 8127956Sxiuyan.wang@Sun.COM #define ACCEPTABLE_CORE_CLK_RANGE(speed) \ 8137956Sxiuyan.wang@Sun.COM ((speed >= MIN_CORE_CLK_SPEED) && (speed <= MAX_CORE_CLK_SPEED)) 8147956Sxiuyan.wang@Sun.COM 8157956Sxiuyan.wang@Sun.COM #define P2_TICKS_PER_SEC 2048 8167956Sxiuyan.wang@Sun.COM #define P2_MIN_TICKS_PER_SEC (P2_TICKS_PER_SEC-10) 8177956Sxiuyan.wang@Sun.COM #define P2_MAX_TICKS_PER_SEC (P2_TICKS_PER_SEC+10) 8187956Sxiuyan.wang@Sun.COM #define CHECK_TICKS_PER_SEC(ticks) \ 8197956Sxiuyan.wang@Sun.COM ((ticks >= P2_MIN_TICKS_PER_SEC) && (ticks <= P2_MAX_TICKS_PER_SEC)) 8207956Sxiuyan.wang@Sun.COM 8217956Sxiuyan.wang@Sun.COM /* ============================= 1GbE =============================== */ 8227956Sxiuyan.wang@Sun.COM /* Nibble or Byte mode for phy interface (GbE mode only) */ 8237956Sxiuyan.wang@Sun.COM typedef enum { 8247956Sxiuyan.wang@Sun.COM UNM_NIU_10_100_MB = 0, 8257956Sxiuyan.wang@Sun.COM UNM_NIU_1000_MB 8267956Sxiuyan.wang@Sun.COM } unm_niu_gbe_ifmode_t; 8277956Sxiuyan.wang@Sun.COM 8287956Sxiuyan.wang@Sun.COM /* Promiscous mode options (GbE mode only) */ 8297956Sxiuyan.wang@Sun.COM typedef enum { 8307956Sxiuyan.wang@Sun.COM UNM_NIU_PROMISCOUS_MODE = 0, 8317956Sxiuyan.wang@Sun.COM UNM_NIU_NON_PROMISCOUS_MODE 8327956Sxiuyan.wang@Sun.COM } unm_niu_prom_mode_t; 8337956Sxiuyan.wang@Sun.COM 8347956Sxiuyan.wang@Sun.COM /* 8357956Sxiuyan.wang@Sun.COM * NIU GB Drop CRC Register 8367956Sxiuyan.wang@Sun.COM */ 8377956Sxiuyan.wang@Sun.COM typedef struct { 8387956Sxiuyan.wang@Sun.COM unm_crbword_t 8397956Sxiuyan.wang@Sun.COM drop_gb0:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ 8407956Sxiuyan.wang@Sun.COM drop_gb1:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ 8417956Sxiuyan.wang@Sun.COM drop_gb2:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ 8427956Sxiuyan.wang@Sun.COM drop_gb3:1, /* 1:drop pkts with bad CRCs, 0:pass them on */ 8437956Sxiuyan.wang@Sun.COM rsvd:28; 8447956Sxiuyan.wang@Sun.COM } unm_niu_gb_drop_crc_t; 8457956Sxiuyan.wang@Sun.COM 8467956Sxiuyan.wang@Sun.COM /* 8477956Sxiuyan.wang@Sun.COM * NIU GB GMII Mode Register (applies to GB0, GB1, GB2, GB3) 8487956Sxiuyan.wang@Sun.COM * To change the mode, turn off the existing mode, then turn on the new mode. 8497956Sxiuyan.wang@Sun.COM */ 8507956Sxiuyan.wang@Sun.COM typedef struct { 8517956Sxiuyan.wang@Sun.COM unm_crbword_t 8527956Sxiuyan.wang@Sun.COM gmiimode:1, /* 1:GMII mode, 0:xmit clk taken from SERDES */ 8537956Sxiuyan.wang@Sun.COM rsvd:29; 8547956Sxiuyan.wang@Sun.COM } unm_niu_gb_gmii_mode_t; 8557956Sxiuyan.wang@Sun.COM 8567956Sxiuyan.wang@Sun.COM /* 8577956Sxiuyan.wang@Sun.COM * NIU GB MII Mode Register (applies to GB0, GB1, GB2, GB3) 8587956Sxiuyan.wang@Sun.COM * To change the mode, turn off the existing mode, then turn on the new mode. 8597956Sxiuyan.wang@Sun.COM */ 8607956Sxiuyan.wang@Sun.COM typedef struct { 8617956Sxiuyan.wang@Sun.COM unm_crbword_t 8627956Sxiuyan.wang@Sun.COM miimode:1, /* 1:MII mode, 0:xmit clk provided to SERDES */ 8637956Sxiuyan.wang@Sun.COM rsvd:29; 8647956Sxiuyan.wang@Sun.COM } unm_niu_gb_mii_mode_t; 8657956Sxiuyan.wang@Sun.COM 8667956Sxiuyan.wang@Sun.COM /* 8677956Sxiuyan.wang@Sun.COM * NIU GB MAC Config Register 0 (applies to GB0, GB1, GB2, GB3) 8687956Sxiuyan.wang@Sun.COM */ 8697956Sxiuyan.wang@Sun.COM typedef struct { 8707956Sxiuyan.wang@Sun.COM unm_crbword_t 8717956Sxiuyan.wang@Sun.COM tx_enable:1, /* 1:enable frame xmit, 0:disable */ 8727956Sxiuyan.wang@Sun.COM tx_synched:1, /* R/O: xmit enable synched to xmit stream */ 8737956Sxiuyan.wang@Sun.COM rx_enable:1, /* 1:enable frame recv, 0:disable */ 8747956Sxiuyan.wang@Sun.COM rx_synched:1, /* R/O: recv enable synched to recv stream */ 8757956Sxiuyan.wang@Sun.COM tx_flowctl:1, /* 1:enable pause frame generation, 0:disable */ 8767956Sxiuyan.wang@Sun.COM rx_flowctl:1, /* 1:act on recv'd pause frames, 0:ignore */ 8777956Sxiuyan.wang@Sun.COM rsvd1:2, 8787956Sxiuyan.wang@Sun.COM loopback:1, /* 1:loop MAC xmits to MAC recvs, 0:normal */ 8797956Sxiuyan.wang@Sun.COM rsvd2:7, 8807956Sxiuyan.wang@Sun.COM tx_reset_pb:1, /* 1:reset frame xmit protocol blk, 0:no-op */ 8817956Sxiuyan.wang@Sun.COM rx_reset_pb:1, /* 1:reset frame recv protocol blk, 0:no-op */ 8827956Sxiuyan.wang@Sun.COM tx_reset_mac:1, /* 1:reset data/ctl multiplexer blk, 0:no-op */ 8837956Sxiuyan.wang@Sun.COM rx_reset_mac:1, /* 1:reset ctl frames & timers blk, 0:no-op */ 8847956Sxiuyan.wang@Sun.COM rsvd3:11, 8857956Sxiuyan.wang@Sun.COM soft_reset:1; /* 1:reset the MAC and the SERDES, 0:no-op */ 8867956Sxiuyan.wang@Sun.COM } unm_niu_gb_mac_config_0_t; 8877956Sxiuyan.wang@Sun.COM 8887956Sxiuyan.wang@Sun.COM /* 8897956Sxiuyan.wang@Sun.COM * NIU GB MAC Config Register 1 (applies to GB0, GB1, GB2, GB3) 8907956Sxiuyan.wang@Sun.COM */ 8917956Sxiuyan.wang@Sun.COM typedef struct { 8927956Sxiuyan.wang@Sun.COM unm_crbword_t 8937956Sxiuyan.wang@Sun.COM duplex:1, /* 1:full duplex mode, 0:half duplex */ 8947956Sxiuyan.wang@Sun.COM crc_enable:1, /* 1:append CRC to xmit frames, 0:dont append */ 8957956Sxiuyan.wang@Sun.COM padshort:1, /* 1:pad short frames and add CRC, 0:dont pad */ 8967956Sxiuyan.wang@Sun.COM rsvd1:1, 8977956Sxiuyan.wang@Sun.COM checklength:1, /* 1:check framelen with actual, 0:dont check */ 8987956Sxiuyan.wang@Sun.COM hugeframes:1, /* 1:allow oversize xmit frames, 0:dont allow */ 8997956Sxiuyan.wang@Sun.COM rsvd2:2, 9007956Sxiuyan.wang@Sun.COM intfmode:2, /* 01:nibble (10/100), 10:byte (1000) */ 9017956Sxiuyan.wang@Sun.COM rsvd3:2, 9027956Sxiuyan.wang@Sun.COM preamblelen:4, /* preamble field length in bytes, default 7 */ 9037956Sxiuyan.wang@Sun.COM rsvd4:16; 9047956Sxiuyan.wang@Sun.COM } unm_niu_gb_mac_config_1_t; 9057956Sxiuyan.wang@Sun.COM 9067956Sxiuyan.wang@Sun.COM /* 9077956Sxiuyan.wang@Sun.COM * NIU XG Pause Ctl Register 9087956Sxiuyan.wang@Sun.COM */ 9097956Sxiuyan.wang@Sun.COM typedef struct { 9107956Sxiuyan.wang@Sun.COM unm_crbword_t 9117956Sxiuyan.wang@Sun.COM xg0_mask:1, /* 1:disable tx pause frames */ 9127956Sxiuyan.wang@Sun.COM xg0_request:1, /* request single pause frame */ 9137956Sxiuyan.wang@Sun.COM xg0_on_off:1, /* 1:req is pause on, 0:off */ 9147956Sxiuyan.wang@Sun.COM xg1_mask:1, /* 1:disable tx pause frames */ 9157956Sxiuyan.wang@Sun.COM xg1_request:1, /* request single pause frame */ 9167956Sxiuyan.wang@Sun.COM xg1_on_off:1, /* 1:req is pause on, 0:off */ 9177956Sxiuyan.wang@Sun.COM rsvd:26; 9187956Sxiuyan.wang@Sun.COM } unm_niu_xg_pause_ctl_t; 9197956Sxiuyan.wang@Sun.COM 9207956Sxiuyan.wang@Sun.COM /* 9217956Sxiuyan.wang@Sun.COM * NIU GBe Pause Ctl Register 9227956Sxiuyan.wang@Sun.COM */ 9237956Sxiuyan.wang@Sun.COM typedef struct { 9247956Sxiuyan.wang@Sun.COM unm_crbword_t 9257956Sxiuyan.wang@Sun.COM gb0_mask:1, /* 1:disable tx pause frames */ 9267956Sxiuyan.wang@Sun.COM gb0_pause_req:1, /* 1: send pause on, 0: send pause off */ 9277956Sxiuyan.wang@Sun.COM gb1_mask:1, /* 1:disable tx pause frames */ 9287956Sxiuyan.wang@Sun.COM gb1_pause_req:1, /* 1: send pause on, 0: send pause off */ 9297956Sxiuyan.wang@Sun.COM gb2_mask:1, /* 1:disable tx pause frames */ 9307956Sxiuyan.wang@Sun.COM gb2_pause_req:1, /* 1: send pause on, 0: send pause off */ 9317956Sxiuyan.wang@Sun.COM gb3_mask:1, /* 1:disable tx pause frames */ 9327956Sxiuyan.wang@Sun.COM gb3_pause_req:1, /* 1: send pause on, 0: send pause off */ 9337956Sxiuyan.wang@Sun.COM rsvd:24; 9347956Sxiuyan.wang@Sun.COM } unm_niu_gb_pause_ctl_t; 9357956Sxiuyan.wang@Sun.COM 9367956Sxiuyan.wang@Sun.COM 9377956Sxiuyan.wang@Sun.COM /* 9387956Sxiuyan.wang@Sun.COM * NIU XG MAC Config Register 9397956Sxiuyan.wang@Sun.COM */ 9407956Sxiuyan.wang@Sun.COM typedef struct { 9417956Sxiuyan.wang@Sun.COM unm_crbword_t 9427956Sxiuyan.wang@Sun.COM tx_enable:1, /* 1:enable frame xmit, 0:disable */ 9437956Sxiuyan.wang@Sun.COM rsvd1:1, 9447956Sxiuyan.wang@Sun.COM rx_enable:1, /* 1:enable frame recv, 0:disable */ 9457956Sxiuyan.wang@Sun.COM rsvd2:1, 9467956Sxiuyan.wang@Sun.COM soft_reset:1, /* 1:reset the MAC , 0:no-op */ 9477956Sxiuyan.wang@Sun.COM rsvd3:22, 9487956Sxiuyan.wang@Sun.COM xaui_framer_reset:1, 9497956Sxiuyan.wang@Sun.COM xaui_rx_reset:1, 9507956Sxiuyan.wang@Sun.COM xaui_tx_reset:1, 9517956Sxiuyan.wang@Sun.COM xg_ingress_afifo_reset:1, 9527956Sxiuyan.wang@Sun.COM xg_egress_afifo_reset:1; 9537956Sxiuyan.wang@Sun.COM } unm_niu_xg_mac_config_0_t; 9547956Sxiuyan.wang@Sun.COM 9557956Sxiuyan.wang@Sun.COM /* 9567956Sxiuyan.wang@Sun.COM * NIU GB MII Mgmt Config Register (applies to GB0, GB1, GB2, GB3) 9577956Sxiuyan.wang@Sun.COM */ 9587956Sxiuyan.wang@Sun.COM typedef struct { 9597956Sxiuyan.wang@Sun.COM unm_crbword_t 9607956Sxiuyan.wang@Sun.COM clockselect:3, /* 0:clk/4, 1:clk/4, 2:clk/6, 3:clk/8 */ 9617956Sxiuyan.wang@Sun.COM /* 4:clk/10, 5:clk/14, 6:clk/20, 7:clk/28 */ 9627956Sxiuyan.wang@Sun.COM rsvd1:1, 9637956Sxiuyan.wang@Sun.COM nopreamble:1, /* 1:suppress preamble generation, 0:normal */ 9647956Sxiuyan.wang@Sun.COM scanauto:1, /* ???? */ 9657956Sxiuyan.wang@Sun.COM rsvd2:25, 9667956Sxiuyan.wang@Sun.COM reset:1; /* 1:reset MII mgmt, 0:no-op */ 9677956Sxiuyan.wang@Sun.COM } unm_niu_gb_mii_mgmt_config_t; 9687956Sxiuyan.wang@Sun.COM 9697956Sxiuyan.wang@Sun.COM /* 9707956Sxiuyan.wang@Sun.COM * NIU GB MII Mgmt Command Register (applies to GB0, GB1, GB2, GB3) 9717956Sxiuyan.wang@Sun.COM */ 9727956Sxiuyan.wang@Sun.COM typedef struct { 9737956Sxiuyan.wang@Sun.COM unm_crbword_t 9747956Sxiuyan.wang@Sun.COM read_cycle:1, /* 1:perform single read cycle, 0:no-op */ 9757956Sxiuyan.wang@Sun.COM scan_cycle:1, /* 1:perform continuous read cycles, 0:no-op */ 9767956Sxiuyan.wang@Sun.COM rsvd:30; 9777956Sxiuyan.wang@Sun.COM } unm_niu_gb_mii_mgmt_command_t; 9787956Sxiuyan.wang@Sun.COM 9797956Sxiuyan.wang@Sun.COM /* 9807956Sxiuyan.wang@Sun.COM * NIU GB MII Mgmt Address Register (applies to GB0, GB1, GB2, GB3) 9817956Sxiuyan.wang@Sun.COM */ 9827956Sxiuyan.wang@Sun.COM typedef struct { 9837956Sxiuyan.wang@Sun.COM unm_crbword_t 9847956Sxiuyan.wang@Sun.COM reg_addr:5, /* which mgmt register we want to talk to */ 9857956Sxiuyan.wang@Sun.COM rsvd1:3, 9867956Sxiuyan.wang@Sun.COM phy_addr:5, /* which PHY to talk to (0 is reserved) */ 9877956Sxiuyan.wang@Sun.COM rsvd:19; 9887956Sxiuyan.wang@Sun.COM } unm_niu_gb_mii_mgmt_address_t; 9897956Sxiuyan.wang@Sun.COM 9907956Sxiuyan.wang@Sun.COM /* 9917956Sxiuyan.wang@Sun.COM * NIU GB MII Mgmt Indicators Register (applies to GB0, GB1, GB2, GB3) 9927956Sxiuyan.wang@Sun.COM * Read-only register. 9937956Sxiuyan.wang@Sun.COM */ 9947956Sxiuyan.wang@Sun.COM typedef struct { 9957956Sxiuyan.wang@Sun.COM unm_crbword_t 9967956Sxiuyan.wang@Sun.COM busy:1, /* 1:performing an MII mgmt cycle, 0:idle */ 9977956Sxiuyan.wang@Sun.COM scanning:1, /* 1:scan operation in progress, 0:idle */ 9987956Sxiuyan.wang@Sun.COM notvalid:1, /* 1:mgmt result data not yet valid, 0:idle */ 9997956Sxiuyan.wang@Sun.COM rsvd:29; 10007956Sxiuyan.wang@Sun.COM } unm_niu_gb_mii_mgmt_indicators_t; 10017956Sxiuyan.wang@Sun.COM 10027956Sxiuyan.wang@Sun.COM /* 10037956Sxiuyan.wang@Sun.COM * NIU GB Station Address High Register 10047956Sxiuyan.wang@Sun.COM * NOTE: this value is in network byte order. 10057956Sxiuyan.wang@Sun.COM */ 10067956Sxiuyan.wang@Sun.COM typedef struct { 10077956Sxiuyan.wang@Sun.COM unm_crbword_t 10087956Sxiuyan.wang@Sun.COM address:32; /* station address [47:16] */ 10097956Sxiuyan.wang@Sun.COM } unm_niu_gb_station_address_high_t; 10107956Sxiuyan.wang@Sun.COM 10117956Sxiuyan.wang@Sun.COM /* 10127956Sxiuyan.wang@Sun.COM * NIU GB Station Address Low Register 10137956Sxiuyan.wang@Sun.COM * NOTE: this value is in network byte order. 10147956Sxiuyan.wang@Sun.COM */ 10157956Sxiuyan.wang@Sun.COM typedef struct { 10167956Sxiuyan.wang@Sun.COM unm_crbword_t 10177956Sxiuyan.wang@Sun.COM rsvd:16, 10187956Sxiuyan.wang@Sun.COM address:16; /* station address [15:0] */ 10197956Sxiuyan.wang@Sun.COM } unm_niu_gb_station_address_low_t; 10207956Sxiuyan.wang@Sun.COM 10217956Sxiuyan.wang@Sun.COM /* ============================ PHY Definitions ========================== */ 10227956Sxiuyan.wang@Sun.COM /* 10237956Sxiuyan.wang@Sun.COM * PHY-Specific MII control/status registers. 10247956Sxiuyan.wang@Sun.COM */ 10257956Sxiuyan.wang@Sun.COM typedef enum { 10267956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_CONTROL = 0, 10277956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_STATUS = 1, 10287956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_ID_0 = 2, 10297956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_ID_1 = 3, 10307956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_AUTONEG = 4, 10317956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_LNKPART = 5, 10327956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_AUTONEG_MORE = 6, 10337956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_NEXTPAGE_XMIT = 7, 10347956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_LNKPART_NEXTPAGE = 8, 10357956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_1000BT_CONTROL = 9, 10367956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_1000BT_STATUS = 10, 10377956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_EXTENDED_STATUS = 15, 10387956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_CONTROL = 16, 10397956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_STATUS = 17, 10407956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_INT_ENABLE = 18, 10417956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_INT_STATUS = 19, 10427956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_CONTROL_MORE = 20, 10437956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_RECV_ERROR_COUNT = 21, 10447956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_LED_CONTROL = 24, 10457956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_LED_OVERRIDE = 25, 10467956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_CONTROL_MORE_YET = 26, 10477956Sxiuyan.wang@Sun.COM UNM_NIU_GB_MII_MGMT_ADDR_PHY_STATUS_MORE = 27 10487956Sxiuyan.wang@Sun.COM } unm_niu_phy_register_t; 10497956Sxiuyan.wang@Sun.COM 10507956Sxiuyan.wang@Sun.COM /* 10517956Sxiuyan.wang@Sun.COM * PHY-Specific Status Register (reg 17). 10527956Sxiuyan.wang@Sun.COM */ 10537956Sxiuyan.wang@Sun.COM typedef struct { 10547956Sxiuyan.wang@Sun.COM unm_crbword_t 10557956Sxiuyan.wang@Sun.COM jabber:1, /* 1:jabber detected, 0:not */ 10567956Sxiuyan.wang@Sun.COM polarity:1, /* 1:polarity reversed, 0:normal */ 10577956Sxiuyan.wang@Sun.COM recvpause:1, /* 1:receive pause enabled, 0:disabled */ 10587956Sxiuyan.wang@Sun.COM xmitpause:1, /* 1:transmit pause enabled, 0:disabled */ 10597956Sxiuyan.wang@Sun.COM energydetect:1, /* 1:sleep, 0:active */ 10607956Sxiuyan.wang@Sun.COM downshift:1, /* 1:downshift, 0:no downshift */ 10617956Sxiuyan.wang@Sun.COM crossover:1, /* 1:MDIX (crossover), 0:MDI (no crossover) */ 10627956Sxiuyan.wang@Sun.COM cablelen:3, /* not valid in 10Mb/s mode */ 10637956Sxiuyan.wang@Sun.COM /* 0:<50m, 1:50-80m, 2:80-110m, 3:110-140m, 4:>140m */ 10647956Sxiuyan.wang@Sun.COM link:1, /* 1:link up, 0:link down */ 10657956Sxiuyan.wang@Sun.COM resolved:1, /* 1:speed and duplex resolved, 0:not yet */ 10667956Sxiuyan.wang@Sun.COM pagercvd:1, /* 1:page received, 0:page not received */ 10677956Sxiuyan.wang@Sun.COM duplex:1, /* 1:full duplex, 0:half duplex */ 10687956Sxiuyan.wang@Sun.COM speed:2, /* 0:10Mb/s, 1:100Mb/s, 2:1000Mb/s, 3:rsvd */ 10697956Sxiuyan.wang@Sun.COM rsvd:16; 10707956Sxiuyan.wang@Sun.COM } unm_niu_phy_status_t; 10717956Sxiuyan.wang@Sun.COM 10727956Sxiuyan.wang@Sun.COM /* 10737956Sxiuyan.wang@Sun.COM * Interrupt Register definition 10747956Sxiuyan.wang@Sun.COM * This definition applies to registers 18 and 19 (int enable and int status). 10757956Sxiuyan.wang@Sun.COM */ 10767956Sxiuyan.wang@Sun.COM typedef struct { 10777956Sxiuyan.wang@Sun.COM unm_crbword_t 10787956Sxiuyan.wang@Sun.COM jabber:1, 10797956Sxiuyan.wang@Sun.COM polarity_changed:1, 10807956Sxiuyan.wang@Sun.COM reserved:2, 10817956Sxiuyan.wang@Sun.COM energy_detect:1, 10827956Sxiuyan.wang@Sun.COM downshift:1, 10837956Sxiuyan.wang@Sun.COM mdi_xover_changed:1, 10847956Sxiuyan.wang@Sun.COM fifo_over_underflow:1, 10857956Sxiuyan.wang@Sun.COM false_carrier:1, 10867956Sxiuyan.wang@Sun.COM symbol_error:1, 10877956Sxiuyan.wang@Sun.COM link_status_changed:1, 10887956Sxiuyan.wang@Sun.COM autoneg_completed:1, 10897956Sxiuyan.wang@Sun.COM page_received:1, 10907956Sxiuyan.wang@Sun.COM duplex_changed:1, 10917956Sxiuyan.wang@Sun.COM speed_changed:1, 10927956Sxiuyan.wang@Sun.COM autoneg_error:1, 10937956Sxiuyan.wang@Sun.COM rsvd:16; 10947956Sxiuyan.wang@Sun.COM } unm_niu_phy_interrupt_t; 10957956Sxiuyan.wang@Sun.COM 10967956Sxiuyan.wang@Sun.COM /* ============================= 10GbE =============================== */ 10977956Sxiuyan.wang@Sun.COM /* 10987956Sxiuyan.wang@Sun.COM * NIU Mode Register. 10997956Sxiuyan.wang@Sun.COM */ 11007956Sxiuyan.wang@Sun.COM typedef struct { 11017956Sxiuyan.wang@Sun.COM unm_crbword_t 11027956Sxiuyan.wang@Sun.COM enable_fc:1, /* enable FibreChannel */ 11037956Sxiuyan.wang@Sun.COM enable_ge:1, /* enable 10/100/1000 Ethernet */ 11047956Sxiuyan.wang@Sun.COM enable_xgb:1, /* enable 10Gb Ethernet */ 11057956Sxiuyan.wang@Sun.COM rsvd:29; 11067956Sxiuyan.wang@Sun.COM } unm_niu_control_t; 11077956Sxiuyan.wang@Sun.COM 11087956Sxiuyan.wang@Sun.COM /* ========================== Interface Functions ======================= */ 11097956Sxiuyan.wang@Sun.COM 11107956Sxiuyan.wang@Sun.COM /* Generic enable for GbE ports. Will detect the speed of the link. */ 11117956Sxiuyan.wang@Sun.COM long unm_niu_gbe_init_port(long port); 11127956Sxiuyan.wang@Sun.COM 11137956Sxiuyan.wang@Sun.COM /* XG Link status */ 11147956Sxiuyan.wang@Sun.COM #define XG_LINK_UP 0x10 11157956Sxiuyan.wang@Sun.COM #define XG_LINK_DOWN 0x20 11167956Sxiuyan.wang@Sun.COM 11177956Sxiuyan.wang@Sun.COM #define XG_LINK_UP_P3 0x1 11187956Sxiuyan.wang@Sun.COM #define XG_LINK_DOWN_P3 0x2 11197956Sxiuyan.wang@Sun.COM #define XG_LINK_UNKNOWN_P3 0 11207956Sxiuyan.wang@Sun.COM 11217956Sxiuyan.wang@Sun.COM #define XG_LINK_STATE_P3_MASK 0xf 11227956Sxiuyan.wang@Sun.COM #define XG_LINK_STATE_P3(pcifn, val) \ 11237956Sxiuyan.wang@Sun.COM (((val) >> ((pcifn) * 4)) & XG_LINK_STATE_P3_MASK) 11247956Sxiuyan.wang@Sun.COM 11257956Sxiuyan.wang@Sun.COM #define MTU_MARGIN 100 11267956Sxiuyan.wang@Sun.COM 11277956Sxiuyan.wang@Sun.COM #define PF_LINK_SPEED_MHZ 100 11287956Sxiuyan.wang@Sun.COM #define PF_LINK_SPEED_REG(pcifn) (CRB_PF_LINK_SPEED_1 + (((pcifn)/4)* 4)) 11297956Sxiuyan.wang@Sun.COM #define PF_LINK_SPEED_MASK 0xff 11307956Sxiuyan.wang@Sun.COM #define PF_LINK_SPEED_VAL(pcifn, reg) \ 11317956Sxiuyan.wang@Sun.COM (((reg) >> (8 * ((pcifn) & 0x3))) & PF_LINK_SPEED_MASK) 11327956Sxiuyan.wang@Sun.COM 11337956Sxiuyan.wang@Sun.COM 11347956Sxiuyan.wang@Sun.COM 11357956Sxiuyan.wang@Sun.COM /* 11367956Sxiuyan.wang@Sun.COM * Definitions relating to access/control of the CAM RAM 11377956Sxiuyan.wang@Sun.COM */ 11387956Sxiuyan.wang@Sun.COM 11397956Sxiuyan.wang@Sun.COM typedef union { 11407956Sxiuyan.wang@Sun.COM struct { 11417956Sxiuyan.wang@Sun.COM /* 11427956Sxiuyan.wang@Sun.COM * =1 if watchdog is active. 11437956Sxiuyan.wang@Sun.COM * =0 if watchdog is inactive 11447956Sxiuyan.wang@Sun.COM * This is read-only for anyone 11457956Sxiuyan.wang@Sun.COM * but the watchdog itself. 11467956Sxiuyan.wang@Sun.COM */ 11477956Sxiuyan.wang@Sun.COM unsigned int enabled: 1, 11487956Sxiuyan.wang@Sun.COM /* 11497956Sxiuyan.wang@Sun.COM * Set this to 1 to send disable 11507956Sxiuyan.wang@Sun.COM * request to watchdog . Watchdog 11517956Sxiuyan.wang@Sun.COM * will complete the shutdown 11527956Sxiuyan.wang@Sun.COM * process and acknowledge it 11537956Sxiuyan.wang@Sun.COM * by clearing this bit and the 11547956Sxiuyan.wang@Sun.COM * "enable" bit. 11557956Sxiuyan.wang@Sun.COM */ 11567956Sxiuyan.wang@Sun.COM disable_request: 1, 11577956Sxiuyan.wang@Sun.COM /* 11587956Sxiuyan.wang@Sun.COM * Set this to 1 to send enable 11597956Sxiuyan.wang@Sun.COM * request to watchdog . Watchdog 11607956Sxiuyan.wang@Sun.COM * will complete the enable 11617956Sxiuyan.wang@Sun.COM * process and acknowledge it 11627956Sxiuyan.wang@Sun.COM * by clearing this bit and 11637956Sxiuyan.wang@Sun.COM * setting the "enable" bit. 11647956Sxiuyan.wang@Sun.COM */ 11657956Sxiuyan.wang@Sun.COM enable_request: 1, 11667956Sxiuyan.wang@Sun.COM unused: 29; 11677956Sxiuyan.wang@Sun.COM } s1; 11687956Sxiuyan.wang@Sun.COM unm_crbword_t word; 11697956Sxiuyan.wang@Sun.COM } dma_watchdog_ctrl_t; 11707956Sxiuyan.wang@Sun.COM 11717956Sxiuyan.wang@Sun.COM #define UNM_CAM_RAM_BASE (UNM_CRB_CAM + 0x02000) 11727956Sxiuyan.wang@Sun.COM #define UNM_CAM_RAM(reg) (UNM_CAM_RAM_BASE + (reg)) 11737956Sxiuyan.wang@Sun.COM 11747956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_NONE 0 11757956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_XG 1 11767956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_GB 2 11777956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_802_3_AP 3 11787956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_AUTO_NEG 4 11797956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_AUTO_NEG_1G 5 11807956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_AUTO_NEG_XG 6 11817956Sxiuyan.wang@Sun.COM #define UNM_PORT_MODE_ADDR (UNM_CAM_RAM(0x24)) 11827956Sxiuyan.wang@Sun.COM #define UNM_WOL_PORT_MODE (UNM_CAM_RAM(0x198)) 11837956Sxiuyan.wang@Sun.COM 11847956Sxiuyan.wang@Sun.COM #define UNM_ROM_LOCK_ID (UNM_CAM_RAM(0x100)) 11857956Sxiuyan.wang@Sun.COM #define UNM_I2C_ROM_LOCK_ID (UNM_CAM_RAM(0x104)) 11867956Sxiuyan.wang@Sun.COM #define UNM_PHY_LOCK_ID (UNM_CAM_RAM(0x120)) 11877956Sxiuyan.wang@Sun.COM #define UNM_CRB_WIN_LOCK_ID (UNM_CAM_RAM(0x124)) 11887956Sxiuyan.wang@Sun.COM #define CAM_RAM_DMA_WATCHDOG_CTRL 0x14 /* See dma_watchdog_ctrl_t */ 1189*9436SJing.Xiong@Sun.COM #define UNM_EFUSE_CHIP_ID_HIGH (UNM_CAM_RAM(0x18)) 1190*9436SJing.Xiong@Sun.COM #define UNM_EFUSE_CHIP_ID_LOW (UNM_CAM_RAM(0x1c)) 11917956Sxiuyan.wang@Sun.COM 11927956Sxiuyan.wang@Sun.COM #define UNM_FW_VERSION_MAJOR (UNM_CAM_RAM(0x150)) 11937956Sxiuyan.wang@Sun.COM #define UNM_FW_VERSION_MINOR (UNM_CAM_RAM(0x154)) 11947956Sxiuyan.wang@Sun.COM #define UNM_FW_VERSION_BUILD (UNM_CAM_RAM(0x168)) 11957956Sxiuyan.wang@Sun.COM #define UNM_FW_VERSION_SUB (UNM_CAM_RAM(0x158)) 11967956Sxiuyan.wang@Sun.COM #define UNM_TCP_FW_VERSION_MAJOR_ADDR (UNM_CAM_RAM(0x15c)) 11977956Sxiuyan.wang@Sun.COM #define UNM_TCP_FW_VERSION_MINOR_ADDR (UNM_CAM_RAM(0x160)) 11987956Sxiuyan.wang@Sun.COM #define UNM_TCP_FW_VERSION_SUB_ADDR (UNM_CAM_RAM(0x164)) 11997956Sxiuyan.wang@Sun.COM #define UNM_PCIE_REG(reg) (UNM_CRB_PCIE + (reg)) 12007956Sxiuyan.wang@Sun.COM 12017956Sxiuyan.wang@Sun.COM #define PCIE_DCR (0x00d8) 12027956Sxiuyan.wang@Sun.COM #define PCIE_DB_DATA2 (0x10070) 12037956Sxiuyan.wang@Sun.COM #define PCIE_DB_CTRL (0x100a0) 12047956Sxiuyan.wang@Sun.COM #define PCIE_DB_ADDR (0x100a4) 12057956Sxiuyan.wang@Sun.COM #define PCIE_DB_DATA (0x100a8) 12067956Sxiuyan.wang@Sun.COM #define PCIE_IMBUS_CONTROL (0x101b8) 12077956Sxiuyan.wang@Sun.COM #define PCIE_SETUP_FUNCTION (0x12040) 12087956Sxiuyan.wang@Sun.COM #define PCIE_SETUP_FUNCTION2 (0x12048) 12097956Sxiuyan.wang@Sun.COM #define PCIE_TGT_SPLIT_CHICKEN (0x12080) 12107956Sxiuyan.wang@Sun.COM #define PCIE_CHICKEN3 (0x120c8) 12117956Sxiuyan.wang@Sun.COM #define PCIE_MAX_MASTER_SPLIT (0x14048) 12127956Sxiuyan.wang@Sun.COM #define PCIE_MAX_DMA_XFER_SIZE (0x1404c) 12137956Sxiuyan.wang@Sun.COM 12147956Sxiuyan.wang@Sun.COM #define UNM_WOL_WAKE (UNM_CAM_RAM(0x180)) 12157956Sxiuyan.wang@Sun.COM #define UNM_WOL_CONFIG_NV (UNM_CAM_RAM(0x184)) 12167956Sxiuyan.wang@Sun.COM #define UNM_WOL_CONFIG (UNM_CAM_RAM(0x188)) 12177956Sxiuyan.wang@Sun.COM #define UNM_PRE_WOL_RX_ENABLE (UNM_CAM_RAM(0x18c)) 12187956Sxiuyan.wang@Sun.COM 12197956Sxiuyan.wang@Sun.COM /* 12207956Sxiuyan.wang@Sun.COM * Following define address space withing PCIX CRB space to talk with 12217956Sxiuyan.wang@Sun.COM * devices on the storage side PCI bus. 12227956Sxiuyan.wang@Sun.COM */ 12237956Sxiuyan.wang@Sun.COM #define PCIX_PS_MEM_SPACE (0x90000) 12247956Sxiuyan.wang@Sun.COM 12257956Sxiuyan.wang@Sun.COM #define UNM_PCIX_PH_REG(reg) (UNM_CRB_PCIE + (reg)) 12267956Sxiuyan.wang@Sun.COM 12277956Sxiuyan.wang@Sun.COM /* 12287956Sxiuyan.wang@Sun.COM * Configuration registers. These are the same offsets on both host and 12297956Sxiuyan.wang@Sun.COM * storage side PCI blocks. 12307956Sxiuyan.wang@Sun.COM */ 12317956Sxiuyan.wang@Sun.COM /* Used for PS PCI Memory access */ 12327956Sxiuyan.wang@Sun.COM #define PCIX_PS_OP_ADDR_LO (0x10000) 12337956Sxiuyan.wang@Sun.COM #define PCIX_PS_OP_ADDR_HI (0x10004) /* via CRB (PS side only) */ 12347956Sxiuyan.wang@Sun.COM 12357956Sxiuyan.wang@Sun.COM #define PCIX_MS_WINDOW (0x10204) /* UNUSED */ 12367956Sxiuyan.wang@Sun.COM 12377956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW (0x10210) 12387956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F0 (0x10210) 12397956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F1 (0x10230) 12407956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F2 (0x10250) 12417956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F3 (0x10270) 12427956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F4 (0x102ac) 12437956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F5 (0x102bc) 12447956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F6 (0x102cc) 12457956Sxiuyan.wang@Sun.COM #define PCIX_CRB_WINDOW_F7 (0x102dc) 12467956Sxiuyan.wang@Sun.COM #define PCIE_CRB_WINDOW_REG(func) (((func) < 4) ? \ 12477956Sxiuyan.wang@Sun.COM (PCIX_CRB_WINDOW_F0 + (0x20 * (func))) :\ 12487956Sxiuyan.wang@Sun.COM (PCIX_CRB_WINDOW_F4 + (0x10 * ((func)-4)))) 12497956Sxiuyan.wang@Sun.COM 12507956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW (0x10200) 12517956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F0 (0x10200) 12527956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F1 (0x10220) 12537956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F2 (0x10240) 12547956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F3 (0x10260) 12557956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F4 (0x102a0) 12567956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F5 (0x102b0) 12577956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F6 (0x102c0) 12587956Sxiuyan.wang@Sun.COM #define PCIX_MN_WINDOW_F7 (0x102d0) 12597956Sxiuyan.wang@Sun.COM #define PCIE_MN_WINDOW_REG(func) (((func) < 4) ? \ 12607956Sxiuyan.wang@Sun.COM (PCIX_MN_WINDOW_F0 + (0x20 * (func))) :\ 12617956Sxiuyan.wang@Sun.COM (PCIX_MN_WINDOW_F4 + (0x10 * ((func)-4)))) 12627956Sxiuyan.wang@Sun.COM 12637956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW (0x10208) 12647956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F0 (0x10208) 12657956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F1 (0x10228) 12667956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F2 (0x10248) 12677956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F3 (0x10268) 12687956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F4 (0x102a8) 12697956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F5 (0x102b8) 12707956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F6 (0x102c8) 12717956Sxiuyan.wang@Sun.COM #define PCIX_SN_WINDOW_F7 (0x102d8) 12727956Sxiuyan.wang@Sun.COM #define PCIE_SN_WINDOW_REG(func) (((func) < 4) ? \ 12737956Sxiuyan.wang@Sun.COM (PCIX_SN_WINDOW_F0 + (0x20 * (func))) :\ 12747956Sxiuyan.wang@Sun.COM (PCIX_SN_WINDOW_F4 + (0x10 * ((func)-4)))) 12757956Sxiuyan.wang@Sun.COM 12767956Sxiuyan.wang@Sun.COM #define UNM_PCIX_PS_REG(reg) (UNM_CRB_PCIX_MD + (reg)) 12777956Sxiuyan.wang@Sun.COM #define UNM_PCIX_PS2_REG(reg) (UNM_CRB_PCIE2 + (reg)) 12787956Sxiuyan.wang@Sun.COM #define MANAGEMENT_COMMAND_REG (UNM_CRB_PCIE + (4)) 12797956Sxiuyan.wang@Sun.COM 12807956Sxiuyan.wang@Sun.COM #define UNM_PH_INT_MASK (UNM_CRB_PCIE + PCIX_INT_MASK) 12817956Sxiuyan.wang@Sun.COM 12827956Sxiuyan.wang@Sun.COM /* 12837956Sxiuyan.wang@Sun.COM * CRB window register. 12847956Sxiuyan.wang@Sun.COM */ 12857956Sxiuyan.wang@Sun.COM typedef struct { 12867956Sxiuyan.wang@Sun.COM unm_crbword_t rsvd1:25, 12877956Sxiuyan.wang@Sun.COM addrbit:1, /* bit 25 of CRB address */ 12887956Sxiuyan.wang@Sun.COM rsvd2:6; 12897956Sxiuyan.wang@Sun.COM } unm_pcix_crb_window_t; 12907956Sxiuyan.wang@Sun.COM 12917956Sxiuyan.wang@Sun.COM /* 12927956Sxiuyan.wang@Sun.COM * Tell which interrupt source we want to operate on. 12937956Sxiuyan.wang@Sun.COM */ 12947956Sxiuyan.wang@Sun.COM typedef enum { 12957956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_UNDEFINED = 0, 12967956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_DMA0, /* DMA engine 0 */ 12977956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_DMA1, /* DMA engine 1 */ 12987956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_I2Q /* I2Q block */ 12997956Sxiuyan.wang@Sun.COM } unm_pcix_int_source_t; 13007956Sxiuyan.wang@Sun.COM 13017956Sxiuyan.wang@Sun.COM typedef enum { 13027956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_UNDEFINEDSTATE = 0, 13037956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_ALLOW, /* Allow this src to int. the host */ 13047956Sxiuyan.wang@Sun.COM UNM_PCIX_INT_SRC_MASK /* Mask this src */ 13057956Sxiuyan.wang@Sun.COM } unm_pcix_int_state_t; 13067956Sxiuyan.wang@Sun.COM 13077956Sxiuyan.wang@Sun.COM /* 13087956Sxiuyan.wang@Sun.COM * PCIX Interrupt Mask Register. 13097956Sxiuyan.wang@Sun.COM */ 13107956Sxiuyan.wang@Sun.COM typedef struct { 13117956Sxiuyan.wang@Sun.COM /* 0=DMA0 not masked, 1=masked */ 13127956Sxiuyan.wang@Sun.COM unm_crbword_t dma0:1, 13137956Sxiuyan.wang@Sun.COM /* 0=DMA1 not masked, 1=masked */ 13147956Sxiuyan.wang@Sun.COM dma1:1, 13157956Sxiuyan.wang@Sun.COM /* 0=I2Q not masked, 1=masked */ 13167956Sxiuyan.wang@Sun.COM i2q:1, 13177956Sxiuyan.wang@Sun.COM dma0_err:1, 13187956Sxiuyan.wang@Sun.COM dma1_err:1, 13197956Sxiuyan.wang@Sun.COM target_status:1, 13207956Sxiuyan.wang@Sun.COM mega_err:1, 13217956Sxiuyan.wang@Sun.COM ps_serr_int:1, 13227956Sxiuyan.wang@Sun.COM split_discard:1, 13237956Sxiuyan.wang@Sun.COM io_write_func0:1, 13247956Sxiuyan.wang@Sun.COM io_write_func1:1, 13257956Sxiuyan.wang@Sun.COM io_write_func2:1, 13267956Sxiuyan.wang@Sun.COM io_write_func3:1, 13277956Sxiuyan.wang@Sun.COM msi_write_func0:1, 13287956Sxiuyan.wang@Sun.COM msi_write_func1:1, 13297956Sxiuyan.wang@Sun.COM msi_write_func2:1, 13307956Sxiuyan.wang@Sun.COM msi_write_func3:1, 13317956Sxiuyan.wang@Sun.COM rsvd:15; 13327956Sxiuyan.wang@Sun.COM } unm_pcix_int_mask_t; 13337956Sxiuyan.wang@Sun.COM 13347956Sxiuyan.wang@Sun.COM int unm_pcix_int_control(unm_pcix_int_source_t src, 13357956Sxiuyan.wang@Sun.COM unm_pcix_int_state_t state); 13367956Sxiuyan.wang@Sun.COM 13377956Sxiuyan.wang@Sun.COM #define UNM_SRE_INT_STATUS (UNM_CRB_SRE + 0x00034) 13387956Sxiuyan.wang@Sun.COM #define UNM_SRE_BUF_CTL (UNM_CRB_SRE + 0x01000) 13397956Sxiuyan.wang@Sun.COM #define UNM_SRE_PBI_ACTIVE_STATUS (UNM_CRB_SRE + 0x01014) 13407956Sxiuyan.wang@Sun.COM #define UNM_SRE_SCRATCHPAD (UNM_CRB_SRE + 0x01018) 13417956Sxiuyan.wang@Sun.COM #define UNM_SRE_L1RE_CTL (UNM_CRB_SRE + 0x03000) 13427956Sxiuyan.wang@Sun.COM #define UNM_SRE_L2RE_CTL (UNM_CRB_SRE + 0x05000) 13437956Sxiuyan.wang@Sun.COM 13447956Sxiuyan.wang@Sun.COM // These are offset to a particular Peg's CRB base address 13457956Sxiuyan.wang@Sun.COM #define CRB_REG_EX_PC 0x3c 13467956Sxiuyan.wang@Sun.COM 13477956Sxiuyan.wang@Sun.COM #define PEG_NETWORK_BASE(N) (UNM_CRB_PEG_NET_0 + (((N)&3) << 20)) 13487956Sxiuyan.wang@Sun.COM 13497956Sxiuyan.wang@Sun.COM /* 13507956Sxiuyan.wang@Sun.COM * Definitions relating to enqueue/dequeue/control of the Queue Operations 13517956Sxiuyan.wang@Sun.COM * to either the Primary Queue Manager or the Secondary Queue Manager. 13527956Sxiuyan.wang@Sun.COM */ 13537956Sxiuyan.wang@Sun.COM 13547956Sxiuyan.wang@Sun.COM /* 13557956Sxiuyan.wang@Sun.COM * General configuration constants. 13567956Sxiuyan.wang@Sun.COM */ 13577956Sxiuyan.wang@Sun.COM #define UNM_QM_MAX_SIDE 1 13587956Sxiuyan.wang@Sun.COM 13597956Sxiuyan.wang@Sun.COM /* 13607956Sxiuyan.wang@Sun.COM * Data movement registers (differs based on processor). 13617956Sxiuyan.wang@Sun.COM */ 13627956Sxiuyan.wang@Sun.COM #define UNM_QM_COMMAND (UNM_PCI_CAMQM + 0x00000) 13637956Sxiuyan.wang@Sun.COM #define UNM_QM_STATUS (UNM_PCI_CAMQM + 0x00008) 13647956Sxiuyan.wang@Sun.COM #define UNM_QM_DATA(W, P) (UNM_PCI_CAMQM + 0x00010 + \ 13657956Sxiuyan.wang@Sun.COM (W)*sizeof (unm_dataword_t)) 13667956Sxiuyan.wang@Sun.COM #define UNM_QM_REPLY(W, P)(UNM_PCI_CAMQM + 0x00050 + \ 13677956Sxiuyan.wang@Sun.COM (W)*sizeof (unm_dataword_t)) 13687956Sxiuyan.wang@Sun.COM 13697956Sxiuyan.wang@Sun.COM /* 13707956Sxiuyan.wang@Sun.COM * Control commands to the QM block. 13717956Sxiuyan.wang@Sun.COM */ 13727956Sxiuyan.wang@Sun.COM #define UNM_QM_CMD_READ 0x0 /* interpret "readop" field */ 13737956Sxiuyan.wang@Sun.COM 13747956Sxiuyan.wang@Sun.COM /* 13757956Sxiuyan.wang@Sun.COM * Platform-specific fields in the queue command word 13767956Sxiuyan.wang@Sun.COM */ 13777956Sxiuyan.wang@Sun.COM #define UNM_QM_CMD_SIDE 0 13787956Sxiuyan.wang@Sun.COM /* Casper and Peg need this bit. PCI interface does not */ 13797956Sxiuyan.wang@Sun.COM #define UNM_QM_CMD_START 1 13807956Sxiuyan.wang@Sun.COM 13817956Sxiuyan.wang@Sun.COM 13827956Sxiuyan.wang@Sun.COM /* 13837956Sxiuyan.wang@Sun.COM * Pegasus has two QM ports. This is the default one to use (unless 13847956Sxiuyan.wang@Sun.COM * QM async interface is called explicitly with other port). 13857956Sxiuyan.wang@Sun.COM */ 13867956Sxiuyan.wang@Sun.COM #define UNM_QM_DEFAULT_PORT 0 13877956Sxiuyan.wang@Sun.COM 13887956Sxiuyan.wang@Sun.COM /* 13897956Sxiuyan.wang@Sun.COM * Status result returned to caller of unm_qm_request_status() 13907956Sxiuyan.wang@Sun.COM */ 13917956Sxiuyan.wang@Sun.COM typedef enum { 13927956Sxiuyan.wang@Sun.COM /* error in HW - most likely PCI bug. retry */ 13937956Sxiuyan.wang@Sun.COM unm_qm_status_unknown = 0, 13947956Sxiuyan.wang@Sun.COM unm_qm_status_done, /* done with last command */ 13957956Sxiuyan.wang@Sun.COM unm_qm_status_busy, /* busy */ 13967956Sxiuyan.wang@Sun.COM unm_qm_status_notfound, /* queue is empty to read or full to write */ 13977956Sxiuyan.wang@Sun.COM unm_qm_status_error /* error (e.g. timeout) encountered */ 13987956Sxiuyan.wang@Sun.COM } unm_qm_result_t; 13997956Sxiuyan.wang@Sun.COM 14007956Sxiuyan.wang@Sun.COM /* 14017956Sxiuyan.wang@Sun.COM * Definitions relating to access/control of the I2Q h/w block. 14027956Sxiuyan.wang@Sun.COM */ 14037956Sxiuyan.wang@Sun.COM /* 14047956Sxiuyan.wang@Sun.COM * Configuration registers. 14057956Sxiuyan.wang@Sun.COM */ 14067956Sxiuyan.wang@Sun.COM #define UNM_I2Q_CONFIG (UNM_CRB_I2Q + 0x00000) 14077956Sxiuyan.wang@Sun.COM #define UNM_I2Q_ENA_PCI_LO (UNM_CRB_I2Q + 0x00010) 14087956Sxiuyan.wang@Sun.COM #define UNM_I2Q_ENA_PCI_HI (UNM_CRB_I2Q + 0x00014) 14097956Sxiuyan.wang@Sun.COM #define UNM_I2Q_ENA_CASPER_LO (UNM_CRB_I2Q + 0x00018) 14107956Sxiuyan.wang@Sun.COM #define UNM_I2Q_ENA_CASPER_HI (UNM_CRB_I2Q + 0x0001c) 14117956Sxiuyan.wang@Sun.COM #define UNM_I2Q_ENA_QM_LO (UNM_CRB_I2Q + 0x00020) 14127956Sxiuyan.wang@Sun.COM #define UNM_I2Q_ENA_QM_HI (UNM_CRB_I2Q + 0x00024) 14137956Sxiuyan.wang@Sun.COM #define UNM_I2Q_CLR_PCI_LO (UNM_CRB_I2Q + 0x00030) 14147956Sxiuyan.wang@Sun.COM #define UNM_I2Q_CLR_PCI_HI (UNM_CRB_I2Q + 0x00034) 14157956Sxiuyan.wang@Sun.COM #define UNM_I2Q_CLR_CASPER_LO (UNM_CRB_I2Q + 0x00038) 14167956Sxiuyan.wang@Sun.COM #define UNM_I2Q_CLR_CASPER_HI (UNM_CRB_I2Q + 0x0003c) 14177956Sxiuyan.wang@Sun.COM #define UNM_I2Q_MSG_HDR_LO(I) (UNM_CRB_I2Q + 0x00100 + (I)*0x8) 14187956Sxiuyan.wang@Sun.COM #define UNM_I2Q_MSG_HDR_HI(I) (UNM_CRB_I2Q + 0x00104 + (I)*0x8) 14197956Sxiuyan.wang@Sun.COM 14207956Sxiuyan.wang@Sun.COM /* 14217956Sxiuyan.wang@Sun.COM * List the bit positions in the registers of the interrupt sources. 14227956Sxiuyan.wang@Sun.COM */ 14237956Sxiuyan.wang@Sun.COM typedef enum { 14247956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PCI32 = 0, /* PCI32 block */ 14257956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PCIE = 1, /* PCI-Express block */ 14267956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_CASPER = 2, /* Casper */ 14277956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_CASPER_ERR = 3, /* Casper error */ 14287956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PEG_0 = 4, /* Peg 0 */ 14297956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PEG_1 = 5, /* Peg 1 */ 14307956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PEG_2 = 6, /* Peg 2 */ 14317956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PEG_3 = 7, /* Peg 3 */ 14327956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PEG_DCACHE = 8, /* Peg Data cache */ 14337956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PEG_ICACHE = 9, /* Peg Instruction cache */ 14347956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_DMA0 = 10, /* DMA engine 0 */ 14357956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_DMA1 = 11, /* DMA engine 1 */ 14367956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_DMA2 = 12, /* DMA engine 2 */ 14377956Sxiuyan.wang@Sun.COM NM_I2Q_SRC_DMA3 = 13, /* DMA engine 3 */ 14387956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_LPC = 14, /* */ 14397956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SMB = 15, /* */ 14407956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_TIMER = 16, /* One of the global timers */ 14417956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG0 = 17, /* SQM SQG0 empty->non-empty */ 14427956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG1 = 18, /* SQM SQG1 empty->non-empty */ 14437956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG2 = 19, /* SQM SQG2 empty->non-empty */ 14447956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG3 = 20, /* SQM SQG3 empty->non-empty */ 14457956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG0_LW = 21, /* SQM SQG0 low on free buffers */ 14467956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG1_LW = 22, /* SQM SQG1 low on free buffers */ 14477956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG2_LW = 23, /* SQM SQG2 low on free buffers */ 14487956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SQG3_LW = 24, /* SQM SQG3 low on free buffers */ 14497956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PQM_0 = 25, /* PQM group 0 */ 14507956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PQM_1 = 26, /* PQM group 1 */ 14517956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PQM_2 = 27, /* PQM group 2 */ 14527956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_PQM_3 = 28, /* PQM group 3 */ 14537956Sxiuyan.wang@Sun.COM /* [29:31] reserved */ 14547956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_0 = 32, /* SW INT 0 */ 14557956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_1 = 33, /* SW INT 1 */ 14567956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_2 = 34, /* SW INT 2 */ 14577956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_3 = 35, /* SW INT 3 */ 14587956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_4 = 36, /* SW INT 4 */ 14597956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_5 = 37, /* SW INT 5 */ 14607956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_6 = 38, /* SW INT 6 */ 14617956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SW_7 = 39, /* SW INT 7 */ 14627956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SRE_EPG = 40, /* SRE/EPG aggregate interrupt */ 14637956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_XDMA = 41, /* XDMA engine */ 14647956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_MN = 42, /* DDR interface unit */ 14657956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_NIU = 43, /* Network interface unit */ 14667956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_SN = 44, /* QDR interface unit */ 14677956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_CAM = 45, /* CAM */ 14687956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_EXT1 = 46, /* External 1 */ 14697956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_EXT2 = 47, /* External 2 */ 14707956Sxiuyan.wang@Sun.COM /* [48:63] reserved */ 14717956Sxiuyan.wang@Sun.COM UNM_I2Q_SRC_MAX = 47, /* max used interrupt line */ 14728687SJing.Xiong@Sun.COM UNM_I2Q_SRC_MAX_LO = 32 /* max bits in "lo" register */ 14737956Sxiuyan.wang@Sun.COM } unm_i2q_source_t; 14747956Sxiuyan.wang@Sun.COM 14757956Sxiuyan.wang@Sun.COM /* 14767956Sxiuyan.wang@Sun.COM * Interrupt Source Enable/Clear registers for the I2Q. 14777956Sxiuyan.wang@Sun.COM */ 14787956Sxiuyan.wang@Sun.COM typedef struct { 14797956Sxiuyan.wang@Sun.COM unm_crbword_t source:32; /* int enable/status bits */ 14807956Sxiuyan.wang@Sun.COM } unm_i2q_source_lo_t; 14817956Sxiuyan.wang@Sun.COM 14827956Sxiuyan.wang@Sun.COM typedef struct { 14837956Sxiuyan.wang@Sun.COM unm_crbword_t source:16, /* int enable/status bits */ 14847956Sxiuyan.wang@Sun.COM rsvd:16; 14857956Sxiuyan.wang@Sun.COM } unm_i2q_source_hi_t; 14867956Sxiuyan.wang@Sun.COM 14877956Sxiuyan.wang@Sun.COM /* 14887956Sxiuyan.wang@Sun.COM * List the possible interrupt sources and the 14897956Sxiuyan.wang@Sun.COM * control operations to be performed for each. 14907956Sxiuyan.wang@Sun.COM */ 14917956Sxiuyan.wang@Sun.COM typedef enum { 14927956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_SRCUNKNOWN = 0, /* undefined */ 14937956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_PCI, /* PCI block */ 14947956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_CASPER, /* Casper */ 14957956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_QM /* Queue Manager */ 14967956Sxiuyan.wang@Sun.COM } unm_i2q_ctl_src_t; 14977956Sxiuyan.wang@Sun.COM 14987956Sxiuyan.wang@Sun.COM typedef enum { 14997956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_OPUNKNOWN = 0, /* undefined */ 15007956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_ADD, /* add int'ing for that source */ 15017956Sxiuyan.wang@Sun.COM UNM_I2Q_CTL_DEL /* stop int'ing for that source */ 15027956Sxiuyan.wang@Sun.COM } unm_i2q_ctl_op_t; 15037956Sxiuyan.wang@Sun.COM 15047956Sxiuyan.wang@Sun.COM /* 15057956Sxiuyan.wang@Sun.COM * Definitions relating to access/control of the Secondary Queue Manager 15067956Sxiuyan.wang@Sun.COM * h/w block. 15077956Sxiuyan.wang@Sun.COM */ 15087956Sxiuyan.wang@Sun.COM /* 15097956Sxiuyan.wang@Sun.COM * Configuration registers. 15107956Sxiuyan.wang@Sun.COM */ 15117956Sxiuyan.wang@Sun.COM #define UNM_SQM_BASE(G) \ 15127956Sxiuyan.wang@Sun.COM ((G) == 0 ? UNM_CRB_SQM_NET_0 : \ 15137956Sxiuyan.wang@Sun.COM ((G) == 1 ? UNM_CRB_SQM_NET_1 : \ 15147956Sxiuyan.wang@Sun.COM ((G) == 2 ? UNM_CRB_SQM_NET_2 : UNM_CRB_SQM_NET_3))) 15157956Sxiuyan.wang@Sun.COM 15167956Sxiuyan.wang@Sun.COM #define UNM_SQM_INT_ENABLE(G) (UNM_SQM_BASE(G) + 0x00018) 15177956Sxiuyan.wang@Sun.COM #define UNM_SQM_INT_STATUS(G) (UNM_SQM_BASE(G) + 0x0001c) 15187956Sxiuyan.wang@Sun.COM #define UNN_SQM_SCRATCHPAD(G) (UNM_SQM_BASE(G) + 0x01000) 15197956Sxiuyan.wang@Sun.COM 15207956Sxiuyan.wang@Sun.COM #define UNM_SQM_MAX_GRP 4 /* num groups per side */ 15217956Sxiuyan.wang@Sun.COM #define UNM_SQM_MAX_SUBQ 16 /* num Q's per type-0 group */ 15227956Sxiuyan.wang@Sun.COM #define UNM_SQM_MAX_SUBGRP 4 /* subgrps per type-1 group */ 15237956Sxiuyan.wang@Sun.COM 15247956Sxiuyan.wang@Sun.COM #define UNM_SQM_MAX_TYPE_1_NUM (256*1024) 15257956Sxiuyan.wang@Sun.COM 15267956Sxiuyan.wang@Sun.COM /* 15277956Sxiuyan.wang@Sun.COM * Interrupt enables and interrupt status for all 16 queues in a group. 15287956Sxiuyan.wang@Sun.COM */ 15297956Sxiuyan.wang@Sun.COM typedef struct { 15307956Sxiuyan.wang@Sun.COM unm_crbword_t queues:16, /* enable/status: 0x1=Q0, 0x8000=Q15 */ 15317956Sxiuyan.wang@Sun.COM rsvd:16; 15327956Sxiuyan.wang@Sun.COM } unm_sqm_int_enstat_t; 15337956Sxiuyan.wang@Sun.COM 15347956Sxiuyan.wang@Sun.COM /* 15357956Sxiuyan.wang@Sun.COM * Control operation for an SQM Group interrupt. 15367956Sxiuyan.wang@Sun.COM */ 15377956Sxiuyan.wang@Sun.COM typedef enum { 15387956Sxiuyan.wang@Sun.COM UNM_SQM_INTOP_OPUNKNOWN = 0, /* undefined */ 15397956Sxiuyan.wang@Sun.COM UNM_SQM_INTOP_GET, /* return all bits for that group */ 15407956Sxiuyan.wang@Sun.COM UNM_SQM_INTOP_SET, /* assign all bits for that group */ 15417956Sxiuyan.wang@Sun.COM UNM_SQM_INTOP_ADD, /* set one bit for that group */ 15427956Sxiuyan.wang@Sun.COM UNM_SQM_INTOP_DEL /* clear one bit for that group */ 15437956Sxiuyan.wang@Sun.COM } unm_sqm_int_op_t; 15447956Sxiuyan.wang@Sun.COM typedef enum { 15457956Sxiuyan.wang@Sun.COM UNM_SQM_INTARG_ARGUNKNOWN = 0, /* undefined */ 15467956Sxiuyan.wang@Sun.COM UNM_SQM_INTARG_ENABLE, /* affect the 'enable' register */ 15477956Sxiuyan.wang@Sun.COM UNM_SQM_INTARG_STATUS /* affect the 'status' register */ 15487956Sxiuyan.wang@Sun.COM } unm_sqm_int_arg_t; 15497956Sxiuyan.wang@Sun.COM 15507956Sxiuyan.wang@Sun.COM int unm_sqm_int_control(unm_sqm_int_op_t op, unm_sqm_int_arg_t arg, 15517956Sxiuyan.wang@Sun.COM int side, int group, int queue, int *image); 15527956Sxiuyan.wang@Sun.COM 15537956Sxiuyan.wang@Sun.COM 15547956Sxiuyan.wang@Sun.COM int unm_crb_read(unsigned long off, void *data); 15557956Sxiuyan.wang@Sun.COM native_t unm_crb_read_val(unsigned long off); 15567956Sxiuyan.wang@Sun.COM int unm_crb_write(unsigned long off, void *data); 15577956Sxiuyan.wang@Sun.COM int unm_crb_writelit(unsigned long off, int data); 15587956Sxiuyan.wang@Sun.COM int unm_imb_read(unsigned long off, void *data); 15597956Sxiuyan.wang@Sun.COM int unm_imb_write(unsigned long off, void *data); 15607956Sxiuyan.wang@Sun.COM int unm_imb_writelit64(unsigned long off, __uint64_t data); 15617956Sxiuyan.wang@Sun.COM 15627956Sxiuyan.wang@Sun.COM unsigned long unm_xport_lock(void); 15637956Sxiuyan.wang@Sun.COM void unm_xport_unlock(unsigned long); 15647956Sxiuyan.wang@Sun.COM 15657956Sxiuyan.wang@Sun.COM #define UNM_CRB_READ_VAL(ADDR) unm_crb_read_val((ADDR)) 15667956Sxiuyan.wang@Sun.COM #define UNM_CRB_READ(ADDR, VALUE) unm_crb_read((ADDR), (unm_crbword_t *)(VALUE)) 15677956Sxiuyan.wang@Sun.COM #define UNM_CRB_READ_CHECK(ADDR, VALUE) \ 15687956Sxiuyan.wang@Sun.COM do { \ 15697956Sxiuyan.wang@Sun.COM if (unm_crb_read(ADDR, VALUE)) \ 15707956Sxiuyan.wang@Sun.COM return (-1); \ 15717956Sxiuyan.wang@Sun.COM } while (0) 15727956Sxiuyan.wang@Sun.COM #define UNM_CRB_WRITE_CHECK(ADDR, VALUE) \ 15737956Sxiuyan.wang@Sun.COM do { \ 15747956Sxiuyan.wang@Sun.COM if (unm_crb_write(ADDR, VALUE)) \ 15757956Sxiuyan.wang@Sun.COM return (-1); \ 15767956Sxiuyan.wang@Sun.COM } while (0) 15777956Sxiuyan.wang@Sun.COM #define UNM_CRB_WRITELIT(ADDR, VALUE) \ 15787956Sxiuyan.wang@Sun.COM do { \ 15797956Sxiuyan.wang@Sun.COM unm_crb_writelit(ADDR, VALUE); \ 15807956Sxiuyan.wang@Sun.COM } while (0) 15817956Sxiuyan.wang@Sun.COM #define UNM_CRB_WRITE(ADDR, VALUE) \ 15827956Sxiuyan.wang@Sun.COM do { \ 15837956Sxiuyan.wang@Sun.COM unm_crb_write(ADDR, VALUE); \ 15847956Sxiuyan.wang@Sun.COM } while (0) 15857956Sxiuyan.wang@Sun.COM #define UNM_CRB_WRITELIT_CHECK(ADDR, VALUE) \ 15867956Sxiuyan.wang@Sun.COM do { \ 15877956Sxiuyan.wang@Sun.COM if (unm_crb_writelit(ADDR, VALUE)) \ 15887956Sxiuyan.wang@Sun.COM return (-1); \ 15897956Sxiuyan.wang@Sun.COM } while (0) 15907956Sxiuyan.wang@Sun.COM 15917956Sxiuyan.wang@Sun.COM #define UNM_IMB_READ_CHECK(ADDR, VALUE) \ 15927956Sxiuyan.wang@Sun.COM do { \ 15937956Sxiuyan.wang@Sun.COM if (unm_imb_read(ADDR, VALUE)) \ 15947956Sxiuyan.wang@Sun.COM return (-1); \ 15957956Sxiuyan.wang@Sun.COM } while (0) 15967956Sxiuyan.wang@Sun.COM #define UNM_IMB_WRITE_CHECK(ADDR, VALUE) \ 15977956Sxiuyan.wang@Sun.COM do { \ 15987956Sxiuyan.wang@Sun.COM if (unm_imb_write(ADDR, VALUE)) \ 15997956Sxiuyan.wang@Sun.COM return (-1); \ 16007956Sxiuyan.wang@Sun.COM } while (0) 16017956Sxiuyan.wang@Sun.COM #define UNM_IMB_WRITELIT_CHECK(ADDR, VALUE) \ 16027956Sxiuyan.wang@Sun.COM do { \ 16037956Sxiuyan.wang@Sun.COM if (unm_imb_writelit64(ADDR, VALUE)) \ 16047956Sxiuyan.wang@Sun.COM return (-1); \ 16057956Sxiuyan.wang@Sun.COM } while (0) 16067956Sxiuyan.wang@Sun.COM 16077956Sxiuyan.wang@Sun.COM /* 16087956Sxiuyan.wang@Sun.COM * Configuration registers. 16097956Sxiuyan.wang@Sun.COM */ 16107956Sxiuyan.wang@Sun.COM #ifdef PCIX 16117956Sxiuyan.wang@Sun.COM #define UNM_DMA_BASE(U) (UNM_CRB_PCIX_HOST + 0x20000 + ((U)<<16)) 16127956Sxiuyan.wang@Sun.COM #else 16137956Sxiuyan.wang@Sun.COM #define UNM_DMA_BASE(U) (UNM_CRB_PCIX_MD + 0x20000 + ((U)<<16)) 16147956Sxiuyan.wang@Sun.COM #endif 16157956Sxiuyan.wang@Sun.COM #define UNM_DMA_COMMAND(U) (UNM_DMA_BASE(U) + 0x00008) 16167956Sxiuyan.wang@Sun.COM 16177956Sxiuyan.wang@Sun.COM 16187956Sxiuyan.wang@Sun.COM #define PCIE_SEM2_LOCK (0x1c010) /* Flash lock */ 16197956Sxiuyan.wang@Sun.COM #define PCIE_SEM2_UNLOCK (0x1c014) /* Flash unlock */ 16207956Sxiuyan.wang@Sun.COM #define PCIE_SEM3_LOCK (0x1c018) /* Phy lock */ 16217956Sxiuyan.wang@Sun.COM #define PCIE_SEM3_UNLOCK (0x1c01c) /* Phy unlock */ 16227956Sxiuyan.wang@Sun.COM #define PCIE_SEM4_LOCK (0x1c020) /* I2C lock */ 16237956Sxiuyan.wang@Sun.COM #define PCIE_SEM4_UNLOCK (0x1c024) /* I2C unlock */ 16247956Sxiuyan.wang@Sun.COM #define PCIE_SEM5_LOCK (0x1c028) /* API lock */ 16257956Sxiuyan.wang@Sun.COM #define PCIE_SEM5_UNLOCK (0x1c02c) /* API unlock */ 16267956Sxiuyan.wang@Sun.COM #define PCIE_SEM6_LOCK (0x1c030) /* sw lock */ 16277956Sxiuyan.wang@Sun.COM #define PCIE_SEM6_UNLOCK (0x1c034) /* sw unlock */ 16287956Sxiuyan.wang@Sun.COM #define PCIE_SEM7_LOCK (0x1c038) /* crb win lock */ 16297956Sxiuyan.wang@Sun.COM #define PCIE_SEM7_UNLOCK (0x1c03c) /* crbwin unlock */ 16307956Sxiuyan.wang@Sun.COM 16317956Sxiuyan.wang@Sun.COM 16327956Sxiuyan.wang@Sun.COM #define PCIE_PS_STRAP_RESET (0x18000) 16337956Sxiuyan.wang@Sun.COM 16347956Sxiuyan.wang@Sun.COM #define M25P_INSTR_WREN 0x06 16357956Sxiuyan.wang@Sun.COM #define M25P_INSTR_RDSR 0x05 16367956Sxiuyan.wang@Sun.COM #define M25P_INSTR_PP 0x02 16377956Sxiuyan.wang@Sun.COM #define M25P_INSTR_SE 0xd8 16387956Sxiuyan.wang@Sun.COM #define CAM_RAM_P2I_ENABLE 0xc 16397956Sxiuyan.wang@Sun.COM #define CAM_RAM_P2D_ENABLE 0x8 16407956Sxiuyan.wang@Sun.COM #define PCIX_IMBTAG (0x18004) 16417956Sxiuyan.wang@Sun.COM #define UNM_MAC_ADDR_CNTL_REG (UNM_CRB_NIU + 0x1000) 16427956Sxiuyan.wang@Sun.COM 16437956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_HI_0 (UNM_CRB_NIU + 0x1010) 16447956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_HI_1 (UNM_CRB_NIU + 0x1014) 16457956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_HI_2 (UNM_CRB_NIU + 0x1018) 16467956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_HI_3 (UNM_CRB_NIU + 0x101c) 16477956Sxiuyan.wang@Sun.COM 16487956Sxiuyan.wang@Sun.COM #define M_UNICAST_ADDR_BASE (UNM_CRB_NIU + 0x1080) 16497956Sxiuyan.wang@Sun.COM 16507956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_0_0 (UNM_CRB_NIU + 0x1080) // port 0 16517956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_0_0 (UNM_CRB_NIU + 0x1084) 16527956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_0_1 (UNM_CRB_NIU + 0x1088) 16537956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_0_1 (UNM_CRB_NIU + 0x108c) 16547956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_0_2 (UNM_CRB_NIU + 0x1090) 16557956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_0_2 (UNM_CRB_NIU + 0x1084) 16567956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_0_3 (UNM_CRB_NIU + 0x1098) 16577956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_0_3 (UNM_CRB_NIU + 0x109c) 16587956Sxiuyan.wang@Sun.COM 16597956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_1_0 (UNM_CRB_NIU + 0x10a0) 16607956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_1_0 (UNM_CRB_NIU + 0x10a4) 16617956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_1_1 (UNM_CRB_NIU + 0x10a8) 16627956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_1_1 (UNM_CRB_NIU + 0x10ac) 16637956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_1_2 (UNM_CRB_NIU + 0x10b0) 16647956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_1_2 (UNM_CRB_NIU + 0x10b4) 16657956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_1_3 (UNM_CRB_NIU + 0x10b8) 16667956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_1_3 (UNM_CRB_NIU + 0x10bc) 16677956Sxiuyan.wang@Sun.COM 16687956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_2_0 (UNM_CRB_NIU + 0x10c0) 16697956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_2_0 (UNM_CRB_NIU + 0x10c4) 16707956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_2_1 (UNM_CRB_NIU + 0x10c8) 16717956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_2_1 (UNM_CRB_NIU + 0x10cc) 16727956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_2_2 (UNM_CRB_NIU + 0x10d0) 16737956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_2_2 (UNM_CRB_NIU + 0x10d4) 16747956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_2_3 (UNM_CRB_NIU + 0x10d8) 16757956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_2_3 (UNM_CRB_NIU + 0x10dc) 16767956Sxiuyan.wang@Sun.COM 16777956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_3_0 (UNM_CRB_NIU + 0x10e0) 16787956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_3_0 (UNM_CRB_NIU + 0x10e4) 16797956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_3_1 (UNM_CRB_NIU + 0x10e8) 16807956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_3_1 (UNM_CRB_NIU + 0x10ec) 16817956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_3_2 (UNM_CRB_NIU + 0x10f0) 16827956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_3_2 (UNM_CRB_NIU + 0x10f4) 16837956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_LO_3_3 (UNM_CRB_NIU + 0x10f8) 16847956Sxiuyan.wang@Sun.COM #define UNM_UNICAST_ADDR_HI_3_3 (UNM_CRB_NIU + 0x10fc) 16857956Sxiuyan.wang@Sun.COM 16867956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_BASE (UNM_CRB_NIU + 0x1100) 16877956Sxiuyan.wang@Sun.COM 16887956Sxiuyan.wang@Sun.COM // BASE ADDRESS FOR POOL/PORT 0 16897956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_LO_0 (UNM_CRB_NIU + 0x1100) 16907956Sxiuyan.wang@Sun.COM // FOR PORT 1 16917956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_LO_1 (UNM_CRB_NIU + 0x1180) 16927956Sxiuyan.wang@Sun.COM // FOR PORT 2 16937956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_LO_2 (UNM_CRB_NIU + 0x1200) 16947956Sxiuyan.wang@Sun.COM // PORT 3 16957956Sxiuyan.wang@Sun.COM #define UNM_MULTICAST_ADDR_LO_3 (UNM_CRB_NIU + 0x1280) 16967956Sxiuyan.wang@Sun.COM 16977956Sxiuyan.wang@Sun.COM #define PHAN_VENDOR_ID 0x4040 16987956Sxiuyan.wang@Sun.COM 16997956Sxiuyan.wang@Sun.COM #define CAM_RAM_PEG_ENABLES 0x4 17007956Sxiuyan.wang@Sun.COM 17017956Sxiuyan.wang@Sun.COM /* 17027956Sxiuyan.wang@Sun.COM * The PCI VendorID and DeviceID for our board. 17037956Sxiuyan.wang@Sun.COM */ 17047956Sxiuyan.wang@Sun.COM #define PCI_VENDOR_ID_NX 0x4040 17057956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_XG 0x0001 17067956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_CX4 0x0002 17077956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_QG 0x0003 17087956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_IMEZ 0x0004 17097956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_HMEZ 0x0005 17107956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_IMEZ_DUP 0x0024 17117956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_HMEZ_DUP 0x0025 17127956Sxiuyan.wang@Sun.COM #define PCI_DEVICE_ID_NX_P3_XG 0x0100 17137956Sxiuyan.wang@Sun.COM 17147956Sxiuyan.wang@Sun.COM /* 17157956Sxiuyan.wang@Sun.COM * Time base tick control registers (global and per-flow). 17167956Sxiuyan.wang@Sun.COM */ 17177956Sxiuyan.wang@Sun.COM 17187956Sxiuyan.wang@Sun.COM typedef struct { 17197956Sxiuyan.wang@Sun.COM /* half period of time cycle */ 17207956Sxiuyan.wang@Sun.COM /* global: in units of core clock */ 17217956Sxiuyan.wang@Sun.COM /* per-flow: in units of global ticks */ 17227956Sxiuyan.wang@Sun.COM unm_crbword_t count:16, 17237956Sxiuyan.wang@Sun.COM rsvd:15, 17247956Sxiuyan.wang@Sun.COM enable:1; /* 0=disable, 1=enable */ 17257956Sxiuyan.wang@Sun.COM } unm_timer_tickctl_t; 17267956Sxiuyan.wang@Sun.COM 17277956Sxiuyan.wang@Sun.COM 17287956Sxiuyan.wang@Sun.COM typedef struct 17297956Sxiuyan.wang@Sun.COM { 17307956Sxiuyan.wang@Sun.COM unm_crbword_t 17317956Sxiuyan.wang@Sun.COM id_pool_0:2, 17327956Sxiuyan.wang@Sun.COM enable_xtnd_0:1, 17337956Sxiuyan.wang@Sun.COM rsvd1:1, 17347956Sxiuyan.wang@Sun.COM id_pool_1:2, 17357956Sxiuyan.wang@Sun.COM enable_xtnd_1:1, 17367956Sxiuyan.wang@Sun.COM rsvd2:1, 17377956Sxiuyan.wang@Sun.COM id_pool_2:2, 17387956Sxiuyan.wang@Sun.COM enable_xtnd_2:1, 17397956Sxiuyan.wang@Sun.COM rsvd3:1, 17407956Sxiuyan.wang@Sun.COM id_pool_3:2, 17417956Sxiuyan.wang@Sun.COM enable_xtnd_3:1, 17427956Sxiuyan.wang@Sun.COM rsvd4:9, 17437956Sxiuyan.wang@Sun.COM mode_select:2, 17447956Sxiuyan.wang@Sun.COM rsvd5:2, 17457956Sxiuyan.wang@Sun.COM enable_pool:4; 17467956Sxiuyan.wang@Sun.COM } unm_mac_addr_cntl_t; 17477956Sxiuyan.wang@Sun.COM 17487956Sxiuyan.wang@Sun.COM typedef struct { 17497956Sxiuyan.wang@Sun.COM unm_crbword_t start:1, 17507956Sxiuyan.wang@Sun.COM enable:1, 17517956Sxiuyan.wang@Sun.COM command:1, 17527956Sxiuyan.wang@Sun.COM busy:1, 17537956Sxiuyan.wang@Sun.COM rsvd:28; 17547956Sxiuyan.wang@Sun.COM } unm_miu_test_agt_ctrl_t; 17557956Sxiuyan.wang@Sun.COM 17567956Sxiuyan.wang@Sun.COM #define UNM_MIU_TEST_AGENT_CMD_READ 0 17577956Sxiuyan.wang@Sun.COM #define UNM_MIU_TEST_AGENT_CMD_WRITE 1 17587956Sxiuyan.wang@Sun.COM #define UNM_MIU_TEST_AGENT_BUSY 1 17597956Sxiuyan.wang@Sun.COM #define UNM_MIU_TEST_AGENT_ENABLE 1 17607956Sxiuyan.wang@Sun.COM #define UNM_MIU_TEST_AGENT_START 1 17617956Sxiuyan.wang@Sun.COM 17627956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_CONTROL (UNM_CRB_DDR_NET + MIU_CONTROL) 17637956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TAG (UNM_CRB_DDR_NET + MIU_TAG) 17647956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_ADDR_LO (UNM_CRB_DDR_NET + MIU_TEST_AGT_ADDR_LO) 17657956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_ADDR_HI (UNM_CRB_DDR_NET + MIU_TEST_AGT_ADDR_HI) 17667956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_WRDATA_LO (UNM_CRB_DDR_NET + MIU_TEST_AGT_WRDATA_LO) 17677956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_WRDATA_HI (UNM_CRB_DDR_NET + MIU_TEST_AGT_WRDATA_HI) 17687956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_CTRL (UNM_CRB_DDR_NET + MIU_TEST_AGT_CTRL) 17697956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_RDDATA_LO (UNM_CRB_DDR_NET + MIU_TEST_AGT_RDDATA_LO) 17707956Sxiuyan.wang@Sun.COM #define UNM_MIU_MN_TEST_AGT_RDDATA_HI (UNM_CRB_DDR_NET + MIU_TEST_AGT_RDDATA_HI) 17717956Sxiuyan.wang@Sun.COM 17727956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_ADDR_LO (UNM_CRB_QDR_NET + SIU_TEST_AGT_ADDR_LO) 17737956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_ADDR_HI (UNM_CRB_QDR_NET + SIU_TEST_AGT_ADDR_HI) 17747956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_WRDATA_LO (UNM_CRB_QDR_NET + SIU_TEST_AGT_WRDATA_LO) 17757956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_WRDATA_HI (UNM_CRB_QDR_NET + SIU_TEST_AGT_WRDATA_HI) 17767956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_CTRL (UNM_CRB_QDR_NET + SIU_TEST_AGT_CTRL) 17777956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_RDDATA_LO (UNM_CRB_QDR_NET + SIU_TEST_AGT_RDDATA_LO) 17787956Sxiuyan.wang@Sun.COM #define UNM_SIU_SN_TEST_AGT_RDDATA_HI (UNM_CRB_QDR_NET + SIU_TEST_AGT_RDDATA_HI) 17797956Sxiuyan.wang@Sun.COM 17807956Sxiuyan.wang@Sun.COM #define NX_IS_SYSTEM_CUT_THROUGH(MIU_CTRL) (((MIU_CTRL) & 0x4) ? 1 : 0) 17817956Sxiuyan.wang@Sun.COM #define NX_SET_SYSTEM_LEGACY(MIU_CTRL) {(MIU_CTRL) &= ~0x4; } 17827956Sxiuyan.wang@Sun.COM #define NX_SET_SYSTEM_CUT_THROUGH(MIU_CTRL) {(MIU_CTRL) |= 0x4; } 17837956Sxiuyan.wang@Sun.COM 17848687SJing.Xiong@Sun.COM #ifdef __cplusplus 17858687SJing.Xiong@Sun.COM } 17868687SJing.Xiong@Sun.COM #endif 17878687SJing.Xiong@Sun.COM 17888687SJing.Xiong@Sun.COM #endif /* _UNM_INC_H_ */ 1789