/*
* Copyright (c) 2011 Intel Corporation. All Rights Reserved.
* Copyright (c) Imagination Technologies Limited, UK
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sub license, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice (including the
* next paragraph) shall be included in all copies or substantial portions
* of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
* IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR
* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
#ifndef _topazhp_cmdump_h
#define _topazhp_cmdump_h
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h> /* for libc5 */
#ifdef ANDROID
#define outl(...)
#define outw(...)
#define inl(...) 0
#define inw(...) 0
#else
#include <sys/io.h> /* for glibc */
#endif
#define MIN(a,b) ((a)>(b)?(b):(a))
struct RegisterInfomation {
char *name;
int offset;
};
#define ui32TopazMulticoreRegId 1
#define PCI_DEVICE_ID_CFG 0x02 /* 16 bits */
#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */
#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */
#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */
#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */
#define CONFIG_CMD(bus,device_fn,where) \
(0x80000000|((bus&0xff) << 16)|((device_fn&0xff) << 8)|((where&0xff) & ~3))
static inline unsigned long pci_get_long(int bus,int device_fn, int where)
{
outl(CONFIG_CMD(bus,device_fn,where), 0xCF8);
return inl(0xCFC);
}
static inline int pci_set_long(int bus,int device_fn, int where,unsigned long value)
{
outl(CONFIG_CMD(bus,device_fn,where), 0xCF8);
outl(value,0xCFC);
return 0;
}
static inline int pci_get_short(int bus,int device_fn, int where)
{
outl(CONFIG_CMD(bus,device_fn,where), 0xCF8);
return inw(0xCFC + (where&2));
}
static inline int pci_set_short(int bus,int device_fn, int where,unsigned short value)
{
outl(CONFIG_CMD(bus,device_fn,where), 0xCF8);
outw(value,0xCFC + (where&2));
return 0;
}
#define REG_OFFSET_TOPAZ_MULTICORE 0x00000000
#define REG_OFFSET_TOPAZ_DMAC 0x00000400
#define REG_OFFSET_TOPAZ_MTX 0x00000800
#define REGNUM_TOPAZ_CR_MMU_DIR_LIST_BASE_ADDR 0x0030
#ifndef MV_OFFSET_IN_TABLE
#define MV_OFFSET_IN_TABLE(BDistance, Position) ((BDistance) * MV_ROW_STRIDE + (Position) * sizeof(IMG_MV_SETTINGS))
#endif
#define MULTICORE_READ32(offset, pointer) \
do { \
*(pointer) = *((unsigned long *)((unsigned char *)(linear_mmio_topaz) \
+ REG_OFFSET_TOPAZ_MULTICORE + offset)); \
} while (0)
int topazhp_dump_command(unsigned int comm_dword[]);
int tng_command_parameter_dump(int cmdid, void *virt_addr);
#endif