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 45 struct 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 62 static 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 68 static 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 75 static 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 82 static 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 105 int topazhp_dump_command(unsigned int comm_dword[]); 106 int tng_command_parameter_dump(int cmdid, void *virt_addr); 107 108 #endif 109