mirror of
https://github.com/opnsense/src.git
synced 2026-04-29 01:59:38 -04:00
125 lines
4.3 KiB
C
125 lines
4.3 KiB
C
/*******************************************************************************
|
|
*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
|
|
|
|
********************************************************************************/
|
|
/*******************************************************************************/
|
|
/*! \file saframe.c
|
|
* \brief The file implements the functions to read frame content
|
|
*/
|
|
|
|
|
|
/******************************************************************************/
|
|
#include <sys/cdefs.h>
|
|
__FBSDID("$FreeBSD$");
|
|
#include <dev/pms/config.h>
|
|
|
|
#include <dev/pms/RefTisa/sallsdk/spc/saglobal.h>
|
|
#ifdef SA_ENABLE_TRACE_FUNCTIONS
|
|
#ifdef siTraceFileID
|
|
#undef siTraceFileID
|
|
#endif
|
|
#define siTraceFileID 'D'
|
|
#endif
|
|
|
|
/******************************************************************************/
|
|
/*! \brief Read 32 bits from a frame
|
|
*
|
|
* Read 32 bits from a frame
|
|
*
|
|
* \param agRoot Handles for this instance of SAS/SATA LLL
|
|
* \param agFrame The frame handler
|
|
* \param frameOffset Offset in bytes from the beginning of valid frame bytes or IU
|
|
to the 32-bit value to read
|
|
*
|
|
* \return The read value
|
|
*
|
|
*/
|
|
/*******************************************************************************/
|
|
GLOBAL bit32 saFrameReadBit32(
|
|
agsaRoot_t *agRoot,
|
|
agsaFrameHandle_t agFrame,
|
|
bit32 frameOffset
|
|
)
|
|
{
|
|
bit8 *payloadAddr;
|
|
bit32 value = 0;
|
|
|
|
smTraceFuncEnter(hpDBG_VERY_LOUD, "zr");
|
|
|
|
if ( agNULL != agFrame )
|
|
{
|
|
/* Find the address of the payload */
|
|
payloadAddr = (bit8 *)(agFrame) + frameOffset;
|
|
|
|
/* read one DW Data */
|
|
value = *(bit32 *)payloadAddr;
|
|
}
|
|
|
|
|
|
/* (5) return value */
|
|
smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "zr");
|
|
return value;
|
|
}
|
|
|
|
/******************************************************************************/
|
|
/*! \brief Read a block from a frame
|
|
*
|
|
* Read a block from a frame
|
|
*
|
|
* \param agRoot Handles for this instance of SAS/SATA LLL
|
|
* \param agFrame The frame handler
|
|
* \param frameOffset The offset of the frame to start read
|
|
* \param frameBuffer The pointer to the destination of data read from the frame
|
|
* \param frameBufLen Number of bytes to read from the frame
|
|
*
|
|
* \return -void-
|
|
*
|
|
*/
|
|
/*******************************************************************************/
|
|
GLOBAL void saFrameReadBlock (
|
|
agsaRoot_t *agRoot,
|
|
agsaFrameHandle_t agFrame,
|
|
bit32 frameOffset,
|
|
void *frameBuffer,
|
|
bit32 frameBufLen
|
|
)
|
|
{
|
|
bit8 *payloadAddr;
|
|
bit32 i;
|
|
|
|
smTraceFuncEnter(hpDBG_VERY_LOUD, "zi");
|
|
|
|
/* Sanity check */
|
|
SA_ASSERT(frameBufLen < 4096, "saFrameReadBlock read more than 4k");
|
|
|
|
if ( agNULL != agFrame )
|
|
{
|
|
/* Find the address of the payload */
|
|
payloadAddr = (bit8 *)(agFrame) + frameOffset;
|
|
/* Copy the frame data to the destination frame buffer */
|
|
for ( i = 0; i < frameBufLen; i ++ )
|
|
{
|
|
*(bit8 *)((bit8 *)frameBuffer + i) = *(bit8 *)(payloadAddr + i);
|
|
}
|
|
}
|
|
|
|
smTraceFuncExit(hpDBG_VERY_LOUD, 'a', "zi");
|
|
}
|
|
|