Module Name: src Committed By: cliff Date: Mon Mar 29 23:34:32 UTC 2010
Modified Files: src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixl_fmn.c Log Message: - use the new chip-type-specific names for logical station IDs - dimension fmn_intrhand[] by max number of station for any RMIXL chip type - add FMN station tables and info for XLR; these are untested. - rmixl_fmn_init_core() now calls chip-type-specific init subfunctions which just grab the appropriate station table and info strutures. To generate a diff of this commit: cvs rdiff -u -r1.1.2.1 -r1.1.2.2 src/sys/arch/mips/rmi/rmixl_fmn.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/mips/rmi/rmixl_fmn.c diff -u src/sys/arch/mips/rmi/rmixl_fmn.c:1.1.2.1 src/sys/arch/mips/rmi/rmixl_fmn.c:1.1.2.2 --- src/sys/arch/mips/rmi/rmixl_fmn.c:1.1.2.1 Sun Mar 21 20:41:43 2010 +++ src/sys/arch/mips/rmi/rmixl_fmn.c Mon Mar 29 23:34:32 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: rmixl_fmn.c,v 1.1.2.1 2010/03/21 20:41:43 cliff Exp $ */ +/* $NetBSD: rmixl_fmn.c,v 1.1.2.2 2010/03/29 23:34:32 cliff Exp $ */ #include "opt_ddb.h" @@ -31,68 +31,89 @@ */ /* use this table for XLS6xx, XLS4xx */ static const int station_xls_4xx[] = { - [0 ... 7] = RMIXL_FMN_STID_CORE0, - [8 ... 15] = RMIXL_FMN_STID_CORE1, - [16 ... 23] = RMIXL_FMN_STID_CORE2, - [24 ... 31] = RMIXL_FMN_STID_CORE3, - [32 ... 63] = RMIXL_FMN_STID_RESERVED, - [64 ... 71] = RMIXL_FMN_STID_PCIE, - [72 ... 79] = RMIXL_FMN_STID_RESERVED, - [80 ... 87] = RMIXL_FMN_STID_GMAC_Q1, - [88 ... 95] = RMIXL_FMN_STID_RESERVED, - [96 ... 103] = RMIXL_FMN_STID_GMAC_Q0, - [104 ... 107] = RMIXL_FMN_STID_DMA, - [108 ... 109] = RMIXL_FMN_STID_CDE, - [110 ... 119] = RMIXL_FMN_STID_RESERVED, - [120 ... 127] = RMIXL_FMN_STID_SAE, + [0 ... 7] = RMIXLS_FMN_STID_CORE0, + [8 ... 15] = RMIXLS_FMN_STID_CORE1, + [16 ... 23] = RMIXLS_FMN_STID_CORE2, + [24 ... 31] = RMIXLS_FMN_STID_CORE3, + [32 ... 63] = RMIXLS_FMN_STID_RESERVED, + [64 ... 71] = RMIXLS_FMN_STID_PCIE, + [72 ... 79] = RMIXLS_FMN_STID_RESERVED, + [80 ... 87] = RMIXLS_FMN_STID_GMAC_Q1, + [88 ... 95] = RMIXLS_FMN_STID_RESERVED, + [96 ... 103] = RMIXLS_FMN_STID_GMAC_Q0, + [104 ... 107] = RMIXLS_FMN_STID_DMA, + [108 ... 109] = RMIXLS_FMN_STID_CDE, + [110 ... 119] = RMIXLS_FMN_STID_RESERVED, + [120 ... 127] = RMIXLS_FMN_STID_SAE, }; /* use this table for XLS408Lite, XLS404Lite */ static const int station_xls_4xx_lite[] = { - [0 ... 7] = RMIXL_FMN_STID_CORE0, - [8 ... 15] = RMIXL_FMN_STID_CORE1, - [16 ... 23] = RMIXL_FMN_STID_CORE2, - [24 ... 31] = RMIXL_FMN_STID_CORE3, - [32 ... 79] = RMIXL_FMN_STID_RESERVED, - [80 ... 87] = RMIXL_FMN_STID_GMAC_Q1, - [88 ... 95] = RMIXL_FMN_STID_RESERVED, - [96 ... 103] = RMIXL_FMN_STID_GMAC_Q0, - [104 ... 107] = RMIXL_FMN_STID_DMA, - [108 ... 109] = RMIXL_FMN_STID_CDE, - [110 ... 115] = RMIXL_FMN_STID_RESERVED, - [116 ... 119] = RMIXL_FMN_STID_PCIE, - [120 ... 127] = RMIXL_FMN_STID_SAE, + [0 ... 7] = RMIXLS_FMN_STID_CORE0, + [8 ... 15] = RMIXLS_FMN_STID_CORE1, + [16 ... 23] = RMIXLS_FMN_STID_CORE2, + [24 ... 31] = RMIXLS_FMN_STID_CORE3, + [32 ... 79] = RMIXLS_FMN_STID_RESERVED, + [80 ... 87] = RMIXLS_FMN_STID_GMAC_Q1, + [88 ... 95] = RMIXLS_FMN_STID_RESERVED, + [96 ... 103] = RMIXLS_FMN_STID_GMAC_Q0, + [104 ... 107] = RMIXLS_FMN_STID_DMA, + [108 ... 109] = RMIXLS_FMN_STID_CDE, + [110 ... 115] = RMIXLS_FMN_STID_RESERVED, + [116 ... 119] = RMIXLS_FMN_STID_PCIE, + [120 ... 127] = RMIXLS_FMN_STID_SAE, }; /* use this table for XLS2xx */ static const int station_xls_2xx[] = { - [0 ... 7] = RMIXL_FMN_STID_CORE0, - [8 ... 15] = RMIXL_FMN_STID_CORE1, - [16 ... 23] = RMIXL_FMN_STID_CORE2, - [24 ... 31] = RMIXL_FMN_STID_CORE3, - [32 ... 63] = RMIXL_FMN_STID_RESERVED, - [64 ... 71] = RMIXL_FMN_STID_PCIE, - [72 ... 95] = RMIXL_FMN_STID_RESERVED, - [96 ... 103] = RMIXL_FMN_STID_GMAC_Q0, - [104 ... 107] = RMIXL_FMN_STID_DMA, - [108 ... 119] = RMIXL_FMN_STID_RESERVED, - [120 ... 127] = RMIXL_FMN_STID_SAE, + [0 ... 7] = RMIXLS_FMN_STID_CORE0, + [8 ... 15] = RMIXLS_FMN_STID_CORE1, + [16 ... 23] = RMIXLS_FMN_STID_CORE2, + [24 ... 31] = RMIXLS_FMN_STID_CORE3, + [32 ... 63] = RMIXLS_FMN_STID_RESERVED, + [64 ... 71] = RMIXLS_FMN_STID_PCIE, + [72 ... 95] = RMIXLS_FMN_STID_RESERVED, + [96 ... 103] = RMIXLS_FMN_STID_GMAC_Q0, + [104 ... 107] = RMIXLS_FMN_STID_DMA, + [108 ... 119] = RMIXLS_FMN_STID_RESERVED, + [120 ... 127] = RMIXLS_FMN_STID_SAE, }; /* use this table for XLS1xx */ static const int station_xls_1xx[] = { - [0 ... 7] = RMIXL_FMN_STID_CORE0, - [8 ... 15] = RMIXL_FMN_STID_CORE1, - [16 ... 23] = RMIXL_FMN_STID_CORE2, - [24 ... 31] = RMIXL_FMN_STID_CORE3, - [32 ... 63] = RMIXL_FMN_STID_RESERVED, - [64 ... 71] = RMIXL_FMN_STID_PCIE, - [72 ... 95] = RMIXL_FMN_STID_RESERVED, - [96 ... 101] = RMIXL_FMN_STID_GMAC_Q0, - [102 ... 103] = RMIXL_FMN_STID_RESERVED, - [104 ... 107] = RMIXL_FMN_STID_DMA, - [108 ... 119] = RMIXL_FMN_STID_RESERVED, - [120 ... 127] = RMIXL_FMN_STID_SAE, + [0 ... 7] = RMIXLS_FMN_STID_CORE0, + [8 ... 15] = RMIXLS_FMN_STID_CORE1, + [16 ... 23] = RMIXLS_FMN_STID_CORE2, + [24 ... 31] = RMIXLS_FMN_STID_CORE3, + [32 ... 63] = RMIXLS_FMN_STID_RESERVED, + [64 ... 71] = RMIXLS_FMN_STID_PCIE, + [72 ... 95] = RMIXLS_FMN_STID_RESERVED, + [96 ... 101] = RMIXLS_FMN_STID_GMAC_Q0, + [102 ... 103] = RMIXLS_FMN_STID_RESERVED, + [104 ... 107] = RMIXLS_FMN_STID_DMA, + [108 ... 119] = RMIXLS_FMN_STID_RESERVED, + [120 ... 127] = RMIXLS_FMN_STID_SAE, +}; + +/* use this table for XLRxxx */ +static const int station_xlr_xxx[] = { + [0 ... 7] = RMIXLR_FMN_STID_CORE0, + [8 ... 15] = RMIXLR_FMN_STID_CORE1, + [16 ... 23] = RMIXLR_FMN_STID_CORE2, + [24 ... 31] = RMIXLR_FMN_STID_CORE3, + [32 ... 39] = RMIXLR_FMN_STID_CORE4, + [40 ... 47] = RMIXLR_FMN_STID_CORE5, + [48 ... 55] = RMIXLR_FMN_STID_CORE6, + [56 ... 63] = RMIXLR_FMN_STID_CORE7, + [64 ... 79] = RMIXLR_FMN_STID_TXRX_0, + [80 ... 95] = RMIXLR_FMN_STID_TXRX_1, + [96 ... 103] = RMIXLR_FMN_STID_RGMII, + [104 ... 107] = RMIXLR_FMN_STID_DMA, + [108 ... 111] = RMIXLR_FMN_STID_RESERVED, + [112 ... 113] = RMIXLR_FMN_STID_FREE_0, + [114 ... 115] = RMIXLR_FMN_STID_FREE_0, + [116 ... 119] = RMIXLR_FMN_STID_RESERVED, + [120 ... 127] = RMIXLR_FMN_STID_SAE, }; typedef struct fmn_station_info { @@ -106,62 +127,79 @@ } fmn_station_info_t; /* use this table for XLS6xx, XLS4xx */ -static const fmn_station_info_t station_info_xls_4xx[RMIXL_FMN_NSTID] = { -#if 1 - [RMIXL_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, -#else - [RMIXL_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 8, 0 }, - [RMIXL_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 8, 0 }, - [RMIXL_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 8, 0 }, - [RMIXL_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 8, 0 }, -#endif - [RMIXL_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 80, 87, 32, 0, RMIXL_IO_DEV_GMAC_0 }, - [RMIXL_FMN_STID_GMAC_Q1] = { "gmac_q1", 3, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_4 }, - [RMIXL_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, - [RMIXL_FMN_STID_CDE] = { "cde", 4, 108, 109, 128, 0, RMIXL_IO_DEV_CDE }, - [RMIXL_FMN_STID_PCIE] = { "pcie", 8, 64, 71, 32, 0, RMIXL_IO_DEV_PCIE_BE }, - [RMIXL_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, +static const fmn_station_info_t station_info_xls_4xx[RMIXLS_FMN_NSTID] = { + [RMIXLS_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, + [RMIXLS_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 80, 87, 32, 0, RMIXL_IO_DEV_GMAC_0 }, + [RMIXLS_FMN_STID_GMAC_Q1] = { "gmac_q1", 3, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_4 }, + [RMIXLS_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, + [RMIXLS_FMN_STID_CDE] = { "cde", 4, 108, 109, 128, 0, RMIXL_IO_DEV_CDE }, + [RMIXLS_FMN_STID_PCIE] = { "pcie", 8, 64, 71, 32, 0, RMIXL_IO_DEV_PCIE_BE }, + [RMIXLS_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, }; /* use this table for XLS4xxLite */ -static const fmn_station_info_t station_info_xls_4xx_lite[RMIXL_FMN_NSTID] = { - [RMIXL_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, - [RMIXL_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 80, 87, 32, 0, RMIXL_IO_DEV_GMAC_0 }, - [RMIXL_FMN_STID_GMAC_Q1] = { "gmac_q1", 3, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_4 }, - [RMIXL_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, - [RMIXL_FMN_STID_CDE] = { "cde", 4, 108, 109, 128, 0, RMIXL_IO_DEV_CDE }, - [RMIXL_FMN_STID_PCIE] = { "pcie", 4, 116, 119, 64, 0, RMIXL_IO_DEV_PCIE_BE }, - [RMIXL_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, +static const fmn_station_info_t station_info_xls_4xx_lite[RMIXLS_FMN_NSTID] = { + [RMIXLS_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, + [RMIXLS_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 80, 87, 32, 0, RMIXL_IO_DEV_GMAC_0 }, + [RMIXLS_FMN_STID_GMAC_Q1] = { "gmac_q1", 3, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_4 }, + [RMIXLS_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, + [RMIXLS_FMN_STID_CDE] = { "cde", 4, 108, 109, 128, 0, RMIXL_IO_DEV_CDE }, + [RMIXLS_FMN_STID_PCIE] = { "pcie", 4, 116, 119, 64, 0, RMIXL_IO_DEV_PCIE_BE }, + [RMIXLS_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, }; /* use this table for XLS2xx */ -static const fmn_station_info_t station_info_xls_2xx[RMIXL_FMN_NSTID] = { - [RMIXL_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, - [RMIXL_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_0 }, - [RMIXL_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, - [RMIXL_FMN_STID_PCIE] = { "pcie", 8, 64, 71, 32, 0, RMIXL_IO_DEV_PCIE_BE }, - [RMIXL_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, +static const fmn_station_info_t station_info_xls_2xx[RMIXLS_FMN_NSTID] = { + [RMIXLS_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, + [RMIXLS_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_0 }, + [RMIXLS_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, + [RMIXLS_FMN_STID_PCIE] = { "pcie", 8, 64, 71, 32, 0, RMIXL_IO_DEV_PCIE_BE }, + [RMIXLS_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, }; /* use this table for XLS1xx */ -static const fmn_station_info_t station_info_xls_1xx[RMIXL_FMN_NSTID] = { - [RMIXL_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, - [RMIXL_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, - [RMIXL_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 96, 101, 32, 0, RMIXL_IO_DEV_GMAC_0 }, - [RMIXL_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_PCIE_BE }, - [RMIXL_FMN_STID_PCIE] = { "pcie", 4, 64, 67, 32, 0, RMIXL_IO_DEV_PCIE_BE }, - [RMIXL_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, +static const fmn_station_info_t station_info_xls_1xx[RMIXLS_FMN_NSTID] = { + [RMIXLS_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, + [RMIXLS_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, + [RMIXLS_FMN_STID_GMAC_Q0] = { "gmac_q0", 3, 96, 101, 32, 0, RMIXL_IO_DEV_GMAC_0 }, + [RMIXLS_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_PCIE_BE }, + [RMIXLS_FMN_STID_PCIE] = { "pcie", 4, 64, 67, 32, 0, RMIXL_IO_DEV_PCIE_BE }, + [RMIXLS_FMN_STID_SAE] = { "sae", 2, 120, 121, 128, 0, RMIXL_IO_DEV_SAE }, +}; + +/* + * use this table for XLRxxx + * caution: + * - the XGMII/SPI4 stations si_regbase are 'special' + * - the RGMII station si_regbase is 'special' + */ +static const fmn_station_info_t station_info_xlr_xxx[RMIXLR_FMN_NSTID] = { + [RMIXLR_FMN_STID_CORE0] = { "core0", 8, 0, 7, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE1] = { "core1", 8, 8, 15, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE2] = { "core2", 8, 16, 23, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE3] = { "core3", 8, 24, 31, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE4] = { "core4", 8, 32, 39, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE5] = { "core5", 8, 40, 47, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE6] = { "core6", 8, 48, 55, 32, 4, 0 }, + [RMIXLR_FMN_STID_CORE7] = { "core7", 8, 56, 63, 32, 4, 0 }, + [RMIXLR_FMN_STID_TXRX_0] = { "txrx0", 1, 64, 79, 16, 0, RMIXL_IO_DEV_XGMAC_A }, + [RMIXLR_FMN_STID_TXRX_1] = { "txrx1", 1, 80, 95, 16, 0, RMIXL_IO_DEV_XGMAC_B }, + [RMIXLR_FMN_STID_RGMII] = { "rgmii", 8, 96, 103, 32, 0, RMIXL_IO_DEV_GMAC_A }, + [RMIXLR_FMN_STID_DMA] = { "dma", 4, 104, 107, 64, 0, RMIXL_IO_DEV_DMA }, + [RMIXLR_FMN_STID_FREE_0] = { "free0", 2, 112, 113, 128, 0, RMIXL_IO_DEV_XGMAC_A }, + [RMIXLR_FMN_STID_FREE_1] = { "free1", 2, 114, 115, 128, 0, RMIXL_IO_DEV_XGMAC_B }, + [RMIXLR_FMN_STID_SAE] = { "sae", 5, 120, 124, 32, 0, RMIXL_IO_DEV_SAE }, }; @@ -178,6 +216,7 @@ kmutex_t *fmn_lock; u_int fmn_core; u_int fmn_thread; + u_int fmn_nstid; const int *fmn_stidtab; const fmn_station_info_t *fmn_stinfo; void *fmn_ih; @@ -194,6 +233,8 @@ return &fmn[cpuid]; } +static void rmixl_fmn_init_core_xlr(fmn_t *); +static void rmixl_fmn_init_core_xls(fmn_t *); static void rmixl_fmn_config_noncore(fmn_t *); static void rmixl_fmn_config_core(fmn_t *); #ifdef NOTYET @@ -351,28 +392,26 @@ rmixl_fmn_config_noncore(fmnp); /* boot cpu initializes noncore */ } -void -rmixl_fmn_init_core(void) +/* + * link to TX station ID table for RMI XLR type chip + */ +static void +rmixl_fmn_init_core_xlr(fmn_t *fmnp) +{ + fmnp->fmn_nstid = RMIXLR_FMN_NSTID; + fmnp->fmn_stidtab = station_xlr_xxx; + fmnp->fmn_stinfo = station_info_xlr_xxx; +} + +/* + * link to TX station ID table for RMI XLS type chip + */ +static void +rmixl_fmn_init_core_xls(fmn_t *fmnp) { - fmn_t *fmnp; const fmn_station_info_t *info = NULL; const int *tab = NULL; - kmutex_t *lk; - - fmnp = fmn_lookup(cpu_number()); - KASSERT(fmnp->fmn_core == RMIXL_CPU_CORE(cpu_number())); - KASSERT(fmnp->fmn_thread == RMIXL_CPU_THREAD(cpu_number())); - - lk = mutex_obj_alloc(MUTEX_DEFAULT, RMIXL_FMN_INTR_IPL); - if (lk == NULL) - panic("%s: mutex_obj_alloc failed", __func__); - fmnp->fmn_lock = lk; - mutex_enter(fmnp->fmn_lock); - - /* - * link to TX station ID table for this cpu type - */ switch (MIPS_PRID_IMPL(mips_options.mips_cpu_id)) { case MIPS_XLS104: case MIPS_XLS108: @@ -402,8 +441,41 @@ MIPS_PRID_IMPL(mips_options.mips_cpu_id)); } + fmnp->fmn_nstid = RMIXLS_FMN_NSTID; fmnp->fmn_stidtab = tab; fmnp->fmn_stinfo = info; +} + +void +rmixl_fmn_init_core(void) +{ + fmn_t *fmnp; + kmutex_t *lk; + + fmnp = fmn_lookup(cpu_number()); + KASSERT(fmnp->fmn_core == RMIXL_CPU_CORE(cpu_number())); + KASSERT(fmnp->fmn_thread == RMIXL_CPU_THREAD(cpu_number())); + + lk = mutex_obj_alloc(MUTEX_DEFAULT, RMIXL_FMN_INTR_IPL); + if (lk == NULL) + panic("%s: mutex_obj_alloc failed", __func__); + fmnp->fmn_lock = lk; + + mutex_enter(fmnp->fmn_lock); + + /* + * do chip-dependent per-core FMN initialization + */ + switch(cpu_rmixl_chip_type(mips_options.mips_cpu)) { + case CIDFL_RMI_TYPE_XLR: + rmixl_fmn_init_core_xlr(fmn); + break; + case CIDFL_RMI_TYPE_XLS: + rmixl_fmn_init_core_xls(fmn); + break; + case CIDFL_RMI_TYPE_XLP: + panic("%s: RMI XLP not yet supported", __func__); + } /* * thread #0 for each core owns 'global' CP2 regs @@ -423,7 +495,7 @@ static void rmixl_fmn_config_noncore(fmn_t *fmnp) { - for (u_int sid=0; sid < RMIXL_FMN_NSTID; sid++) { + for (u_int sid=0; sid < fmn->fmn_nstid; sid++) { u_int regoff = fmnp->fmn_stinfo[sid].si_regbase; if (regoff != 0) { u_int buckets_max = fmnp->fmn_stinfo[sid].si_buckets_max; @@ -532,7 +604,7 @@ fmnp = fmn_lookup(cpu_number()); mutex_enter(fmnp->fmn_lock); - for (int i=0; i < RMIXL_FMN_NSTID; i++) + for (int i=0; i < fmn->fmn_nstid; i++) evcnt_attach_dynamic(&fmnp->fmn_intrhand[i].ih_count, EVCNT_TYPE_INTR, NULL, "rmixl_fmn", fmn->fmn_stinfo[i].si_name);