Training courses

Kernel and Embedded Linux

Bootlin training courses

Embedded Linux, kernel,
Yocto Project, Buildroot, real-time,
graphics, boot time, debugging...

Bootlin logo

Elixir Cross Referencer

/*******************************************************************************
*Copyright (c) 2014 PMC-Sierra, Inc.  All rights reserved. 
*
*Redistribution and use in source and binary forms, with or without modification, are permitted provided 
*that the following conditions are met: 
*1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
*following disclaimer. 
*2. Redistributions in binary form must reproduce the above copyright notice, 
*this list of conditions and the following disclaimer in the documentation and/or other materials provided
*with the distribution. 
*
*THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED 
*WARRANTIES,INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
*FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
*FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 
*NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 
*BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 
*LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 
*SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
*
* $FreeBSD$
*
********************************************************************************/
/*******************************************************************************/
/*! \file  sadefs.h
 *  \brief The file defines the constants used by LL layer
 */

/*******************************************************************************/

#ifndef  __SADEFS_H__

#define __SADEFS_H__

#define SA_LL_IBQ_PROTECT

#define AGSA_MAX_VALID_PORTS                      AGSA_MAX_VALID_PHYS     /**< defines the maximum number of ports */

#define NUM_TIMERS                                2                       /**< defines the maximum number of timers */
#define SA_USECS_PER_TICK                         1000000                 /**< defines the heart beat of the LL layer 1us */
#define MAX_ACTIVE_IO_REQUESTS                    4096                    /**< Maximum Active IO Requests */
#define SMP_RESPONSE_FRAMES                       AGSA_MAX_VALID_PHYS     /**< SMP Response Frame Buffer */
#define MAX_NUM_VECTOR                            64                      /**< Maximum Number of Interrupt Vectors */
#define REGISTER_DUMP_BUFF_SIZE                   0x4000                  /**< Maximum Fatal Error Register Dump Buffer Size */
#define KBYTES                                    1024

/* number of IQ/OQ */
#define IQ_NUM_32                                 32
#define OQ_NUM_32                                 32

/* default value of Inbound/Outbound element size */
#define INBOUND_DEPTH_SIZE                        512
#define OUTBOUND_DEPTH_SIZE                       512

/* Priority of Queue */
#define MPI_QUEUE_NORMAL                          0
#define MPI_QUEUE_PRIORITY                        1

/* size of IOMB - multiple with 32 bytes */
#define IOMB_SIZE64                               64
#define IOMB_SIZE96                               96
#define IOMB_SIZE128                              128
#define IOMB_SIZE256                              256

/* DIR bit of IOMB for SSP read/write command */
#define DIR_NODATA                                0x000
#define DIR_READ                                  0x100
#define DIR_WRITE                                 0x200

/* TLR bits mask */
#define TLR_MASK                                  0x00000003
/* port and phy Id bits Mask */


#define PORTID_MASK                               0x0000000F
#define PORTID_V_MASK                             0x000000FF
#define PHYID_MASK                                0x0000000F
#define PHYID_V_MASK                              0x000000FF
#define PORT_STATE_MASK                           0x0000000F
#define PHY_IN_PORT_MASK                          0x000000F0

#define SM_PHYID_MASK   (smIS_SPC(agRoot) ? PHYID_MASK  : PHYID_V_MASK )
#define SM_PORTID_MASK  (smIS_SPC(agRoot) ? PORTID_MASK : PORTID_V_MASK )

/* the index for memory requirement, must be continious */
#define LLROOT_MEM_INDEX                          0              /**< the index of root memory */
#define DEVICELINK_MEM_INDEX         (LLROOT_MEM_INDEX + 1)      /**< the index of device descriptors memory */
#define IOREQLINK_MEM_INDEX          (DEVICELINK_MEM_INDEX+1)    /**< the index of IO requests memory */

#ifdef SA_ENABLE_HDA_FUNCTIONS
#define  HDA_DMA_BUFFER              (IOREQLINK_MEM_INDEX+1)     /** HDA Buffer */
#else  /* SA_ENABLE_HDA_FUNCTIONS */
#define  HDA_DMA_BUFFER              (IOREQLINK_MEM_INDEX)       /** HDA Buffer */
#endif /* SA_ENABLE_HDA_FUNCTIONS */

#ifdef SA_ENABLE_TRACE_FUNCTIONS
#define  LL_FUNCTION_TRACE              (HDA_DMA_BUFFER+1)      /**TraceLog */
#else /* SA_ENABLE_TRACE_FUNCTIONS */
#define  LL_FUNCTION_TRACE               HDA_DMA_BUFFER         /**TraceLog */
#endif /* END SA_ENABLE_TRACE_FUNCTIONS */

#define TIMERLINK_MEM_INDEX              (LL_FUNCTION_TRACE+1)   /**< the index of timers memory */

#ifdef FAST_IO_TEST
#define LL_FAST_IO                        (TIMERLINK_MEM_INDEX+1)
#define MPI_IBQ_OBQ_INDEX                    (LL_FAST_IO + 1)

#else /* FAST_IO_TEST */

