"SfR Fresh" - the SfR Freeware/Shareware Archive

Member "mapscsi-0.0.11/scsi_api.h" of archive mapscsi-0.0.11.tar.gz:


As a special service "SfR Fresh" has tried to format the requested source page into HTML format using (guessed) C and C++ source code syntax highlighting with prefixed line numbers. Alternatively you can here view or download the uninterpreted source code file. That can be also achieved for any archive member file by clicking within an archive contents listing on the first character of the file(path) respectively on the according byte size field.
    1 #ifndef _SCSI_API_H_
    2 #define _SCSI_API_H_
    3 
    4 #include "scsi/scsi.h"
    5 #include "scsi/sg.h"
    6 
    7 
    8 #ifndef SCSI_IOCTL_GET_PCI
    9 #define SCSI_IOCTL_GET_PCI 0x5387
   10 #endif
   11 
   12 #define MAX_ERRORS 5
   13 #define MAX_SCSI_DEVS 255
   14 
   15 #define SCSI_OFF sizeof(struct sg_header)
   16 
   17 #define INQUIRY_CMD     0x12
   18 #define INQUIRY_CMDLEN  6
   19 #define INQUIRY_REPLY_LEN 96
   20 
   21 #define READ_CMD     0x3c
   22 #define READ_CMDLEN  10
   23 #define READ_REPLY_LEN 256
   24 
   25 #define INQUIRY_PERIPHERAL_OFFSET 0
   26 #define INQUIRY_VENDOR_OFFSET  8
   27 #define INQUIRY_VENDOR_LENGTH  8
   28 #define INQUIRY_PRODUCT_OFFSET  16
   29 #define INQUIRY_PRODUCT_LENGTH  16
   30 #define INQUIRY_REVISION_OFFSET  32
   31 #define INQUIRY_REVISION_LENGTH  4
   32 #define INQUIRY_CHANNELID_OFFSET 43
   33 #define INQUIRY_SAFTEID_OFFSET 44
   34 #define INQUIRY_SAFTEID_LENGTH 6
   35 #define INQUIRY_SERIAL_LENGTH 255
   36 
   37 #define HOSTNAME_LEN 64
   38 #define PREFIX_LEN 16
   39 #define PCIINFO_LEN 8
   40 #define PARAM_LEN 32
   41 #define WWN_STR_LEN 16 /* 8 bytes as ascii hex */
   42 #define PORTID_STR_LEN 6 /* 3 bytes as ascii hex */
   43 
   44 #define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
   45 #define msizeof(TYPE, MEMBER) ((size_t) sizeof(((TYPE *)0)->MEMBER))
   46 
   47 
   48 typedef struct scsi_idlun {
   49 /* why can't userland see this structure ??? */
   50     int dev_id;
   51     int host_unique_id;
   52 } scsi_idlun_t;
   53 
   54 
   55 typedef struct scsi_device {
   56 
   57   int active;
   58   char hostname[HOSTNAME_LEN+1];
   59   char pciinfo[PCIINFO_LEN+1];
   60   char *sg_device;
   61   char *device;
   62   char prefix[PREFIX_LEN+1];
   63 
   64   int host;
   65   int channel;
   66   int id;
   67   int lun;
   68   int part;
   69   int type;
   70   int channelid;
   71   int num_parts;
   72 
   73   /* scsi inquiry device info */
   74   char vendor[INQUIRY_VENDOR_LENGTH+1];
   75   char product[INQUIRY_PRODUCT_LENGTH+1];
   76   char revision[INQUIRY_REVISION_LENGTH+1];
   77   char serial[INQUIRY_SERIAL_LENGTH+1];
   78   char safteid[INQUIRY_SAFTEID_LENGTH+1];
   79 
   80   /* fibre channel addresses */
   81   int isfc;
   82   char wwpn[WWN_STR_LEN+1];
   83   char wwnn[WWN_STR_LEN+1];
   84   char portid[PORTID_STR_LEN+1];
   85   int loopid;
   86 
   87 
   88   struct scsi_device *next;
   89 
   90 } scsi_device_t;
   91 
   92 
   93 typedef struct fc_device {
   94 
   95   char wwpn[WWN_STR_LEN+1];
   96   char wwnn[WWN_STR_LEN+1];
   97   char portid[PORTID_STR_LEN+1];
   98   int loopid;
   99 
  100   int host;
  101   int channel;
  102   int id;
  103   int lun;
  104 
  105   struct fc_device *next;
  106 } fc_device_t;
  107 
  108 typedef int (*decode_func_t)(void *dest, const char *str, size_t size);
  109 typedef int (*encode_func_t)(char *str, void *src, size_t size);
  110 
  111 typedef struct scsi_device_param {
  112 
  113   char substchar;
  114   const char *name;
  115   const char *description;
  116   encode_func_t enc;
  117   decode_func_t dec;
  118   size_t offset;
  119   size_t size;
  120 
  121 } scsi_device_param_t;
  122 
  123 
  124 /* scsi device parameter definitions */
  125 extern scsi_device_param_t params[];
  126 
  127 /* global linked list of scsi devices */
  128 extern scsi_device_t *scsidev_head;
  129 
  130 /* Public functions */
  131 extern int handle_scsi_cmd(int fd,
  132 			   unsigned cmd_len,         /* command length */
  133 			   unsigned in_size,         /* input data size */
  134 			   unsigned char *i_buff,    /* input buffer */
  135 			   unsigned out_size,        /* output data size */
  136 			   unsigned char *o_buff     /* output buffer */);
  137 extern unsigned char *scsi_inquiry (int fd, int evpd, int pg);
  138 extern int get_scsi_dev_info(int fd, scsi_device_t *scsidev);
  139 extern void make_dev_name(char * fname, const char * leadin, int k,
  140                           int do_numeric);
  141 extern scsi_device_t* find_dev_by_loc(int host, int channel, int id, int lun);
  142 extern scsi_device_t* find_dev_by_name(const char* device);
  143 extern void map_sg_devices(int type, const char* prefix, int numeric);
  144 extern int scan_scsi_devices(int sg_numeric);
  145 extern void print_scsi_dev_info(scsi_device_t *scsidev);
  146 extern int free_scsidev(scsi_device_t *scsidev);
  147 
  148 #endif