~ubuntu-branches/ubuntu/lucid/cdrdao/lucid

« back to all changes in this revision

Viewing changes to scsilib/include/scg/scsitransp.h

  • Committer: Bazaar Package Importer
  • Author(s): Andrew Suffield
  • Date: 2004-06-24 22:33:16 UTC
  • Revision ID: james.westby@ubuntu.com-20040624223316-534onzugaeeyq61j
Tags: upstream-1.1.9
ImportĀ upstreamĀ versionĀ 1.1.9

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/* @(#)scsitransp.h     1.54 03/05/03 Copyright 1995 J. Schilling */
 
2
/*
 
3
 *      Definitions for commands that use functions from scsitransp.c
 
4
 *
 
5
 *      Copyright (c) 1995 J. Schilling
 
6
 */
 
7
/*
 
8
 * This program is free software; you can redistribute it and/or modify
 
9
 * it under the terms of the GNU General Public License as published by
 
10
 * the Free Software Foundation; either version 2, or (at your option)
 
11
 * any later version.
 
12
 *
 
13
 * This program is distributed in the hope that it will be useful,
 
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 
16
 * GNU General Public License for more details.
 
17
 *
 
18
 * You should have received a copy of the GNU General Public License along with
 
19
 * this program; see the file COPYING.  If not, write to the Free Software
 
20
 * Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 
21
 */
 
22
 
 
23
#ifndef _SCG_SCSITRANSP_H
 
24
#define _SCG_SCSITRANSP_H
 
25
 
 
26
#ifdef  __cplusplus
 
