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