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