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 2005 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/ndifm.h> 33 #include <sys/dditypes.h> 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 #ifdef _KERNEL 40 41 /* 42 * These are the data access functions which the platform 43 * can choose to define as functions or macro's. 44 */ 45 46 /* 47 * DDI interfaces defined as macro's 48 */ 49 50 /* 51 * DDI interfaces defined as functions 52 */ 53 54 /* 55 * The implementation specific ddi access handle is the same for 56 * all sparc v7 platforms. 57 */ 58 59 typedef struct ddi_acc_impl { 60 ddi_acc_hdl_t ahi_common; 61 uint8_t 62 (*ahi_get8)(struct ddi_acc_impl *handle, uint8_t *addr); 63 uint16_t 64 (*ahi_get16)(struct ddi_acc_impl *handle, uint16_t *addr); 65 uint32_t 66 (*ahi_get32)(struct ddi_acc_impl *handle, uint32_t *addr); 67 uint64_t 68 (*ahi_get64)(struct ddi_acc_impl *handle, uint64_t *addr); 69 void (*ahi_put8)(struct ddi_acc_impl *handle, uint8_t *addr, 70 uint8_t value); 71 void (*ahi_put16)(struct ddi_acc_impl *handle, uint16_t *addr, 72 uint16_t value); 73 void (*ahi_put32)(struct ddi_acc_impl *handle, uint32_t *addr, 74 uint32_t value); 75 void (*ahi_put64)(struct ddi_acc_impl *handle, uint64_t *addr, 76 uint64_t value); 77 78 void (*ahi_rep_get8)(struct ddi_acc_impl *handle, 79 uint8_t *host_addr, uint8_t *dev_addr, 80 size_t repcount, uint_t flags); 81 void (*ahi_rep_get16)(struct ddi_acc_impl *handle, 82 uint16_t *host_addr, uint16_t *dev_addr, 83 size_t repcount, uint_t flags); 84 void (*ahi_rep_get32)(struct ddi_acc_impl *handle, 85 uint32_t *host_addr, uint32_t *dev_addr, 86 size_t repcount, uint_t flags); 87 void (*ahi_rep_get64)(struct ddi_acc_impl *handle, 88 uint64_t *host_addr, uint64_t *dev_addr, 89 size_t repcount, uint_t flags); 90 91 void (*ahi_rep_put8)(struct ddi_acc_impl *handle, 92 uint8_t *host_addr, uint8_t *dev_addr, 93 size_t repcount, uint_t flags); 94 void (*ahi_rep_put16)(struct ddi_acc_impl *handle, 95 uint16_t *host_addr, uint16_t *dev_addr, 96 size_t repcount, uint_t flags); 97 void (*ahi_rep_put32)(struct ddi_acc_impl *handle, 98 uint32_t *host_addr, uint32_t *dev_addr, 99 size_t repcount, uint_t flags); 100 void (*ahi_rep_put64)(struct ddi_acc_impl *handle, 101 uint64_t *host_addr, uint64_t *dev_addr, 102 size_t repcount, uint_t flags); 103 104 int (*ahi_fault_check)(struct ddi_acc_impl *handle); 105 void (*ahi_fault_notify)(struct ddi_acc_impl *handle); 106 uint32_t ahi_fault; 107 ndi_err_t *ahi_err; /* Access error data */ 108 } ddi_acc_impl_t; 109 110 /* 111 * Input functions to memory mapped IO 112 */ 113 uint8_t 114 i_ddi_get8(ddi_acc_impl_t *hdlp, uint8_t *addr); 115 116 uint16_t 117 i_ddi_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 118 119 uint32_t 120 i_ddi_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 121 122 uint64_t 123 i_ddi_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 124 125 uint16_t 126 i_ddi_swap_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 127 128 uint32_t 129 i_ddi_swap_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 130 131 uint64_t 132 i_ddi_swap_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 133 134 /* 135 * Output functions to memory mapped IO 136 */ 137 void 138 i_ddi_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value); 139 140 void 141 i_ddi_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 142 143 void 144 i_ddi_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 145 146 void 147 i_ddi_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 148 149 void 150 i_ddi_swap_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 151 152 void 153 i_ddi_swap_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 154 155 void 156 i_ddi_swap_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 157 158 /* 159 * Repeated input functions for memory mapped IO 160 */ 161 void 162 i_ddi_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, uint8_t *dev_addr, 163 size_t repcount, uint_t flags); 164 165 void 166 i_ddi_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, uint16_t *dev_addr, 167 size_t repcount, uint_t flags); 168 169 void 170 i_ddi_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, uint32_t *dev_addr, 171 size_t repcount, uint_t flags); 172 173 void 174 i_ddi_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, uint64_t *dev_addr, 175 size_t repcount, uint_t flags); 176 177 void 178 i_ddi_swap_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 179 uint16_t *dev_addr, size_t repcount, uint_t flags); 180 181 void 182 i_ddi_swap_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 183 uint32_t *dev_addr, size_t repcount, uint_t flags); 184 185 void 186 i_ddi_swap_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 187 uint64_t *dev_addr, size_t repcount, uint_t flags); 188 189 /* 190 * Repeated output functions for memory mapped IO 191 */ 192 void 193 i_ddi_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, uint8_t *dev_addr, 194 size_t repcount, uint_t flags); 195 196 void 197 i_ddi_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, uint16_t *dev_addr, 198 size_t repcount, uint_t flags); 199 200 void 201 i_ddi_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, uint32_t *dev_addr, 202 size_t repcount, uint_t flags); 203 204 void 205 i_ddi_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, uint64_t *dev_addr, 206 size_t repcount, uint_t flags); 207 208 void 209 i_ddi_swap_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 210 uint16_t *dev_addr, size_t repcount, uint_t flags); 211 212 void 213 i_ddi_swap_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 214 uint32_t *dev_addr, size_t repcount, uint_t flags); 215 216 void 217 i_ddi_swap_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, 218 uint64_t *dev_addr, size_t repcount, uint_t flags); 219 220 /* 221 * Default fault-checking and notification functions 222 */ 223 int 224 i_ddi_acc_fault_check(ddi_acc_impl_t *hdlp); 225 226 void 227 i_ddi_acc_fault_notify(ddi_acc_impl_t *hdlp); 228 229 /* DDI Fault Services functions */ 230 231 void i_ddi_caut_get(size_t size, void *addr, void *val); 232 233 uint8_t i_ddi_prot_get8(ddi_acc_impl_t *hdlp, uint8_t *addr); 234 uint16_t i_ddi_prot_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 235 uint32_t i_ddi_prot_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 236 uint64_t i_ddi_prot_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 237 238 void i_ddi_prot_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value); 239 void i_ddi_prot_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 240 void i_ddi_prot_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 241 void i_ddi_prot_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 242 243 void i_ddi_prot_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 244 uint8_t *dev_addr, size_t repcount, uint_t flags); 245 void i_ddi_prot_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 246 uint16_t *dev_addr, size_t repcount, uint_t flags); 247 void i_ddi_prot_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 248 uint32_t *dev_addr, size_t repcount, uint_t flags); 249 void i_ddi_prot_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 250 uint64_t *dev_addr, size_t repcount, uint_t flags); 251 252 void i_ddi_prot_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 253 uint8_t *dev_addr, size_t repcount, uint_t flags); 254 void i_ddi_prot_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 255 uint16_t *dev_addr, size_t repcount, uint_t flags); 256 void i_ddi_prot_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 257 uint32_t *dev_addr, size_t repcount, uint_t flags); 258 void i_ddi_prot_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, 259 uint64_t *dev_addr, size_t repcount, uint_t flags); 260 261 uint8_t i_ddi_caut_get8(ddi_acc_impl_t *hdlp, uint8_t *addr); 262 uint16_t i_ddi_caut_get16(ddi_acc_impl_t *hdlp, uint16_t *addr); 263 uint32_t i_ddi_caut_get32(ddi_acc_impl_t *hdlp, uint32_t *addr); 264 uint64_t i_ddi_caut_get64(ddi_acc_impl_t *hdlp, uint64_t *addr); 265 266 void i_ddi_caut_put8(ddi_acc_impl_t *hdlp, uint8_t *addr, uint8_t value); 267 void i_ddi_caut_put16(ddi_acc_impl_t *hdlp, uint16_t *addr, uint16_t value); 268 void i_ddi_caut_put32(ddi_acc_impl_t *hdlp, uint32_t *addr, uint32_t value); 269 void i_ddi_caut_put64(ddi_acc_impl_t *hdlp, uint64_t *addr, uint64_t value); 270 271 void i_ddi_caut_rep_get8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 272 uint8_t *dev_addr, size_t repcount, uint_t flags); 273 void i_ddi_caut_rep_get16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 274 uint16_t *dev_addr, size_t repcount, uint_t flags); 275 void i_ddi_caut_rep_get32(ddi_acc_impl_t *hdlp, uint32_t *host_addr, 276 uint32_t *dev_addr, size_t repcount, uint_t flags); 277 void i_ddi_caut_rep_get64(ddi_acc_impl_t *hdlp, uint64_t *host_addr, 278 uint64_t *dev_addr, size_t repcount, uint_t flags); 279 280 void i_ddi_caut_rep_put8(ddi_acc_impl_t *hdlp, uint8_t *host_addr, 281 uint8_t *dev_addr, size_t repcount, uint_t flags); 282 void i_ddi_caut_rep_put16(ddi_acc_impl_t *hdlp, uint16_t *host_addr, 283 uint16_t *dev_addr, size_t repcount, uint_t flags); 284 void i_ddi_caut_rep_put32(ddi_acc_impl_t *hdl, uint32_t *host_addr, 285 uint32_t *dev_addr, size_t repcount, uint_t flags); 286 void i_ddi_caut_rep_put64(ddi_acc_impl_t *hdl, uint64_t *host_addr, 287 uint64_t *dev_addr, size_t repcount, uint_t flags); 288 289 #endif /* _KERNEL */ 290 291 #ifdef __cplusplus 292 } 293 #endif 294 295 #endif /* _SYS_DDI_ISA_H */ 296