195 lines
7.1 KiB
C
195 lines
7.1 KiB
C
/*******************************************************************************
|
|
Copyright (C) Marvell International Ltd. and its affiliates
|
|
|
|
********************************************************************************
|
|
Marvell GPL License Option
|
|
|
|
If you received this File from Marvell, you may opt to use, redistribute and/or
|
|
modify this File in accordance with the terms and conditions of the General
|
|
Public License Version 2, June 1991 (the "GPL License"), a copy of which is
|
|
available along with the File in the license.txt file or by writing to the Free
|
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 or
|
|
on the worldwide web at http://www.gnu.org/licenses/gpl.txt.
|
|
|
|
THE FILE IS DISTRIBUTED AS-IS, WITHOUT WARRANTY OF ANY KIND, AND THE IMPLIED
|
|
WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE ARE EXPRESSLY
|
|
DISCLAIMED. The GPL License provides additional details about this warranty
|
|
disclaimer.
|
|
|
|
*******************************************************************************/
|
|
/*******************************************************************************
|
|
* mvOsBios.h - O.S. interface header file for BIOS IAL
|
|
*
|
|
* DESCRIPTION:
|
|
* This header file contains OS dependent definition for BIOS
|
|
*
|
|
* DEPENDENCIES:
|
|
*
|
|
* FILE REVISION NUMBER:
|
|
* $Revision: 1.7 $
|
|
*******************************************************************************/
|
|
|
|
#ifndef __INCmvOsSUBooth
|
|
#define __INCmvOsSUBooth
|
|
|
|
#include "mvTypes.h"
|
|
#include "mvOs.h"
|
|
|
|
/* Definitions */
|
|
#if defined (LOG_DEBUG) || defined (LOG_ERROR)
|
|
#define PRNTHEXTSINGLE
|
|
#define DEBUG_IAL
|
|
#define DEBUG_IAL_SERIAL
|
|
#endif
|
|
|
|
#if defined(REG_DEBUG)
|
|
extern int reg_arry[REG_ARRAY_SIZE][2];
|
|
extern int reg_arry_index;
|
|
#endif
|
|
|
|
/*
|
|
* Override CORE Driver SW queue size to 1. The CORE Driver SW queue is not
|
|
* used for issuing UDMA commands; so minimizing this to 1 makes it possible
|
|
* to minimize footprint of BIOS Extension driver when statically allocating
|
|
* the channel's data structures.
|
|
*/
|
|
#define MV_SATA_OVERRIDE_SW_QUEUE_SIZE
|
|
#define MV_SATA_REQUESTED_SW_QUEUE_SIZE 1
|
|
|
|
|
|
#define MV_REGS_ACCESSED_BY_IO_BAR
|
|
/* System dependent macro for flushing CPU write cache */
|
|
#define MV_CPU_WRITE_BUFFER_FLUSH()
|
|
|
|
/* System dependent register read / write in byte/word/dword variants */
|
|
unsigned long readRegister (unsigned long base, unsigned long offset);
|
|
void writeRegister (unsigned long base, unsigned long offset, unsigned long value);
|
|
/*void pioWrite16bit (unsigned short offset, unsigned short data);
|
|
unsigned short pioRead16bit (unsigned short offset);*/
|
|
void waitForKeystroke (void);
|
|
unsigned short readSegmentOffset16bit (unsigned short segment_, unsigned short offset_);
|
|
unsigned char readSegmentOffset8bit (unsigned short segment_, unsigned short offset_);
|
|
void writeSegmentOffset16bit (unsigned short segment_, unsigned short offset_, unsigned short value_);
|
|
void writeSegmentOffset8bit (unsigned short segment_, unsigned short offset_, unsigned char value_);
|
|
void memcpySegmentOffset32bitForward (unsigned short segment_,
|
|
unsigned short destinationOffset_,
|
|
unsigned short sourceOffset_,
|
|
unsigned short byteCount_);
|
|
|
|
|
|
MV_U16 mvSwapShort(MV_U16 data);
|
|
MV_U32 mvSwapWord(MV_U32 data);
|
|
|
|
#ifdef PRNTHEXTSINGLE
|
|
void printHexSingle(char *fmt, unsigned short value_);
|
|
#else
|
|
#define printHexSingle(x,y)
|
|
#endif
|
|
|
|
/* System dependent little endian from / to CPU conversions */
|
|
#if (_BYTE_ORDER == _BIG_ENDIAN)
|
|
# define MV_CPU_TO_LE16(x) MV_16BIT_LE(x)
|
|
# define MV_CPU_TO_LE32(x) MV_32BIT_LE(x)
|
|
|
|
# define MV_LE16_TO_CPU(x) MV_16BIT_LE(x)
|
|
# define MV_LE32_TO_CPU(x) MV_32BIT_LE(x)
|
|
#else
|
|
# define MV_CPU_TO_LE16(x) (x)
|
|
# define MV_CPU_TO_LE32(x) (x)
|
|
|
|
# define MV_LE16_TO_CPU(x) (x)
|
|
# define MV_LE32_TO_CPU(x) (x)
|
|
#endif
|
|
|
|
|
|
/* System dependent register read / write in byte/word/dword variants */
|
|
/* Write 32/16/8 bit NonCacheable */
|
|
#if defined(REG_DEBUG)
|
|
#define MV_WRITE_CHAR(address, data) \
|
|
((*((volatile unsigned char *)(address)))= \
|
|
((unsigned char)(data))); \
|
|
reglog((address), (data));
|
|
#else
|
|
#define MV_WRITE_CHAR(address, data) \
|
|
((*((volatile unsigned char *)(address)))= \
|
|
((unsigned char)(data)))
|
|
#endif
|
|
|
|
#if defined(REG_DEBUG)
|
|
#define MV_WRITE_SHORT(address, data) \
|
|
((*((volatile unsigned short *)(address))) = \
|
|
((unsigned short)(data))); \
|
|
reglog((address), (data));
|
|
#else
|
|
#define MV_WRITE_SHORT(address, data) \
|
|
((*((volatile unsigned short *)(address))) = \
|
|
((unsigned short)(data)))
|
|
#endif
|
|
|
|
#if defined(REG_DEBUG)
|
|
#define MV_WRITE_WORD(address, data) \
|
|
((*((volatile unsigned int *)(address))) = \
|
|
((unsigned int)(data))); \
|
|
reglog((address), (data));
|
|
#else
|
|
#define MV_WRITE_WORD(address, data) \
|
|
((*((volatile unsigned int *)(address))) = \
|
|
((unsigned int)(data)))
|
|
#endif
|
|
|
|
/* Read 32/16/8 bit NonCacheable - returns data direct. */
|
|
|
|
#define MV_READCHAR(address) \
|
|
((*((volatile unsigned char *)(address))))
|
|
|
|
#define MV_READSHORT(address) \
|
|
((*((volatile unsigned short *)(address))))
|
|
|
|
#define MV_READWORD(address) \
|
|
((*((volatile unsigned int *)(address))))
|
|
|
|
#define MV_REG_WRITE_BYTE(base, offset, val) MV_WRITE_CHAR(base + offset, val)
|
|
#define MV_REG_WRITE_WORD(base, offset, val) MV_WRITE_SHORT(base + offset, MV_CPU_TO_LE16(val))
|
|
#define MV_REG_WRITE_DWORD(base, offset, val) MV_WRITE_WORD(base + offset, MV_CPU_TO_LE32(val))
|
|
#define MV_REG_READ_BYTE(base, offset) MV_READCHAR(base + offset)
|
|
#define MV_REG_READ_WORD(base, offset) mvSwapShort(MV_READSHORT(base + offset))
|
|
#define MV_REG_READ_DWORD(base, offset) mvSwapWord(MV_READWORD(base + offset))
|
|
|
|
|
|
/* System dependant typedefs */
|
|
typedef void *MV_VOID_PTR;
|
|
typedef unsigned long *MV_U32_PTR;
|
|
typedef unsigned short *MV_U16_PTR;
|
|
typedef unsigned char *MV_U8_PTR;
|
|
typedef char *MV_CHAR_PTR;
|
|
typedef unsigned long MV_BUS_ADDR_T;
|
|
typedef unsigned long MV_CPU_FLAGS;
|
|
|
|
/* Structures */
|
|
/* System dependent structure */
|
|
typedef struct mvOsSemaphore
|
|
{
|
|
unsigned long lock;
|
|
unsigned long flags;
|
|
} MV_OS_SEMAPHORE;
|
|
|
|
/* Typedefs */
|
|
typedef enum mvBoolean
|
|
{
|
|
MV_SFALSE, MV_STRUE
|
|
} MV_BOOLEAN;
|
|
|
|
|
|
/* Functions (User implemented)*/
|
|
#include "sata/CoreDriver/mvLog.h"
|
|
|
|
/* Semaphore init, take and release */
|
|
#define mvOsSemInit(x) MV_TRUE
|
|
#define mvOsSemTake(x)
|
|
#define mvOsSemRelease(x)
|
|
|
|
/* Delay function in micro seconds resolution */
|
|
#define mvMicroSecondsDelay(dummy, time) udelay(time)
|
|
|
|
#endif /* __INCmvOsSUBooth */
|