Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
drivers
scsi
sd.h
Go to the documentation of this file.
1
#ifndef _SCSI_DISK_H
2
#define _SCSI_DISK_H
3
4
/*
5
* More than enough for everybody ;) The huge number of majors
6
* is a leftover from 16bit dev_t days, we don't really need that
7
* much numberspace.
8
*/
9
#define SD_MAJORS 16
10
11
/*
12
* Time out in seconds for disks and Magneto-opticals (which are slower).
13
*/
14
#define SD_TIMEOUT (30 * HZ)
15
#define SD_MOD_TIMEOUT (75 * HZ)
16
#define SD_FLUSH_TIMEOUT (60 * HZ)
17
#define SD_WRITE_SAME_TIMEOUT (120 * HZ)
18
19
/*
20
* Number of allowed retries
21
*/
22
#define SD_MAX_RETRIES 5
23
#define SD_PASSTHROUGH_RETRIES 1
24
#define SD_MAX_MEDIUM_TIMEOUTS 2
25
26
/*
27
* Size of the initial data buffer for mode and read capacity data
28
*/
29
#define SD_BUF_SIZE 512
30
31
/*
32
* Number of sectors at the end of the device to avoid multi-sector
33
* accesses to in the case of last_sector_bug
34
*/
35
#define SD_LAST_BUGGY_SECTORS 8
36
37
enum
{
38
SD_EXT_CDB_SIZE
= 32,
/* Extended CDB size */
39
SD_MEMPOOL_SIZE
= 2,
/* CDB pool size */
40
};
41
42
enum
{
43
SD_MAX_WS10_BLOCKS
= 0xffff,
44
SD_MAX_WS16_BLOCKS
= 0x7fffff,
45
};
46
47
enum
{
48
SD_LBP_FULL
= 0,
/* Full logical block provisioning */
49
SD_LBP_UNMAP
,
/* Use UNMAP command */
50
SD_LBP_WS16
,
/* Use WRITE SAME(16) with UNMAP bit */
51
SD_LBP_WS10
,
/* Use WRITE SAME(10) with UNMAP bit */
52
SD_LBP_ZERO
,
/* Use WRITE SAME(10) with zero payload */
53
SD_LBP_DISABLE
,
/* Discard disabled due to failed cmd */
54
};
55
56
struct
scsi_disk
{
57
struct
scsi_driver
*
driver
;
/* always &sd_template */
58
struct
scsi_device
*
device
;
59
struct
device
dev
;
60
struct
gendisk *
disk
;
61
atomic_t
openers
;
62
sector_t
capacity
;
/* size in 512-byte sectors */
63
u32
max_ws_blocks
;
64
u32
max_unmap_blocks
;
65
u32
unmap_granularity
;
66
u32
unmap_alignment
;
67
u32
index
;
68
unsigned
int
physical_block_size
;
69
unsigned
int
max_medium_access_timeouts
;
70
unsigned
int
medium_access_timed_out
;
71
u8
media_present
;
72
u8
write_prot
;
73
u8
protection_type
;
/* Data Integrity Field */
74
u8
provisioning_mode
;
75
unsigned
ATO
: 1;
/* state of disk ATO bit */
76
unsigned
WCE
: 1;
/* state of disk WCE bit */
77
unsigned
RCD
: 1;
/* state of disk RCD bit, unused */
78
unsigned
DPOFUA
: 1;
/* state of disk DPOFUA bit */
79
unsigned
first_scan
: 1;
80
unsigned
lbpme
: 1;
81
unsigned
lbprz
: 1;
82
unsigned
lbpu
: 1;
83
unsigned
lbpws
: 1;
84
unsigned
lbpws10
: 1;
85
unsigned
lbpvpd
: 1;
86
unsigned
ws16
: 1;
87
};
88
#define to_scsi_disk(obj) container_of(obj,struct scsi_disk,dev)
89
90
static
inline
struct
scsi_disk
*
scsi_disk
(
struct
gendisk *
disk
)
91
{
92
return
container_of
(disk->private_data,
struct
scsi_disk
,
driver
);
93
}
94
95
#define sd_printk(prefix, sdsk, fmt, a...) \
96
(sdsk)->disk ? \
97
sdev_printk(prefix, (sdsk)->device, "[%s] " fmt, \
98
(sdsk)->disk->disk_name, ##a) : \
99
sdev_printk(prefix, (sdsk)->device, fmt, ##a)
100
101
static
inline
int
scsi_medium_access_command(
struct
scsi_cmnd
*scmd)
102
{
103
switch
(scmd->
cmnd
[0]) {
104
case
READ_6
:
105
case
READ_10
:
106
case
READ_12
:
107
case
READ_16
:
108
case
SYNCHRONIZE_CACHE
:
109
case
VERIFY
:
110
case
VERIFY_12
:
111
case
VERIFY_16
:
112
case
WRITE_6
:
113
case
WRITE_10
:
114
case
WRITE_12
:
115
case
WRITE_16
:
116
case
WRITE_SAME
:
117
case
WRITE_SAME_16
:
118
case
UNMAP
:
119
return
1;
120
case
VARIABLE_LENGTH_CMD
:
121
switch
(scmd->
cmnd
[9]) {
122
case
READ_32
:
123
case
VERIFY_32
:
124
case
WRITE_32
:
125
case
WRITE_SAME_32
:
126
return
1;
127
}
128
}
129
130
return
0;
131
}
132
133
/*
134
* A DIF-capable target device can be formatted with different
135
* protection schemes. Currently 0 through 3 are defined:
136
*
137
* Type 0 is regular (unprotected) I/O
138
*
139
* Type 1 defines the contents of the guard and reference tags
140
*
141
* Type 2 defines the contents of the guard and reference tags and
142
* uses 32-byte commands to seed the latter
143
*
144
* Type 3 defines the contents of the guard tag only
145
*/
146
147
enum
sd_dif_target_protection_types
{
148
SD_DIF_TYPE0_PROTECTION
= 0x0,
149
SD_DIF_TYPE1_PROTECTION
= 0x1,
150
SD_DIF_TYPE2_PROTECTION
= 0x2,
151
SD_DIF_TYPE3_PROTECTION
= 0x3,
152
};
153
154
/*
155
* Data Integrity Field tuple.
156
*/
157
struct
sd_dif_tuple
{
158
__be16
guard_tag
;
/* Checksum */
159
__be16
app_tag
;
/* Opaque storage */
160
__be32
ref_tag
;
/* Target LBA or indirect LBA */
161
};
162
163
#ifdef CONFIG_BLK_DEV_INTEGRITY
164
165
extern
void
sd_dif_config_host
(
struct
scsi_disk
*);
166
extern
void
sd_dif_prepare
(
struct
request
*
rq
,
sector_t
,
unsigned
int
);
167
extern
void
sd_dif_complete
(
struct
scsi_cmnd
*,
unsigned
int
);
168
169
#else
/* CONFIG_BLK_DEV_INTEGRITY */
170
171
static
inline
void
sd_dif_config_host
(
struct
scsi_disk
*disk)
172
{
173
}
174
static
inline
int
sd_dif_prepare
(
struct
request
*
rq
,
sector_t
s
,
unsigned
int
a
)
175
{
176
return
0;
177
}
178
static
inline
void
sd_dif_complete
(
struct
scsi_cmnd
*
cmd
,
unsigned
int
a
)
179
{
180
}
181
182
#endif
/* CONFIG_BLK_DEV_INTEGRITY */
183
184
#endif
/* _SCSI_DISK_H */
Generated on Thu Jan 10 2013 13:55:32 for Linux Kernel by
1.8.2