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 /* 23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 24 * Use is subject to license terms. 25 */ 26 27 /* 28 * Hypervisor calls called by niu leaf driver. 29 */ 30 31 #include <sys/asm_linkage.h> 32 #include <sys/hypervisor_api.h> 33 #include <sys/nxge/nxge_impl.h> 34 35 #if defined(sun4v) 36 37 /* 38 * NIU HV API v1.0 definitions 39 */ 40 #define N2NIU_RX_LP_SET 0x142 41 #define N2NIU_RX_LP_GET 0x143 42 #define N2NIU_TX_LP_SET 0x144 43 #define N2NIU_TX_LP_GET 0x145 44 45 /* 46 * NIU HV API v1.1 definitions 47 */ 48 #define N2NIU_VR_ASSIGN 0x146 49 #define N2NIU_VR_UNASSIGN 0x147 50 #define N2NIU_VR_GETINFO 0x148 51 52 #define N2NIU_VR_RX_DMA_ASSIGN 0x149 53 #define N2NIU_VR_RX_DMA_UNASSIGN 0x14a 54 #define N2NIU_VR_TX_DMA_ASSIGN 0x14b 55 #define N2NIU_VR_TX_DMA_UNASSIGN 0x14c 56 57 #define N2NIU_VR_GET_RX_MAP 0x14d 58 #define N2NIU_VR_GET_TX_MAP 0x14e 59 60 #define N2NIU_VRRX_SET_INO 0x150 61 #define N2NIU_VRTX_SET_INO 0x151 62 63 #define N2NIU_VRRX_GET_INFO 0x152 64 #define N2NIU_VRTX_GET_INFO 0x153 65 66 #define N2NIU_VRRX_LP_SET 0x154 67 #define N2NIU_VRRX_LP_GET 0x155 68 #define N2NIU_VRTX_LP_SET 0x156 69 #define N2NIU_VRTX_LP_GET 0x157 70 71 #define N2NIU_VRRX_PARAM_GET 0x158 72 #define N2NIU_VRRX_PARAM_SET 0x159 73 74 #define N2NIU_VRTX_PARAM_GET 0x15a 75 #define N2NIU_VRTX_PARAM_SET 0x15b 76 77 /* 78 * The new set of HV APIs to provide the ability 79 * of a domain to manage multiple NIU resources at once to 80 * support the KT familty chip having up to 4 NIUs 81 * per system. The trap # will be the same as those defined 82 * before 2.0 83 */ 84 #define N2NIU_CFGH_RX_LP_SET 0x142 85 #define N2NIU_CFGH_TX_LP_SET 0x143 86 #define N2NIU_CFGH_RX_LP_GET 0x144 87 #define N2NIU_CFGH_TX_LP_GET 0x145 88 #define N2NIU_CFGH_VR_ASSIGN 0x146 89 90 /* 91 * hv_niu_rx_logical_page_conf(uint64_t chidx, uint64_t pgidx, 92 * uint64_t raddr, uint64_t size) 93 */ 94 ENTRY(hv_niu_rx_logical_page_conf) 95 mov N2NIU_RX_LP_CONF, %o5 96 ta FAST_TRAP 97 retl 98 nop 99 SET_SIZE(hv_niu_rx_logical_page_conf) 100 101 /* 102 * hv_niu_rx_logical_page_info(uint64_t chidx, uint64_t pgidx, 103 * uint64_t *raddr, uint64_t *size) 104 */ 105 ENTRY(hv_niu_rx_logical_page_info) 106 mov %o2, %g1 107 mov %o3, %g2 108 mov N2NIU_RX_LP_INFO, %o5 109 ta FAST_TRAP 110 stx %o1, [%g1] 111 retl 112 stx %o2, [%g2] 113 SET_SIZE(hv_niu_rx_logical_page_info) 114 115 /* 116 * hv_niu_tx_logical_page_conf(uint64_t chidx, uint64_t pgidx, 117 * uint64_t raddr, uint64_t size) 118 */ 119 ENTRY(hv_niu_tx_logical_page_conf) 120 mov N2NIU_TX_LP_CONF, %o5 121 ta FAST_TRAP 122 retl 123 nop 124 SET_SIZE(hv_niu_tx_logical_page_conf) 125 126 /* 127 * hv_niu_tx_logical_page_info(uint64_t chidx, uint64_t pgidx, 128 * uint64_t *raddr, uint64_t *size) 129 */ 130 ENTRY(hv_niu_tx_logical_page_info) 131 mov %o2, %g1 132 mov %o3, %g2 133 mov N2NIU_TX_LP_INFO, %o5 134 ta FAST_TRAP 135 stx %o1, [%g1] 136 retl 137 stx %o2, [%g2] 138 SET_SIZE(hv_niu_tx_logical_page_info) 139 140 /* 141 * hv_niu_vr_assign(uint64_t vridx, uint64_t ldc_id, 142 * uint32_t *cookie) 143 */ 144 ENTRY(hv_niu_vr_assign) 145 mov %o2, %g1 146 mov N2NIU_VR_ASSIGN, %o5 147 ta FAST_TRAP 148 retl 149 stw %o1, [%g1] 150 SET_SIZE(hv_niu_vr_assign) 151 152 /* 153 * hv_niu_vr_unassign(uint32_t cookie) 154 */ 155 ENTRY(hv_niu_vr_unassign) 156 mov N2NIU_VR_UNASSIGN, %o5 157 ta FAST_TRAP 158 retl 159 nop 160 SET_SIZE(hv_niu_vr_unassign) 161 162 /* 163 * hv_niu_vr_getinfo(uint32_t cookie, uint64_t &real_start, 164 * uint64_t &size) 165 */ 166 ENTRY(hv_niu_vr_getinfo) 167 mov %o1, %g1 168 mov %o2, %g2 169 mov N2NIU_VR_GETINFO, %o5 170 ta FAST_TRAP 171 stx %o1, [%g1] 172 retl 173 stx %o2, [%g2] 174 SET_SIZE(hv_niu_vr_getinfo) 175 176 /* 177 * hv_niu_vr_get_rxmap(uint32_t cookie, uint64_t *dma_map) 178 */ 179 ENTRY(hv_niu_vr_get_rxmap) 180 mov %o1, %g1 181 mov N2NIU_VR_GET_RX_MAP, %o5 182 ta FAST_TRAP 183 retl 184 stx %o1, [%g1] 185 SET_SIZE(hv_niu_vr_get_rxmap) 186 187 /* 188 * hv_niu_vr_get_txmap(uint32_t cookie, uint64_t *dma_map) 189 */ 190 ENTRY(hv_niu_vr_get_txmap) 191 mov %o1, %g1 192 mov N2NIU_VR_GET_TX_MAP, %o5 193 ta FAST_TRAP 194 retl 195 stx %o1, [%g1] 196 SET_SIZE(hv_niu_vr_get_txmap) 197 198 /* 199 * hv_niu_rx_dma_assign(uint32_t cookie, uint64_t chidx, 200 * uint64_t *vchidx) 201 */ 202 ENTRY(hv_niu_rx_dma_assign) 203 mov %o2, %g1 204 mov N2NIU_VR_RX_DMA_ASSIGN, %o5 205 ta FAST_TRAP 206 retl 207 stx %o1, [%g1] 208 SET_SIZE(hv_niu_rx_dma_assign) 209 210 /* 211 * hv_niu_rx_dma_unassign(uint32_t cookie, uint64_t vchidx) 212 */ 213 ENTRY(hv_niu_rx_dma_unassign) 214 mov N2NIU_VR_RX_DMA_UNASSIGN, %o5 215 ta FAST_TRAP 216 retl 217 nop 218 SET_SIZE(hv_niu_rx_dma_unassign) 219 220 /* 221 * hv_niu_tx_dma_assign(uint32_t cookie, uint64_t chidx, 222 * uint64_t *vchidx) 223 */ 224 ENTRY(hv_niu_tx_dma_assign) 225 mov %o2, %g1 226 mov N2NIU_VR_TX_DMA_ASSIGN, %o5 227 ta FAST_TRAP 228 retl 229 stx %o1, [%g1] 230 SET_SIZE(hv_niu_tx_dma_assign) 231 232 /* 233 * hv_niu_tx_dma_unassign(uint32_t cookie, uint64_t vchidx) 234 */ 235 ENTRY(hv_niu_tx_dma_unassign) 236 mov N2NIU_VR_TX_DMA_UNASSIGN, %o5 237 ta FAST_TRAP 238 retl 239 nop 240 SET_SIZE(hv_niu_tx_dma_unassign) 241 242 /* 243 * hv_niu_vrrx_logical_page_conf(uint32_t cookie, uint64_t chidx, 244 * uint64_t pgidx, uint64_t raddr, uint64_t size) 245 */ 246 ENTRY(hv_niu_vrrx_logical_page_conf) 247 mov N2NIU_VRRX_LP_SET, %o5 248 ta FAST_TRAP 249 retl 250 nop 251 SET_SIZE(hv_niu_vrrx_logical_page_conf) 252 253 /* 254 * hv_niu_vrrx_logical_page_info(uint32_t cookie, uint64_t chidx, 255 * uint64_t pgidx, uint64_t *raddr, uint64_t *size) 256 */ 257 ENTRY(hv_niu_vrrx_logical_page_info) 258 mov %o3, %g1 259 mov %o4, %g2 260 mov N2NIU_VRRX_LP_GET, %o5 261 ta FAST_TRAP 262 stx %o1, [%g1] 263 retl 264 stx %o2, [%g2] 265 SET_SIZE(hv_niu_vrrx_logical_page_info) 266 267 /* 268 * hv_niu_vrtx_logical_page_conf(uint32_t cookie, uint64_t chidx, 269 * uint64_t pgidx, uint64_t raddr, uint64_t size) 270 */ 271 ENTRY(hv_niu_vrtx_logical_page_conf) 272 mov N2NIU_VRTX_LP_SET, %o5 273 ta FAST_TRAP 274 retl 275 nop 276 SET_SIZE(hv_niu_vrtx_logical_page_conf) 277 278 /* 279 * hv_niu_vrtx_logical_page_info(uint32_t cookie, uint64_t chidx, 280 * uint64_t pgidx, uint64_t *raddr, uint64_t *size) 281 */ 282 ENTRY(hv_niu_vrtx_logical_page_info) 283 mov %o3, %g1 284 mov %o4, %g2 285 mov N2NIU_VRTX_LP_GET, %o5 286 ta FAST_TRAP 287 stx %o1, [%g1] 288 retl 289 stx %o2, [%g2] 290 SET_SIZE(hv_niu_vrtx_logical_page_info) 291 292 /* 293 * hv_niu_vrrx_getinfo(uint32_t cookie, uint64_t vridx, 294 * uint64_t *group, uint64_t *logdev) 295 */ 296 ENTRY(hv_niu_vrrx_getinfo) 297 mov %o2, %g1 298 mov %o3, %g2 299 mov N2NIU_VRRX_GET_INFO, %o5 300 ta FAST_TRAP 301 stx %o2, [%g2] 302 retl 303 stx %o1, [%g1] 304 SET_SIZE(hv_niu_vrrx_getinfo) 305 306 /* 307 * hv_niu_vrtx_getinfo(uint32_t cookie, uint64_t vridx, 308 * uint64_t *group, uint64_t *logdev) 309 */ 310 ENTRY(hv_niu_vrtx_getinfo) 311 mov %o2, %g1 312 mov %o3, %g2 313 mov N2NIU_VRTX_GET_INFO, %o5 314 ta FAST_TRAP 315 stx %o2, [%g2] 316 retl 317 stx %o1, [%g1] 318 SET_SIZE(hv_niu_vrtx_getinfo) 319 320 /* 321 * hv_niu_vrrx_set_ino(uint32_t cookie, uint64_t vridx, uint32_t ino) 322 */ 323 ENTRY(hv_niu_vrrx_set_ino) 324 mov N2NIU_VRRX_SET_INO, %o5 325 ta FAST_TRAP 326 retl 327 nop 328 SET_SIZE(hv_niu_vrrx_set_ino) 329 330 /* 331 * hv_niu_vrtx_set_ino(uint32_t cookie, uint64_t vridx, uint32_t ino) 332 */ 333 ENTRY(hv_niu_vrtx_set_ino) 334 mov N2NIU_VRTX_SET_INO, %o5 335 ta FAST_TRAP 336 retl 337 nop 338 SET_SIZE(hv_niu_vrtx_set_ino) 339 340 /* 341 * hv_niu_vrrx_param_get(uint32_t cookie, uint64_t vridx, 342 * uint64_t param, uint64_t *value) 343 * 344 */ 345 ENTRY(hv_niu_vrrx_param_get) 346 mov %o3, %g1 347 mov N2NIU_VRRX_PARAM_GET, %o5 348 ta FAST_TRAP 349 retl 350 stx %o1, [%g1] 351 SET_SIZE(hv_niu_vrrx_param_get) 352 353 /* 354 * hv_niu_vrrx_param_set(uint32_t cookie, uint64_t vridx, 355 * uint64_t param, uint64_t value) 356 * 357 */ 358 ENTRY(hv_niu_vrrx_param_set) 359 mov N2NIU_VRRX_PARAM_SET, %o5 360 ta FAST_TRAP 361 retl 362 nop 363 SET_SIZE(hv_niu_vrrx_param_set) 364 365 /* 366 * hv_niu_vrtx_param_get(uint32_t cookie, uint64_t vridx, 367 * uint64_t param, uint64_t *value) 368 * 369 */ 370 ENTRY(hv_niu_vrtx_param_get) 371 mov %o3, %g1 372 mov N2NIU_VRTX_PARAM_GET, %o5 373 ta FAST_TRAP 374 retl 375 stx %o1, [%g1] 376 SET_SIZE(hv_niu_vrtx_param_get) 377 378 /* 379 * hv_niu_vrtx_param_set(uint32_t cookie, uint64_t vridx, 380 * uint64_t param, uint64_t value) 381 * 382 */ 383 ENTRY(hv_niu_vrtx_param_set) 384 mov N2NIU_VRTX_PARAM_SET, %o5 385 ta FAST_TRAP 386 retl 387 nop 388 SET_SIZE(hv_niu_vrtx_param_set) 389 390 /* 391 * Interfaces functions which require the configuration handle. 392 */ 393 /* 394 * hv_niu__cfgh_rx_logical_page_conf(uint64_t cfgh, uint64_t chidx, 395 * uint64_t pgidx, uint64_t raddr, uint64_t size) 396 */ 397 ENTRY(hv_niu_cfgh_rx_logical_page_conf) 398 mov N2NIU_RX_LP_CONF, %o5 399 ta FAST_TRAP 400 retl 401 nop 402 SET_SIZE(hv_niu_cfgh_rx_logical_page_conf) 403 404 /* 405 * hv_niu__cfgh_rx_logical_page_info(uint64_t cfgh, uint64_t chidx, 406 * uint64_t pgidx, uint64_t *raddr, uint64_t *size) 407 */ 408 ENTRY(hv_niu_cfgh_rx_logical_page_info) 409 mov %o3, %g1 410 mov %o4, %g2 411 mov N2NIU_RX_LP_INFO, %o5 412 ta FAST_TRAP 413 stx %o1, [%g1] 414 retl 415 stx %o2, [%g2] 416 SET_SIZE(hv_niu_cfgh_rx_logical_page_info) 417 418 /* 419 * hv_niu_cfgh_tx_logical_page_conf(uint64_t cfgh, uint64_t chidx, 420 * uint64_t pgidx, uint64_t raddr, uint64_t size) 421 */ 422 ENTRY(hv_niu_cfgh_tx_logical_page_conf) 423 mov N2NIU_TX_LP_CONF, %o5 424 ta FAST_TRAP 425 retl 426 nop 427 SET_SIZE(hv_niu_cfgh_tx_logical_page_conf) 428 429 /* 430 * hv_niu_cfgh_tx_logical_page_info(uint64_t cfgh, uint64_t chidx, 431 * uint64_t pgidx, uint64_t *raddr, uint64_t *size) 432 */ 433 ENTRY(hv_niu_cfgh_tx_logical_page_info) 434 mov %o3, %g1 435 mov %o4, %g2 436 mov N2NIU_TX_LP_INFO, %o5 437 ta FAST_TRAP 438 stx %o1, [%g1] 439 retl 440 stx %o2, [%g2] 441 SET_SIZE(hv_niu_cfgh_tx_logical_page_info) 442 443 /* 444 * hv_niu_cfgh_vr_assign(uint64_t cfgh, uint64_t vridx, uint64_t ldc_id, 445 * uint32_t *cookie) 446 */ 447 ENTRY(hv_niu_cfgh_vr_assign) 448 mov %o3, %g1 449 mov N2NIU_VR_ASSIGN, %o5 450 ta FAST_TRAP 451 retl 452 stw %o1, [%g1] 453 SET_SIZE(hv_niu_cfgh_vr_assign) 454 455 #endif /*defined(sun4v)*/