vxge_info.c revision 330897
1/*- 2 * SPDX-License-Identifier: BSD-3-Clause 3 * 4 * Copyright(c) 2002-2011 Exar Corp. 5 * All rights reserved. 6 * 7 * Redistribution and use in source and binary forms, with or without 8 * modification are permitted provided the following conditions are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright notice, 11 * this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in the 15 * documentation and/or other materials provided with the distribution. 16 * 17 * 3. Neither the name of the Exar Corporation nor the names of its 18 * contributors may be used to endorse or promote products derived from 19 * this software without specific prior written permission. 20 * 21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 22 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 23 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 24 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 25 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 26 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 27 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 28 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 29 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 30 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 31 * POSSIBILITY OF SUCH DAMAGE. 32 */ 33/*$FreeBSD: stable/11/tools/tools/vxge/vxge_info.c 330897 2018-03-14 03:19:51Z eadler $*/ 34 35#include "vxge_info.h" 36#include <unistd.h> 37 38static int sockfd; 39static struct ifreq ifr; 40 41int 42main(int argc, char *argv[]) 43{ 44 uid_t uid; 45 46 uid = getuid(); 47 48 if (uid) { 49 printf("vxge-manage: Operation not permitted.\nExiting...\n"); 50 goto _exit0; 51 } 52 53 if (argc >= 4) { 54 if (!((strcasecmp(argv[2], "regs") == 0) || 55 (strcasecmp(argv[2], "stats") == 0) || 56 (strcasecmp(argv[2], "bw_pri_set") == 0) || 57 (strcasecmp(argv[2], "port_mode_set") == 0) || 58 (strcasecmp(argv[2], "bw_pri_get") == 0))) 59 goto out; 60 else { 61 if (strcasecmp(argv[2], "regs") == 0) { 62 if (!((strcasecmp(argv[3], "common") == 0) || 63 (strcasecmp(argv[3], "legacy") == 0) || 64 (strcasecmp(argv[3], "pcicfgmgmt") == 0) || 65 (strcasecmp(argv[3], "toc") == 0) || 66 (strcasecmp(argv[3], "vpath") == 0) || 67 (strcasecmp(argv[3], "vpmgmt") == 0) || 68 (strcasecmp(argv[3], "mrpcim") == 0) || 69 (strcasecmp(argv[3], "srpcim") == 0) || 70 (strcasecmp(argv[3], "all") == 0))) { 71 goto regs; 72 } 73 } else if (strcasecmp(argv[2], "stats") == 0) { 74 75 if (!((strcasecmp(argv[3], "common") == 0) || 76 (strcasecmp(argv[3], "mrpcim") == 0) || 77 (strcasecmp(argv[3], "all") == 0) || 78 (strcasecmp(argv[3], "driver") == 0))) { 79 goto stats; 80 } 81 } 82 } 83 } else { 84 if (argc != 3) 85 goto out; 86 else { 87 if (!((strcasecmp(argv[2], "hwinfo") == 0) || 88 (strcasecmp(argv[2], "pciconfig") == 0) || 89 (strcasecmp(argv[2], "port_mode_get") == 0) || 90 (strcasecmp(argv[2], "bw_pri_get") == 0))) { 91 if (strcasecmp(argv[2], "regs") == 0) 92 goto regs; 93 94 if (strcasecmp(argv[2], "stats") == 0) 95 goto stats; 96 97 if (strcasecmp(argv[2], "bw_pri_set") == 0) 98 goto bw_pri_set; 99 100 if (strcasecmp(argv[2], "port_mode_set") == 0) 101 goto port_mode_set; 102 103 goto out; 104 } 105 } 106 } 107 108 sockfd = socket(AF_INET, SOCK_DGRAM, 0); 109 if (sockfd < 0) { 110 printf("Creating socket failed\n"); 111 goto _exit0; 112 } 113 114 ifr.ifr_addr.sa_family = AF_INET; 115 strlcpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name)); 116 117 if (strcasecmp(argv[2], "pciconfig") == 0) 118 vxge_get_pci_config(); 119 120 else if (strcasecmp(argv[2], "hwinfo") == 0) 121 vxge_get_hw_info(); 122 123 else if (strcasecmp(argv[2], "vpathinfo") == 0) 124 vxge_get_num_vpath(); 125 126 else if (strcasecmp(argv[2], "port_mode_get") == 0) 127 vxge_get_port_mode(); 128 129 else if (strcasecmp(argv[2], "regs") == 0) { 130 131 if (strcasecmp(argv[3], "common") == 0) 132 vxge_get_registers_common(); 133 134 else if (strcasecmp(argv[3], "toc") == 0) 135 vxge_get_registers_toc(); 136 137 else if (strcasecmp(argv[3], "pcicfgmgmt") == 0) 138 vxge_get_registers_pcicfgmgmt(); 139 140 else if (strcasecmp(argv[3], "vpath") == 0) 141 vxge_get_registers_vpath(); 142 143 else if (strcasecmp(argv[3], "vpmgmt") == 0) 144 vxge_get_registers_vpmgmt(); 145 146 else if (strcasecmp(argv[3], "srpcim") == 0) 147 vxge_get_registers_srpcim(); 148 149 else if (strcasecmp(argv[3], "legacy") == 0) 150 vxge_get_registers_legacy(); 151 152 if (strcasecmp(argv[3], "mrpcim") == 0) 153 vxge_get_registers_mrpcim(); 154 155 else if (strcasecmp(argv[3], "all") == 0) 156 vxge_get_registers_all(); 157 158 } else if (strcasecmp(argv[2], "stats") == 0) { 159 160 if (strcasecmp(argv[3], "mrpcim") == 0) 161 vxge_get_stats_mrpcim(); 162 163 else if (strcasecmp(argv[3], "common") == 0) 164 vxge_get_stats_common(); 165 166 else if (strcasecmp(argv[3], "all") == 0) 167 vxge_get_stats_all(); 168 169 else if (strcasecmp(argv[3], "driver") == 0) { 170 if (argc == 4) { 171 vxge_get_stats_driver(-1); 172 } else if (argc == 6) { 173 if ((strcasecmp(argv[4], "vpath") == 0) && 174 (atoi(argv[5]) >= 0) && 175 (atoi(argv[5]) < 17)) { 176 vxge_get_stats_driver(atoi(argv[5])); 177 } else { 178 goto stats; 179 } 180 } 181 } else { 182 goto stats; 183 } 184 } else if (strcasecmp(argv[2], "port_mode_set") == 0) { 185 if ((atoi(argv[3]) >= 2) && (atoi(argv[3]) <= 4)) 186 vxge_set_port_mode(atoi(argv[3])); 187 else 188 goto port_mode_set; 189 } else if (argc == 5) { 190 if (strcasecmp(argv[2], "bw_pri_set") == 0) { 191 if (((atoi(argv[3]) >= 0) && (atoi(argv[3]) < 8) && 192 (atoi(argv[4]) <= 10000))) 193 vxge_set_bw_priority(atoi(argv[3]), 194 atoi(argv[4]), -1, VXGE_SET_BANDWIDTH); 195 else 196 goto bw_pri_set; 197 } 198 } else if (argc == 6) { 199 if (strcasecmp(argv[2], "bw_pri_set") == 0) { 200 if (((atoi(argv[3]) >= 0) && (atoi(argv[3]) < 8) && 201 (atoi(argv[4]) <= 10000)) && (atoi(argv[5]) <= 3)) 202 vxge_set_bw_priority(atoi(argv[3]), 203 atoi(argv[4]), atoi(argv[5]), 204 VXGE_SET_BANDWIDTH); 205 else 206 goto bw_pri_set; 207 } 208 } else if (argc == 4) { 209 if (strcasecmp(argv[2], "bw_pri_get") == 0) { 210 if ((atoi(argv[3]) >= 0) && (atoi(argv[3]) < 8)) 211 vxge_get_bw_priority(atoi(argv[3]), VXGE_GET_BANDWIDTH); 212 else 213 goto bw_pri_get; 214 } 215 } else if (argc == 3) { 216 if (strcasecmp(argv[2], "bw_pri_get") == 0) 217 vxge_get_bw_priority(-1, VXGE_GET_BANDWIDTH); 218 else 219 goto bw_pri_get; 220 } 221 222 goto _exit0; 223 224out: 225 printf("Usage: "); 226 printf("vxge-manage <INTERFACE> "); 227 printf("[regs] [stats] [hwinfo] [bw_pri_get] [bw_pri_set] [port_mode_get] [port_mode_set] [pciconfig]\n"); 228 printf("\tINTERFACE : Interface (vxge0, vxge1, vxge2, ..)\n"); 229 printf("\tregs : Prints register values\n"); 230 printf("\tstats : Prints statistics\n"); 231 printf("\tpciconfig : Prints pci configuration space\n"); 232 printf("\thwinfo : Displays hardware information\n"); 233 printf("\tbw_pri_get : Displays bandwidth and priority information\n"); 234 printf("\tbw_pri_set : Set bandwidth and priority of a function\n"); 235 printf("\tport_mode_get : Displays dual port adapter's port mode\n"); 236 printf("\tport_mode_set : Set dual port adapter's port mode\n\n"); 237 goto _exit0; 238 239regs: 240 printf("Regs\n"); 241 printf("[common] [legacy] [pcicfgmgmt] [toc] [vpath] [vpmgmt] [mrpcim] [srpcim] [All]\n"); 242 printf("\tcommon : print common registers\n"); 243 printf("\tlegacy : print legacy registers\n"); 244 printf("\tpcicfgmgmt : print pcicfgmgmt registers\n"); 245 printf("\ttoc : print toc registers\n"); 246 printf("\tvpath : print vpath registers\n"); 247 printf("\tvpmgmt : print vpmgmt registers\n"); 248 printf("\tmrpcim : print mrpcim registers\n"); 249 printf("\tsrpcim : print srpcim registers\n\n"); 250 goto _exit0; 251 252stats: 253 printf("Stats\n"); 254 printf("[common] [mrpcim] [driver [vpath (< 17) ]] [All]\n"); 255 printf("\tcommon : print common statistics\n"); 256 printf("\tmrpcim : print mrpcim statistics\n"); 257 printf("\tdriver : print driver statistics\n"); 258 printf("\tAll : print all statistics\n\n"); 259 goto _exit0; 260 261bw_pri_set: 262 printf("Bandwidth & Priority\n"); 263 printf("[vf-id (0-7)] [bandwidth (100-10000)] [priority (0-3)]\n\n"); 264 goto _exit0; 265 266bw_pri_get: 267 printf("Bandwidth & Priority\n"); 268 printf("[vf-id (0-7)]\n\n"); 269 goto _exit0; 270 271port_mode_set: 272 printf("Port mode Setting\n"); 273 printf("[port mode value (2-4)]\n\n"); 274 goto _exit0; 275 276_exit0: 277 return (0); 278} 279 280/* 281 * vxge_get_registers_all 282 */ 283void 284vxge_get_registers_all(void) 285{ 286 vxge_get_registers_legacy(); 287 vxge_get_registers_toc(); 288 vxge_get_registers_common(); 289 vxge_get_registers_pcicfgmgmt(); 290 vxge_get_registers_srpcim(); 291 vxge_get_registers_mrpcim(); 292 vxge_get_registers_vpmgmt(); 293 vxge_get_registers_vpath(); 294} 295 296int 297vxge_get_registers_common(void) 298{ 299 int bufsize, err = 0; 300 char *buffer = NULL; 301 302 bufsize = 303 reginfo_registers[VXGE_HAL_MGMT_REG_COUNT_COMMON - 1].offset + 8; 304 305 buffer = (char *) vxge_mem_alloc(bufsize); 306 if (!buffer) { 307 printf("Allocating memory for register dump failed\n"); 308 goto _exit0; 309 } 310 311 *buffer = vxge_hal_mgmt_reg_type_common; 312 313 ifr.ifr_data = (caddr_t) buffer; 314 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 315 if ((err < 0) || (err == EINVAL)) { 316 printf("Getting register values failed\n"); 317 goto _exit0; 318 } 319 320 vxge_print_registers(buffer); 321 322_exit0: 323 vxge_mem_free(buffer); 324 return (err); 325} 326 327/* 328 * vxge_get_registers_legacy 329 */ 330int 331vxge_get_registers_legacy(void) 332{ 333 int bufsize, err = 0; 334 char *buffer = NULL; 335 336 bufsize = reginfo_legacy[VXGE_HAL_MGMT_REG_COUNT_LEGACY - 1].offset + 8; 337 338 buffer = (char *) vxge_mem_alloc(bufsize); 339 if (!buffer) { 340 printf("Allocating memory for register dump failed\n"); 341 goto _exit0; 342 } 343 344 *buffer = vxge_hal_mgmt_reg_type_legacy; 345 346 ifr.ifr_data = (caddr_t) buffer; 347 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 348 if ((err < 0) || (err == EINVAL)) { 349 printf("Getting register values failed\n"); 350 goto _exit0; 351 } 352 353 vxge_print_registers_legacy(buffer); 354 355_exit0: 356 vxge_mem_free(buffer); 357 return (err); 358} 359 360/* 361 * vxge_get_registers_toc 362 */ 363int 364vxge_get_registers_toc(void) 365{ 366 int bufsize, err = 0; 367 char *buffer = NULL; 368 369 bufsize = reginfo_toc[VXGE_HAL_MGMT_REG_COUNT_TOC - 1].offset + 8; 370 buffer = (char *) vxge_mem_alloc(bufsize); 371 if (!buffer) { 372 printf("Allocating memory for register dump failed\n"); 373 goto _exit0; 374 } 375 376 *buffer = vxge_hal_mgmt_reg_type_toc; 377 378 ifr.ifr_data = (caddr_t) buffer; 379 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 380 if ((err < 0) || (err == EINVAL)) { 381 printf("Getting register values failed\n"); 382 goto _exit0; 383 } 384 385 vxge_print_registers_toc(buffer); 386 387_exit0: 388 vxge_mem_free(buffer); 389 return (err); 390} 391 392/* 393 * vxge_get_registers_pcicfgmgmt 394 */ 395int 396vxge_get_registers_pcicfgmgmt(void) 397{ 398 int bufsize, err = 0; 399 char *buffer = NULL; 400 401 bufsize = reginfo_pcicfgmgmt[VXGE_HAL_MGMT_REG_COUNT_PCICFGMGMT - 1].offset + 8; 402 403 buffer = (char *) vxge_mem_alloc(bufsize); 404 if (!buffer) { 405 printf("Allocating memory for register dump failed\n"); 406 goto _exit0; 407 } 408 409 *buffer = vxge_hal_mgmt_reg_type_pcicfgmgmt; 410 411 ifr.ifr_data = (caddr_t) buffer; 412 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 413 if ((err < 0) || (err == EINVAL)) { 414 printf("Getting register values failed\n"); 415 goto _exit0; 416 } 417 418 vxge_print_registers_pcicfgmgmt(buffer); 419 420_exit0: 421 vxge_mem_free(buffer); 422 return (err); 423} 424 425/* 426 * vxge_get_registers_vpath 427 */ 428int 429vxge_get_registers_vpath(void) 430{ 431 int bufsize, err = 0; 432 u32 i, no_of_vpath; 433 char *buffer = NULL; 434 435 no_of_vpath = vxge_get_num_vpath(); 436 bufsize = reginfo_vpath[VXGE_HAL_MGMT_REG_COUNT_VPATH - 1].offset + 8; 437 438 buffer = (char *) vxge_mem_alloc(bufsize); 439 if (!buffer) { 440 printf("Allocating memory for register dump failed\n"); 441 goto _exit0; 442 } 443 444 for (i = 0; i < no_of_vpath; i++) { 445 446 bzero(buffer, bufsize); 447 *buffer = vxge_hal_mgmt_reg_type_vpath; 448 *((u32 *) (buffer + sizeof(u32))) = i; 449 450 ifr.ifr_data = (caddr_t) buffer; 451 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 452 if ((err < 0) || (err == EINVAL)) { 453 printf("Getting register values failed\n"); 454 goto _exit0; 455 } 456 457 vxge_print_registers_vpath(buffer, i); 458 } 459 460_exit0: 461 vxge_mem_free(buffer); 462 return (err); 463} 464 465/* 466 * vxge_get_registers_vpmgmt 467 */ 468int 469vxge_get_registers_vpmgmt(void) 470{ 471 int bufsize, err = 0; 472 u32 i, no_of_vpath; 473 char *buffer = NULL; 474 475 no_of_vpath = vxge_get_num_vpath(); 476 bufsize = reginfo_vpmgmt[VXGE_HAL_MGMT_REG_COUNT_VPMGMT - 1].offset + 8; 477 buffer = (char *) vxge_mem_alloc(bufsize); 478 if (!buffer) { 479 printf("Allocating memory for register dump failed\n"); 480 goto _exit0; 481 } 482 483 for (i = 0; i < no_of_vpath; i++) { 484 485 bzero(buffer, bufsize); 486 *buffer = vxge_hal_mgmt_reg_type_vpmgmt; 487 *((u32 *) (buffer + sizeof(u32))) = i; 488 489 ifr.ifr_data = (caddr_t) buffer; 490 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 491 if ((err < 0) || (err == EINVAL)) { 492 printf("Getting register values failed\n"); 493 goto _exit0; 494 } 495 496 vxge_print_registers_vpmgmt(buffer); 497 } 498 499_exit0: 500 vxge_mem_free(buffer); 501 return (err); 502} 503 504u32 505vxge_get_num_vpath(void) 506{ 507 int err = 0; 508 u32 buffer, no_of_vpath = 0; 509 510 buffer = VXGE_GET_VPATH_COUNT; 511 512 ifr.ifr_data = (caddr_t) &buffer; 513 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 514 if (err == 0) 515 no_of_vpath = buffer; 516 else 517 printf("Getting number of vpath failed\n"); 518 519 return (no_of_vpath); 520} 521 522/* 523 * vxge_get_registers_mrpcim 524 */ 525int 526vxge_get_registers_mrpcim(void) 527{ 528 int bufsize, err = 0; 529 char *buffer = NULL; 530 531 bufsize = reginfo_mrpcim[VXGE_HAL_MGMT_REG_COUNT_MRPCIM - 1].offset + 8; 532 buffer = (char *) vxge_mem_alloc(bufsize); 533 if (!buffer) { 534 printf("Allocating memory for register dump failed\n"); 535 goto _exit0; 536 } 537 538 *buffer = vxge_hal_mgmt_reg_type_mrpcim; 539 540 ifr.ifr_data = (caddr_t) buffer; 541 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 542 if ((err < 0) || (err == EINVAL)) { 543 printf("Getting register values failed\n"); 544 goto _exit0; 545 } 546 547 vxge_print_registers_mrpcim(buffer); 548 549_exit0: 550 vxge_mem_free(buffer); 551 return (err); 552} 553 554/* 555 * vxge_get_registers_srpcim 556 * Gets srpcim register values 557 * Returns EXIT_SUCCESS or EXIT_FAILURE 558 */ 559int 560vxge_get_registers_srpcim(void) 561{ 562 int bufsize, err = 0; 563 char *buffer = NULL; 564 565 bufsize = reginfo_srpcim[VXGE_HAL_MGMT_REG_COUNT_SRPCIM - 1].offset + 8; 566 buffer = (char *) vxge_mem_alloc(bufsize); 567 if (!buffer) { 568 printf("Allocating memory for register dump failed\n"); 569 goto _exit0; 570 } 571 572 *buffer = vxge_hal_mgmt_reg_type_srpcim; 573 574 ifr.ifr_data = (caddr_t) buffer; 575 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr); 576 if ((err < 0) || (err == EINVAL)) { 577 printf("Getting register values failed\n"); 578 goto _exit0; 579 } 580 581 vxge_print_registers_srpcim(buffer); 582 583_exit0: 584 vxge_mem_free(buffer); 585 return (err); 586} 587 588/* 589 * vxge_get_stats_driver 590 */ 591int 592vxge_get_stats_driver(int vpath_num) 593{ 594 int bufsize, err = 0; 595 char *buffer = NULL; 596 597 bufsize = VXGE_HAL_MGMT_STATS_COUNT_DRIVER * sizeof(u64) * 598 VXGE_HAL_MAX_VIRTUAL_PATHS; 599 600 buffer = (char *) vxge_mem_alloc(bufsize); 601 if (!buffer) { 602 printf("Allocating memory for driver statistics failed\n"); 603 goto _exit0; 604 } 605 606 *buffer = VXGE_GET_DRIVER_STATS; 607 608 ifr.ifr_data = (caddr_t) buffer; 609 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 610 if ((err < 0) || (err == EINVAL)) { 611 printf("Getting Driver Statistics failed\n"); 612 goto _exit0; 613 } 614 615 vxge_print_stats_drv(buffer, vpath_num); 616 617_exit0: 618 vxge_mem_free(buffer); 619 return (err); 620} 621 622/* 623 * vxge_get_stats_common 624 */ 625int 626vxge_get_stats_common(void) 627{ 628 int bufsize, err = 0; 629 char *buffer = NULL; 630 631 bufsize = 1024 * 64 * sizeof(char); 632 633 buffer = (char *) vxge_mem_alloc(bufsize); 634 if (!buffer) { 635 printf("Allocating memory for statistics dump failed\n"); 636 goto _exit0; 637 } 638 639 *buffer = VXGE_GET_DEVICE_STATS; 640 641 ifr.ifr_data = (caddr_t) buffer; 642 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 643 if ((err < 0) || (err == EINVAL)) { 644 printf("Getting statistics values failed\n"); 645 goto _exit0; 646 } 647 648 vxge_print_stats(buffer, VXGE_GET_DEVICE_STATS); 649 650_exit0: 651 vxge_mem_free(buffer); 652 return (err); 653 654} 655 656/* 657 * vxge_get_stats_mrpcim 658 */ 659int 660vxge_get_stats_mrpcim(void) 661{ 662 int bufsize, err = 0; 663 char *buffer = NULL; 664 665 bufsize = 1024 * 64 * sizeof(char); 666 667 buffer = (char *) vxge_mem_alloc(bufsize); 668 if (!buffer) { 669 printf("Allocating memory for statistics dump failed\n"); 670 goto _exit0; 671 } 672 673 *buffer = VXGE_GET_MRPCIM_STATS; 674 675 ifr.ifr_data = (caddr_t) buffer; 676 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 677 if ((err < 0) || (err == EINVAL)) { 678 printf("Getting statistics values failed\n"); 679 goto _exit0; 680 } 681 682 vxge_print_stats(buffer, VXGE_GET_MRPCIM_STATS); 683 684_exit0: 685 vxge_mem_free(buffer); 686 return (err); 687} 688 689int 690vxge_get_pci_config(void) 691{ 692 int bufsize, err = 0; 693 char *buffer = NULL; 694 695 bufsize = 64 * 1024 * sizeof(char); 696 697 buffer = (char *) vxge_mem_alloc(bufsize); 698 if (!buffer) { 699 printf("Allocating memory for pci config failed\n"); 700 goto _exit0; 701 } 702 703 *buffer = VXGE_GET_PCI_CONF; 704 705 ifr.ifr_data = (caddr_t) buffer; 706 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 707 if ((err < 0) || (err == EINVAL)) { 708 printf("Getting pci config values failed\n"); 709 goto _exit0; 710 } 711 712 vxge_print_pci_config(buffer); 713 714_exit0: 715 vxge_mem_free(buffer); 716 return (err); 717} 718 719/* 720 * vxge_get_hw_info 721 */ 722int 723vxge_get_hw_info(void) 724{ 725 int err = 0; 726 char *buffer = NULL; 727 728 buffer = (char *) vxge_mem_alloc(sizeof(vxge_device_hw_info_t)); 729 if (!buffer) { 730 printf("Allocating memory for hw info failed\n"); 731 goto _exit0; 732 } 733 734 *buffer = VXGE_GET_DEVICE_HWINFO; 735 736 ifr.ifr_data = (caddr_t) buffer; 737 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 738 if ((err < 0) || (err == EINVAL)) { 739 printf("Getting hw info failed\n"); 740 goto _exit0; 741 } 742 743 vxge_print_hw_info(buffer); 744 745_exit0: 746 vxge_mem_free(buffer); 747 return (err); 748} 749 750/* 751 * vxge_get_stats_all 752 */ 753void 754vxge_get_stats_all(void) 755{ 756 vxge_get_stats_mrpcim(); 757 vxge_get_stats_common(); 758 vxge_get_stats_driver(0); 759} 760 761int 762vxge_get_bw_priority(int func_id, vxge_query_device_info_e vxge_query_info) 763{ 764 int err = 0; 765 vxge_bw_info_t buffer; 766 767 bzero(&buffer, sizeof(vxge_bw_info_t)); 768 769 buffer.query = (char) vxge_query_info; 770 if (func_id != -1) 771 buffer.func_id = func_id; 772 773 ifr.ifr_data = (caddr_t) &buffer; 774 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 775 if ((err < 0) || (err == EINVAL)) 776 printf("Getting bw info failed\n"); 777 else 778 vxge_print_bw_priority(&buffer); 779 780 return (err); 781} 782 783int 784vxge_set_bw_priority(int func_id, int bandwidth, int priority, 785 vxge_query_device_info_e vxge_query_info) 786{ 787 int err = 0; 788 vxge_bw_info_t buffer; 789 790 bzero(&buffer, sizeof(vxge_bw_info_t)); 791 792 buffer.query = (char) vxge_query_info; 793 buffer.func_id = func_id; 794 buffer.bandwidth = bandwidth; 795 buffer.priority = priority; 796 797 ifr.ifr_data = (caddr_t) &buffer; 798 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 799 if ((err < 0) || (err == EINVAL)) 800 printf("Setting bandwidth failed\n"); 801 802 return (err); 803} 804 805int 806vxge_set_port_mode(int port_val) 807{ 808 int err = 0; 809 vxge_port_info_t buffer; 810 811 buffer.query = VXGE_SET_PORT_MODE; 812 buffer.port_mode = port_val; 813 buffer.port_failure = 0; 814 815 ifr.ifr_data = (caddr_t) &buffer; 816 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 817 if ((err < 0) || (err == EINVAL)) 818 printf("Setting port_mode failed\n"); 819 else 820 printf("Port mode set. Reboot the system for changes to take effect.\n"); 821 822 return (err); 823} 824 825int 826vxge_get_port_mode() 827{ 828 int err = 0; 829 vxge_port_info_t buffer; 830 831 bzero(&buffer, sizeof(vxge_port_info_t)); 832 833 buffer.query = VXGE_GET_PORT_MODE; 834 835 ifr.ifr_data = (caddr_t) &buffer; 836 err = ioctl(sockfd, SIOCGPRIVATE_0, &ifr); 837 if ((err < 0) || (err == EINVAL)) 838 printf("Getting port mode info failed\n"); 839 else 840 vxge_print_port_mode(&buffer); 841 842 return (err); 843} 844/* 845 * Removes trailing spaces padded 846 * and NULL terminates strings 847 */ 848void 849vxge_null_terminate(char *str, size_t len) 850{ 851 len--; 852 while (*str && (*str != ' ') && (len != 0)) 853 ++str; 854 855 --len; 856 if (*str) 857 *str = '\0'; 858} 859 860void * 861vxge_mem_alloc(u_long size) 862{ 863 void *vaddr = NULL; 864 vaddr = malloc(size); 865 if (NULL != vaddr) 866 bzero(vaddr, size); 867 868 return (vaddr); 869} 870