1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
// Test program for CPQFCTS ioctl calls
// build with:
// gcc -o cpqioctl cpqioctl.c
// ld -o cpqioctl /lib/crt0.o cpqioctl.o -lc
#include <stdio.h>
#include <sys/stat.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>
#include <linux/types.h>
#include "../../include/scsi/scsi.h"
#include "cpqfcTSioctl.h"
typedef struct scsi_fctargaddress {
unsigned long host_port_id;
unsigned char host_wwn[8];
} Scsi_FCTargAddress;
int main(int argc, char **argv) {
int fd, i;
Scsi_FCTargAddress targ;
int uselect=0;
if ( argc < 2 ) {
printf("usage: cpqioctl <Devfile>\n");
exit(1);
}
if ( (fd = open(argv[1], O_RDONLY)) == -1) {
perror("open");
exit(1);
}
if ( ioctl(fd, SCSI_IOCTL_FC_TARGET_ADDRESS, &targ) ) {
perror("ioctl");
exit(1);
}
printf("portid: %08x. wwn: ", targ.host_port_id);
for (i=0;i<8;i++) printf(" %02x", targ.host_wwn[i]);
printf("\n");
while( uselect != 27 ) // not ESC key
{
printf("\n IOCTL \n");
printf( "1. Get PCI info\n");
printf( "2. Send Passthru\n");
printf( " ==> ");
scanf("%c", &uselect);
switch( uselect )
{
case '1':
{
cciss_pci_info_struct pciinfo;
if( ioctl( fd, CCPQFCTS_GETPCIINFO ,&pciinfo ))
perror("ioctl");
else
printf( "\nPCI bus %d, dev_fn %d, board_id %Xh\n",
pciinfo.bus, pciinfo.dev_fn, pciinfo.board_id);
}
}
}
close(fd);
return 0;
}
|