// Test program for CPQFCTS ioctl calls // build with: // gcc -o cpqioctl cpqioctl.c // ld -o cpqioctl /lib/crt0.o cpqioctl.o -lc #include #include #include #include #include #include #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 \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; }