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/isci/scil/scic_sds_controller_registers.h

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  * SPDX-License-Identifier: BSD-2-Clause OR GPL-2.0
    3  *
    4  * This file is provided under a dual BSD/GPLv2 license.  When using or
    5  * redistributing this file, you may do so under either license.
    6  *
    7  * GPL LICENSE SUMMARY
    8  *
    9  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
   10  *
   11  * This program is free software; you can redistribute it and/or modify
   12  * it under the terms of version 2 of the GNU General Public License as
   13  * published by the Free Software Foundation.
   14  *
   15  * This program is distributed in the hope that it will be useful, but
   16  * WITHOUT ANY WARRANTY; without even the implied warranty of
   17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   18  * General Public License for more details.
   19  *
   20  * You should have received a copy of the GNU General Public License
   21  * along with this program; if not, write to the Free Software
   22  * Foundation, Inc., 51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
   23  * The full GNU General Public License is included in this distribution
   24  * in the file called LICENSE.GPL.
   25  *
   26  * BSD LICENSE
   27  *
   28  * Copyright(c) 2008 - 2011 Intel Corporation. All rights reserved.
   29  * All rights reserved.
   30  *
   31  * Redistribution and use in source and binary forms, with or without
   32  * modification, are permitted provided that the following conditions
   33  * are met:
   34  *
   35  *   * Redistributions of source code must retain the above copyright
   36  *     notice, this list of conditions and the following disclaimer.
   37  *   * Redistributions in binary form must reproduce the above copyright
   38  *     notice, this list of conditions and the following disclaimer in
   39  *     the documentation and/or other materials provided with the
   40  *     distribution.
   41  *
   42  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   43  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   44  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
   45  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
   46  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   47  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   48  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   49  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   50  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   51  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
   52  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   53  *
   54  * $FreeBSD$
   55  */
   56 #ifndef _SCIC_SDS_CONTROLLER_REGISTERS_H_
   57 #define _SCIC_SDS_CONTROLLER_REGISTERS_H_
   58 
   59 /**
   60  * @file
   61  *
   62  * @brief This file contains macros used to perform the register reads/writes
   63  *        to the SCU hardware.
   64  */
   65 
   66 #ifdef __cplusplus
   67 extern "C" {
   68 #endif // __cplusplus
   69 
   70 #include <dev/isci/scil/scu_registers.h>
   71 #include <dev/isci/scil/scic_sds_controller.h>
   72 
   73 /**
   74  * @name SMU_REGISTER_ACCESS_MACROS
   75  */
   76 /*@{*/
   77 #define scic_sds_controller_smu_register_read(controller, reg) \
   78    smu_register_read( \
   79       (controller), \
   80       (controller)->smu_registers->reg \
   81    )
   82 
   83 #define scic_sds_controller_smu_register_write(controller, reg, value) \
   84    smu_register_write( \
   85       (controller), \
   86       (controller)->smu_registers->reg, \
   87       (value) \
   88    )
   89 /*@}*/
   90 
   91 /**
   92  * @name AFE_REGISTER_ACCESS_MACROS
   93  */
   94 /*@{*/
   95 #define scu_afe_register_write(controller, reg, value) \
   96    scu_register_write( \
   97       (controller), \
   98       (controller)->scu_registers->afe.reg, \
   99       (value) \
  100    )
  101 
  102 #define scu_afe_register_read(controller, reg) \
  103    scu_register_read( \
  104       (controller), \
  105       (controller)->scu_registers->afe.reg \
  106    )
  107 /*@}*/
  108 
  109 /**
  110  * @name SGPIO_PEG0_REGISTER_ACCESS_MACROS
  111  */
  112 /*@{*/
  113 #define scu_sgpio_peg0_register_read(controller, reg) \
  114    scu_register_read( \
  115       (controller), \
  116       (controller)->scu_registers->peg0.sgpio.reg \
  117    )
  118 
  119 #define scu_sgpio_peg0_register_write(controller, reg, value) \
  120    scu_register_write( \
  121       (controller), \
  122       (controller)->scu_registers->peg0.sgpio.reg, \
  123       (value) \
  124    )
  125 /*@}*/
  126 
  127 /**
  128  * @name VIIT_REGISTER_ACCESS_MACROS
  129  */
  130 /*@{*/
  131 #define scu_controller_viit_register_write(controller, index, reg, value) \
  132    scu_register_write( \
  133       (controller), \
  134       (controller)->scu_registers->peg0.viit[index].reg, \
  135       value \
  136    )
  137 /*@}*/
  138 
  139 /**
  140  * @name SCRATCH_RAM_REGISTER_ACCESS_MACROS
  141  */
  142 /*@{*/
  143 // Scratch RAM access may be needed before the scu_registers pointer
  144 //  has been initialized.  So instead, explicitly cast BAR1 to a
  145 //  SCU_REGISTERS_T data structure.
  146 
  147 // Scratch RAM is stored in the Zoning Permission Table for OROM use.
  148 #define scu_controller_scratch_ram_register_write(controller, index, value) \
  149    scu_register_write( \
  150       (controller), \
  151       ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt0.table[index], \
  152       value \
  153    )
  154 
  155 #define scu_controller_scratch_ram_register_read(controller, index) \
  156    scu_register_read( \
  157       (controller), \
  158       ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt0.table[index] \
  159    )
  160 
  161 #define scu_controller_scratch_ram_register_write_ext(controller, index, value) \
  162    scu_register_write( \
  163       (controller), \
  164       ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt1.table[index], \
  165       value \
  166    )
  167 
  168 #define scu_controller_scratch_ram_register_read_ext(controller, index) \
  169    scu_register_read( \
  170       (controller), \
  171       ((SCU_REGISTERS_T *)scic_cb_pci_get_bar(controller, PATSBURG_SCU_BAR))->peg0.zpt1.table[index] \
  172    )
  173 /*@}*/
  174 
  175 
  176 //*****************************************************************************
  177 //* SMU REGISTERS
  178 //*****************************************************************************
  179 
  180 /**
  181  * @name SMU_REGISTERS
  182  */
  183 /*@{*/
  184 #define SMU_PCP_WRITE(controller, value) \
  185     scic_sds_controller_smu_register_write( \
  186        controller, post_context_port, value \
  187     )
  188 
  189 #define SMU_TCR_READ(controller, value) \
  190     scic_sds_controller_smu_register_read( \
  191        controller, task_context_range \
  192     )
  193 
  194 #define SMU_TCR_WRITE(controller, value) \
  195     scic_sds_controller_smu_register_write( \
  196        controller, task_context_range, value \
  197     )
  198 
  199 #define SMU_HTTBAR_WRITE(controller, address) \
  200 { \
  201    scic_sds_controller_smu_register_write( \
  202       controller, \
  203       host_task_table_lower, \
  204       sci_cb_physical_address_lower(address) \
  205    );\
  206    scic_sds_controller_smu_register_write( \
  207       controller, \
  208       host_task_table_upper, \
  209       sci_cb_physical_address_upper(address) \
  210    ); \
  211 }
  212 
  213 #define SMU_CQBAR_WRITE(controller, address) \
  214 { \
  215    scic_sds_controller_smu_register_write( \
  216       controller, \
  217       completion_queue_lower, \
  218       sci_cb_physical_address_lower(address) \
  219    ); \
  220    scic_sds_controller_smu_register_write( \
  221       controller, \
  222       completion_queue_upper, \
  223       sci_cb_physical_address_upper(address) \
  224    ); \
  225 }
  226 
  227 #define SMU_CQGR_WRITE(controller, value) \
  228     scic_sds_controller_smu_register_write( \
  229        controller, completion_queue_get, value \
  230     )
  231 
  232 #define SMU_CQGR_READ(controller, value) \
  233     scic_sds_controller_smu_register_read( \
  234        controller, completion_queue_get \
  235     )
  236 
  237 #define SMU_CQPR_WRITE(controller, value) \
  238     scic_sds_controller_smu_register_write( \
  239        controller, completion_queue_put, value \
  240     )
  241 
  242 #define SMU_RNCBAR_WRITE(controller, address) \
  243 { \
  244    scic_sds_controller_smu_register_write( \
  245       controller, \
  246       remote_node_context_lower, \
  247       sci_cb_physical_address_lower(address) \
  248    ); \
  249    scic_sds_controller_smu_register_write( \
  250       controller, \
  251       remote_node_context_upper, \
  252       sci_cb_physical_address_upper(address) \
  253    ); \
  254 }
  255 
  256 #define SMU_AMR_READ(controller) \
  257    scic_sds_controller_smu_register_read( \
  258       controller, address_modifier \
  259    )
  260 
  261 #define SMU_IMR_READ(controller) \
  262    scic_sds_controller_smu_register_read( \
  263       controller, interrupt_mask \
  264    )
  265 
  266 #define SMU_IMR_WRITE(controller, mask) \
  267    scic_sds_controller_smu_register_write( \
  268       controller, interrupt_mask, mask \
  269    )
  270 
  271 #define SMU_ISR_READ(controller) \
  272    scic_sds_controller_smu_register_read( \
  273       controller, interrupt_status \
  274    )
  275 
  276 #define SMU_ISR_WRITE(controller, status) \
  277    scic_sds_controller_smu_register_write( \
  278       controller, interrupt_status, status \
  279    )
  280 
  281 #define SMU_ICC_READ(controller) \
  282    scic_sds_controller_smu_register_read( \
  283       controller, interrupt_coalesce_control \
  284    )
  285 
  286 #define SMU_ICC_WRITE(controller, value) \
  287    scic_sds_controller_smu_register_write( \
  288       controller, interrupt_coalesce_control, value \
  289    )
  290 
  291 #define SMU_CQC_WRITE(controller, value) \
  292     scic_sds_controller_smu_register_write( \
  293        controller, completion_queue_control, value \
  294     )
  295 
  296 #define SMU_SMUSRCR_WRITE(controller, value) \
  297    scic_sds_controller_smu_register_write( \
  298       controller, soft_reset_control, value \
  299    )
  300 
  301 #define SMU_TCA_WRITE(controller, index, value) \
  302     scic_sds_controller_smu_register_write( \
  303        controller, task_context_assignment[index], value \
  304     )
  305 
  306 #define SMU_TCA_READ(controller, index) \
  307     scic_sds_controller_smu_register_read( \
  308        controller, task_context_assignment[index] \
  309     )
  310 
  311 #define SMU_DCC_READ(controller) \
  312    scic_sds_controller_smu_register_read( \
  313       controller, device_context_capacity \
  314    )
  315 
  316 #define SMU_DFC_READ(controller) \
  317    scic_sds_controller_smu_register_read( \
  318       controller, device_function_capacity \
  319    )
  320 
  321 #define SMU_SMUCSR_READ(controller) \
  322    scic_sds_controller_smu_register_read( \
  323       controller, control_status \
  324    )
  325 
  326 #define SMU_CGUCR_READ(controller) \
  327    scic_sds_controller_smu_register_read( \
  328       controller, clock_gating_control \
  329    )
  330 
  331 #define SMU_CGUCR_WRITE(controller, value) \
  332    scic_sds_controller_smu_register_write( \
  333       controller, clock_gating_control, value \
  334    )
  335 
  336 #define SMU_CQPR_READ(controller) \
  337     scic_sds_controller_smu_register_read( \
  338        controller, completion_queue_put \
  339     )
  340 
  341 /*@}*/
  342 
  343 /**
  344  * @name SCU_REGISTER_ACCESS_MACROS
  345  */
  346 /*@{*/
  347 #define scic_sds_controller_scu_register_read(controller, reg) \
  348    scu_register_read( \
  349       (controller), \
  350       (controller)->scu_registers->reg \
  351    )
  352 
  353 #define scic_sds_controller_scu_register_write(controller, reg, value) \
  354    scu_register_write( \
  355       (controller), \
  356       (controller)->scu_registers->reg, \
  357       (value) \
  358    )
  359 /*@}*/
  360 
  361 
  362 //****************************************************************************
  363 //*  SCU SDMA REGISTERS
  364 //****************************************************************************
  365 
  366 /**
  367  * @name SCU_SDMA_REGISTER_ACCESS_MACROS
  368  */
  369 /*@{*/
  370 #define scu_sdma_register_read(controller, reg) \
  371    scu_register_read( \
  372       (controller), \
  373       (controller)->scu_registers->sdma.reg \
  374    )
  375 
  376 #define scu_sdma_register_write(controller, reg, value) \
  377    scu_register_write( \
  378       (controller), \
  379       (controller)->scu_registers->sdma.reg, \
  380       (value) \
  381    )
  382 /*@}*/
  383 
  384 /**
  385  * @name SCU_SDMA_REGISTERS
  386  */
  387 /*@{*/
  388 #define SCU_PUFATHAR_WRITE(controller, address) \
  389 { \
  390    scu_sdma_register_write( \
  391       controller, \
  392       uf_address_table_lower, \
  393       sci_cb_physical_address_lower(address) \
  394    ); \
  395    scu_sdma_register_write( \
  396       controller, \
  397       uf_address_table_upper, \
  398       sci_cb_physical_address_upper(address) \
  399    ); \
  400 }
  401 
  402 #define SCU_UFHBAR_WRITE(controller, address) \
  403 { \
  404    scu_sdma_register_write( \
  405       controller, \
  406       uf_header_base_address_lower, \
  407       sci_cb_physical_address_lower(address) \
  408    ); \
  409    scu_sdma_register_write( \
  410       controller, \
  411       uf_header_base_address_upper, \
  412       sci_cb_physical_address_upper(address) \
  413    ); \
  414 }
  415 
  416 #define SCU_UFQC_READ(controller) \
  417     scu_sdma_register_read( \
  418        controller,  \
  419        unsolicited_frame_queue_control \
  420     )
  421 
  422 #define SCU_UFQC_WRITE(controller, value) \
  423     scu_sdma_register_write( \
  424        controller, \
  425        unsolicited_frame_queue_control, \
  426        value \
  427     )
  428 
  429 #define SCU_UFQPP_READ(controller) \
  430     scu_sdma_register_read( \
  431        controller, \
  432        unsolicited_frame_put_pointer \
  433     )
  434 
  435 #define SCU_UFQPP_WRITE(controller, value) \
  436    scu_sdma_register_write( \
  437       controller, \
  438       unsolicited_frame_put_pointer, \
  439       value \
  440    )
  441 
  442 #define SCU_UFQGP_WRITE(controller, value) \
  443    scu_sdma_register_write( \
  444       controller, \
  445       unsolicited_frame_get_pointer, \
  446       value \
  447    )
  448 
  449 #define SCU_PDMACR_READ(controller) \
  450    scu_sdma_register_read( \
  451       controller, \
  452       pdma_configuration \
  453    )
  454 
  455 #define SCU_PDMACR_WRITE(controller, value) \
  456    scu_sdma_register_write( \
  457       controller, \
  458       pdma_configuration, \
  459       value \
  460    )
  461 
  462 #define SCU_CDMACR_READ(controller) \
  463    scu_sdma_register_read( \
  464      controller, \
  465      cdma_configuration \
  466    )
  467 
  468 #define SCU_CDMACR_WRITE(controller, value) \
  469    scu_sdma_register_write( \
  470       controller, \
  471       cdma_configuration, \
  472       value \
  473    )
  474 /*@}*/
  475 
  476 //*****************************************************************************
  477 //* SCU CRAM AND FBRAM Registers
  478 //*****************************************************************************
  479 /**
  480  * @name SCU_CRAM_REGISTER_ACCESS_MACROS
  481  */
  482 /*@{*/
  483 #define scu_cram_register_read(controller, reg) \
  484    scu_register_read( \
  485       (controller), \
  486       (controller)->scu_registers->cram.reg \
  487    )
  488 
  489 #define scu_cram_register_write(controller, reg, value) \
  490    scu_register_write( \
  491       (controller), \
  492       (controller)->scu_registers->cram.reg, \
  493       (value) \
  494    )
  495 /*@}*/
  496 
  497 /**
  498  * @name SCU_FBRAM_REGISTER_ACCESS_MACROS
  499  */
  500 /*@{*/
  501 #define scu_fbram_register_read(controller, reg) \
  502    scu_register_read( \
  503       (controller), \
  504       (controller)->scu_registers->fbram.reg \
  505    )
  506 
  507 #define scu_fbram_register_write(controller, reg, value) \
  508    scu_register_write( \
  509       (controller), \
  510       (controller)->scu_registers->fbram.reg, \
  511       (value) \
  512    )
  513 /*@}*/
  514 
  515 
  516 /**
  517  * @name SCU_CRAM_REGISTERS
  518  */
  519 /*@{*/
  520 
  521 // SRAM ECC CONTROL REGISTER BITS
  522 #define SIGNLE_BIT_ERROR_CORRECTION_ENABLE 0x00000001
  523 #define MULTI_BIT_ERROR_REPORTING_ENABLE   0x00000002
  524 #define SINGLE_BIT_ERROR_REPORTING_ENABLE  0x00000004
  525 
  526 //SRAM ECC control register (SECR0)
  527 #define SCU_SECR0_WRITE(controller, value) \
  528     scu_cram_register_write( \
  529       controller, \
  530       sram_ecc_control_0, \
  531       value \
  532    )
  533 /*@}*/
  534 
  535 /**
  536  * @name SCU_FBRAM_REGISTERS
  537  */
  538 /*@{*/
  539 
  540 //SRAM ECC control register (SECR1)
  541 #define SCU_SECR1_WRITE(controller, value) \
  542     scu_fbram_register_write( \
  543       controller, \
  544       sram_ecc_control_1, \
  545       value \
  546    )
  547 /*@}*/
  548 
  549 
  550 //*****************************************************************************
  551 //* SCU Port Task Scheduler Group Registers
  552 //*****************************************************************************
  553 
  554 /**
  555  * @name SCU_PTSG_REGISTER_ACCESS_MACROS
  556  */
  557 /*@{*/
  558 #define scu_ptsg_register_read(controller, reg) \
  559    scu_register_read( \
  560       (controller), \
  561       (controller)->scu_registers->peg0.ptsg.reg \
  562    )
  563 
  564 #define scu_ptsg_register_write(controller, reg, value) \
  565    scu_register_write( \
  566       (controller), \
  567       (controller)->scu_registers->peg0.ptsg.reg, \
  568       (value) \
  569    )
  570 /*@}*/
  571 
  572 /**
  573  * @name SCU_PTSG_REGISTERS
  574  */
  575 /*@{*/
  576 #define SCU_PTSGCR_READ(controller) \
  577     scu_ptsg_register_read( \
  578        (controller), \
  579        control \
  580     )
  581 
  582 #define SCU_PTSGCR_WRITE(controller, value) \
  583     scu_ptsg_register_write( \
  584        (controller), \
  585        control, \
  586        value \
  587     )
  588 
  589 #define SCU_PTSGRTC_READ(controller) \
  590     scu_ptsg_register_read( \
  591        controller, \
  592        real_time_clock \
  593     )
  594 /*@}*/
  595 
  596 #ifdef __cplusplus
  597 }
  598 #endif // __cplusplus
  599 
  600 #endif // _SCIC_SDS_CONTROLLER_REGISTERS_H_

Cache object: 2aa4202b92a32e9bf44b8e191cfa3e76


[ 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.