2 * Copyright(c) 2002-2011 Exar Corp.
5 * Redistribution and use in source and binary forms, with or without
6 * modification are permitted provided the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
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.
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.
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.
33 #include "vxge_info.h"
37 static struct ifreq ifr;
40 main(int argc, char *argv[])
47 printf("vxge-manage: Operation not permitted.\nExiting...\n");
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)))
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))) {
71 } else if (strcasecmp(argv[2], "stats") == 0) {
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))) {
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)
92 if (strcasecmp(argv[2], "stats") == 0)
95 if (strcasecmp(argv[2], "bw_pri_set") == 0)
98 if (strcasecmp(argv[2], "port_mode_set") == 0)
106 sockfd = socket(AF_INET, SOCK_DGRAM, 0);
108 printf("Creating socket failed\n");
112 ifr.ifr_addr.sa_family = AF_INET;
113 strlcpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
115 if (strcasecmp(argv[2], "pciconfig") == 0)
116 vxge_get_pci_config();
118 else if (strcasecmp(argv[2], "hwinfo") == 0)
121 else if (strcasecmp(argv[2], "vpathinfo") == 0)
122 vxge_get_num_vpath();
124 else if (strcasecmp(argv[2], "port_mode_get") == 0)
125 vxge_get_port_mode();
127 else if (strcasecmp(argv[2], "regs") == 0) {
129 if (strcasecmp(argv[3], "common") == 0)
130 vxge_get_registers_common();
132 else if (strcasecmp(argv[3], "toc") == 0)
133 vxge_get_registers_toc();
135 else if (strcasecmp(argv[3], "pcicfgmgmt") == 0)
136 vxge_get_registers_pcicfgmgmt();
138 else if (strcasecmp(argv[3], "vpath") == 0)
139 vxge_get_registers_vpath();
141 else if (strcasecmp(argv[3], "vpmgmt") == 0)
142 vxge_get_registers_vpmgmt();
144 else if (strcasecmp(argv[3], "srpcim") == 0)
145 vxge_get_registers_srpcim();
147 else if (strcasecmp(argv[3], "legacy") == 0)
148 vxge_get_registers_legacy();
150 if (strcasecmp(argv[3], "mrpcim") == 0)
151 vxge_get_registers_mrpcim();
153 else if (strcasecmp(argv[3], "all") == 0)
154 vxge_get_registers_all();
156 } else if (strcasecmp(argv[2], "stats") == 0) {
158 if (strcasecmp(argv[3], "mrpcim") == 0)
159 vxge_get_stats_mrpcim();
161 else if (strcasecmp(argv[3], "common") == 0)
162 vxge_get_stats_common();
164 else if (strcasecmp(argv[3], "all") == 0)
165 vxge_get_stats_all();
167 else if (strcasecmp(argv[3], "driver") == 0) {
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]));
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]));
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);
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]),
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);
213 } else if (argc == 3) {
214 if (strcasecmp(argv[2], "bw_pri_get") == 0)
215 vxge_get_bw_priority(-1, VXGE_GET_BANDWIDTH);
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");
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");
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");
260 printf("Bandwidth & Priority\n");
261 printf("[vf-id (0-7)] [bandwidth (100-10000)] [priority (0-3)]\n\n");
265 printf("Bandwidth & Priority\n");
266 printf("[vf-id (0-7)]\n\n");
270 printf("Port mode Setting\n");
271 printf("[port mode value (2-4)]\n\n");
279 * vxge_get_registers_all
282 vxge_get_registers_all(void)
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();
295 vxge_get_registers_common(void)
297 int bufsize, err = 0;
301 reginfo_registers[VXGE_HAL_MGMT_REG_COUNT_COMMON - 1].offset + 8;
303 buffer = (char *) vxge_mem_alloc(bufsize);
305 printf("Allocating memory for register dump failed\n");
309 *buffer = vxge_hal_mgmt_reg_type_common;
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");
318 vxge_print_registers(buffer);
321 vxge_mem_free(buffer);
326 * vxge_get_registers_legacy
329 vxge_get_registers_legacy(void)
331 int bufsize, err = 0;
334 bufsize = reginfo_legacy[VXGE_HAL_MGMT_REG_COUNT_LEGACY - 1].offset + 8;
336 buffer = (char *) vxge_mem_alloc(bufsize);
338 printf("Allocating memory for register dump failed\n");
342 *buffer = vxge_hal_mgmt_reg_type_legacy;
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");
351 vxge_print_registers_legacy(buffer);
354 vxge_mem_free(buffer);
359 * vxge_get_registers_toc
362 vxge_get_registers_toc(void)
364 int bufsize, err = 0;
367 bufsize = reginfo_toc[VXGE_HAL_MGMT_REG_COUNT_TOC - 1].offset + 8;
368 buffer = (char *) vxge_mem_alloc(bufsize);
370 printf("Allocating memory for register dump failed\n");
374 *buffer = vxge_hal_mgmt_reg_type_toc;
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");
383 vxge_print_registers_toc(buffer);
386 vxge_mem_free(buffer);
391 * vxge_get_registers_pcicfgmgmt
394 vxge_get_registers_pcicfgmgmt(void)
396 int bufsize, err = 0;
399 bufsize = reginfo_pcicfgmgmt[VXGE_HAL_MGMT_REG_COUNT_PCICFGMGMT - 1].offset + 8;
401 buffer = (char *) vxge_mem_alloc(bufsize);
403 printf("Allocating memory for register dump failed\n");
407 *buffer = vxge_hal_mgmt_reg_type_pcicfgmgmt;
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");
416 vxge_print_registers_pcicfgmgmt(buffer);
419 vxge_mem_free(buffer);
424 * vxge_get_registers_vpath
427 vxge_get_registers_vpath(void)
429 int bufsize, err = 0;
433 no_of_vpath = vxge_get_num_vpath();
434 bufsize = reginfo_vpath[VXGE_HAL_MGMT_REG_COUNT_VPATH - 1].offset + 8;
436 buffer = (char *) vxge_mem_alloc(bufsize);
438 printf("Allocating memory for register dump failed\n");
442 for (i = 0; i < no_of_vpath; i++) {
444 bzero(buffer, bufsize);
445 *buffer = vxge_hal_mgmt_reg_type_vpath;
446 *((u32 *) (buffer + sizeof(u32))) = i;
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");
455 vxge_print_registers_vpath(buffer, i);
459 vxge_mem_free(buffer);
464 * vxge_get_registers_vpmgmt
467 vxge_get_registers_vpmgmt(void)
469 int bufsize, err = 0;
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);
477 printf("Allocating memory for register dump failed\n");
481 for (i = 0; i < no_of_vpath; i++) {
483 bzero(buffer, bufsize);
484 *buffer = vxge_hal_mgmt_reg_type_vpmgmt;
485 *((u32 *) (buffer + sizeof(u32))) = i;
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");
494 vxge_print_registers_vpmgmt(buffer);
498 vxge_mem_free(buffer);
503 vxge_get_num_vpath(void)
506 u32 buffer, no_of_vpath = 0;
508 buffer = VXGE_GET_VPATH_COUNT;
510 ifr.ifr_data = (caddr_t) &buffer;
511 err = ioctl(sockfd, SIOCGPRIVATE_1, &ifr);
513 no_of_vpath = buffer;
515 printf("Getting number of vpath failed\n");
517 return (no_of_vpath);
521 * vxge_get_registers_mrpcim
524 vxge_get_registers_mrpcim(void)
526 int bufsize, err = 0;
529 bufsize = reginfo_mrpcim[VXGE_HAL_MGMT_REG_COUNT_MRPCIM - 1].offset + 8;
530 buffer = (char *) vxge_mem_alloc(bufsize);
532 printf("Allocating memory for register dump failed\n");
536 *buffer = vxge_hal_mgmt_reg_type_mrpcim;
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");
545 vxge_print_registers_mrpcim(buffer);
548 vxge_mem_free(buffer);
553 * vxge_get_registers_srpcim
554 * Gets srpcim register values
555 * Returns EXIT_SUCCESS or EXIT_FAILURE
558 vxge_get_registers_srpcim(void)
560 int bufsize, err = 0;
563 bufsize = reginfo_srpcim[VXGE_HAL_MGMT_REG_COUNT_SRPCIM - 1].offset + 8;
564 buffer = (char *) vxge_mem_alloc(bufsize);
566 printf("Allocating memory for register dump failed\n");
570 *buffer = vxge_hal_mgmt_reg_type_srpcim;
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");
579 vxge_print_registers_srpcim(buffer);
582 vxge_mem_free(buffer);
587 * vxge_get_stats_driver
590 vxge_get_stats_driver(int vpath_num)
592 int bufsize, err = 0;
595 bufsize = VXGE_HAL_MGMT_STATS_COUNT_DRIVER * sizeof(u64) *
596 VXGE_HAL_MAX_VIRTUAL_PATHS;
598 buffer = (char *) vxge_mem_alloc(bufsize);
600 printf("Allocating memory for driver statistics failed\n");
604 *buffer = VXGE_GET_DRIVER_STATS;
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");
613 vxge_print_stats_drv(buffer, vpath_num);
616 vxge_mem_free(buffer);
621 * vxge_get_stats_common
624 vxge_get_stats_common(void)
626 int bufsize, err = 0;
629 bufsize = 1024 * 64 * sizeof(char);
631 buffer = (char *) vxge_mem_alloc(bufsize);
633 printf("Allocating memory for statistics dump failed\n");
637 *buffer = VXGE_GET_DEVICE_STATS;
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");
646 vxge_print_stats(buffer, VXGE_GET_DEVICE_STATS);
649 vxge_mem_free(buffer);
655 * vxge_get_stats_mrpcim
658 vxge_get_stats_mrpcim(void)
660 int bufsize, err = 0;
663 bufsize = 1024 * 64 * sizeof(char);
665 buffer = (char *) vxge_mem_alloc(bufsize);
667 printf("Allocating memory for statistics dump failed\n");
671 *buffer = VXGE_GET_MRPCIM_STATS;
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");
680 vxge_print_stats(buffer, VXGE_GET_MRPCIM_STATS);
683 vxge_mem_free(buffer);
688 vxge_get_pci_config(void)
690 int bufsize, err = 0;
693 bufsize = 64 * 1024 * sizeof(char);
695 buffer = (char *) vxge_mem_alloc(bufsize);
697 printf("Allocating memory for pci config failed\n");
701 *buffer = VXGE_GET_PCI_CONF;
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");
710 vxge_print_pci_config(buffer);
713 vxge_mem_free(buffer);
721 vxge_get_hw_info(void)
726 buffer = (char *) vxge_mem_alloc(sizeof(vxge_device_hw_info_t));
728 printf("Allocating memory for hw info failed\n");
732 *buffer = VXGE_GET_DEVICE_HWINFO;
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");
741 vxge_print_hw_info(buffer);
744 vxge_mem_free(buffer);
752 vxge_get_stats_all(void)
754 vxge_get_stats_mrpcim();
755 vxge_get_stats_common();
756 vxge_get_stats_driver(0);
760 vxge_get_bw_priority(int func_id, vxge_query_device_info_e vxge_query_info)
763 vxge_bw_info_t buffer;
765 bzero(&buffer, sizeof(vxge_bw_info_t));
767 buffer.query = (char) vxge_query_info;
769 buffer.func_id = func_id;
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");
776 vxge_print_bw_priority(&buffer);
782 vxge_set_bw_priority(int func_id, int bandwidth, int priority,
783 vxge_query_device_info_e vxge_query_info)
786 vxge_bw_info_t buffer;
788 bzero(&buffer, sizeof(vxge_bw_info_t));
790 buffer.query = (char) vxge_query_info;
791 buffer.func_id = func_id;
792 buffer.bandwidth = bandwidth;
793 buffer.priority = priority;
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");
804 vxge_set_port_mode(int port_val)
807 vxge_port_info_t buffer;
809 buffer.query = VXGE_SET_PORT_MODE;
810 buffer.port_mode = port_val;
811 buffer.port_failure = 0;
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");
818 printf("Port mode set. Reboot the system for changes to take effect.\n");
827 vxge_port_info_t buffer;
829 bzero(&buffer, sizeof(vxge_port_info_t));
831 buffer.query = VXGE_GET_PORT_MODE;
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");
838 vxge_print_port_mode(&buffer);
843 * Removes trailing spaces padded
844 * and NULL terminates strings
847 vxge_null_terminate(char *str, size_t len)
850 while (*str && (*str != ' ') && (len != 0))
859 vxge_mem_alloc(u_long size)
862 vaddr = malloc(size);