1210284Sjmallett/***********************license start*************** 2232812Sjmallett * Copyright (c) 2003-2010 Cavium Inc. (support@cavium.com). All rights 3215990Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6215990Sjmallett * Redistribution and use in source and binary forms, with or without 7215990Sjmallett * modification, are permitted provided that the following conditions are 8215990Sjmallett * met: 9210284Sjmallett * 10215990Sjmallett * * Redistributions of source code must retain the above copyright 11215990Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13215990Sjmallett * * Redistributions in binary form must reproduce the above 14215990Sjmallett * copyright notice, this list of conditions and the following 15215990Sjmallett * disclaimer in the documentation and/or other materials provided 16215990Sjmallett * with the distribution. 17215990Sjmallett 18232812Sjmallett * * Neither the name of Cavium Inc. nor the names of 19215990Sjmallett * its contributors may be used to endorse or promote products 20215990Sjmallett * derived from this software without specific prior written 21215990Sjmallett * permission. 22215990Sjmallett 23215990Sjmallett * This Software, including technical data, may be subject to U.S. export control 24215990Sjmallett * laws, including the U.S. Export Administration Act and its associated 25215990Sjmallett * regulations, and may be subject to export or import regulations in other 26215990Sjmallett * countries. 27215990Sjmallett 28215990Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 29232812Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR 30215990Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO 31215990Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR 32215990Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM 33215990Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, 34215990Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF 35215990Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR 36215990Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR 37215990Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 38210284Sjmallett ***********************license end**************************************/ 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42210284Sjmallett 43210284Sjmallett 44210284Sjmallett 45215990Sjmallett 46210284Sjmallett/** 47210284Sjmallett * @file 48210284Sjmallett * 49210284Sjmallett * This file is resposible for including all system dependent 50210284Sjmallett * headers for the cvmx-* files. 51210284Sjmallett * 52232812Sjmallett * <hr>$Revision: 70030 $<hr> 53210284Sjmallett*/ 54210284Sjmallett 55210284Sjmallett#ifndef __CVMX_PLATFORM_H__ 56210284Sjmallett#define __CVMX_PLATFORM_H__ 57210284Sjmallett 58210284Sjmallett#include "cvmx-abi.h" 59210284Sjmallett 60210284Sjmallett#ifdef __cplusplus 61210284Sjmallett#define EXTERN_ASM extern "C" 62210284Sjmallett#else 63210284Sjmallett#define EXTERN_ASM extern 64210284Sjmallett#endif 65210284Sjmallett 66210284Sjmallett/* This file defines macros for use in determining the current 67210284Sjmallett building environment. It defines a single CVMX_BUILD_FOR_* 68210284Sjmallett macro representing the target of the build. The current 69210284Sjmallett possibilities are: 70210284Sjmallett CVMX_BUILD_FOR_UBOOT 71210284Sjmallett CVMX_BUILD_FOR_LINUX_KERNEL 72210284Sjmallett CVMX_BUILD_FOR_LINUX_USER 73210284Sjmallett CVMX_BUILD_FOR_LINUX_HOST 74210284Sjmallett CVMX_BUILD_FOR_VXWORKS 75210284Sjmallett CVMX_BUILD_FOR_STANDALONE */ 76210284Sjmallett#if defined(__U_BOOT__) 77210284Sjmallett /* We are being used inside of Uboot */ 78210284Sjmallett #define CVMX_BUILD_FOR_UBOOT 79210284Sjmallett#elif defined(__linux__) 80210284Sjmallett #if defined(__KERNEL__) 81210284Sjmallett /* We are in the Linux kernel on Octeon */ 82210284Sjmallett #define CVMX_BUILD_FOR_LINUX_KERNEL 83210284Sjmallett #elif !defined(__mips__) 84210284Sjmallett /* We are being used under Linux but not on Octeon. Assume 85210284Sjmallett we are on a Linux host with an Octeon target over PCI/PCIe */ 86210284Sjmallett #ifndef CVMX_BUILD_FOR_LINUX_HOST 87210284Sjmallett #define CVMX_BUILD_FOR_LINUX_HOST 88210284Sjmallett #endif 89210284Sjmallett #else 90210284Sjmallett #ifdef CVMX_BUILD_FOR_LINUX_HOST 91210284Sjmallett /* This is a manual special case. The host PCI utilities can 92210284Sjmallett be configured to run on Octeon. In this case it is impossible 93210284Sjmallett to tell the difference between the normal userspace setup 94210284Sjmallett and using cvmx_read/write_csr over the PCI bus. The host 95210284Sjmallett utilites force this define to fix this */ 96210284Sjmallett #else 97210284Sjmallett /* We are in the Linux userspace on Octeon */ 98210284Sjmallett #define CVMX_BUILD_FOR_LINUX_USER 99210284Sjmallett #endif 100210284Sjmallett #endif 101210284Sjmallett#elif defined(_WRS_KERNEL) || defined(VXWORKS_USER_MAPPINGS) 102210284Sjmallett /* We are in VxWorks on Octeon */ 103210284Sjmallett #define CVMX_BUILD_FOR_VXWORKS 104210284Sjmallett#elif defined(_OCTEON_TOOLCHAIN_RUNTIME) 105210284Sjmallett /* To build the simple exec toolchain runtime (newlib) library. We 106210284Sjmallett should only use features available on all Octeon models. */ 107210284Sjmallett #define CVMX_BUILD_FOR_TOOLCHAIN 108210311Sjmallett#elif defined(__FreeBSD__) && defined(_KERNEL) 109215990Sjmallett #define CVMX_BUILD_FOR_FREEBSD_KERNEL 110210284Sjmallett#else 111210284Sjmallett /* We are building a simple exec standalone image for Octeon */ 112210284Sjmallett #define CVMX_BUILD_FOR_STANDALONE 113210284Sjmallett#endif 114210284Sjmallett 115210284Sjmallett 116210284Sjmallett/* To have a global variable be shared among all cores, 117210284Sjmallett * declare with the CVMX_SHARED attribute. Ex: 118210284Sjmallett * CVMX_SHARED int myglobal; 119210284Sjmallett * This will cause the variable to be placed in a special 120210284Sjmallett * section that the loader will map as shared for all cores 121210284Sjmallett * This is for data structures use by software ONLY, 122210284Sjmallett * as it is not 1-1 VA-PA mapped. 123210284Sjmallett */ 124215990Sjmallett#if defined(CVMX_BUILD_FOR_FREEBSD_KERNEL) 125210311Sjmallett#define CVMX_SHARED 126210311Sjmallett#else 127215990Sjmallett#ifndef CVMX_BUILD_FOR_LINUX_HOST 128210284Sjmallett#define CVMX_SHARED __attribute__ ((cvmx_shared)) 129215990Sjmallett#else 130215990Sjmallett#define CVMX_SHARED 131210311Sjmallett#endif 132215990Sjmallett#endif 133210284Sjmallett 134210284Sjmallett#if defined(CVMX_BUILD_FOR_UBOOT) 135210284Sjmallett 136210284Sjmallett #include <common.h> 137210284Sjmallett #include "cvmx-sysinfo.h" 138210284Sjmallett 139210284Sjmallett#elif defined(CVMX_BUILD_FOR_LINUX_KERNEL) 140210284Sjmallett 141210284Sjmallett #include <linux/kernel.h> 142210284Sjmallett #include <linux/string.h> 143210284Sjmallett #include <linux/types.h> 144210284Sjmallett #include <stdarg.h> 145210284Sjmallett 146210284Sjmallett#elif defined(CVMX_BUILD_FOR_LINUX_USER) 147210284Sjmallett 148210284Sjmallett #include <stddef.h> 149210284Sjmallett #include <stdint.h> 150210284Sjmallett #include <stdio.h> 151210284Sjmallett #include <stdlib.h> 152210284Sjmallett #include <stdarg.h> 153210284Sjmallett #include <string.h> 154210284Sjmallett #include <assert.h> 155210284Sjmallett #include <fcntl.h> 156210284Sjmallett #include <sys/mman.h> 157210284Sjmallett #include <unistd.h> 158215990Sjmallett #include <errno.h> 159215990Sjmallett #include <sys/sysmips.h> 160215990Sjmallett #define MIPS_CAVIUM_XKPHYS_READ 2010 /* XKPHYS */ 161215990Sjmallett #define MIPS_CAVIUM_XKPHYS_WRITE 2011 /* XKPHYS */ 162210284Sjmallett 163215990Sjmallett/* Enable access to XKPHYS segments. Warning message is printed in case of 164215990Sjmallett error. If warn_count is set, the warning message is not displayed. */ 165215990Sjmallettstatic inline void cvmx_linux_enable_xkphys_access(int32_t warn_count) 166215990Sjmallett{ 167215990Sjmallett int ret; 168215990Sjmallett ret = sysmips(MIPS_CAVIUM_XKPHYS_WRITE, getpid(), 3, 0); 169215990Sjmallett if (ret != 0 && !warn_count) { 170215990Sjmallett switch(errno) { 171215990Sjmallett case EINVAL: 172215990Sjmallett perror("sysmips(MIPS_CAVIUM_XKPHYS_WRITE) failed.\n" 173215990Sjmallett " Did you configure your kernel with both:\n" 174215990Sjmallett " CONFIG_CAVIUM_OCTEON_USER_MEM_PER_PROCESS *and*\n" 175215990Sjmallett " CONFIG_CAVIUM_OCTEON_USER_IO_PER_PROCESS?"); 176215990Sjmallett break; 177215990Sjmallett case EPERM: 178215990Sjmallett perror("sysmips(MIPS_CAVIUM_XKPHYS_WRITE) failed.\n" 179215990Sjmallett " Are you running as root?"); 180215990Sjmallett break; 181215990Sjmallett default: 182215990Sjmallett perror("sysmips(MIPS_CAVIUM_XKPHYS_WRITE) failed"); 183215990Sjmallett break; 184215990Sjmallett } 185215990Sjmallett } 186215990Sjmallett} 187215990Sjmallett 188210284Sjmallett#elif defined(CVMX_BUILD_FOR_LINUX_HOST) 189210284Sjmallett 190210284Sjmallett #include <stddef.h> 191210284Sjmallett #include <stdint.h> 192210284Sjmallett #include <stdio.h> 193210284Sjmallett #include <stdlib.h> 194210284Sjmallett #include <stdarg.h> 195210284Sjmallett #include <string.h> 196210284Sjmallett #include <assert.h> 197210284Sjmallett #include <fcntl.h> 198210284Sjmallett #include <sys/mman.h> 199210284Sjmallett #include <unistd.h> 200210284Sjmallett 201210284Sjmallett#elif defined(CVMX_BUILD_FOR_VXWORKS) 202210284Sjmallett 203210284Sjmallett #include <stdint.h> 204210284Sjmallett #include <stdio.h> 205210284Sjmallett #include <stdlib.h> 206210284Sjmallett #include <stdarg.h> 207210284Sjmallett #include <string.h> 208210284Sjmallett #include <assert.h> 209210284Sjmallett 210210284Sjmallett#elif defined(CVMX_BUILD_FOR_STANDALONE) 211210284Sjmallett 212210284Sjmallett #include <stddef.h> 213210284Sjmallett #include <stdint.h> 214210284Sjmallett #include <stdio.h> 215210284Sjmallett #include <stdlib.h> 216210284Sjmallett #include <stdarg.h> 217210284Sjmallett #include <string.h> 218210284Sjmallett #include <assert.h> 219210284Sjmallett 220210284Sjmallett#elif defined(CVMX_BUILD_FOR_TOOLCHAIN) 221210284Sjmallett 222232812Sjmallett #ifndef __ASSEMBLY__ 223210284Sjmallett #include <stddef.h> 224210284Sjmallett #include <stdint.h> 225210284Sjmallett #include <stdio.h> 226210284Sjmallett #include <stdlib.h> 227210284Sjmallett #include <stdarg.h> 228210284Sjmallett #include <string.h> 229210284Sjmallett #include <assert.h> 230232812Sjmallett #endif 231232812Sjmallett #include "rename-cvmx.h" 232210284Sjmallett 233215990Sjmallett#elif defined(CVMX_BUILD_FOR_FREEBSD_KERNEL) 234210311Sjmallett 235210311Sjmallett #include <mips/cavium/cvmx_config.h> 236210311Sjmallett 237210284Sjmallett#else 238210284Sjmallett 239210284Sjmallett #error Unexpected CVMX_BUILD_FOR_* macro 240210284Sjmallett 241210284Sjmallett#endif 242210284Sjmallett 243210284Sjmallett#endif /* __CVMX_PLATFORM_H__ */ 244