1 /* 2 * Copyright (c) 2006 Advanced Micro Devices, Inc. 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice shall be included in 12 * all copies or substantial portions of the Software. 13 * 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 19 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20 * DEALINGS IN THE SOFTWARE. 21 * 22 * Neither the name of the Advanced Micro Devices, Inc. nor the names of its 23 * contributors may be used to endorse or promote products derived from this 24 * software without specific prior written permission. 25 */ 26 27 /* 28 * Base include file for the Cimarron library. This file should be modified 29 * and included in any Cimarron-based project. 30 */ 31 32 #ifdef HAVE_CONFIG_H 33 #include "config.h" 34 #endif 35 36 /*----------------------------------------------------------------------*/ 37 /* MODULE SETTINGS */ 38 /* The following #defines affect which modules are included in the */ 39 /* project. */ 40 /*----------------------------------------------------------------------*/ 41 42 #define CIMARRON_INCLUDE_GP 1 43 #define CIMARRON_INCLUDE_VG 1 44 #define CIMARRON_INCLUDE_VIP 1 45 #define CIMARRON_INCLUDE_VOP 1 46 #define CIMARRON_INCLUDE_VIDEO 1 47 #define CIMARRON_INCLUDE_INIT 1 48 49 #define CIMARRON_INCLUDE_VG_READ_ROUTINES 1 50 #define CIMARRON_INCLUDE_DF_READ_ROUTINES 1 51 #define CIMARRON_INCLUDE_VIP_READ_ROUTINES 1 52 #define CIMARRON_INCLUDE_VOP_READ_ROUTINES 1 53 54 /*----------------------------------------------------------------------*/ 55 /* HARDWARE ACCESS SETTINGS */ 56 /* The following #defines affect how the Cimarron macros access the */ 57 /* hardware. The hardware access macros are broken up into groups. */ 58 /* Each group includes an enabling #define as well as several #define */ 59 /* options that modify the macro configuration that is included. */ 60 /* If the enabling define is deleted or all options are set to 0, the */ 61 /* corresponding macros must be implemented by the user. The */ 62 /* combinations are explained as follows: */ 63 /* must be manually defined by the user. This allows a user to use the */ 64 /* cim_defs.h file for only those macros that suit the needs of his/her */ 65 /* project. For example, a user may need custom implementations of the */ 66 /* I/O and MSR macros, but may still want to use the default macros to */ 67 /* read and write hardware registers. The combinations are explained as */ 68 /* follows: */ 69 /* */ 70 /* Register Group: */ 71 /* Disabling define: */ 72 /* CIMARRON_EXCLUDE_REGISTER_ACCESS_MACROS */ 73 /* Define this setting to exclude the register access macros. */ 74 /* This setting is the inverse of the other group settings in */ 75 /* that these macros are included by default. This allows the */ 76 /* cim_defs.h file to be included outside of cimarron.c for */ 77 /* basic operations. */ 78 /* */ 79 /* Memory Group: */ 80 /* Enabling define: */ 81 /* CIMARRON_INCLUDE_STRING_MACROS */ 82 /* Options: */ 83 /* CIMARRON_OPTIMIZE_ASSEMBLY */ 84 /* Set to 1 to allow the use of inline assembly when writing */ 85 /* large chunks of data to memory. Essentially, this allows */ 86 /* a rep movsd in place of a slower C for-loop. */ 87 /* CIMARRON_OPTIMIZE_FORLOOP */ 88 /* Define for C only data writes. */ 89 /* */ 90 /* MSR Group: */ 91 /* Enabling define: */ 92 /* CIMARRON_INCLUDE_MSR_MACROS */ 93 /* Options: */ 94 /* CIMARRON_MSR_DIRECT_ASM */ 95 /* Set to 1 to allow the use of the rdmsr and wrmsr opcodes in */ 96 /* inline assembly. */ 97 /* CIMARRON_MSR_VSA_IO */ 98 /* Set to 1 to access MSRs using a VSAII virtual register. */ 99 /* CIMARRON_MSR_KERNEL_ROUTINE */ 100 /* Set to 1 to access MSRs using a wrapper routine in the */ 101 /* Linux kernel. */ 102 /* */ 103 /* IO Group: */ 104 /* Enabling define: */ 105 /* CIMARRON_INCLUDE_IO_MACROS */ 106 /* Options: */ 107 /* CIMARRON_IO_DIRECT_ACCESS */ 108 /* Set to 1 to perform IO accesses using inline assembly. */ 109 /* CIMARRON_IO_ABSTRACTED_ASM */ 110 /* Set to 1 to perform IO using abstracted IO in Linux. */ 111 /* */ 112 /* Custom Group: */ 113 /* Disabling define: */ 114 /* CIMARRON_EXCLUDE_CUSTOM_MACROS */ 115 /* By default, the custom macros (the macros used by */ 116 /* gp_custom_convert_blt) are mapped to the normal command */ 117 /* string macros. Setting this to 1 allows the user to */ 118 /* create a custom implementation. */ 119 /*----------------------------------------------------------------------*/ 120 121 /* UNCOMMENT THE FOLLOWING LINE TO EXCLUDE BASIC REGISTER ACCESS MACROS */ 122 123 /* #define CIMARRON_EXCLUDE_REGISTER_ACCESS_MACROS */ 124 125 #define CIMARRON_INCLUDE_STRING_MACROS 126 #define CIMARRON_OPTIMIZE_ASSEMBLY 0 127 #define CIMARRON_OPTIMIZE_FORLOOP 0 128 #define CIMARRON_OPTIMIZE_ABSTRACTED_ASM 1 129 130 #define CIMARRON_INCLUDE_MSR_MACROS 131 #define CIMARRON_MSR_DIRECT_ASM 0 132 #define CIMARRON_MSR_VSA_IO 0 133 #define CIMARRON_MSR_ABSTRACTED_ASM 0 134 #define CIMARRON_MSR_KERNEL_ROUTINE 0 135 #define CIMARRON_MSR_HOOKS 1 136 137 #define CIMARRON_INCLUDE_IO_MACROS 138 #define CIMARRON_IO_DIRECT_ACCESS 0 139 #define CIMARRON_IO_ABSTRACTED_ASM 1 140 141 /* 142 * UNCOMMENT THE FOLLOWING LINE TO IMPLEMENT CUSTOM MACROS FOR 143 * GP_CUSTOM_CONVERT_BLT 144 */ 145 146 /* #define CIMARRON_EXCLUDE_CUSTOM_MACROS */ 147 148 /*----------------------------------------------------------------------*/ 149 /* MODULE VARIABLES */ 150 /* The following #defines affect how global variables in each Cimarron */ 151 /* module are defined. These variables can be made static (to prevent */ 152 /* naming conflicts) or they can be defined without the static keyword */ 153 /* (to allow extern references). */ 154 /*----------------------------------------------------------------------*/ 155 156 #if 1 157 #define CIMARRON_STATIC static 158 #else 159 #define CIMARRON_STATIC 160 #endif 161 162 /*----------------------------------------------------------------------*/ 163 /* CIMARRON GLOBAL VARIABLES */ 164 /* These globals are used by the hardware access macros. They must be */ 165 /* initialized by the application to point to the memory-mapped */ 166 /* registers of their respective blocks. */ 167 /*----------------------------------------------------------------------*/ 168 169 unsigned char *cim_gp_ptr = (unsigned char *) 0; 170 unsigned char *cim_fb_ptr = (unsigned char *) 0; 171 unsigned char *cim_cmd_base_ptr = (unsigned char *) 0; 172 unsigned char *cim_cmd_ptr = (unsigned char *) 0; 173 unsigned char *cim_vid_ptr = (unsigned char *) 0; 174 unsigned char *cim_vip_ptr = (unsigned char *) 0; 175 unsigned char *cim_vg_ptr = (unsigned char *) 0; 176 177 /* Define hooks for reading and writing MSRs - this is a major hack 178 * to share the MSR code with the GX code */ 179 180 #ifdef CIMARRON_MSR_HOOKS 181 void (*cim_rdmsr) (unsigned long, unsigned long *, unsigned long *); 182 void (*cim_wrmsr) (unsigned long, unsigned long, unsigned long); 183 #endif 184 185 /*----------------------------------------------------------------------*/ 186 /* INCLUDE RELEVANT CIMARRON HEADERS */ 187 /*----------------------------------------------------------------------*/ 188 189 /* HARDWARE REGISTER DEFINITIONS */ 190 191 #include "cim_regs.h" 192 193 /* ROUTINE DEFINITIONS */ 194 /* All routines have a prototype, even those that are not included */ 195 /* via #ifdefs. This prevents the user from having to include the */ 196 /* correct #defines anywhere he/she wants to call a Cimarron routine. */ 197 198 #include "cim_rtns.h" 199 200 /* HARDWARE ACCESS MACROS */ 201 202 #include "cim_defs.h" 203 204 /*----------------------------------------------------------------------*/ 205 /* CIMARRON MODULES */ 206 /* Modules and sub-modules are included based on user settings. Note */ 207 /* that excluding one or more modules may result in functionality */ 208 /* holes. */ 209 /*----------------------------------------------------------------------*/ 210 211 /* GRAPHICS PROCESSOR */ 212 213 #if CIMARRON_INCLUDE_GP 214 #include "cim_gp.c" 215 #endif 216 217 /* VIDEO GENERATOR */ 218 219 #if CIMARRON_INCLUDE_VG 220 #include "cim_modes.c" 221 #include "cim_vg.c" 222 #endif 223 224 /* DISPLAY FILTER */ 225 226 #if CIMARRON_INCLUDE_VIDEO 227 #include "cim_filter.c" 228 #include "cim_df.c" 229 #endif 230 231 /* INITIALIZATION AND DETECTION */ 232 233 #if CIMARRON_INCLUDE_INIT 234 #include "cim_init.c" 235 #endif 236 237 /* VIP SUPPORT */ 238 239 #if CIMARRON_INCLUDE_VIP 240 #include "cim_vip.c" 241 #endif 242 243 /* VOP SUPPORT */ 244 245 #if CIMARRON_INCLUDE_VOP 246 #include "cim_vop.c" 247 #endif 248 249 /* MSR ACCESS */ 250 /* This module is used to access machine-specific registers. */ 251 /* It cannot be excluded from a project. */ 252 253 #include "cim_msr.c" 254