#define LL_FAST_IO                         TIMERLINK_MEM_INDEX
#define MPI_IBQ_OBQ_INDEX                     (LL_FAST_IO + 1)
#endif /* FAST_IO_TEST */

#define MPI_MEM_INDEX                             (MPI_IBQ_OBQ_INDEX - LLROOT_MEM_INDEX)

#define MPI_EVENTLOG_INDEX                        0
#define MPI_IOP_EVENTLOG_INDEX                    1
#define MPI_CI_INDEX                              2
/* The following is a reference index */
#define MPI_PI_INDEX                              (MPI_CI_INDEX + 1)
#define MPI_IBQ_INDEX                             (MPI_PI_INDEX + 1)
#define MPI_OBQ_INDEX                             (MPI_IBQ_INDEX + MPI_MAX_INBOUND_QUEUES)

#define TOTAL_MPI_MEM_CHUNKS                      (MPI_MAX_INBOUND_QUEUES * 2) + MPI_IBQ_INDEX


#define LL_DEVICE_LOCK 0
#define LL_PORT_LOCK          (LL_DEVICE_LOCK+1)
#define LL_TIMER_LOCK         (LL_PORT_LOCK+1)
#define LL_IOREQ_LOCKEQ_LOCK  (LL_TIMER_LOCK+1)

#ifdef FAST_IO_TEST
#define LL_FAST_IO_LOCK       (LL_IOREQ_LOCKEQ_LOCK+1)
#else /* FAST_IO_TEST   */
#define LL_FAST_IO_LOCK       (LL_IOREQ_LOCKEQ_LOCK)
#endif /* FAST_IO_TEST   */

#ifdef SA_ENABLE_TRACE_FUNCTIONS
#define LL_TRACE_LOCK       (LL_FAST_IO_LOCK+1)
#else /* SA_ENABLE_TRACE_FUNCTIONS   */
#define LL_TRACE_LOCK       (LL_FAST_IO_LOCK)
#endif /* SA_ENABLE_TRACE_FUNCTIONS   */

#ifdef  MPI_DEBUG_TRACE_ENABLE
#define LL_IOMB_TRACE_LOCK (LL_TRACE_LOCK+1)
#else /* MPI_DEBUG_TRACE_ENABLE */
#define LL_IOMB_TRACE_LOCK (LL_TRACE_LOCK)
#endif /* MPI_DEBUG_TRACE_ENABLE */

#define LL_IOREQ_OBQ_LOCK     (LL_IOMB_TRACE_LOCK+1)

#define LL_IOREQ_IBQ_LOCK      (LL_IOREQ_OBQ_LOCK +1)
#define LL_IOREQ_IBQ_LOCK_PARM (LL_IOREQ_OBQ_LOCK + queueConfig->numOutboundQueues  +1)
#define LL_IOREQ_IBQ0_LOCK     (LL_IOREQ_OBQ_LOCK + saRoot->QueueConfig.numOutboundQueues  +1)



/* define phy states */
#define PHY_STOPPED                               0x00000000              /**< flag indicates phy stopped */
#define PHY_UP                                    0x00000001              /**< flag indicates phy up */
#define PHY_DOWN                                  0x00000002              /**< flag indicates phy down */

/* define port states */
#define PORT_NORMAL                               0x0000
#define PORT_INVALIDATING                         0x0002

/* define chip status */
#define CHIP_NORMAL                               0x0000
#define CHIP_SHUTDOWN                             0x0001
#define CHIP_RESETTING                            0x0002
#define CHIP_RESET_FW                             0x0004
#define CHIP_FATAL_ERROR                          0x0008

/* define device types */
#define SAS_SATA_UNKNOWN_DEVICE                   0xFF       /**< SAS SATA unknown device type */

#define STP_DEVICE                                0x00       /**< SATA device behind an expander */
#define SSP_SMP_DEVICE                            0x01       /**< SSP or SMP device type */
#define DIRECT_SATA_DEVICE                        0x02       /**< SATA direct device type */

/* SATA */
#define SATA_FIS_MASK                             0x00000001
#define MAX_SATARESP_SUPPORT_BYTES                44

#define MARK_OFF                                  0xFFFFFFFF
#define PORT_MARK_OFF                             0xFFFFFFFF
#define NO_FATAL_ERROR_VECTOR                     0xFFFFFFFF

#define SATA_PROTOCOL_RSRT_ASSERT                 0x01
#define SATA_PROTOCOL_RSRT_DEASSERT               0x02
#define SATA_NON_DATA_PROTOCOL                    0x0d
#define SATA_PIO_READ_PROTOCOL                    0x0e
#define SATA_DMA_READ_PROTOCOL                    0x0f
#define SATA_FPDMA_READ_PROTOCOL                  0x10
#define SATA_PIO_WRITE_PROTOCOL                   0x11
#define SATA_DMA_WRITE_PROTOCOL                   0x12
#define SATA_FPDMA_WRITE_PROTOCOL                 0x13
#define SATA_DEVICE_RESET_PROTOCOL                0x14

