The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/bhnd/bhndb/bhndb_pci_hwdata.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*-
    2  * Copyright (c) 2015 Landon Fuller <landon@landonf.org>
    3  * All rights reserved.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions
    7  * are met:
    8  * 1. Redistributions of source code must retain the above copyright
    9  *    notice, this list of conditions and the following disclaimer,
   10  *    without modification.
   11  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
   12  *    similar to the "NO WARRANTY" disclaimer below ("Disclaimer") and any
   13  *    redistribution must be conditioned upon including a substantially
   14  *    similar Disclaimer requirement for further binary redistribution.
   15  *
   16  * NO WARRANTY
   17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   18  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   19  * LIMITED TO, THE IMPLIED WARRANTIES OF NONINFRINGEMENT, MERCHANTIBILITY
   20  * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
   21  * THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY,
   22  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
   25  * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
   27  * THE POSSIBILITY OF SUCH DAMAGES.
   28  */
   29 
   30 #include <sys/cdefs.h>
   31 __FBSDID("$FreeBSD$");
   32 
   33 /*
   34  * Resource specifications and register maps for Broadcom PCI/PCIe cores 
   35  * configured as PCI-BHND bridges.
   36  */
   37 
   38 #include <sys/param.h>
   39 #include <sys/bus.h>
   40 
   41 #include <machine/bus.h>
   42 #include <sys/rman.h>
   43 #include <machine/resource.h>
   44 
   45 #include <dev/pci/pcireg.h>
   46 #include <dev/pci/pcivar.h>
   47 
   48 #include <dev/bhnd/cores/pci/bhnd_pcireg.h>
   49 #include <dev/bhnd/cores/pcie2/bhnd_pcie2_reg.h>
   50 
   51 #include "bhndbvar.h"
   52 #include "bhndb_pcireg.h"
   53 
   54 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v0;
   55 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pci;
   56 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pcie;
   57 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v2;
   58 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v3;
   59 
   60 /**
   61  * Define a bhndb_hw match entry.
   62  * 
   63  * @param _name The entry name.
   64  * @param _vers The configuration version associated with this entry.
   65  */
   66 #define BHNDB_HW_MATCH(_name, _vers, ...) {                             \
   67         .name           = _name,                                        \
   68         .hw_reqs        = _BHNDB_HW_REQ_ARRAY(__VA_ARGS__),             \
   69         .num_hw_reqs    = (sizeof(_BHNDB_HW_REQ_ARRAY(__VA_ARGS__)) /   \
   70             sizeof(_BHNDB_HW_REQ_ARRAY(__VA_ARGS__)[0])),               \
   71         .cfg            = &bhndb_pci_hwcfg_ ## _vers                    \
   72 }
   73 #define _BHNDB_HW_REQ_ARRAY(...) (struct bhnd_core_match[]) { __VA_ARGS__ }
   74 
   75 /**
   76  * Generic PCI-SIBA bridge configuration usable with all known siba(4)-based
   77  * PCI devices; this configuration is adequate for enumerating a bridged
   78  * siba(4) bus to determine the full hardware configuration.
   79  * 
   80  * @par Compatibility
   81  * - Compatible with PCI_V0, PCI_V1, PCI_V2, and PCI_V3 devices.
   82  * - Compatible with siba(4) bus enumeration.
   83  * - Compatible with bcma(4) bus enumeration if the ChipCommon core is mapped
   84  *   at the default enumeration address (0x18000000).
   85  */
   86 const struct bhndb_hwcfg bhndb_pci_siba_generic_hwcfg = {
   87         .resource_specs = (const struct resource_spec[]) {
   88                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
   89                 { -1,                   0,              0 }
   90         },
   91 
   92         .register_windows = (const struct bhndb_regwin[]) {
   93                 /* bar0+0x0000: configurable backplane window */
   94                 {
   95                         .win_type       = BHNDB_REGWIN_T_DYN,
   96                         .win_offset     = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
   97                         .win_size       = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
   98                         .d.dyn = {
   99                                 .cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL
  100                         },
  101                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  102                 },
  103                 BHNDB_REGWIN_TABLE_END
  104         },
  105 
  106         /* DMA unsupported under generic configuration */
  107         .dma_translations = NULL,
  108 };
  109 
  110 /**
  111  * Generic PCI-BCMA bridge configuration usable with all known bcma(4)-based
  112  * PCI devices; this configuration is adequate for enumerating a bridged
  113  * bcma(4) bus to determine the full hardware configuration.
  114  *
  115  * @par Compatibility
  116  * - Compatible with PCI_V1, PCI_V2, and PCI_V3 devices.
  117  * - Compatible with both siba(4) and bcma(4) bus enumeration.
  118  */
  119 const struct bhndb_hwcfg bhndb_pci_bcma_generic_hwcfg = {
  120         .resource_specs         = (const struct resource_spec[]) {
  121                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
  122                 { -1,                   0,              0 }
  123         },
  124 
  125         .register_windows       = (const struct bhndb_regwin[]) {
  126                 /* bar0+0x0000: configurable backplane window */
  127                 {
  128                         .win_type       = BHNDB_REGWIN_T_DYN,
  129                         .win_offset     = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
  130                         .win_size       = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
  131                         .d.dyn = {
  132                                 .cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL,
  133                         },
  134                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  135                 },
  136 
  137                 /* bar0+0x3000: chipc core registers */
  138                 {
  139                         .win_type       = BHNDB_REGWIN_T_CORE,
  140                         .win_offset     = BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
  141                         .win_size       = BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
  142                         .d.core = {
  143                                 .class  = BHND_DEVCLASS_CC,
  144                                 .unit   = 0,
  145                                 .port   = 0,
  146                                 .region = 0,
  147                                 .port_type = BHND_PORT_DEVICE
  148                         },
  149                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  150                 },
  151 
  152                 BHNDB_REGWIN_TABLE_END
  153         },
  154 
  155         /* DMA unsupported under generic configuration */
  156         .dma_translations = NULL,
  157 };
  158 
  159 /**
  160  * Hardware configuration tables for Broadcom HND PCI NICs.
  161  */
  162 const struct bhndb_hw bhndb_pci_generic_hw_table[] = {
  163         /* PCI/V0 WLAN */
  164         BHNDB_HW_MATCH("PCI/v0 WLAN", v0,
  165                 /* PCI Core */
  166                 {
  167                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  168                         BHND_MATCH_CORE_ID      (BHND_COREID_PCI),
  169                         BHND_MATCH_CORE_REV(
  170                             HWREV_LTE           (BHNDB_PCI_V0_MAX_PCI_HWREV)),
  171                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_PCI),
  172                         BHND_MATCH_CORE_UNIT    (0)
  173                 },
  174 
  175                 /* 802.11 Core */
  176                 {
  177                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  178                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_WLAN),
  179                         BHND_MATCH_CORE_UNIT    (0)
  180                 }
  181         ),
  182 
  183         /* PCI/V1 WLAN */
  184         BHNDB_HW_MATCH("PCI/v1 WLAN", v1_pci,
  185                 /* PCI Core */
  186                 {
  187                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  188                         BHND_MATCH_CORE_ID      (BHND_COREID_PCI),
  189                         BHND_MATCH_CORE_REV(
  190                             HWREV_GTE           (BHNDB_PCI_V1_MIN_PCI_HWREV)),
  191                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_PCI),
  192                         BHND_MATCH_CORE_UNIT    (0)
  193                 },
  194 
  195                 /* 802.11 Core */
  196                 {
  197                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  198                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_WLAN),
  199                         BHND_MATCH_CORE_UNIT    (0)
  200                 }
  201         ),
  202 
  203         /* PCIE/V1 WLAN */
  204         BHNDB_HW_MATCH("PCIe/v1 WLAN", v1_pcie,
  205                 /* PCIe Core */
  206                 {
  207                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  208                         BHND_MATCH_CORE_ID      (BHND_COREID_PCIE),
  209                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_PCIE),
  210                         BHND_MATCH_CORE_UNIT    (0)
  211                 },
  212 
  213                 /* ChipCommon (revision <= 31) */
  214                 {
  215                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  216                         BHND_MATCH_CORE_ID      (BHND_COREID_CC),
  217                         BHND_MATCH_CORE_REV(
  218                             HWREV_LTE           (BHNDB_PCI_V1_MAX_CHIPC_HWREV)),
  219                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_CC),
  220                         BHND_MATCH_CORE_UNIT    (0)
  221                 },
  222 
  223                 /* 802.11 Core */
  224                 {
  225                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  226                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_WLAN),
  227                         BHND_MATCH_CORE_UNIT    (0)
  228                 }
  229         ),
  230 
  231         /* PCIE/V2 WLAN */
  232         BHNDB_HW_MATCH("PCIe/v2 WLAN", v2,
  233                 /* PCIe Core */
  234                 {
  235                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  236                         BHND_MATCH_CORE_ID      (BHND_COREID_PCIE),
  237                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_PCIE),
  238                         BHND_MATCH_CORE_UNIT    (0)
  239                 },
  240 
  241                 /* ChipCommon (revision >= 32) */
  242                 {
  243                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  244                         BHND_MATCH_CORE_ID      (BHND_COREID_CC),
  245                         BHND_MATCH_CORE_REV(
  246                             HWREV_GTE           (BHNDB_PCI_V2_MIN_CHIPC_HWREV)),
  247                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_CC),
  248                         BHND_MATCH_CORE_UNIT    (0)
  249                 },
  250 
  251                 /* 802.11 Core */
  252                 {
  253                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  254                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_WLAN),
  255                         BHND_MATCH_CORE_UNIT    (0)
  256                 }
  257         ),
  258 
  259         /* PCIE/V3 WLAN */
  260         BHNDB_HW_MATCH("PCIe-Gen2/v3 WLAN", v3,
  261                 /* PCIe Gen2 Core */
  262                 {
  263                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  264                         BHND_MATCH_CORE_ID      (BHND_COREID_PCIE2),
  265                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_PCIE),
  266                         BHND_MATCH_CORE_UNIT    (0)
  267                 },
  268 
  269                 /* 802.11 Core */
  270                 {
  271                         BHND_MATCH_CORE_VENDOR  (BHND_MFGID_BCM),
  272                         BHND_MATCH_CORE_CLASS   (BHND_DEVCLASS_WLAN),
  273                         BHND_MATCH_CORE_UNIT    (0)
  274                 }
  275         ),
  276         { NULL, NULL, 0, NULL }
  277 };
  278 
  279 /**
  280  * PCI_V0 hardware configuration.
  281  * 
  282  * Applies to:
  283  * - PCI (cid=0x804, revision <= 12)
  284  */
  285 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v0 = {
  286         .resource_specs         = (const struct resource_spec[]) {
  287                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
  288                 { -1,                   0,              0 }
  289         },
  290 
  291         .register_windows       = (const struct bhndb_regwin[]) {
  292                 /* bar0+0x0000: configurable backplane window */
  293                 {
  294                         .win_type       = BHNDB_REGWIN_T_DYN,
  295                         .win_offset     = BHNDB_PCI_V0_BAR0_WIN0_OFFSET,
  296                         .win_size       = BHNDB_PCI_V0_BAR0_WIN0_SIZE,
  297                         .d.dyn = {
  298                                 .cfg_offset = BHNDB_PCI_V0_BAR0_WIN0_CONTROL
  299                         },
  300                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  301                 },
  302                 
  303                 /* bar0+0x1000: sprom shadow */ 
  304                 {
  305                         .win_type       = BHNDB_REGWIN_T_SPROM,
  306                         .win_offset     = BHNDB_PCI_V0_BAR0_SPROM_OFFSET,
  307                         .win_size       = BHNDB_PCI_V0_BAR0_SPROM_SIZE,
  308                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  309                 },
  310                 
  311                 /*
  312                  * bar0+0x1800: pci core registers.
  313                  * 
  314                  * Does not include the SSB CFG registers found at the end of
  315                  * the 4K core register block; these are mapped non-contigiously
  316                  * by the next entry.
  317                  */
  318                 {
  319                         .win_type       = BHNDB_REGWIN_T_CORE,
  320                         .win_offset     = BHNDB_PCI_V0_BAR0_PCIREG_OFFSET,
  321                         .win_size       = BHNDB_PCI_V0_BAR0_PCIREG_SIZE,
  322                         .d.core = {
  323                                 .class  = BHND_DEVCLASS_PCI,
  324                                 .unit   = 0,
  325                                 .port   = 0,
  326                                 .region = 0,
  327                                 .port_type = BHND_PORT_DEVICE,
  328                         },
  329                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  330                 },
  331 
  332                 /* bar0+0x1E00: pci core (SSB CFG registers) */
  333                 {
  334                         .win_type       = BHNDB_REGWIN_T_CORE,
  335                         .win_offset     = BHNDB_PCI_V0_BAR0_PCISB_OFFSET        ,
  336                         .win_size       = BHNDB_PCI_V0_BAR0_PCISB_SIZE,
  337                         .d.core = {
  338                                 .class  = BHND_DEVCLASS_PCI,
  339                                 .unit   = 0,
  340                                 .port   = 0,
  341                                 .region = 0,
  342                                 .offset = BHNDB_PCI_V0_BAR0_PCISB_COREOFF,
  343                                 .port_type = BHND_PORT_DEVICE
  344                         },
  345                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  346                 },
  347                 
  348                 BHNDB_REGWIN_TABLE_END
  349         },
  350 
  351         .dma_translations = (const struct bhnd_dma_translation[]) {
  352                 {
  353                         .base_addr      = BHND_PCI_DMA32_TRANSLATION,
  354                         .addr_mask      = ~BHND_PCI_DMA32_MASK,
  355                         .addrext_mask   = BHND_PCI_DMA32_MASK
  356                 },
  357                 BHND_DMA_TRANSLATION_TABLE_END
  358         }
  359 };
  360 
  361 /**
  362  * PCI_V1 (PCI-only) hardware configuration (PCI version)
  363  * 
  364  * Applies to:
  365  * - PCI (cid=0x804, revision >= 13)
  366  */
  367 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pci = {
  368         .resource_specs         = (const struct resource_spec[]) {
  369                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
  370                 { -1,                   0,              0 }
  371         },
  372 
  373         .register_windows       = (const struct bhndb_regwin[]) {
  374                 /* bar0+0x0000: configurable backplane window */
  375                 {
  376                         .win_type       = BHNDB_REGWIN_T_DYN,
  377                         .win_offset     = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
  378                         .win_size       = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
  379                         .d.dyn = {
  380                                 .cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL
  381                         },
  382                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  383                 },
  384                 
  385                 /* bar0+0x1000: sprom shadow */
  386                 {
  387                         .win_type       = BHNDB_REGWIN_T_SPROM,
  388                         .win_offset     = BHNDB_PCI_V1_BAR0_SPROM_OFFSET,
  389                         .win_size       = BHNDB_PCI_V1_BAR0_SPROM_SIZE,
  390                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  391                 },
  392                 
  393                 /* bar0+0x2000: pci core registers */
  394                 {
  395                         .win_type       = BHNDB_REGWIN_T_CORE,
  396                         .win_offset     = BHNDB_PCI_V1_BAR0_PCIREG_OFFSET,
  397                         .win_size       = BHNDB_PCI_V1_BAR0_PCIREG_SIZE,
  398                         .d.core = {
  399                                 .class  = BHND_DEVCLASS_PCI,
  400                                 .unit   = 0,
  401                                 .port   = 0,
  402                                 .region = 0,
  403                                 .port_type = BHND_PORT_DEVICE
  404                         },
  405                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  406                 },
  407 
  408                 /* bar0+0x3000: chipc core registers */
  409                 {
  410                         .win_type       = BHNDB_REGWIN_T_CORE,
  411                         .win_offset     = BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
  412                         .win_size       = BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
  413                         .d.core = {
  414                                 .class  = BHND_DEVCLASS_CC,
  415                                 .unit   = 0,
  416                                 .port   = 0,
  417                                 .region = 0,
  418                                 .port_type = BHND_PORT_DEVICE
  419                         },
  420                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  421                 },
  422 
  423                 BHNDB_REGWIN_TABLE_END
  424         },
  425 
  426         .dma_translations = (const struct bhnd_dma_translation[]) {
  427                 {
  428                         .base_addr      = BHND_PCI_DMA32_TRANSLATION,
  429                         .addr_mask      = ~BHND_PCI_DMA32_MASK,
  430                         .addrext_mask   = BHND_PCI_DMA32_MASK
  431                 },
  432                 BHND_DMA_TRANSLATION_TABLE_END
  433         }
  434 };
  435 
  436 /**
  437  * PCI_V1 hardware configuration (PCIE version).
  438  * 
  439  * Applies to:
  440  * - PCIE (cid=0x820) with ChipCommon (revision <= 31)
  441  */
  442 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v1_pcie = {
  443         .resource_specs         = (const struct resource_spec[]) {
  444                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
  445                 { -1,                   0,              0 }
  446         },
  447 
  448         .register_windows       = (const struct bhndb_regwin[]) {
  449                 /* bar0+0x0000: configurable backplane window */
  450                 {
  451                         .win_type       = BHNDB_REGWIN_T_DYN,
  452                         .win_offset     = BHNDB_PCI_V1_BAR0_WIN0_OFFSET,
  453                         .win_size       = BHNDB_PCI_V1_BAR0_WIN0_SIZE,
  454                         .d.dyn = {
  455                                 .cfg_offset = BHNDB_PCI_V1_BAR0_WIN0_CONTROL
  456                         },
  457                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  458                 },
  459                 
  460                 /* bar0+0x1000: sprom shadow */
  461                 {
  462                         .win_type       = BHNDB_REGWIN_T_SPROM,
  463                         .win_offset     = BHNDB_PCI_V1_BAR0_SPROM_OFFSET,
  464                         .win_size       = BHNDB_PCI_V1_BAR0_SPROM_SIZE,
  465                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  466                 },
  467                 
  468                 /* bar0+0x2000: pci core registers */
  469                 {
  470                         .win_type       = BHNDB_REGWIN_T_CORE,
  471                         .win_offset     = BHNDB_PCI_V1_BAR0_PCIREG_OFFSET,
  472                         .win_size       = BHNDB_PCI_V1_BAR0_PCIREG_SIZE,
  473                         .d.core = {
  474                                 .class  = BHND_DEVCLASS_PCIE,
  475                                 .unit   = 0,
  476                                 .port   = 0,
  477                                 .region = 0,
  478                                 .port_type = BHND_PORT_DEVICE
  479                         },
  480                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  481                 },
  482 
  483                 /* bar0+0x3000: chipc core registers */
  484                 {
  485                         .win_type       = BHNDB_REGWIN_T_CORE,
  486                         .win_offset     = BHNDB_PCI_V1_BAR0_CCREGS_OFFSET,
  487                         .win_size       = BHNDB_PCI_V1_BAR0_CCREGS_SIZE,
  488                         .d.core = {
  489                                 .class  = BHND_DEVCLASS_CC,
  490                                 .unit   = 0,
  491                                 .port   = 0,
  492                                 .region = 0,
  493                                 .port_type = BHND_PORT_DEVICE
  494                         },
  495                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  496                 },
  497 
  498                 BHNDB_REGWIN_TABLE_END
  499         },
  500 
  501         .dma_translations = (const struct bhnd_dma_translation[]) {
  502                 {
  503                         .base_addr      = BHND_PCIE_DMA32_TRANSLATION,
  504                         .addr_mask      = ~BHND_PCIE_DMA32_MASK,
  505                         .addrext_mask   = BHND_PCIE_DMA32_MASK
  506                 },
  507                 {
  508                         .base_addr      = BHND_PCIE_DMA64_TRANSLATION,
  509                         .addr_mask      = ~BHND_PCIE_DMA64_MASK,
  510                         .addrext_mask   = BHND_PCIE_DMA64_MASK
  511                 },
  512                 BHND_DMA_TRANSLATION_TABLE_END
  513         }
  514 };
  515 
  516 /**
  517  * PCI_V2 hardware configuration.
  518  * 
  519  * Applies to:
  520  * - PCIE (cid=0x820) with ChipCommon (revision >= 32)
  521  */
  522 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v2 = {
  523         .resource_specs         = (const struct resource_spec[]) {
  524                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
  525                 { -1,                   0,              0 }
  526         },
  527 
  528         .register_windows       = (const struct bhndb_regwin[]) {
  529                 /* bar0+0x0000: configurable backplane window */
  530                 {
  531                         .win_type       = BHNDB_REGWIN_T_DYN,
  532                         .win_offset     = BHNDB_PCI_V2_BAR0_WIN0_OFFSET,
  533                         .win_size       = BHNDB_PCI_V2_BAR0_WIN0_SIZE,
  534                         .d.dyn = {
  535                                 .cfg_offset = BHNDB_PCI_V2_BAR0_WIN0_CONTROL,
  536                         },
  537                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  538                 },
  539                 
  540                 /* bar0+0x1000: configurable backplane window */
  541                 {
  542                         .win_type       = BHNDB_REGWIN_T_DYN,
  543                         .win_offset     = BHNDB_PCI_V2_BAR0_WIN1_OFFSET,
  544                         .win_size       = BHNDB_PCI_V2_BAR0_WIN1_SIZE,
  545                         .d.dyn = {
  546                                 .cfg_offset = BHNDB_PCI_V2_BAR0_WIN1_CONTROL,
  547                         },
  548                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  549                 },
  550                 
  551                 /* bar0+0x2000: pcie core registers */
  552                 {
  553                         .win_type       = BHNDB_REGWIN_T_CORE,
  554                         .win_offset     = BHNDB_PCI_V2_BAR0_PCIREG_OFFSET,
  555                         .win_size       = BHNDB_PCI_V2_BAR0_PCIREG_SIZE,
  556                         .d.core = {
  557                                 .class  = BHND_DEVCLASS_PCIE,
  558                                 .unit   = 0,
  559                                 .port   = 0,
  560                                 .region = 0,
  561                                 .port_type = BHND_PORT_DEVICE
  562                         },
  563                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  564                 },
  565 
  566                 /* bar0+0x3000: chipc core registers */
  567                 {
  568                         .win_type       = BHNDB_REGWIN_T_CORE,
  569                         .win_offset     = BHNDB_PCI_V2_BAR0_CCREGS_OFFSET,
  570                         .win_size       = BHNDB_PCI_V2_BAR0_CCREGS_SIZE,
  571                         .d.core = {
  572                                 .class  = BHND_DEVCLASS_CC,
  573                                 .unit   = 0,
  574                                 .port   = 0,
  575                                 .region = 0,
  576                                 .port_type = BHND_PORT_DEVICE
  577                         },
  578                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  579                 },
  580 
  581                 BHNDB_REGWIN_TABLE_END
  582         },
  583 
  584         .dma_translations = (const struct bhnd_dma_translation[]) {
  585                 {
  586                         .base_addr      = BHND_PCIE_DMA32_TRANSLATION,
  587                         .addr_mask      = ~BHND_PCIE_DMA32_MASK,
  588                         .addrext_mask   = BHND_PCIE_DMA32_MASK
  589                 },
  590                 {
  591                         .base_addr      = BHND_PCIE_DMA64_TRANSLATION,
  592                         .addr_mask      = ~BHND_PCIE_DMA64_MASK,
  593                         .addrext_mask   = BHND_PCIE_DMA64_MASK
  594                 },
  595                 BHND_DMA_TRANSLATION_TABLE_END
  596         }
  597 };
  598 
  599 /**
  600  * PCI_V3 hardware configuration.
  601  * 
  602  * Applies to:
  603  * - PCIE2 (cid=0x83c)
  604  */
  605 static const struct bhndb_hwcfg bhndb_pci_hwcfg_v3 = {
  606         .resource_specs         = (const struct resource_spec[]) {
  607                 { SYS_RES_MEMORY,       PCIR_BAR(0),    RF_ACTIVE },
  608                 { -1,                   0,              0 }
  609         },
  610 
  611         .register_windows       = (const struct bhndb_regwin[]) {
  612                 /* bar0+0x0000: configurable backplane window */
  613                 {
  614                         .win_type       = BHNDB_REGWIN_T_DYN,
  615                         .win_offset     = BHNDB_PCI_V3_BAR0_WIN0_OFFSET,
  616                         .win_size       = BHNDB_PCI_V3_BAR0_WIN0_SIZE,
  617                         .d.dyn = {
  618                                 .cfg_offset = BHNDB_PCI_V3_BAR0_WIN0_CONTROL,
  619                         },
  620                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  621                 },
  622                 
  623                 /* bar0+0x1000: configurable backplane window */
  624                 {
  625                         .win_type       = BHNDB_REGWIN_T_DYN,
  626                         .win_offset     = BHNDB_PCI_V3_BAR0_WIN1_OFFSET,
  627                         .win_size       = BHNDB_PCI_V3_BAR0_WIN1_SIZE,
  628                         .d.dyn = {
  629                                 .cfg_offset = BHNDB_PCI_V3_BAR0_WIN1_CONTROL,
  630                         },
  631                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  632                 },
  633                 
  634                 /* bar0+0x2000: pcie core registers */
  635                 {
  636                         .win_type       = BHNDB_REGWIN_T_CORE,
  637                         .win_offset     = BHNDB_PCI_V3_BAR0_PCIREG_OFFSET,
  638                         .win_size       = BHNDB_PCI_V3_BAR0_PCIREG_SIZE,
  639                         .d.core = {
  640                                 .class  = BHND_DEVCLASS_PCIE,
  641                                 .unit   = 0,
  642                                 .port   = 0,
  643                                 .region = 0,
  644                                 .port_type = BHND_PORT_DEVICE
  645                         },
  646                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  647                 },
  648 
  649                 /* bar0+0x3000: chipc core registers */
  650                 {
  651                         .win_type       = BHNDB_REGWIN_T_CORE,
  652                         .win_offset     = BHNDB_PCI_V3_BAR0_CCREGS_OFFSET,
  653                         .win_size       = BHNDB_PCI_V3_BAR0_CCREGS_SIZE,
  654                         .d.core = {
  655                                 .class  = BHND_DEVCLASS_CC,
  656                                 .unit   = 0,
  657                                 .port   = 0,
  658                                 .region = 0,
  659                                 .port_type = BHND_PORT_DEVICE
  660                         },
  661                         .res            = { SYS_RES_MEMORY, PCIR_BAR(0) }
  662                 },
  663 
  664                 BHNDB_REGWIN_TABLE_END
  665         },
  666 
  667         .dma_translations = (const struct bhnd_dma_translation[]) {
  668                 {
  669                         .base_addr      = BHND_PCIE2_DMA64_TRANSLATION,
  670                         .addr_mask      = ~BHND_PCIE2_DMA64_MASK,
  671                         .addrext_mask   = BHND_PCIE_DMA64_MASK
  672                 },
  673                 BHND_DMA_TRANSLATION_TABLE_END
  674         }
  675 };

Cache object: 10dde8239d5ad7c61bee0e7a8919a3d7


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.