"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