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