Project

General

Profile

Statistics
| Revision:

root / lab4 / .minix-src / include / sys / scsiio.h @ 14

History | View | Annotate | Download (3.22 KB)

1 13 up20180614
/*     $NetBSD: scsiio.h,v 1.12 2007/03/04 06:03:41 christos Exp $        */
2
3
#ifndef _SYS_SCSIIO_H_
4
#define _SYS_SCSIIO_H_
5
6
7
#include <sys/types.h>
8
#include <sys/ioctl.h>
9
10
#define        SENSEBUFLEN 48
11
12
typedef struct        scsireq {
13
        u_long        flags;                /* info about the request status and type */
14
        u_long        timeout;
15
        u_char        cmd[16];        /* 12 is actually the max */
16
        u_char        cmdlen;
17
        void *        databuf;        /* address in user space of buffer */
18
        u_long        datalen;        /* size of user buffer (request) */
19
        u_long        datalen_used;        /* size of user buffer (used)*/
20
        u_char        sense[SENSEBUFLEN]; /* returned sense will be in here */
21
        u_char        senselen;        /* sensedata request size (MAX of SENSEBUFLEN)*/
22
        u_char        senselen_used;        /* return value only */
23
        u_char        status;                /* what the scsi status was from the adapter */
24
        u_char        retsts;                /* the return status for the command */
25
        int        error;                /* error bits */
26
} scsireq_t;
27
28
/* bit definitions for flags */
29
#define SCCMD_READ                0x00000001
30
#define SCCMD_WRITE                0x00000002
31
#define SCCMD_IOV                0x00000004
32
#define SCCMD_ESCAPE                0x00000010
33
#define SCCMD_TARGET                0x00000020
34
35
36
/* definitions for the return status (retsts) */
37
#define SCCMD_OK        0x00
38
#define SCCMD_TIMEOUT        0x01
39
#define SCCMD_BUSY        0x02
40
#define SCCMD_SENSE        0x03
41
#define SCCMD_UNKNOWN        0x04
42
43
#define SCIOCCOMMAND        _IOWR('Q', 1, scsireq_t)
44
45
#define SC_DB_CMDS        0x00000001        /* show all scsi cmds and errors */
46
#define SC_DB_FLOW        0x00000002        /* show routines entered        */
47
#define SC_DB_FLOW2        0x00000004        /* show path INSIDE routines        */
48
#define SC_DB_DMA        0x00000008        /* show DMA segments etc        */
49
#define SCIOCDEBUG        _IOW('Q', 2, int)        /* from 0 to 15 */
50
51
struct        oscsi_addr {
52
        int        scbus;                /* -1 if wildcard */
53
        int        target;                /* -1 if wildcard */
54
        int        lun;                /* -1 if wildcard */
55
};
56
57
struct        scsi_addr {
58
        int type;       /* bus type */
59
#define TYPE_SCSI 0
60
#define TYPE_ATAPI 1
61
        union {
62
                struct oscsi_addr scsi;
63
                struct _atapi {
64
                        int atbus;  /* -1 if wildcard */
65
                        int drive;  /* -1 if wildcard */
66
                } atapi;
67
        } addr;
68
};
69
70
/*
71
 * SCSI device ioctls
72
 */
73
74
#define SCIOCIDENTIFY        _IOR('Q', 4, struct scsi_addr) /* where are you? */
75
#define  OSCIOCIDENTIFY        _IOR('Q', 4, struct oscsi_addr)
76
#define SCIOCDECONFIG        _IO('Q', 5)        /* please disappear */
77
#define SCIOCRECONFIG        _IO('Q', 6)        /* please check again */
78
#define SCIOCRESET        _IO('Q', 7)        /* reset the device */
79
80
/*
81
 * SCSI bus ioctls
82
 */
83
84
/* Scan bus for new devices. */
85
struct scbusioscan_args {
86
        int        sa_target;        /* target to scan; -1 for wildcard */
87
        int        sa_lun;                /* lun to scan; -1 for wildcard */
88
};
89
#define        SCBUSIOSCAN        _IOW('U', 0, struct scbusioscan_args)
90
91
#define        SCBUSIORESET        _IO('U', 1)        /* reset SCSI bus */
92
93
struct scbusiodetach_args {
94
        int        sa_target;        /* target to scan; -1 for wildcard */
95
        int        sa_lun;                /* lun to scan; -1 for wildcard */
96
};
97
#define        SCBUSIODETACH        _IOW('U', 2, struct scbusiodetach_args)
98
99
/* enable/disable device properties */
100
struct scbusaccel_args {
101
        int        sa_target;        /* target to set property on */
102
        int        sa_lun;                /* lun to set property on */
103
        int        sa_flags;        /* flags to set or clear */
104
};
105
#define        SC_ACCEL_SYNC        0x01        /* enable sync mode */
106
#define        SC_ACCEL_WIDE        0x02        /* enable wide transfers */
107
#define        SC_ACCEL_TAGS        0x04        /* enable tagged queuing */
108
#define        SCBUSACCEL        _IOW('U', 2, struct scbusaccel_args)
109
110
#define        SCBUSIOLLSCAN        _IO('U', 3)        /* perform low-level scan */
111
112
#endif /* _SYS_SCSIIO_H_ */