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/pms/RefTisa/sallsdk/spc/mpi.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 *Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved. 
    3 *
    4 *Redistribution and use in source and binary forms, with or without modification, are permitted provided 
    5 *that the following conditions are met: 
    6 *1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
    7 *following disclaimer. 
    8 *2. Redistributions in binary form must reproduce the above copyright notice, 
    9 *this list of conditions and the following disclaimer in the documentation and/or other materials provided
   10 *with the distribution. 
   11 *
   12 *THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 
   13 *WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   14 *FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
   15 *FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
   16 *NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
   17 *BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
   18 *LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
   19 *SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
   20 *
   21 * $FreeBSD$
   22 *
   23 ********************************************************************************/
   24 
   25 /*******************************************************************************/
   26 /*! \file mpi.h
   27  *  \brief The file defines the MPI constants and structures
   28  *
   29  * The file defines the MPI constants and structures
   30  *
   31  */
   32 /*******************************************************************************/
   33 
   34 #ifndef __MPI_H__
   35 #define __MPI_H__
   36 
   37 /*******************************************************************************/
   38 
   39 /*******************************************************************************/
   40 /* CONSTANTS                                                                   */
   41 /*******************************************************************************/
   42 /*******************************************************************************/
   43 #define MPI_QUEUE_PRIORITY_HIGHEST      0xFF  /**< Highest queue priority */
   44 #define MPI_QUEUE_PRIORITY_LOWEST       0x00  /**< Lowest queue priority */
   45 
   46 #define MPI_MAX_INBOUND_QUEUES          64     /**< Maximum number of inbound queues */
   47 #define MPI_MAX_OUTBOUND_QUEUES         64     /**< Maximum number of outbound queues */
   48 
   49                                                /**< Max # of memory chunks supported */
   50 #define MPI_MAX_MEM_REGIONS             (MPI_MAX_INBOUND_QUEUES + MPI_MAX_OUTBOUND_QUEUES) + 4
   51 #define MPI_LOGSIZE                     4096  /**< default size */
   52 
   53 #define MPI_IB_NUM_MASK                 0x0000FFFF /**< Mask of Inbound Queue Number */
   54 #define MPI_OB_NUM_MASK                 0xFFFF0000 /**< Mask of Outbound Queue Number */
   55 #define MPI_OB_SHIFT                    16         /**< bits shift for outbound queue number */
   56 
   57 
   58 #define BAR0                            0x10
   59 #define BAR1                            0x14
   60 #define BAR2                            0x18
   61 #define BAR3                            0x1C
   62 #define BAR4                            0x20
   63 #define BAR5                            0x24
   64 
   65 /*******************************************************************************/
   66 /*******************************************************************************/
   67 /* ENUMERATIONS                                                                */
   68 /*******************************************************************************/
   69 
   70 /*******************************************************************************/
   71 /*******************************************************************************/
   72 /** \enum mpiMsgCategory_e,
   73  *  \brief MPI message categories
   74  */
   75 /*******************************************************************************/
   76 enum mpiMsgCategory_e
   77 {
   78   MPI_CATEGORY_ETHERNET = 0,
   79   MPI_CATEGORY_FC,
   80   MPI_CATEGORY_SAS_SATA,
   81   MPI_CATEGORY_SCSI
   82 };
   83 
   84 typedef enum mpiMsgCategory_e mpiMsgCategory_t;
   85 
   86 /*******************************************************************************/
   87 /*******************************************************************************/
   88 /* TYPES                                                                       */
   89 /*******************************************************************************/
   90 /*******************************************************************************/
   91 
   92 
   93 /*******************************************************************************/
   94 /*******************************************************************************/
   95 /* DATA STRUCTURES                                                             */
   96 /*******************************************************************************/
   97 /*******************************************************************************/
   98 
   99 /*******************************************************************************/
  100 /** \struct mpiMem_s
  101  *  \brief Structure that descibes memory regions
  102  *
  103  * The mpiMemoryDescriptor_t is used to describe the attributes for a memory
  104  * region. Each element in the memory chunk has to be physically contiguous.
  105  * Different elements in the memory chunk do not necessarily have to be
  106  * contiguous to each other.
  107  */
  108 /*******************************************************************************/
  109 struct mpiMem_s
  110 {
  111   void*        virtPtr;       /**< Virtual pointer to the memory region */
  112   void*        appHandle;     /**< Handle used for the application to free memory */
  113   bit32        physAddrUpper; /**< Upper 32 bits of physical address */
  114   bit32        physAddrLower; /**< Lower 32 bits of physical address */
  115   bit32        totalLength;   /**< Total length in bytes allocated */
  116   bit32        numElements;   /**< Number of elements */
  117   bit32        elementSize;   /**< Size in bytes of an element */
  118   bit32        alignment;     /**< Alignment in bytes needed. A value of one indicates */
  119                               /**< no specific alignment requirement */
  120   bit32        type;          /**< Memory type */
  121   bit32        reserved;      /**< Reserved */
  122 };
  123 
  124 typedef struct mpiMem_s mpiMem_t;
  125 
  126 /*******************************************************************************/
  127 /** \struct mpiMemReq_s
  128  *  \brief Describes MPI memory requirements
  129  *
  130  * The mpiMemRequirements_t  is used to specify the memory allocation requirement
  131  * for the MPI. This is the data structure used in the mpiGetRequirements()
  132  * and the mpiInitialize() function calls
  133  */
  134 /*******************************************************************************/
  135 struct mpiMemReq_s
  136 {
  137   bit32     count;                        /**< The number of element in the mpiMemory array */
  138   mpiMem_t  region[MPI_MAX_MEM_REGIONS];  /**< Pointer to the array of structures that define memroy regions */
  139 };
  140 
  141 typedef struct mpiMemReq_s mpiMemReq_t;
  142 
  143 /*******************************************************************************/
  144 /** \struct mpiQCQueue_s
  145  *  \brief Circular Queue descriptor
  146  *
  147  * This structure holds outbound circular queue attributes.
  148  */
  149 /*******************************************************************************/
  150 struct mpiOCQueue_s
  151 {
  152   bit32                     qNumber;      /**< this queue number */
  153   bit32                     numElements;  /**< The total number of queue elements. A value 0 disables the queue */
  154   bit32                     elementSize;  /**< The size of each queue element, in bytes */
  155   bit32                     priority;     /**< The queue priority. Possible values for this field are */
  156                                           /**< MPI_QUEUE_PRIORITY_HIGHEST and MPI_QUEUE_PRIORITY_LOWEST */
  157   bit32                     CIPCIBar;     /**< PCI Bar */
  158   bit32                     CIPCIOffset;  /**< PCI Offset */
  159   bit32                     DIntTOffset;  /**< Dynamic Interrupt Coalescing Timeout offset */
  160   void*                     piPointer;    /**< pointer of PI (virtual address)*/
  161   mpiMem_t                  memoryRegion; /**< Queue's memory region descriptor */
  162   bit32                     producerIdx;  /**< Copy of the producer index */
  163   bit32                     consumerIdx;  /**< Copy of the consumer index */
  164   bit32                     pcibar;       /**< CPI Logical Bar Number */
  165   agsaRoot_t                *agRoot;      /**< Pointer of LL Layer structure */
  166 };
  167 
  168 typedef struct mpiOCQueue_s mpiOCQueue_t;
  169 
  170 /*******************************************************************************/
  171 /** \struct mpiICQueue_s
  172  *  \brief Circular Queue descriptor
  173  *
  174  * This structure holds inbound circular queue attributes.
  175  */
  176 /*******************************************************************************/
  177 struct mpiICQueue_s
  178 {
  179   bit32                     qNumber;      /**< this queue number */
  180   bit32                     numElements;  /**< The total number of queue elements. A value 0 disables the queue */
  181   bit32                     elementSize;  /**< The size of each queue element, in bytes */
  182   bit32                     priority;     /**< The queue priority. Possible values for this field are */
  183                                           /**< MPI_QUEUE_PRIORITY_HIGHEST and MPI_QUEUE_PRIORITY_LOWEST */
  184   bit32                     PIPCIBar;     /**< PCI Bar */
  185   bit32                     PIPCIOffset;  /**< PCI Offset */
  186   void*                     ciPointer;    /**< Pointer of CI (virtual Address) */
  187   mpiMem_t                  memoryRegion; /**< Queue's memory region descriptor */
  188   bit32                     producerIdx;  /**< Copy of the producer index */
  189   bit32                     consumerIdx;  /**< Copy of the consumer index */
  190 #ifdef SA_FW_TEST_BUNCH_STARTS
  191   bit32                     BunchStarts_QPending;     // un-started bunched IOs on queue
  192   bit32                     BunchStarts_QPendingTick; // tick value when 1st IO is bunched 
  193 #endif /* SA_FW_TEST_BUNCH_STARTS */
  194   agsaRoot_t                *agRoot;      /**< Pointer of LL Layer structure */
  195 };
  196 
  197 typedef struct mpiICQueue_s mpiICQueue_t;
  198 
  199 struct mpiHostLLConfigDescriptor_s
  200 {
  201   bit32 regDumpPCIBAR;
  202   bit32 iQNPPD_HPPD_GEvent;                 /**< inbound Queue Process depth */
  203         /* bit0-7   inbound normal priority process depth */
  204         /* bit8-15  inbound high priority process depth */
  205         /* bit16-23 OQ number to receive GENERAL_EVENT Notification */
  206         /* bit24-31 reserved */
  207   bit32 outboundHWEventPID0_3;              /**< outbound HW event for PortId 0 to 3 */
  208         /* bit0-7   outbound queue number of SAS_HW event for PortId 0 */
  209         /* bit8-15  outbound queue number of SAS_HW event for PortId 1 */
  210         /* bit16-23 outbound queue number of SAS_HW event for PortId 2 */
  211         /* bit24-31 outbound queue number of SAS_HW event for PortId 3 */
  212   bit32 outboundHWEventPID4_7;              /**< outbound HW event for PortId 4 to 7 */
  213         /* bit0-7   outbound queue number of SAS_HW event for PortId 4 */
  214         /* bit8-15  outbound queue number of SAS_HW event for PortId 5 */
  215         /* bit16-23 outbound queue number of SAS_HW event for PortId 6 */
  216         /* bit24-31 outbound queue number of SAS_HW event for PortId 7 */
  217   bit32 outboundNCQEventPID0_3;             /**< outbound NCQ event for PortId 0 to 3 */
  218         /* bit0-7   outbound queue number of SATA_NCQ event for PortId 0 */
  219         /* bit8-15  outbound queue number of SATA_NCQ event for PortId 1 */
  220         /* bit16-23 outbound queue number of SATA_NCQ event for PortId 2 */
  221         /* bit24-31 outbound queue number of SATA_NCQ event for PortId 3 */
  222   bit32 outboundNCQEventPID4_7;             /**< outbound NCQ event for PortId 4 to 7 */
  223         /* bit0-7   outbound queue number of SATA_NCQ event for PortId 4 */
  224         /* bit8-15  outbound queue number of SATA_NCQ event for PortId 5 */
  225         /* bit16-23 outbound queue number of SATA_NCQ event for PortId 6 */
  226         /* bit24-31 outbound queue number of SATA_NCQ event for PortId 7 */
  227   bit32 outboundTargetITNexusEventPID0_3;   /**< outbound target ITNexus Event for PortId 0 to 3 */
  228         /* bit0-7   outbound queue number of ITNexus event for PortId 0 */
  229         /* bit8-15  outbound queue number of ITNexus event for PortId 1 */
  230         /* bit16-23 outbound queue number of ITNexus event for PortId 2 */
  231         /* bit24-31 outbound queue number of ITNexus event for PortId 3 */
  232   bit32 outboundTargetITNexusEventPID4_7;   /**< outbound target ITNexus Event for PortId 4 to 7 */
  233         /* bit0-7   outbound queue number of ITNexus event for PortId 4 */
  234         /* bit8-15  outbound queue number of ITNexus event for PortId 5 */
  235         /* bit16-23 outbound queue number of ITNexus event for PortId 6 */
  236         /* bit24-31 outbound queue number of ITNexus event for PortId 7 */
  237   bit32 outboundTargetSSPEventPID0_3;       /**< outbound target SSP event for PordId 0 to 3 */
  238         /* bit0-7   outbound queue number of SSP event for PortId 0 */
  239         /* bit8-15  outbound queue number of SSP event for PortId 1 */
  240         /* bit16-23 outbound queue number of SSP event for PortId 2 */
  241         /* bit24-31 outbound queue number of SSP event for PortId 3 */
  242   bit32 outboundTargetSSPEventPID4_7;       /**< outbound target SSP event for PordId 4 to 7 */
  243         /* bit0-7   outbound queue number of SSP event for PortId 4 */
  244         /* bit8-15  outbound queue number of SSP event for PortId 5 */
  245         /* bit16-23 outbound queue number of SSP event for PortId 6 */
  246         /* bit24-31 outbound queue number of SSP event for PortId 7 */
  247   bit32 ioAbortDelay;   /* was reserved */                 /**< io Abort delay MPI_TABLE_CHANGE */
  248   bit32 custset;                          /**< custset */
  249   bit32 upperEventLogAddress;               /**< Upper physical MSGU Event log address */
  250   bit32 lowerEventLogAddress;               /**< Lower physical MSGU Event log address */
  251   bit32 eventLogSize;                       /**< Size of MSGU Event log, 0 means log disable */
  252   bit32 eventLogOption;                     /**< Option of MSGU Event log */
  253         /* bit3-0 log severity, 0x0 Disable Logging */
  254         /*                      0x1 Critical Error */
  255         /*                      0x2 Minor Error    */
  256         /*                      0x3 Warning        */
  257         /*                      0x4 Information    */
  258         /*                      0x5 Debugging      */
  259         /*                      0x6 - 0xF Reserved */
  260   bit32 upperIOPeventLogAddress;           /**< Upper physical IOP Event log address */
  261   bit32 lowerIOPeventLogAddress;           /**< Lower physical IOP Event log address */
  262   bit32 IOPeventLogSize;                   /**< Size of IOP Event log, 0 means log disable */
  263   bit32 IOPeventLogOption;                 /**< Option of IOP Event log */
  264         /* bit3-0 log severity, 0x0 Disable Logging */
  265         /*                      0x1 Critical Error */
  266         /*                      0x2 Minor Error    */
  267         /*                      0x3 Warning        */
  268         /*                      0x4 Information    */
  269         /*                      0x5 Debugging      */
  270         /*                      0x6 - 0xF Reserved */
  271   bit32 FatalErrorInterrupt;               /**< Fatal Error Interrupt enable and vector */
  272         /* bit0     Fatal Error Interrupt Enable   */
  273         /* bit1     PI/CI Address                  */
  274         /* bit5     enable or disable outbound coalesce   */
  275         /* bit7-6  reserved */
  276         /* bit15-8  Fatal Error Interrupt Vector   */
  277         /* bit31-16 Reserved                       */
  278   bit32 FatalErrorDumpOffset0;             /**< Fatal Error Register Dump Offset for MSGU */
  279   bit32 FatalErrorDumpLength0;             /**< Fatal Error Register Dump Length for MSGU */
  280   bit32 FatalErrorDumpOffset1;             /**< Fatal Error Register Dump Offset for IOP */
  281   bit32 FatalErrorDumpLength1;             /**< Fatal Error Register Dump Length for IOP */
  282   bit32 HDAModeFlags;                      /**< HDA Mode Flags */
  283         /* bit1-0   Bootstrap pins */
  284         /* bit2     Force HDA Mode bit */
  285         /* bit3     HDA Firmware load method */
  286   bit32 analogSetupTblOffset;              /**< Phy Calibration Table offset */
  287         /* bit23-0  phy calib table offset */
  288         /* bit31-24 entry size */
  289   bit32 InterruptVecTblOffset;             /**< DW23 Interrupt Vector Table */
  290         /* bit23-0  interrupt vector table offset */
  291         /* bit31-24 entry size */
  292   bit32 phyAttributeTblOffset;             /**< DW24 SAS Phy Attribute Table Offset */
  293         /* bit23-0  phy attribute table offset */
  294         /* bit31-24 entry size */
  295   bit32 PortRecoveryTimerPortResetTimer;  /**< DW25 Port Recovery Timer and Port Reset Timer */
  296   bit32 InterruptReassertionDelay;        /**< DW26 Interrupt Reassertion Delay 0:23 Reserved 24:31 */
  297 };
  298 
  299 typedef struct mpiHostLLConfigDescriptor_s mpiHostLLConfigDescriptor_t;
  300 
  301 /*******************************************************************************/
  302 /** \struct mpiInboundQueueDescriptor_s
  303  *  \brief MPI inbound queue attributes
  304  *
  305  * The mpiInboundQueueDescriptor_t structure is used to describe an inbound queue
  306  * attributes
  307  */
  308 /*******************************************************************************/
  309 struct mpiInboundQueueDescriptor_s
  310 {
  311   bit32                     numElements;     /**< The total number of queue elements. A value 0 disables the queue */
  312   bit32                     elementSize;     /**< The size of each queue element, in bytes */
  313   bit32                     priority;        /**< The queue priority. Possible values for this field are */
  314                                               /**< MPI_QUEUE_PRIORITY_HIGHEST and MPI_QUEUE_PRIORITY_LOWEST */
  315   bit32                     PIPCIBar;        /**< PI PCIe Bar */
  316   bit32                     PIOffset;        /**< PI PCI Bar Offset */
  317   void*                     ciPointer;       /**< Pointer of CI (virtual Address) */
  318 };
  319 
  320 typedef struct mpiInboundQueueDescriptor_s mpiInboundQueueDescriptor_t;
  321 
  322 /*******************************************************************************/
  323 /** \struct mpiOutboundQueueDescriptor_s
  324  *  \brief MPI outbound queue attributes
  325  *
  326  * The mpiOutboundQueueDescriptor_t structure is used to describe an outbound queue
  327  * attributes
  328  */
  329 /*******************************************************************************/
  330 struct mpiOutboundQueueDescriptor_s
  331 {
  332   bit32                     numElements;        /**< The total number of queue elements. A value 0 disables the queue */
  333   bit32                     elementSize;        /**< The size of each queue element, in bytes */
  334   bit32                     interruptDelay;     /**< Delay in microseconds before the interrupt is asserted */
  335                                                  /**< if the interrupt threshold has not been reached */
  336   bit32                     interruptThreshold; /**< Number of interrupt events before the interrupt is asserted */
  337                                                  /**< If set to 0, interrupts for this queue are disablec */
  338   bit32                     interruptVector;    /**< Interrupt vector assigned to this queue */
  339   bit32                     CIPCIBar;           /**< offset 0x14:PCI BAR for CI Offset */
  340   bit32                     CIOffset;           /**< offset 0x18:Offset address for outbound queue CI */
  341   bit32                     DIntTOffset;        /**< Dynamic Interrupt Coalescing Timeout offset */
  342   bit32                     interruptEnable;    /**< Interrupt enable flag */
  343   void*                     piPointer;          /**< pointer of PI (virtual address)*/
  344 };
  345 
  346 typedef struct mpiOutboundQueueDescriptor_s mpiOutboundQueueDescriptor_t;
  347 
  348 /*******************************************************************************/
  349 /** \struct mpiPhyCalibration_s
  350  *  \brief MPI Phy Calibration Table
  351  *
  352  * The mpiPhyCalibration_s structure is used to set Phy Calibration
  353  * attributes
  354  */
  355 /*******************************************************************************/
  356 struct mpiPhyCalibration_s
  357 {
  358   bit32   spaReg0;            /* transmitter per port configuration 1 SAS_SATA G1 */
  359   bit32   spaReg1;            /* transmitter per port configuration 2 SAS_SATA G1*/
  360   bit32   spaReg2;            /* transmitter per port configuration 3 SAS_SATA G1*/
  361   bit32   spaReg3;            /* transmitter configuration 1 */
  362   bit32   spaReg4;            /* reveiver per port configuration 1 SAS_SATA G1G2 */
  363   bit32   spaReg5;            /* reveiver per port configuration 2 SAS_SATA G3 */
  364   bit32   spaReg6;            /* reveiver per configuration 1 */
  365   bit32   spaReg7;            /* reveiver per configuration 2 */
  366   bit32   reserved[2];        /* reserved */
  367 };
  368 
  369 typedef struct mpiPhyCalibration_s mpiPhyCalibration_t;
  370 
  371 #define ANALOG_SETUP_ENTRY_NO              10
  372 #define ANALOG_SETUP_ENTRY_SIZE            10
  373 
  374 
  375 /*******************************************************************************/
  376 /** \struct mpiConfig_s
  377  *  \brief MPI layer configuration parameters
  378  *
  379  * The mpiConfig_s structure is used as a parameter passed in
  380  * mpiGetRequirements() and mpiInitialize() to describe the MPI software
  381  * configuration
  382  */
  383 /*******************************************************************************/
  384 struct mpiVConfig_s
  385 {
  386   mpiHostLLConfigDescriptor_t  mainConfig;                              /**< main part of configuration table */
  387   mpiInboundQueueDescriptor_t  inboundQueues[MPI_MAX_INBOUND_QUEUES];   /**< mpiQueueDescriptor structures that provide initialization */
  388                                                                         /**< attributes for the inbound queues. The maximum number of */
  389                                                                         /**< inbound queues is MPI_MAX_INBOUND_QUEUES */
  390   mpiOutboundQueueDescriptor_t outboundQueues[MPI_MAX_OUTBOUND_QUEUES]; /**< mpiQueueDescriptor structures that provide initialization */
  391                                                                         /**< attributes for the outbound queues. The maximum number of */
  392                                                                         /**< inbound queues is MPI_MAX_OUTBOUND_QUEUES */
  393   agsaPhyAnalogSetupTable_t    phyAnalogConfig;
  394   mpiInterruptVT_t             interruptVTable;
  395   sasPhyAttribute_t            phyAttributeTable;
  396   bit16   numInboundQueues;
  397   bit16   numOutboundQueues;
  398   bit16   maxNumInboundQueues;
  399   bit16   maxNumOutboundQueues;
  400   bit32   queueOption;
  401 };
  402 
  403 /*******************************************************************************/
  404 /** \struct mpiConfig_s
  405  *  \brief MPI layer configuration parameters
  406  *
  407  * The mpiConfig_s structure is used as a parameter passed in
  408  * mpiGetRequirements() and mpiInitialize() to describe the MPI software
  409  * configuration
  410  */
  411 /*******************************************************************************/
  412 struct mpiConfig_s
  413 {
  414   mpiHostLLConfigDescriptor_t  mainConfig;                              /**< main part of configuration table */
  415   mpiInboundQueueDescriptor_t  inboundQueues[MPI_MAX_INBOUND_QUEUES];   /**< mpiQueueDescriptor structures that provide initialization */
  416                                                                         /**< attributes for the inbound queues. The maximum number of */
  417                                                                         /**< inbound queues is MPI_MAX_INBOUND_QUEUES */
  418   mpiOutboundQueueDescriptor_t outboundQueues[MPI_MAX_OUTBOUND_QUEUES]; /**< mpiQueueDescriptor structures that provide initialization */
  419                                                                         /**< attributes for the outbound queues. The maximum number of */
  420                                                                         /**< inbound queues is MPI_MAX_OUTBOUND_QUEUES */
  421   agsaPhyAnalogSetupTable_t    phyAnalogConfig;
  422   bit16   numInboundQueues;
  423   bit16   numOutboundQueues;
  424   bit16   maxNumInboundQueues;
  425   bit16   maxNumOutboundQueues;
  426   bit32   queueOption;
  427 };
  428 
  429 typedef struct mpiConfig_s  mpiConfig_t;
  430 
  431 #define TX_PORT_CFG1_OFFSET                0x00
  432 #define TX_PORT_CFG2_OFFSET                0x04
  433 #define TX_PORT_CFG3_OFFSET                0x08
  434 #define TX_CFG_OFFSET                      0x0c
  435 #define RV_PORT_CFG1_OFFSET                0x10
  436 #define RV_PORT_CFG2_OFFSET                0x14
  437 #define RV_CFG1_OFFSET                     0x18
  438 #define RV_CFG2_OFFSET                     0x1c
  439 
  440 /*******************************************************************************/
  441 /*******************************************************************************/
  442 /* FUNCTIONS                                                                   */
  443 /*******************************************************************************/
  444 /*******************************************************************************/
  445 /*******************************************************************************/
  446 void      mpiRequirementsGet(mpiConfig_t *config, mpiMemReq_t *memoryRequirement);
  447 FORCEINLINE bit32 mpiMsgFreeGet(mpiICQueue_t *circularQ, bit16 messageSize, void** messagePtr);
  448 FORCEINLINE bit32 mpiMsgProduce(mpiICQueue_t *circularQ, void* messagePtr,
  449                         mpiMsgCategory_t category, bit16 opCode,
  450                         bit8 responseQueue, bit8 hiPriority);
  451 #ifdef LOOPBACK_MPI
  452 GLOBAL bit32 mpiMsgProduceOQ(mpiOCQueue_t *circularQ, void *messagePtr,
  453                              mpiMsgCategory_t category, bit16 opCode,
  454                              bit8 responseQueue, bit8 hiPriority);
  455 GLOBAL bit32 mpiMsgFreeGetOQ(mpiOCQueue_t *circularQ, bit16 messageSize,
  456                              void** messagePtr);
  457 #endif
  458 
  459 #ifdef FAST_IO_TEST
  460 bit32     mpiMsgPrepare(mpiICQueue_t *circularQ, void* messagePtr,
  461                         mpiMsgCategory_t category, bit16 opCode,
  462                         bit8 responseQueue, bit8 hiPriority);
  463 
  464 bit32     mpiMsgProduceSend(mpiICQueue_t *circularQ, void* messagePtr,
  465                         mpiMsgCategory_t category, bit16 opCode,
  466                         bit8 responseQueue, bit8 hiPriority, int sendFl);
  467 GLOBAL void mpiIBQMsgSend(mpiICQueue_t *circularQ);
  468 #define INQ(queueNum) (bit8)(queueNum & MPI_IB_NUM_MASK)
  469 #define OUQ(queueNum) (bit8)((queueNum & MPI_OB_NUM_MASK) >> MPI_OB_SHIFT)
  470 #endif
  471 
  472 FORCEINLINE bit32 mpiMsgConsume(mpiOCQueue_t *circularQ, void** messagePtr1, mpiMsgCategory_t *pCategory, bit16* pOpCode, bit8 *pBC);
  473 FORCEINLINE bit32 mpiMsgFreeSet(mpiOCQueue_t *circularQ, void* messagePtr1, bit8 bc);
  474 
  475 #endif /* __MPI_H__ */
  476 

Cache object: 135761de3849e62dab19333fbcbd20f1


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