1/* 2* Copyright (c) 2011 Intel Corporation. All Rights Reserved. 3* Copyright (c) Imagination Technologies Limited, UK 4* 5* Permission is hereby granted, free of charge, to any person obtaining a 6* copy of this software and associated documentation files (the 7* "Software"), to deal in the Software without restriction, including 8* without limitation the rights to use, copy, modify, merge, publish, 9* distribute, sub license, and/or sell copies of the Software, and to 10* permit persons to whom the Software is furnished to do so, subject to 11* the following conditions: 12* 13* The above copyright notice and this permission notice (including the 14* next paragraph) shall be included in all copies or substantial portions 15* of the Software. 16* 17* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 18* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 19* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. 20* IN NO EVENT SHALL PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR 21* ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 22* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 23* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 24* 25*/ 26#ifndef _topazhp_cmdump_h 27#define _topazhp_cmdump_h 28 29#include <stdlib.h> 30#include <stdio.h> 31#include <string.h> 32#include <unistd.h> /* for libc5 */ 33 34#ifdef ANDROID 35#define outl(...) 36#define outw(...) 37#define inl(...) 0 38#define inw(...) 0 39#else 40#include <sys/io.h> /* for glibc */ 41#endif 42 43#define MIN(a,b) ((a)>(b)?(b):(a)) 44 45struct RegisterInfomation { 46 char *name; 47 int offset; 48}; 49 50#define ui32TopazMulticoreRegId 1 51 52 53 54#define PCI_DEVICE_ID_CFG 0x02 /* 16 bits */ 55#define PCI_BASE_ADDRESS_0 0x10 /* 32 bits */ 56#define PCI_BASE_ADDRESS_1 0x14 /* 32 bits [htype 0,1 only] */ 57#define PCI_BASE_ADDRESS_2 0x18 /* 32 bits [htype 0 only] */ 58#define PCI_BASE_ADDRESS_3 0x1c /* 32 bits */ 59#define CONFIG_CMD(bus,device_fn,where) \ 60 (0x80000000|((bus&0xff) << 16)|((device_fn&0xff) << 8)|((where&0xff) & ~3)) 61 62static inline unsigned long pci_get_long(int bus,int device_fn, int where) 63{ 64 outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); 65 return inl(0xCFC); 66} 67 68static inline int pci_set_long(int bus,int device_fn, int where,unsigned long value) 69{ 70 outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); 71 outl(value,0xCFC); 72 return 0; 73} 74 75static inline int pci_get_short(int bus,int device_fn, int where) 76{ 77 outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); 78 return inw(0xCFC + (where&2)); 79} 80 81 82static inline int pci_set_short(int bus,int device_fn, int where,unsigned short value) 83{ 84 outl(CONFIG_CMD(bus,device_fn,where), 0xCF8); 85 outw(value,0xCFC + (where&2)); 86 return 0; 87} 88 89#define REG_OFFSET_TOPAZ_MULTICORE 0x00000000 90#define REG_OFFSET_TOPAZ_DMAC 0x00000400 91#define REG_OFFSET_TOPAZ_MTX 0x00000800 92 93#define REGNUM_TOPAZ_CR_MMU_DIR_LIST_BASE_ADDR 0x0030 94 95#ifndef MV_OFFSET_IN_TABLE 96#define MV_OFFSET_IN_TABLE(BDistance, Position) ((BDistance) * MV_ROW_STRIDE + (Position) * sizeof(IMG_MV_SETTINGS)) 97#endif 98 99#define MULTICORE_READ32(offset, pointer) \ 100 do { \ 101 *(pointer) = *((unsigned long *)((unsigned char *)(linear_mmio_topaz) \ 102 + REG_OFFSET_TOPAZ_MULTICORE + offset)); \ 103 } while (0) 104 105int topazhp_dump_command(unsigned int comm_dword[]); 106int tng_command_parameter_dump(int cmdid, void *virt_addr); 107 108#endif 109