27
extern "C" {
 
28
#endif
 
29
 
 
30
typedef struct scg_scsi SCSI;
 
31
 
 
32
typedef struct {
 
33
        int     scsibus;        /* SCSI bus #    for next I/O           */
 
34
        int     target;         /* SCSI target # for next I/O           */
 
35
        int     lun;            /* SCSI lun #    for next I/O           */
 
36
} scg_addr_t;
 
37
 
 
38
#ifndef _SCG_SCGOPS_H
 
39
#include <scg/scgops.h>
 
40
#endif
 
41
 
 
42
typedef int     (*scg_cb_t)     __PR((void *));
 
43
 
 
44
struct scg_scsi {
 
45
        scg_ops_t *ops;         /* Ptr to low level SCSI transport ops  */
 
46
        int     fd;             /* File descriptor for next I/O         */
 
47
        scg_addr_t      addr;   /* SCSI address for next I/O            */
 
48
        int     flags;          /* Libscg flags (see below)             */
 
49
        int     dflags;         /* Drive specific flags (see below)     */
 
50
        int     kdebug;         /* Kernel debug value for next I/O      */
 
51
        int     debug;          /* Debug value for SCSI library         */
 
52
        int     silent;         /* Be silent if value > 0               */
 
53
        int     verbose;        /* Be verbose if value > 0              */
 
54
        int     overbose;       /* Be verbose in open() if value > 0    */
 
55
        int     disre_disable;
 
56
        int     deftimeout;
 
57
        int     noparity;       /* Do not use SCSI parity fo next I/O   */
 
58
        int     dev;            /* from scsi_cdr.c                      */
 
59
        struct scg_cmd *scmd;
 
60
        char    *cmdname;
 
61
        char    *curcmdname;
 
62
        BOOL    running;
 
63
        int     error;          /* libscg error number                  */
 
64
 
 
65
        long    maxdma;         /* Max DMA limit for this open instance */
 
66
        long    maxbuf;         /* Cur DMA buffer limit for this inst.  */
 
67
                                /* This is the size behind bufptr       */
 
68
        struct timeval  *cmdstart;
 
69
        struct timeval  *cmdstop;
 
70
        const char      **nonstderrs;
 
71
        void    *local;         /* Local data from the low level code   */
 
72
        void    *bufbase;       /* needed for scsi_freebuf()            */
 
73
        void    *bufptr;        /* DMA buffer pointer for appl. use     */
 
74
        char    *errstr;        /* Error string for scsi_open/sendmcd   */
 
75
        char    *errbeg;        /* Pointer to begin of not flushed data */
 
76
        char    *errptr;        /* Actual write pointer into errstr     */
 
77
        void    *errfile;       /* FILE to write errors to. NULL for not*/
 
78
                                /* writing and leaving errs in errstr   */
 
79
        scg_cb_t cb_fun;
 
80
        void    *cb_arg;
 
81
 
 
82
        struct scsi_inquiry *inq;
 
83
        struct scsi_capacity *cap;
 
84
};
 
85
 
 
86
/*
 
87
 * Macros for accessing members of the scg address structure.
 
88
 * scg_settarget() is the only function that is allowed to modify
 
89
 * the values of the SCSI address.
 
90
 */
 
91
#define scg_scsibus(scgp)       (scgp)->addr.scsibus
 
92
#define scg_target(scgp)        (scgp)->addr.target
 
93
#define scg_lun(scgp)           (scgp)->addr.lun
 
94
 
 
95
/*
 
96
 * Flags for struct SCSI:
 
97
 */
 
98
/* NONE yet */
 
99
 
 
100
/*
 
101
 * Drive specific flags for struct SCSI:
 
102
 */
 
103
#define DRF_MODE_DMA_OVR        0x0001          /* Drive gives DMA overrun */
 
104
                                                /* on mode sense           */
 
105
 
 
106
#define SCSI_ERRSTR_SIZE        4096
 
107
 
 
108
/*
 
109
 * Libscg error codes:
 
110
 */
 
111
#define SCG_ERRBASE             1000000
 
112
#define SCG_NOMEM               1000001
 
113
 
 
114
/*
 
115
 * Function codes for scg_version():
 
116
 */
 
117
#define SCG_VERSION             0       /* libscg or transport version */
 
118
#define SCG_AUTHOR              1       /* Author of above */
 
119
#define SCG_SCCS_ID             2       /* SCCS id of above */
 
120
#define SCG_RVERSION            10      /* Remote transport version */
 
121
#define SCG_RAUTHOR             11      /* Remote transport author */
 
122
#define SCG_RSCCS_ID            12      /* Remote transport SCCS ID */
 
123
#define SCG_KVERSION            20      /* Kernel transport version */
 
124
 
 
125
/*
 
126
 * Function codes for scg_reset():
 
127
 */
 
128
#define SCG_RESET_NOP           0       /* Test if reset is supported */
 
129
#define SCG_RESET_TGT           1       /* Reset Target only */
 
130
#define SCG_RESET_BUS           2       /* Reset complete SCSI Bus */
 
131
 
 
132
/*
 
133
 * Helpers for the error buffer in SCSI*
 
134
 */
 
135
#define scg_errsize(scgp)       ((scgp)->errptr - (scgp)->errstr)
 
136
#define scg_errrsize(scgp)      (SCSI_ERRSTR_SIZE - scg_errsize(scgp))
 
137
 
 
138
/*
 
139
 * From scsitransp.c:
 
140
 */
 
141
extern  char    *scg_version            __PR((SCSI *scgp, int what));
 
142
extern  int     scg__open               __PR((SCSI *scgp, char *device));
 
143
extern  int     scg__close              __PR((SCSI *scgp));
 
144
extern  BOOL    scg_havebus             __PR((SCSI *scgp, int));
 
145
extern  int     scg_initiator_id        __PR((SCSI *scgp));
 
146
extern  int     scg_isatapi             __PR((SCSI *scgp));
 
147
extern  int     scg_reset               __PR((SCSI *scgp, int what));
 
148
extern  void    *scg_getbuf             __PR((SCSI *scgp, long));
 
149
extern  void    scg_freebuf             __PR((SCSI *scgp));
 
150
extern  long    scg_bufsize             __PR((SCSI *scgp, long));
 
151
extern  void    scg_setnonstderrs       __PR((SCSI *scgp, const char **));
 
152
extern  BOOL    scg_yes                 __PR((char *));
 
153
extern  int     scg_cmd                 __PR((SCSI *scgp));
 
154
extern  void    scg_vhead               __PR((SCSI *scgp));
 
155
extern  int     scg_svhead              __PR((SCSI *scgp, char *buf, int maxcnt));
 
156
extern  int     scg_vtail               __PR((SCSI *scgp));
 
157
extern  int     scg_svtail              __PR((SCSI *scgp, int *retp, char *buf, int maxcnt));
 
158
extern  void    scg_vsetup              __PR((SCSI *scgp));
 
159
extern  int     scg_getresid            __PR((SCSI *scgp));
 
160
extern  int     scg_getdmacnt           __PR((SCSI *scgp));
 
161
extern  BOOL    scg_cmd_err             __PR((SCSI *scgp));
 
162
extern  void    scg_printerr            __PR((SCSI *scgp));
 
163
#ifdef  EOF     /* stdio.h has been included */
 
164
extern  void    scg_fprinterr           __PR((SCSI *scgp, FILE *f));
 
165
#endif
 
166
extern  int     scg_sprinterr           __PR((SCSI *scgp, char *buf, int maxcnt));
 
167
extern  int     scg__sprinterr          __PR((SCSI *scgp, char *buf, int maxcnt));
 
168
extern  void    scg_printcdb            __PR((SCSI *scgp));
 
169
extern  int     scg_sprintcdb           __PR((SCSI *scgp, char *buf, int maxcnt));
 
170
extern  void    scg_printwdata          __PR((SCSI *scgp));
 
171
extern  int     scg_sprintwdata         __PR((SCSI *scgp, char *buf, int maxcnt));
 
172
extern  void    scg_printrdata          __PR((SCSI *scgp));
 
173
extern  int     scg_sprintrdata         __PR((SCSI *scgp, char *buf, int maxcnt));
 
174
extern  void    scg_printresult         __PR((SCSI *scgp));
 
175
extern  int     scg_sprintresult        __PR((SCSI *scgp, char *buf, int maxcnt));
 
176
extern  void    scg_printstatus         __PR((SCSI *scgp));
 
177
extern  int     scg_sprintstatus        __PR((SCSI *scgp, char *buf, int maxcnt));
 
178
#ifdef  EOF     /* stdio.h has been included */
 
179
extern  void    scg_fprbytes            __PR((FILE *, char *, unsigned char *, int));
 
180
extern  void    scg_fprascii            __PR((FILE *, char *, unsigned char *, int));
 
181
#endif
 
182
extern  void    scg_prbytes             __PR((char *, unsigned char *, int));
 
183
extern  void    scg_prascii             __PR((char *, unsigned char *, int));
 
184
extern  int     scg_sprbytes            __PR((char *buf, int maxcnt, char *, unsigned char *, int));
 
185
extern  int     scg_sprascii            __PR((char *buf, int maxcnt, char *, unsigned char *, int));
 
186
#ifdef  EOF     /* stdio.h has been included */
 
187
extern  void    scg_fprsense            __PR((FILE *f, unsigned char *, int));
 
188
#endif
 
189
extern  void    scg_prsense             __PR((unsigned char *, int));
 
190
extern  int     scg_sprsense            __PR((char *buf, int maxcnt, unsigned char *, int));
 
191
extern  int     scg_cmd_status          __PR((SCSI *scgp));
 
192
extern  int     scg_sense_key           __PR((SCSI *scgp));
 
193
extern  int     scg_sense_code          __PR((SCSI *scgp));
 
194
extern  int     scg_sense_qual          __PR((SCSI *scgp));
 
195
#ifdef  _SCG_SCSIREG_H
 
196
#ifdef  EOF     /* stdio.h has been included */
 
197
extern  void    scg_fprintdev           __PR((FILE *, struct scsi_inquiry *));
 
198
#endif
 
199
extern  void    scg_printdev            __PR((struct scsi_inquiry *));
 
200
#endif
 
201
extern  int     scg_printf              __PR((SCSI *scgp, const char *form, ...));
 
202
extern  int     scg_errflush            __PR((SCSI *scgp));
 
203
#ifdef  EOF     /* stdio.h has been included */
 
204
extern  int     scg_errfflush           __PR((SCSI *scgp, FILE *f));
 
205
#endif
 
206
 
 
207
/*
 
208
 * From scsierrmsg.c:
 
209
 */
 
210
extern  const char      *scg_sensemsg   __PR((int, int, int,
 
211
                                                const char **, char *, int maxcnt));
 
212
#ifdef  _SCG_SCSISENSE_H
 
213
extern  int             scg__errmsg     __PR((SCSI *scgp, char *obuf, int maxcnt,
 
214
                                                struct scsi_sense *,
 
215
                                                struct scsi_status *,
 
216
                                                int));
 
217
#endif
 
218
 
 
219
/*
 
220
 * From scsiopen.c:
 
221
 */
 
222
#ifdef  EOF     /* stdio.h has been included */
 
223
extern  int     scg_help        __PR((FILE *f));
 
224
#endif
 
225
extern  SCSI    *scg_open       __PR((char *scsidev, char *errs, int slen, int odebug, int be_verbose));
 
226
extern  int     scg_close       __PR((SCSI * scgp));
 
227
extern  void    scg_settimeout  __PR((SCSI * scgp, int timeout));
 
228
extern  SCSI    *scg_smalloc    __PR((void));
 
229
extern  void    scg_sfree       __PR((SCSI *scgp));
 
230
 
 
231
/*
 
232
 * From scgsettarget.c:
 
233
 */
 
234
extern  int     scg_settarget           __PR((SCSI *scgp, int scsibus, int target, int lun));
 
235
 
 
236
/*
 
237
 * From scsi-remote.c:
 
238
 */
 
239
extern  scg_ops_t *scg_remote   __PR((void));
 
240
 
 
241
/*
 
242
 * From scsihelp.c:
 
243
 */
 
244
#ifdef  EOF     /* stdio.h has been included */
 
245
extern  void    __scg_help      __PR((FILE *f, char *name, char *tcomment,
 
246
                                        char *tind,
 
247
                                        char *tspec,
 
248
                                        char *texample,
 
249
                                        BOOL mayscan,
 
250
                                        BOOL bydev));
 
251
#endif
 
252
 
 
253
#ifdef  __cplusplus
 
254
}
 
255
#endif
 
256
 
 
257
#endif  /* _SCG_SCSITRANSP_H */