1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_DDI_ISA_H 27 #define _SYS_DDI_ISA_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #include <sys/isa_defs.h> 32 #include <sys/dditypes.h> 33 #include <sys/ndifm.h> 34 #ifdef _KERNEL 35 #include <sys/ddi_obsolete.h> 36 #endif 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 #ifdef _KERNEL 43 44 /* 45 * These are the data access functions which the platform 46 * can choose to define as functions or macro's. 47 */ 48 49 /* 50 * DDI interfaces defined as macro's 51 */ 52 53 /* 54 * DDI interfaces defined as functions 55 */ 56 57 #ifdef __STDC__ 58 59 /* 60 * ahi_acc_attr flags 61 */ 62 #define DDI_ACCATTR_CONFIG_SPACE 0x1 63 #define DDI_ACCATTR_IO_SPACE 0x2 64 #define DDI_ACCATTR_CPU_VADDR 0x4 65 #define DDI_ACCATTR_DIRECT 0x8 66 67 typedef struct ddi_acc_impl { 68 ddi_acc_hdl_t ahi_common; 69 uint_t ahi_acc_attr; 70 ulong_t ahi_io_port_base; 71 72 uint8_t 73 (*ahi_get8)(struct ddi_acc_impl *handle, uint8_t *addr); 74 uint16_t 75 (*ahi_get16)(struct ddi_acc_impl *handle, uint16_t *addr); 76 uint32_t 77 (*ahi_get32)(struct ddi_acc_impl *handle, uint32_t *addr); 78 uint64_t 79 (*ahi_get64)(struct ddi_acc_impl *handle, uint64_t *addr); 80 81 void (*ahi_put8)(struct ddi_acc_impl *handle, uint8_t *addr, 82 uint8_t value); 83 void (*ahi_put16)(struct ddi_acc_impl *handle, uint16_t *addr, 84 uint16_t value); 85 void (*ahi_put32)(struct ddi_acc_impl *handle, uint32_t *addr, 86 uint32_t value); 87 void (*ahi_put64)(struct ddi_acc_impl *handle, uint64_t *addr, 88 uint64_t value); 89 90 void (*ahi_rep_get8)(struct ddi_acc_impl *handle, 91 uint8_t *host_addr, uint8_t *dev_addr, 92 size_t repcount, uint_t flags); 93 void (*ahi_rep_get16)(struct ddi_acc_impl *handle, 94 uint16_t *host_addr, uint16_t *dev_addr, 95 size_t repcount, uint_t flags); 96 void (*ahi_rep_get32)(struct ddi_acc_impl *handle, 97 uint32_t *host_addr, uint32_t *dev_addr, 98 size_t repcount, uint_t flags); 99 void (*ahi_rep_get64)(struct ddi_acc_impl *handle, 100 uint64_t *host_addr, uint64_t *dev_addr, 101 size_t repcount, uint_t flags); 102 103 void (*ahi_rep_put8)(struct ddi_acc_impl *handle, 104 uint8_t *host_addr, uint8_t *dev_addr, 105 size_t repcount, uint_t flags); 106 void (*ahi_rep_put16)(struct ddi_acc_impl *handle, 107 uint16_t *host_addr, uint16_t *dev_addr, 108 size_t repcount, uint_t flags); 109 void (*ahi_rep_put32)(struct ddi_acc_impl *handle, 110 uint32_t *host_addr, uint32_t *dev_addr, 111 size_t repcount, uint_t flags); 112 void (*ahi_rep_put64)(struct ddi_acc_impl *handle, 113 uint64_t *host_addr, uint64_t *dev_addr, 114 size_t repcount, uint_t flags); 115 116 int (*ahi_fault_check)(struct ddi_acc_impl *handle); 117 void (*ahi_fault_notify)(struct ddi_acc_impl *handle); 118 uint32_t ahi_fault; 119 ndi_err_t *ahi_err; 120 } ddi_acc_impl_t; 121 122 123 /* 124 * Input functions to memory mapped IO 125 */ 126 uint8_t 127 i_ddi_vaddr_get8(ddi_acc_impl_t *hdlp, uint8_t *addr); 128 129 uint16_t 130 i_ddi_vaddr_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 131 132 uint32_t 133 i_ddi_vaddr_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 134 135 uint64_t 136 i_ddi_vaddr_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 137 138 uint16_t 139 i_ddi_vaddr_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 140 141 uint32_t 142 i_ddi_vaddr_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 143 144 uint64_t 145 i_ddi_vaddr_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 146 147 /* 148 * Output functions to memory mapped IO 149 */ 150 void 151 i_ddi_vaddr_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value); 152 153 void 154 i_ddi_vaddr_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 155 156 void 157 i_ddi_vaddr_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 158 159 void 160 i_ddi_vaddr_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 161 162 void 163 i_ddi_vaddr_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 164 165 void 166 i_ddi_vaddr_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 167 168 void 169 i_ddi_vaddr_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 170 171 /* 172 * Repeated input functions for memory mapped IO 173 */ 174 void 175 i_ddi_vaddr_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 176 uint8_t *dev_addr, size_t repcount, uint_t flags); 177 178 void 179 i_ddi_vaddr_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 180 uint16_t *dev_addr, size_t repcount, uint_t flags); 181 182 void 183 i_ddi_vaddr_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 184 uint32_t *dev_addr, size_t repcount, uint_t flags); 185 186 void 187 i_ddi_vaddr_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 188 uint64_t *dev_addr, size_t repcount, uint_t flags); 189 190 void 191 i_ddi_vaddr_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 192 uint16_t *dev_addr, size_t repcount, uint_t flags); 193 194 void 195 i_ddi_vaddr_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 196 uint32_t *dev_addr, size_t repcount, uint_t flags); 197 198 void 199 i_ddi_vaddr_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 200 uint64_t *dev_addr, size_t repcount, uint_t flags); 201 202 /* 203 * Repeated output functions for memory mapped IO 204 */ 205 void 206 i_ddi_vaddr_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 207 uint8_t *dev_addr, size_t repcount, uint_t flags); 208 209 void 210 i_ddi_vaddr_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 211 uint16_t *dev_addr, size_t repcount, uint_t flags); 212 213 void 214 i_ddi_vaddr_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 215 uint32_t *dev_addr, size_t repcount, uint_t flags); 216 217 void 218 i_ddi_vaddr_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, 219 uint64_t *dev_addr, size_t repcount, uint_t flags); 220 221 void 222 i_ddi_vaddr_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 223 uint16_t *dev_addr, size_t repcount, uint_t flags); 224 225 void 226 i_ddi_vaddr_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 227 uint32_t *dev_addr, size_t repcount, uint_t flags); 228 229 void 230 i_ddi_vaddr_swap_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, 231 uint64_t *dev_addr, size_t repcount, uint_t flags); 232 233 /* 234 * Input functions to IO space 235 */ 236 uint8_t 237 i_ddi_io_get8(ddi_acc_impl_t *hdlp, uint8_t *addr); 238 239 uint16_t 240 i_ddi_io_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 241 242 uint32_t 243 i_ddi_io_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 244 245 uint64_t 246 i_ddi_io_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 247 248 uint16_t 249 i_ddi_io_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 250 251 uint32_t 252 i_ddi_io_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 253 254 /* 255 * Output functions to IO space 256 */ 257 void 258 i_ddi_io_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value); 259 260 void 261 i_ddi_io_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 262 263 void 264 i_ddi_io_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 265 266 void 267 i_ddi_io_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 268 269 void 270 i_ddi_io_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 271 272 void 273 i_ddi_io_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 274 275 /* 276 * Repeated input functions for IO space 277 */ 278 void 279 i_ddi_io_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, uint8_t *dev_addr, 280 size_t repcount, uint_t flags); 281 282 void 283 i_ddi_io_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 284 uint16_t *dev_addr, size_t repcount, uint_t flags); 285 286 void 287 i_ddi_io_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 288 uint32_t *dev_addr, size_t repcount, uint_t flags); 289 290 void 291 i_ddi_io_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 292 uint64_t *dev_addr, size_t repcount, uint_t flags); 293 294 void 295 i_ddi_io_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 296 uint16_t *dev_addr, size_t repcount, uint_t flags); 297 298 void 299 i_ddi_io_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 300 uint32_t *dev_addr, size_t repcount, uint_t flags); 301 302 /* 303 * Repeated output functions for IO space 304 */ 305 void 306 i_ddi_io_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, uint8_t *dev_addr, 307 size_t repcount, uint_t flags); 308 309 void 310 i_ddi_io_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 311 uint16_t *dev_addr, size_t repcount, uint_t flags); 312 313 void 314 i_ddi_io_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, uint32_t *dev_addr, 315 size_t repcount, uint_t flags); 316 317 void 318 i_ddi_io_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, uint64_t *dev_addr, 319 size_t repcount, uint_t flags); 320 void 321 i_ddi_io_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 322 uint16_t *dev_addr, size_t repcount, uint_t flags); 323 324 void 325 i_ddi_io_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 326 uint32_t *dev_addr, size_t repcount, uint_t flags); 327 328 /* 329 * Default fault-checking and notification functions 330 */ 331 int 332 i_ddi_acc_fault_check(ddi_acc_impl_t *hdlp); 333 334 void 335 i_ddi_acc_fault_notify(ddi_acc_impl_t *hdlp); 336 337 /* DDI Fault Services functions */ 338 void i_ddi_caut_get(size_t size, void *addr, void *val); 339 340 uint8_t i_ddi_caut_get8(ddi_acc_impl_t *hdlp, uint8_t *addr); 341 uint16_t i_ddi_caut_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 342 uint32_t i_ddi_caut_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 343 uint64_t i_ddi_caut_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 344 345 void i_ddi_caut_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value); 346 void i_ddi_caut_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 347 void i_ddi_caut_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 348 void i_ddi_caut_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 349 350 void i_ddi_caut_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 351 uint8_t *dev_addr, size_t repcount, uint_t flags); 352 void i_ddi_caut_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 353 uint16_t *dev_addr, size_t repcount, uint_t flags); 354 void i_ddi_caut_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 355 uint32_t *dev_addr, size_t repcount, uint_t flags); 356 void i_ddi_caut_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 357 uint64_t *dev_addr, size_t repcount, uint_t flags); 358 359 void i_ddi_caut_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 360 uint8_t *dev_addr, size_t repcount, uint_t flags); 361 void i_ddi_caut_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 362 uint16_t *dev_addr, size_t repcount, uint_t flags); 363 void i_ddi_caut_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 364 uint32_t *dev_addr, size_t repcount, uint_t flags); 365 void i_ddi_caut_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, 366 uint64_t *dev_addr, size_t repcount, uint_t flags); 367 368 boolean_t i_ddi_copybuf_required(ddi_dma_attr_t *attrp); 369 size_t i_ddi_copybuf_size(); 370 uint32_t i_ddi_dma_max(dev_info_t *dip, ddi_dma_attr_t *attrp); 371 372 #endif /* __STDC__ */ 373 374 #endif /* _KERNEL */ 375 376 #ifdef __cplusplus 377 } 378 #endif 379 380 #endif /* _SYS_DDI_ISA_H */ 381