]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - tools/tools/vxge/vxge_info.c
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / tools / tools / vxge / vxge_info.c
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$*/
32
33 #include "vxge_info.h"
34 #include <unistd.h>
35
36 static int sockfd;
37 static struct ifreq ifr;
38
39 int
40 main(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
222 out:
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
237 regs:
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
250 stats:
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
259 bw_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
264 bw_pri_get:
265         printf("Bandwidth & Priority\n");
266         printf("[vf-id (0-7)]\n\n");
267         goto _exit0;
268
269 port_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  */
281 void
282 vxge_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
294 int
295 vxge_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  */
328 int
329 vxge_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  */
361 int
362 vxge_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  */
393 int
394 vxge_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  */
426 int
427 vxge_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  */
466 int
467 vxge_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
502 u32
503 vxge_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  */
523 int
524 vxge_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  */
557 int
558 vxge_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  */
589 int
590 vxge_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  */
623 int
624 vxge_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  */
657 int
658 vxge_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
687 int
688 vxge_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  */
720 int
721 vxge_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  */
751 void
752 vxge_get_stats_all(void)
753 {
754         vxge_get_stats_mrpcim();
755         vxge_get_stats_common();
756         vxge_get_stats_driver(0);
757 }
758
759 int
760 vxge_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
781 int
782 vxge_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
803 int
804 vxge_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
823 int
824 vxge_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  */
846 void
847 vxge_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
858 void *
859 vxge_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 }