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;
}
|