/* Definition for bit shift */
#define SHIFT0                                    0
#define SHIFT1                                    1
#define SHIFT2                                    2
#define SHIFT3                                    3
#define SHIFT4                                    4
#define SHIFT5                                    5
#define SHIFT6                                    6
#define SHIFT7                                    7
#define SHIFT8                                    8
#define SHIFT9                                    9
#define SHIFT10                                   10
#define SHIFT11                                   11
#define SHIFT12                                   12
#define SHIFT13                                   13
#define SHIFT14                                   14
#define SHIFT15                                   15
#define SHIFT16                                   16
#define SHIFT17                                   17
#define SHIFT18                                   18
#define SHIFT19                                   19
#define SHIFT20                                   20
#define SHIFT21                                   21
#define SHIFT22                                   22
#define SHIFT23                                   23
#define SHIFT24                                   24
#define SHIFT25                                   25
#define SHIFT26                                   26
#define SHIFT27                                   27
#define SHIFT28                                   28
#define SHIFT29                                   29
#define SHIFT30                                   30
#define SHIFT31                                   31

/* These flags used for saSSPAbort(), saSATAAbort() */
#define ABORT_MASK                                0x3
#define ABORT_SINGLE                              0x0
#define ABORT_SCOPE                               0x3 /* bits 0-1*/
#define ABORT_ALL                                 0x1
#define ABORT_TSDK_QUARANTINE                     0x4
#define ABORT_QUARANTINE_SPC                      0x4
#define ABORT_QUARANTINE_SPCV                     0x8

/* These flags used for saGetRegDump() */
#define REG_DUMP_NUM0                             0x0
#define REG_DUMP_NUM1                             0x1
#define REG_DUMP_NONFLASH                         0x0
#define REG_DUMP_FLASH                            0x1

/* MSIX Interupts */
#define MSIX_TABLE_OFFSET                         0x2000
#define MSIX_TABLE_ELEMENT_SIZE                   0x10
#define MSIX_INTERRUPT_CONTROL_OFFSET             0xC
#define MSIX_TABLE_BASE                   (MSIX_TABLE_OFFSET+MSIX_INTERRUPT_CONTROL_OFFSET)
#define MSIX_INTERRUPT_DISABLE                    0x1
#define MSIX_INTERRUPT_ENABLE                     0x0

#define MAX_QUEUE_EACH_MEM                        8

#define NUM_MEM_CHUNKS(Q, rem) ((((bit32)Q % rem) > 0) ? (bit32)(Q/rem+1) : (bit32)(Q/rem))
#define NUM_QUEUES_IN_MEM(Q, rem) ((((bit32)Q % rem) > 0) ? (bit32)(Q%rem) : (bit32)(MAX_QUEUE_EACH_MEM))

#define MAX_DEV_BITS                              0xFFFF0000
#define PHY_COUNT_BITS                            0x01f80000
#define Q_SUPPORT_BITS                            0x0007ffff
#define SAS_SPEC_BITS                             0xfe000000
#define HP_SUPPORT_BIT                            0x00010000
#define INT_COL_BIT                               0x00040000
#define INT_DELAY_BITS                            0xFFFF
#define INT_THR_BITS                              0xFF
#define INT_VEC_BITS                              0xFF

#define AUTO_HARD_RESET_DEREG_FLAG                0x00000001
#define AUTO_FW_CLEANUP_DEREG_FLAG                0x00000002

#define BYTE_MASK                                 0xff

#define INT_OPTION                                0x7FFF
#define SMP_TO_DEFAULT                            100
#define ITL_TO_DEFAULT                            0xFFFF


/*
agsaHwConfig_s  hwOption
*/
#define HW_CFG_PICI_EFFECTIVE_ADDRESS             0x1

/* SPC or SPCv ven dev Id */

#define SUBID_SPC                                 0x00000000
#define SUBID_SPCV                                0x56781234

#define VEN_DEV_SPC                               0x80010000
#define VEN_DEV_HIL                               0x80810000

#define VEN_DEV_SPCV                              0x80080000
#define VEN_DEV_SPCVE                             0x80090000
#define VEN_DEV_SPCVP                             0x80180000
#define VEN_DEV_SPCVEP                            0x80190000

#define VEN_DEV_SPC12V                            0x80700000
#define VEN_DEV_SPC12VE                           0x80710000
#define VEN_DEV_SPC12VP                           0x80720000
#define VEN_DEV_SPC12VEP                          0x80730000
#define VEN_DEV_9015                              0x90150000
#define VEN_DEV_9060                              0x90600000

#define VEN_DEV_ADAPVEP                           0x80890000
#define VEN_DEV_ADAPVP                            0x80880000


#define VEN_DEV_SFC                               0x80250000

/*DelRay PCIid */
#define VEN_DEV_SPC12ADP                          0x80740000 /* 8 ports */
#define VEN_DEV_SPC12ADPE                         0x80750000 /* 8 ports encrypt */
#define VEN_DEV_SPC12ADPP                         0x80760000 /* 16 ports  */
#define VEN_DEV_SPC12ADPEP                        0x80770000 /* 16 ports encrypt */
#define VEN_DEV_SPC12SATA                         0x80060000 /* SATA HBA */

#endif  /*__SADEFS_H__ */