cpqioctl.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

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