Commit 85a0f7b220777cd3c232fd2f079db5c4a874c4ee

Authored by Jens Axboe

Merge branch 'for-3.3/mtip32xx' into for-3.3/drivers

Showing 6 changed files Inline Diff

drivers/block/Kconfig
1 # 1 #
2 # Block device driver configuration 2 # Block device driver configuration
3 # 3 #
4 4
5 menuconfig BLK_DEV 5 menuconfig BLK_DEV
6 bool "Block devices" 6 bool "Block devices"
7 depends on BLOCK 7 depends on BLOCK
8 default y 8 default y
9 ---help--- 9 ---help---
10 Say Y here to get to see options for various different block device 10 Say Y here to get to see options for various different block device
11 drivers. This option alone does not add any kernel code. 11 drivers. This option alone does not add any kernel code.
12 12
13 If you say N, all options in this submenu will be skipped and disabled; 13 If you say N, all options in this submenu will be skipped and disabled;
14 only do this if you know what you are doing. 14 only do this if you know what you are doing.
15 15
16 if BLK_DEV 16 if BLK_DEV
17 17
18 config BLK_DEV_FD 18 config BLK_DEV_FD
19 tristate "Normal floppy disk support" 19 tristate "Normal floppy disk support"
20 depends on ARCH_MAY_HAVE_PC_FDC 20 depends on ARCH_MAY_HAVE_PC_FDC
21 ---help--- 21 ---help---
22 If you want to use the floppy disk drive(s) of your PC under Linux, 22 If you want to use the floppy disk drive(s) of your PC under Linux,
23 say Y. Information about this driver, especially important for IBM 23 say Y. Information about this driver, especially important for IBM
24 Thinkpad users, is contained in 24 Thinkpad users, is contained in
25 <file:Documentation/blockdev/floppy.txt>. 25 <file:Documentation/blockdev/floppy.txt>.
26 That file also contains the location of the Floppy driver FAQ as 26 That file also contains the location of the Floppy driver FAQ as
27 well as location of the fdutils package used to configure additional 27 well as location of the fdutils package used to configure additional
28 parameters of the driver at run time. 28 parameters of the driver at run time.
29 29
30 To compile this driver as a module, choose M here: the 30 To compile this driver as a module, choose M here: the
31 module will be called floppy. 31 module will be called floppy.
32 32
33 config AMIGA_FLOPPY 33 config AMIGA_FLOPPY
34 tristate "Amiga floppy support" 34 tristate "Amiga floppy support"
35 depends on AMIGA 35 depends on AMIGA
36 36
37 config ATARI_FLOPPY 37 config ATARI_FLOPPY
38 tristate "Atari floppy support" 38 tristate "Atari floppy support"
39 depends on ATARI 39 depends on ATARI
40 40
41 config MAC_FLOPPY 41 config MAC_FLOPPY
42 tristate "Support for PowerMac floppy" 42 tristate "Support for PowerMac floppy"
43 depends on PPC_PMAC && !PPC_PMAC64 43 depends on PPC_PMAC && !PPC_PMAC64
44 help 44 help
45 If you have a SWIM-3 (Super Woz Integrated Machine 3; from Apple) 45 If you have a SWIM-3 (Super Woz Integrated Machine 3; from Apple)
46 floppy controller, say Y here. Most commonly found in PowerMacs. 46 floppy controller, say Y here. Most commonly found in PowerMacs.
47 47
48 config BLK_DEV_SWIM 48 config BLK_DEV_SWIM
49 tristate "Support for SWIM Macintosh floppy" 49 tristate "Support for SWIM Macintosh floppy"
50 depends on M68K && MAC 50 depends on M68K && MAC
51 help 51 help
52 You should select this option if you want floppy support 52 You should select this option if you want floppy support
53 and you don't have a II, IIfx, Q900, Q950 or AV series. 53 and you don't have a II, IIfx, Q900, Q950 or AV series.
54 54
55 config AMIGA_Z2RAM 55 config AMIGA_Z2RAM
56 tristate "Amiga Zorro II ramdisk support" 56 tristate "Amiga Zorro II ramdisk support"
57 depends on ZORRO 57 depends on ZORRO
58 help 58 help
59 This enables support for using Chip RAM and Zorro II RAM as a 59 This enables support for using Chip RAM and Zorro II RAM as a
60 ramdisk or as a swap partition. Say Y if you want to include this 60 ramdisk or as a swap partition. Say Y if you want to include this
61 driver in the kernel. 61 driver in the kernel.
62 62
63 To compile this driver as a module, choose M here: the 63 To compile this driver as a module, choose M here: the
64 module will be called z2ram. 64 module will be called z2ram.
65 65
66 config BLK_DEV_XD 66 config BLK_DEV_XD
67 tristate "XT hard disk support" 67 tristate "XT hard disk support"
68 depends on ISA && ISA_DMA_API 68 depends on ISA && ISA_DMA_API
69 select CHECK_SIGNATURE 69 select CHECK_SIGNATURE
70 help 70 help
71 Very old 8 bit hard disk controllers used in the IBM XT computer 71 Very old 8 bit hard disk controllers used in the IBM XT computer
72 will be supported if you say Y here. 72 will be supported if you say Y here.
73 73
74 To compile this driver as a module, choose M here: the 74 To compile this driver as a module, choose M here: the
75 module will be called xd. 75 module will be called xd.
76 76
77 It's pretty unlikely that you have one of these: say N. 77 It's pretty unlikely that you have one of these: say N.
78 78
79 config GDROM 79 config GDROM
80 tristate "SEGA Dreamcast GD-ROM drive" 80 tristate "SEGA Dreamcast GD-ROM drive"
81 depends on SH_DREAMCAST 81 depends on SH_DREAMCAST
82 help 82 help
83 A standard SEGA Dreamcast comes with a modified CD ROM drive called a 83 A standard SEGA Dreamcast comes with a modified CD ROM drive called a
84 "GD-ROM" by SEGA to signify it is capable of reading special disks 84 "GD-ROM" by SEGA to signify it is capable of reading special disks
85 with up to 1 GB of data. This drive will also read standard CD ROM 85 with up to 1 GB of data. This drive will also read standard CD ROM
86 disks. Select this option to access any disks in your GD ROM drive. 86 disks. Select this option to access any disks in your GD ROM drive.
87 Most users will want to say "Y" here. 87 Most users will want to say "Y" here.
88 You can also build this as a module which will be called gdrom. 88 You can also build this as a module which will be called gdrom.
89 89
90 config PARIDE 90 config PARIDE
91 tristate "Parallel port IDE device support" 91 tristate "Parallel port IDE device support"
92 depends on PARPORT_PC 92 depends on PARPORT_PC
93 ---help--- 93 ---help---
94 There are many external CD-ROM and disk devices that connect through 94 There are many external CD-ROM and disk devices that connect through
95 your computer's parallel port. Most of them are actually IDE devices 95 your computer's parallel port. Most of them are actually IDE devices
96 using a parallel port IDE adapter. This option enables the PARIDE 96 using a parallel port IDE adapter. This option enables the PARIDE
97 subsystem which contains drivers for many of these external drives. 97 subsystem which contains drivers for many of these external drives.
98 Read <file:Documentation/blockdev/paride.txt> for more information. 98 Read <file:Documentation/blockdev/paride.txt> for more information.
99 99
100 If you have said Y to the "Parallel-port support" configuration 100 If you have said Y to the "Parallel-port support" configuration
101 option, you may share a single port between your printer and other 101 option, you may share a single port between your printer and other
102 parallel port devices. Answer Y to build PARIDE support into your 102 parallel port devices. Answer Y to build PARIDE support into your
103 kernel, or M if you would like to build it as a loadable module. If 103 kernel, or M if you would like to build it as a loadable module. If
104 your parallel port support is in a loadable module, you must build 104 your parallel port support is in a loadable module, you must build
105 PARIDE as a module. If you built PARIDE support into your kernel, 105 PARIDE as a module. If you built PARIDE support into your kernel,
106 you may still build the individual protocol modules and high-level 106 you may still build the individual protocol modules and high-level
107 drivers as loadable modules. If you build this support as a module, 107 drivers as loadable modules. If you build this support as a module,
108 it will be called paride. 108 it will be called paride.
109 109
110 To use the PARIDE support, you must say Y or M here and also to at 110 To use the PARIDE support, you must say Y or M here and also to at
111 least one high-level driver (e.g. "Parallel port IDE disks", 111 least one high-level driver (e.g. "Parallel port IDE disks",
112 "Parallel port ATAPI CD-ROMs", "Parallel port ATAPI disks" etc.) and 112 "Parallel port ATAPI CD-ROMs", "Parallel port ATAPI disks" etc.) and
113 to at least one protocol driver (e.g. "ATEN EH-100 protocol", 113 to at least one protocol driver (e.g. "ATEN EH-100 protocol",
114 "MicroSolutions backpack protocol", "DataStor Commuter protocol" 114 "MicroSolutions backpack protocol", "DataStor Commuter protocol"
115 etc.). 115 etc.).
116 116
117 source "drivers/block/paride/Kconfig" 117 source "drivers/block/paride/Kconfig"
118 118
119 source "drivers/block/mtip32xx/Kconfig"
120
119 config BLK_CPQ_DA 121 config BLK_CPQ_DA
120 tristate "Compaq SMART2 support" 122 tristate "Compaq SMART2 support"
121 depends on PCI && VIRT_TO_BUS 123 depends on PCI && VIRT_TO_BUS
122 help 124 help
123 This is the driver for Compaq Smart Array controllers. Everyone 125 This is the driver for Compaq Smart Array controllers. Everyone
124 using these boards should say Y here. See the file 126 using these boards should say Y here. See the file
125 <file:Documentation/blockdev/cpqarray.txt> for the current list of 127 <file:Documentation/blockdev/cpqarray.txt> for the current list of
126 boards supported by this driver, and for further information on the 128 boards supported by this driver, and for further information on the
127 use of this driver. 129 use of this driver.
128 130
129 config BLK_CPQ_CISS_DA 131 config BLK_CPQ_CISS_DA
130 tristate "Compaq Smart Array 5xxx support" 132 tristate "Compaq Smart Array 5xxx support"
131 depends on PCI 133 depends on PCI
132 help 134 help
133 This is the driver for Compaq Smart Array 5xxx controllers. 135 This is the driver for Compaq Smart Array 5xxx controllers.
134 Everyone using these boards should say Y here. 136 Everyone using these boards should say Y here.
135 See <file:Documentation/blockdev/cciss.txt> for the current list of 137 See <file:Documentation/blockdev/cciss.txt> for the current list of
136 boards supported by this driver, and for further information 138 boards supported by this driver, and for further information
137 on the use of this driver. 139 on the use of this driver.
138 140
139 config CISS_SCSI_TAPE 141 config CISS_SCSI_TAPE
140 bool "SCSI tape drive support for Smart Array 5xxx" 142 bool "SCSI tape drive support for Smart Array 5xxx"
141 depends on BLK_CPQ_CISS_DA && PROC_FS 143 depends on BLK_CPQ_CISS_DA && PROC_FS
142 depends on SCSI=y || SCSI=BLK_CPQ_CISS_DA 144 depends on SCSI=y || SCSI=BLK_CPQ_CISS_DA
143 help 145 help
144 When enabled (Y), this option allows SCSI tape drives and SCSI medium 146 When enabled (Y), this option allows SCSI tape drives and SCSI medium
145 changers (tape robots) to be accessed via a Compaq 5xxx array 147 changers (tape robots) to be accessed via a Compaq 5xxx array
146 controller. (See <file:Documentation/blockdev/cciss.txt> for more details.) 148 controller. (See <file:Documentation/blockdev/cciss.txt> for more details.)
147 149
148 "SCSI support" and "SCSI tape support" must also be enabled for this 150 "SCSI support" and "SCSI tape support" must also be enabled for this
149 option to work. 151 option to work.
150 152
151 When this option is disabled (N), the SCSI portion of the driver 153 When this option is disabled (N), the SCSI portion of the driver
152 is not compiled. 154 is not compiled.
153 155
154 config BLK_DEV_DAC960 156 config BLK_DEV_DAC960
155 tristate "Mylex DAC960/DAC1100 PCI RAID Controller support" 157 tristate "Mylex DAC960/DAC1100 PCI RAID Controller support"
156 depends on PCI 158 depends on PCI
157 help 159 help
158 This driver adds support for the Mylex DAC960, AcceleRAID, and 160 This driver adds support for the Mylex DAC960, AcceleRAID, and
159 eXtremeRAID PCI RAID controllers. See the file 161 eXtremeRAID PCI RAID controllers. See the file
160 <file:Documentation/blockdev/README.DAC960> for further information 162 <file:Documentation/blockdev/README.DAC960> for further information
161 about this driver. 163 about this driver.
162 164
163 To compile this driver as a module, choose M here: the 165 To compile this driver as a module, choose M here: the
164 module will be called DAC960. 166 module will be called DAC960.
165 167
166 config BLK_DEV_UMEM 168 config BLK_DEV_UMEM
167 tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)" 169 tristate "Micro Memory MM5415 Battery Backed RAM support (EXPERIMENTAL)"
168 depends on PCI && EXPERIMENTAL 170 depends on PCI && EXPERIMENTAL
169 ---help--- 171 ---help---
170 Saying Y here will include support for the MM5415 family of 172 Saying Y here will include support for the MM5415 family of
171 battery backed (Non-volatile) RAM cards. 173 battery backed (Non-volatile) RAM cards.
172 <http://www.umem.com/> 174 <http://www.umem.com/>
173 175
174 The cards appear as block devices that can be partitioned into 176 The cards appear as block devices that can be partitioned into
175 as many as 15 partitions. 177 as many as 15 partitions.
176 178
177 To compile this driver as a module, choose M here: the 179 To compile this driver as a module, choose M here: the
178 module will be called umem. 180 module will be called umem.
179 181
180 The umem driver has not yet been allocated a MAJOR number, so 182 The umem driver has not yet been allocated a MAJOR number, so
181 one is chosen dynamically. 183 one is chosen dynamically.
182 184
183 config BLK_DEV_UBD 185 config BLK_DEV_UBD
184 bool "Virtual block device" 186 bool "Virtual block device"
185 depends on UML 187 depends on UML
186 ---help--- 188 ---help---
187 The User-Mode Linux port includes a driver called UBD which will let 189 The User-Mode Linux port includes a driver called UBD which will let
188 you access arbitrary files on the host computer as block devices. 190 you access arbitrary files on the host computer as block devices.
189 Unless you know that you do not need such virtual block devices say 191 Unless you know that you do not need such virtual block devices say
190 Y here. 192 Y here.
191 193
192 config BLK_DEV_UBD_SYNC 194 config BLK_DEV_UBD_SYNC
193 bool "Always do synchronous disk IO for UBD" 195 bool "Always do synchronous disk IO for UBD"
194 depends on BLK_DEV_UBD 196 depends on BLK_DEV_UBD
195 ---help--- 197 ---help---
196 Writes to the virtual block device are not immediately written to the 198 Writes to the virtual block device are not immediately written to the
197 host's disk; this may cause problems if, for example, the User-Mode 199 host's disk; this may cause problems if, for example, the User-Mode
198 Linux 'Virtual Machine' uses a journalling filesystem and the host 200 Linux 'Virtual Machine' uses a journalling filesystem and the host
199 computer crashes. 201 computer crashes.
200 202
201 Synchronous operation (i.e. always writing data to the host's disk 203 Synchronous operation (i.e. always writing data to the host's disk
202 immediately) is configurable on a per-UBD basis by using a special 204 immediately) is configurable on a per-UBD basis by using a special
203 kernel command line option. Alternatively, you can say Y here to 205 kernel command line option. Alternatively, you can say Y here to
204 turn on synchronous operation by default for all block devices. 206 turn on synchronous operation by default for all block devices.
205 207
206 If you're running a journalling file system (like reiserfs, for 208 If you're running a journalling file system (like reiserfs, for
207 example) in your virtual machine, you will want to say Y here. If 209 example) in your virtual machine, you will want to say Y here. If
208 you care for the safety of the data in your virtual machine, Y is a 210 you care for the safety of the data in your virtual machine, Y is a
209 wise choice too. In all other cases (for example, if you're just 211 wise choice too. In all other cases (for example, if you're just
210 playing around with User-Mode Linux) you can choose N. 212 playing around with User-Mode Linux) you can choose N.
211 213
212 config BLK_DEV_COW_COMMON 214 config BLK_DEV_COW_COMMON
213 bool 215 bool
214 default BLK_DEV_UBD 216 default BLK_DEV_UBD
215 217
216 config BLK_DEV_LOOP 218 config BLK_DEV_LOOP
217 tristate "Loopback device support" 219 tristate "Loopback device support"
218 ---help--- 220 ---help---
219 Saying Y here will allow you to use a regular file as a block 221 Saying Y here will allow you to use a regular file as a block
220 device; you can then create a file system on that block device and 222 device; you can then create a file system on that block device and
221 mount it just as you would mount other block devices such as hard 223 mount it just as you would mount other block devices such as hard
222 drive partitions, CD-ROM drives or floppy drives. The loop devices 224 drive partitions, CD-ROM drives or floppy drives. The loop devices
223 are block special device files with major number 7 and typically 225 are block special device files with major number 7 and typically
224 called /dev/loop0, /dev/loop1 etc. 226 called /dev/loop0, /dev/loop1 etc.
225 227
226 This is useful if you want to check an ISO 9660 file system before 228 This is useful if you want to check an ISO 9660 file system before
227 burning the CD, or if you want to use floppy images without first 229 burning the CD, or if you want to use floppy images without first
228 writing them to floppy. Furthermore, some Linux distributions avoid 230 writing them to floppy. Furthermore, some Linux distributions avoid
229 the need for a dedicated Linux partition by keeping their complete 231 the need for a dedicated Linux partition by keeping their complete
230 root file system inside a DOS FAT file using this loop device 232 root file system inside a DOS FAT file using this loop device
231 driver. 233 driver.
232 234
233 To use the loop device, you need the losetup utility, found in the 235 To use the loop device, you need the losetup utility, found in the
234 util-linux package, see 236 util-linux package, see
235 <ftp://ftp.kernel.org/pub/linux/utils/util-linux/>. 237 <ftp://ftp.kernel.org/pub/linux/utils/util-linux/>.
236 238
237 The loop device driver can also be used to "hide" a file system in 239 The loop device driver can also be used to "hide" a file system in
238 a disk partition, floppy, or regular file, either using encryption 240 a disk partition, floppy, or regular file, either using encryption
239 (scrambling the data) or steganography (hiding the data in the low 241 (scrambling the data) or steganography (hiding the data in the low
240 bits of, say, a sound file). This is also safe if the file resides 242 bits of, say, a sound file). This is also safe if the file resides
241 on a remote file server. 243 on a remote file server.
242 244
243 There are several ways of encrypting disks. Some of these require 245 There are several ways of encrypting disks. Some of these require
244 kernel patches. The vanilla kernel offers the cryptoloop option 246 kernel patches. The vanilla kernel offers the cryptoloop option
245 and a Device Mapper target (which is superior, as it supports all 247 and a Device Mapper target (which is superior, as it supports all
246 file systems). If you want to use the cryptoloop, say Y to both 248 file systems). If you want to use the cryptoloop, say Y to both
247 LOOP and CRYPTOLOOP, and make sure you have a recent (version 2.12 249 LOOP and CRYPTOLOOP, and make sure you have a recent (version 2.12
248 or later) version of util-linux. Additionally, be aware that 250 or later) version of util-linux. Additionally, be aware that
249 the cryptoloop is not safe for storing journaled filesystems. 251 the cryptoloop is not safe for storing journaled filesystems.
250 252
251 Note that this loop device has nothing to do with the loopback 253 Note that this loop device has nothing to do with the loopback
252 device used for network connections from the machine to itself. 254 device used for network connections from the machine to itself.
253 255
254 To compile this driver as a module, choose M here: the 256 To compile this driver as a module, choose M here: the
255 module will be called loop. 257 module will be called loop.
256 258
257 Most users will answer N here. 259 Most users will answer N here.
258 260
259 config BLK_DEV_LOOP_MIN_COUNT 261 config BLK_DEV_LOOP_MIN_COUNT
260 int "Number of loop devices to pre-create at init time" 262 int "Number of loop devices to pre-create at init time"
261 depends on BLK_DEV_LOOP 263 depends on BLK_DEV_LOOP
262 default 8 264 default 8
263 help 265 help
264 Static number of loop devices to be unconditionally pre-created 266 Static number of loop devices to be unconditionally pre-created
265 at init time. 267 at init time.
266 268
267 This default value can be overwritten on the kernel command 269 This default value can be overwritten on the kernel command
268 line or with module-parameter loop.max_loop. 270 line or with module-parameter loop.max_loop.
269 271
270 The historic default is 8. If a late 2011 version of losetup(8) 272 The historic default is 8. If a late 2011 version of losetup(8)
271 is used, it can be set to 0, since needed loop devices can be 273 is used, it can be set to 0, since needed loop devices can be
272 dynamically allocated with the /dev/loop-control interface. 274 dynamically allocated with the /dev/loop-control interface.
273 275
274 config BLK_DEV_CRYPTOLOOP 276 config BLK_DEV_CRYPTOLOOP
275 tristate "Cryptoloop Support" 277 tristate "Cryptoloop Support"
276 select CRYPTO 278 select CRYPTO
277 select CRYPTO_CBC 279 select CRYPTO_CBC
278 depends on BLK_DEV_LOOP 280 depends on BLK_DEV_LOOP
279 ---help--- 281 ---help---
280 Say Y here if you want to be able to use the ciphers that are 282 Say Y here if you want to be able to use the ciphers that are
281 provided by the CryptoAPI as loop transformation. This might be 283 provided by the CryptoAPI as loop transformation. This might be
282 used as hard disk encryption. 284 used as hard disk encryption.
283 285
284 WARNING: This device is not safe for journaled file systems like 286 WARNING: This device is not safe for journaled file systems like
285 ext3 or Reiserfs. Please use the Device Mapper crypto module 287 ext3 or Reiserfs. Please use the Device Mapper crypto module
286 instead, which can be configured to be on-disk compatible with the 288 instead, which can be configured to be on-disk compatible with the
287 cryptoloop device. 289 cryptoloop device.
288 290
289 source "drivers/block/drbd/Kconfig" 291 source "drivers/block/drbd/Kconfig"
290 292
291 config BLK_DEV_NBD 293 config BLK_DEV_NBD
292 tristate "Network block device support" 294 tristate "Network block device support"
293 depends on NET 295 depends on NET
294 ---help--- 296 ---help---
295 Saying Y here will allow your computer to be a client for network 297 Saying Y here will allow your computer to be a client for network
296 block devices, i.e. it will be able to use block devices exported by 298 block devices, i.e. it will be able to use block devices exported by
297 servers (mount file systems on them etc.). Communication between 299 servers (mount file systems on them etc.). Communication between
298 client and server works over TCP/IP networking, but to the client 300 client and server works over TCP/IP networking, but to the client
299 program this is hidden: it looks like a regular local file access to 301 program this is hidden: it looks like a regular local file access to
300 a block device special file such as /dev/nd0. 302 a block device special file such as /dev/nd0.
301 303
302 Network block devices also allows you to run a block-device in 304 Network block devices also allows you to run a block-device in
303 userland (making server and client physically the same computer, 305 userland (making server and client physically the same computer,
304 communicating using the loopback network device). 306 communicating using the loopback network device).
305 307
306 Read <file:Documentation/blockdev/nbd.txt> for more information, 308 Read <file:Documentation/blockdev/nbd.txt> for more information,
307 especially about where to find the server code, which runs in user 309 especially about where to find the server code, which runs in user
308 space and does not need special kernel support. 310 space and does not need special kernel support.
309 311
310 Note that this has nothing to do with the network file systems NFS 312 Note that this has nothing to do with the network file systems NFS
311 or Coda; you can say N here even if you intend to use NFS or Coda. 313 or Coda; you can say N here even if you intend to use NFS or Coda.
312 314
313 To compile this driver as a module, choose M here: the 315 To compile this driver as a module, choose M here: the
314 module will be called nbd. 316 module will be called nbd.
315 317
316 If unsure, say N. 318 If unsure, say N.
317 319
318 config BLK_DEV_OSD 320 config BLK_DEV_OSD
319 tristate "OSD object-as-blkdev support" 321 tristate "OSD object-as-blkdev support"
320 depends on SCSI_OSD_ULD 322 depends on SCSI_OSD_ULD
321 ---help--- 323 ---help---
322 Saying Y or M here will allow the exporting of a single SCSI 324 Saying Y or M here will allow the exporting of a single SCSI
323 OSD (object-based storage) object as a Linux block device. 325 OSD (object-based storage) object as a Linux block device.
324 326
325 For example, if you create a 2G object on an OSD device, 327 For example, if you create a 2G object on an OSD device,
326 you can then use this module to present that 2G object as 328 you can then use this module to present that 2G object as
327 a Linux block device. 329 a Linux block device.
328 330
329 To compile this driver as a module, choose M here: the 331 To compile this driver as a module, choose M here: the
330 module will be called osdblk. 332 module will be called osdblk.
331 333
332 If unsure, say N. 334 If unsure, say N.
333 335
334 config BLK_DEV_SX8 336 config BLK_DEV_SX8
335 tristate "Promise SATA SX8 support" 337 tristate "Promise SATA SX8 support"
336 depends on PCI 338 depends on PCI
337 ---help--- 339 ---help---
338 Saying Y or M here will enable support for the 340 Saying Y or M here will enable support for the
339 Promise SATA SX8 controllers. 341 Promise SATA SX8 controllers.
340 342
341 Use devices /dev/sx8/$N and /dev/sx8/$Np$M. 343 Use devices /dev/sx8/$N and /dev/sx8/$Np$M.
342 344
343 config BLK_DEV_UB 345 config BLK_DEV_UB
344 tristate "Low Performance USB Block driver" 346 tristate "Low Performance USB Block driver"
345 depends on USB 347 depends on USB
346 help 348 help
347 This driver supports certain USB attached storage devices 349 This driver supports certain USB attached storage devices
348 such as flash keys. 350 such as flash keys.
349 351
350 If you enable this driver, it is recommended to avoid conflicts 352 If you enable this driver, it is recommended to avoid conflicts
351 with usb-storage by enabling USB_LIBUSUAL. 353 with usb-storage by enabling USB_LIBUSUAL.
352 354
353 If unsure, say N. 355 If unsure, say N.
354 356
355 config BLK_DEV_RAM 357 config BLK_DEV_RAM
356 tristate "RAM block device support" 358 tristate "RAM block device support"
357 ---help--- 359 ---help---
358 Saying Y here will allow you to use a portion of your RAM memory as 360 Saying Y here will allow you to use a portion of your RAM memory as
359 a block device, so that you can make file systems on it, read and 361 a block device, so that you can make file systems on it, read and
360 write to it and do all the other things that you can do with normal 362 write to it and do all the other things that you can do with normal
361 block devices (such as hard drives). It is usually used to load and 363 block devices (such as hard drives). It is usually used to load and
362 store a copy of a minimal root file system off of a floppy into RAM 364 store a copy of a minimal root file system off of a floppy into RAM
363 during the initial install of Linux. 365 during the initial install of Linux.
364 366
365 Note that the kernel command line option "ramdisk=XX" is now obsolete. 367 Note that the kernel command line option "ramdisk=XX" is now obsolete.
366 For details, read <file:Documentation/blockdev/ramdisk.txt>. 368 For details, read <file:Documentation/blockdev/ramdisk.txt>.
367 369
368 To compile this driver as a module, choose M here: the 370 To compile this driver as a module, choose M here: the
369 module will be called rd. 371 module will be called rd.
370 372
371 Most normal users won't need the RAM disk functionality, and can 373 Most normal users won't need the RAM disk functionality, and can
372 thus say N here. 374 thus say N here.
373 375
374 config BLK_DEV_RAM_COUNT 376 config BLK_DEV_RAM_COUNT
375 int "Default number of RAM disks" 377 int "Default number of RAM disks"
376 default "16" 378 default "16"
377 depends on BLK_DEV_RAM 379 depends on BLK_DEV_RAM
378 help 380 help
379 The default value is 16 RAM disks. Change this if you know what you 381 The default value is 16 RAM disks. Change this if you know what you
380 are doing. If you boot from a filesystem that needs to be extracted 382 are doing. If you boot from a filesystem that needs to be extracted
381 in memory, you will need at least one RAM disk (e.g. root on cramfs). 383 in memory, you will need at least one RAM disk (e.g. root on cramfs).
382 384
383 config BLK_DEV_RAM_SIZE 385 config BLK_DEV_RAM_SIZE
384 int "Default RAM disk size (kbytes)" 386 int "Default RAM disk size (kbytes)"
385 depends on BLK_DEV_RAM 387 depends on BLK_DEV_RAM
386 default "4096" 388 default "4096"
387 help 389 help
388 The default value is 4096 kilobytes. Only change this if you know 390 The default value is 4096 kilobytes. Only change this if you know
389 what you are doing. 391 what you are doing.
390 392
391 config BLK_DEV_XIP 393 config BLK_DEV_XIP
392 bool "Support XIP filesystems on RAM block device" 394 bool "Support XIP filesystems on RAM block device"
393 depends on BLK_DEV_RAM 395 depends on BLK_DEV_RAM
394 default n 396 default n
395 help 397 help
396 Support XIP filesystems (such as ext2 with XIP support on) on 398 Support XIP filesystems (such as ext2 with XIP support on) on
397 top of block ram device. This will slightly enlarge the kernel, and 399 top of block ram device. This will slightly enlarge the kernel, and
398 will prevent RAM block device backing store memory from being 400 will prevent RAM block device backing store memory from being
399 allocated from highmem (only a problem for highmem systems). 401 allocated from highmem (only a problem for highmem systems).
400 402
401 config CDROM_PKTCDVD 403 config CDROM_PKTCDVD
402 tristate "Packet writing on CD/DVD media" 404 tristate "Packet writing on CD/DVD media"
403 depends on !UML 405 depends on !UML
404 help 406 help
405 If you have a CDROM/DVD drive that supports packet writing, say 407 If you have a CDROM/DVD drive that supports packet writing, say
406 Y to include support. It should work with any MMC/Mt Fuji 408 Y to include support. It should work with any MMC/Mt Fuji
407 compliant ATAPI or SCSI drive, which is just about any newer 409 compliant ATAPI or SCSI drive, which is just about any newer
408 DVD/CD writer. 410 DVD/CD writer.
409 411
410 Currently only writing to CD-RW, DVD-RW, DVD+RW and DVDRAM discs 412 Currently only writing to CD-RW, DVD-RW, DVD+RW and DVDRAM discs
411 is possible. 413 is possible.
412 DVD-RW disks must be in restricted overwrite mode. 414 DVD-RW disks must be in restricted overwrite mode.
413 415
414 See the file <file:Documentation/cdrom/packet-writing.txt> 416 See the file <file:Documentation/cdrom/packet-writing.txt>
415 for further information on the use of this driver. 417 for further information on the use of this driver.
416 418
417 To compile this driver as a module, choose M here: the 419 To compile this driver as a module, choose M here: the
418 module will be called pktcdvd. 420 module will be called pktcdvd.
419 421
420 config CDROM_PKTCDVD_BUFFERS 422 config CDROM_PKTCDVD_BUFFERS
421 int "Free buffers for data gathering" 423 int "Free buffers for data gathering"
422 depends on CDROM_PKTCDVD 424 depends on CDROM_PKTCDVD
423 default "8" 425 default "8"
424 help 426 help
425 This controls the maximum number of active concurrent packets. More 427 This controls the maximum number of active concurrent packets. More
426 concurrent packets can increase write performance, but also require 428 concurrent packets can increase write performance, but also require
427 more memory. Each concurrent packet will require approximately 64Kb 429 more memory. Each concurrent packet will require approximately 64Kb
428 of non-swappable kernel memory, memory which will be allocated when 430 of non-swappable kernel memory, memory which will be allocated when
429 a disc is opened for writing. 431 a disc is opened for writing.
430 432
431 config CDROM_PKTCDVD_WCACHE 433 config CDROM_PKTCDVD_WCACHE
432 bool "Enable write caching (EXPERIMENTAL)" 434 bool "Enable write caching (EXPERIMENTAL)"
433 depends on CDROM_PKTCDVD && EXPERIMENTAL 435 depends on CDROM_PKTCDVD && EXPERIMENTAL
434 help 436 help
435 If enabled, write caching will be set for the CD-R/W device. For now 437 If enabled, write caching will be set for the CD-R/W device. For now
436 this option is dangerous unless the CD-RW media is known good, as we 438 this option is dangerous unless the CD-RW media is known good, as we
437 don't do deferred write error handling yet. 439 don't do deferred write error handling yet.
438 440
439 config ATA_OVER_ETH 441 config ATA_OVER_ETH
440 tristate "ATA over Ethernet support" 442 tristate "ATA over Ethernet support"
441 depends on NET 443 depends on NET
442 help 444 help
443 This driver provides Support for ATA over Ethernet block 445 This driver provides Support for ATA over Ethernet block
444 devices like the Coraid EtherDrive (R) Storage Blade. 446 devices like the Coraid EtherDrive (R) Storage Blade.
445 447
446 config MG_DISK 448 config MG_DISK
447 tristate "mGine mflash, gflash support" 449 tristate "mGine mflash, gflash support"
448 depends on ARM && GPIOLIB 450 depends on ARM && GPIOLIB
449 help 451 help
450 mGine mFlash(gFlash) block device driver 452 mGine mFlash(gFlash) block device driver
451 453
452 config MG_DISK_RES 454 config MG_DISK_RES
453 int "Size of reserved area before MBR" 455 int "Size of reserved area before MBR"
454 depends on MG_DISK 456 depends on MG_DISK
455 default 0 457 default 0
456 help 458 help
457 Define size of reserved area that usually used for boot. Unit is KB. 459 Define size of reserved area that usually used for boot. Unit is KB.
458 All of the block device operation will be taken this value as start 460 All of the block device operation will be taken this value as start
459 offset 461 offset
460 Examples: 462 Examples:
461 1024 => 1 MB 463 1024 => 1 MB
462 464
463 config SUNVDC 465 config SUNVDC
464 tristate "Sun Virtual Disk Client support" 466 tristate "Sun Virtual Disk Client support"
465 depends on SUN_LDOMS 467 depends on SUN_LDOMS
466 help 468 help
467 Support for virtual disk devices as a client under Sun 469 Support for virtual disk devices as a client under Sun
468 Logical Domains. 470 Logical Domains.
469 471
470 source "drivers/s390/block/Kconfig" 472 source "drivers/s390/block/Kconfig"
471 473
472 config XILINX_SYSACE 474 config XILINX_SYSACE
473 tristate "Xilinx SystemACE support" 475 tristate "Xilinx SystemACE support"
474 depends on 4xx || MICROBLAZE 476 depends on 4xx || MICROBLAZE
475 help 477 help
476 Include support for the Xilinx SystemACE CompactFlash interface 478 Include support for the Xilinx SystemACE CompactFlash interface
477 479
478 config XEN_BLKDEV_FRONTEND 480 config XEN_BLKDEV_FRONTEND
479 tristate "Xen virtual block device support" 481 tristate "Xen virtual block device support"
480 depends on XEN 482 depends on XEN
481 default y 483 default y
482 select XEN_XENBUS_FRONTEND 484 select XEN_XENBUS_FRONTEND
483 help 485 help
484 This driver implements the front-end of the Xen virtual 486 This driver implements the front-end of the Xen virtual
485 block device driver. It communicates with a back-end driver 487 block device driver. It communicates with a back-end driver
486 in another domain which drives the actual block device. 488 in another domain which drives the actual block device.
487 489
488 config XEN_BLKDEV_BACKEND 490 config XEN_BLKDEV_BACKEND
489 tristate "Xen block-device backend driver" 491 tristate "Xen block-device backend driver"
490 depends on XEN_BACKEND 492 depends on XEN_BACKEND
491 help 493 help
492 The block-device backend driver allows the kernel to export its 494 The block-device backend driver allows the kernel to export its
493 block devices to other guests via a high-performance shared-memory 495 block devices to other guests via a high-performance shared-memory
494 interface. 496 interface.
495 497
496 The corresponding Linux frontend driver is enabled by the 498 The corresponding Linux frontend driver is enabled by the
497 CONFIG_XEN_BLKDEV_FRONTEND configuration option. 499 CONFIG_XEN_BLKDEV_FRONTEND configuration option.
498 500
499 The backend driver attaches itself to a any block device specified 501 The backend driver attaches itself to a any block device specified
500 in the XenBus configuration. There are no limits to what the block 502 in the XenBus configuration. There are no limits to what the block
501 device as long as it has a major and minor. 503 device as long as it has a major and minor.
502 504
503 If you are compiling a kernel to run in a Xen block backend driver 505 If you are compiling a kernel to run in a Xen block backend driver
504 domain (often this is domain 0) you should say Y here. To 506 domain (often this is domain 0) you should say Y here. To
505 compile this driver as a module, chose M here: the module 507 compile this driver as a module, chose M here: the module
506 will be called xen-blkback. 508 will be called xen-blkback.
507 509
508 510
509 config VIRTIO_BLK 511 config VIRTIO_BLK
510 tristate "Virtio block driver (EXPERIMENTAL)" 512 tristate "Virtio block driver (EXPERIMENTAL)"
511 depends on EXPERIMENTAL && VIRTIO 513 depends on EXPERIMENTAL && VIRTIO
512 ---help--- 514 ---help---
513 This is the virtual block driver for virtio. It can be used with 515 This is the virtual block driver for virtio. It can be used with
514 lguest or QEMU based VMMs (like KVM or Xen). Say Y or M. 516 lguest or QEMU based VMMs (like KVM or Xen). Say Y or M.
515 517
516 config BLK_DEV_HD 518 config BLK_DEV_HD
517 bool "Very old hard disk (MFM/RLL/IDE) driver" 519 bool "Very old hard disk (MFM/RLL/IDE) driver"
518 depends on HAVE_IDE 520 depends on HAVE_IDE
519 depends on !ARM || ARCH_RPC || ARCH_SHARK || BROKEN 521 depends on !ARM || ARCH_RPC || ARCH_SHARK || BROKEN
520 help 522 help
521 This is a very old hard disk driver that lacks the enhanced 523 This is a very old hard disk driver that lacks the enhanced
522 functionality of the newer ones. 524 functionality of the newer ones.
523 525
524 It is required for systems with ancient MFM/RLL/ESDI drives. 526 It is required for systems with ancient MFM/RLL/ESDI drives.
525 527
526 If unsure, say N. 528 If unsure, say N.
527 529
528 config BLK_DEV_RBD 530 config BLK_DEV_RBD
529 tristate "Rados block device (RBD)" 531 tristate "Rados block device (RBD)"
530 depends on INET && EXPERIMENTAL && BLOCK 532 depends on INET && EXPERIMENTAL && BLOCK
531 select CEPH_LIB 533 select CEPH_LIB
532 select LIBCRC32C 534 select LIBCRC32C
533 select CRYPTO_AES 535 select CRYPTO_AES
534 select CRYPTO 536 select CRYPTO
535 default n 537 default n
536 help 538 help
537 Say Y here if you want include the Rados block device, which stripes 539 Say Y here if you want include the Rados block device, which stripes
538 a block device over objects stored in the Ceph distributed object 540 a block device over objects stored in the Ceph distributed object
539 store. 541 store.
540 542
541 More information at http://ceph.newdream.net/. 543 More information at http://ceph.newdream.net/.
542 544
543 If unsure, say N. 545 If unsure, say N.
544 546
545 endif # BLK_DEV 547 endif # BLK_DEV
546 548
drivers/block/Makefile
1 # 1 #
2 # Makefile for the kernel block device drivers. 2 # Makefile for the kernel block device drivers.
3 # 3 #
4 # 12 June 2000, Christoph Hellwig <hch@infradead.org> 4 # 12 June 2000, Christoph Hellwig <hch@infradead.org>
5 # Rewritten to use lists instead of if-statements. 5 # Rewritten to use lists instead of if-statements.
6 # 6 #
7 7
8 obj-$(CONFIG_MAC_FLOPPY) += swim3.o 8 obj-$(CONFIG_MAC_FLOPPY) += swim3.o
9 obj-$(CONFIG_BLK_DEV_SWIM) += swim_mod.o 9 obj-$(CONFIG_BLK_DEV_SWIM) += swim_mod.o
10 obj-$(CONFIG_BLK_DEV_FD) += floppy.o 10 obj-$(CONFIG_BLK_DEV_FD) += floppy.o
11 obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o 11 obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o
12 obj-$(CONFIG_PS3_DISK) += ps3disk.o 12 obj-$(CONFIG_PS3_DISK) += ps3disk.o
13 obj-$(CONFIG_PS3_VRAM) += ps3vram.o 13 obj-$(CONFIG_PS3_VRAM) += ps3vram.o
14 obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o 14 obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o
15 obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o 15 obj-$(CONFIG_AMIGA_Z2RAM) += z2ram.o
16 obj-$(CONFIG_BLK_DEV_RAM) += brd.o 16 obj-$(CONFIG_BLK_DEV_RAM) += brd.o
17 obj-$(CONFIG_BLK_DEV_LOOP) += loop.o 17 obj-$(CONFIG_BLK_DEV_LOOP) += loop.o
18 obj-$(CONFIG_BLK_DEV_XD) += xd.o 18 obj-$(CONFIG_BLK_DEV_XD) += xd.o
19 obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o 19 obj-$(CONFIG_BLK_CPQ_DA) += cpqarray.o
20 obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o 20 obj-$(CONFIG_BLK_CPQ_CISS_DA) += cciss.o
21 obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o 21 obj-$(CONFIG_BLK_DEV_DAC960) += DAC960.o
22 obj-$(CONFIG_XILINX_SYSACE) += xsysace.o 22 obj-$(CONFIG_XILINX_SYSACE) += xsysace.o
23 obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o 23 obj-$(CONFIG_CDROM_PKTCDVD) += pktcdvd.o
24 obj-$(CONFIG_MG_DISK) += mg_disk.o 24 obj-$(CONFIG_MG_DISK) += mg_disk.o
25 obj-$(CONFIG_SUNVDC) += sunvdc.o 25 obj-$(CONFIG_SUNVDC) += sunvdc.o
26 obj-$(CONFIG_BLK_DEV_OSD) += osdblk.o 26 obj-$(CONFIG_BLK_DEV_OSD) += osdblk.o
27 27
28 obj-$(CONFIG_BLK_DEV_UMEM) += umem.o 28 obj-$(CONFIG_BLK_DEV_UMEM) += umem.o
29 obj-$(CONFIG_BLK_DEV_NBD) += nbd.o 29 obj-$(CONFIG_BLK_DEV_NBD) += nbd.o
30 obj-$(CONFIG_BLK_DEV_CRYPTOLOOP) += cryptoloop.o 30 obj-$(CONFIG_BLK_DEV_CRYPTOLOOP) += cryptoloop.o
31 obj-$(CONFIG_VIRTIO_BLK) += virtio_blk.o 31 obj-$(CONFIG_VIRTIO_BLK) += virtio_blk.o
32 32
33 obj-$(CONFIG_VIODASD) += viodasd.o 33 obj-$(CONFIG_VIODASD) += viodasd.o
34 obj-$(CONFIG_BLK_DEV_SX8) += sx8.o 34 obj-$(CONFIG_BLK_DEV_SX8) += sx8.o
35 obj-$(CONFIG_BLK_DEV_UB) += ub.o 35 obj-$(CONFIG_BLK_DEV_UB) += ub.o
36 obj-$(CONFIG_BLK_DEV_HD) += hd.o 36 obj-$(CONFIG_BLK_DEV_HD) += hd.o
37 37
38 obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += xen-blkfront.o 38 obj-$(CONFIG_XEN_BLKDEV_FRONTEND) += xen-blkfront.o
39 obj-$(CONFIG_XEN_BLKDEV_BACKEND) += xen-blkback/ 39 obj-$(CONFIG_XEN_BLKDEV_BACKEND) += xen-blkback/
40 obj-$(CONFIG_BLK_DEV_DRBD) += drbd/ 40 obj-$(CONFIG_BLK_DEV_DRBD) += drbd/
41 obj-$(CONFIG_BLK_DEV_RBD) += rbd.o 41 obj-$(CONFIG_BLK_DEV_RBD) += rbd.o
42 obj-$(CONFIG_BLK_DEV_PCIESSD_MTIP32XX) += mtip32xx/
42 43
43 swim_mod-y := swim.o swim_asm.o 44 swim_mod-y := swim.o swim_asm.o
44 45
drivers/block/mtip32xx/Kconfig
File was created 1 #
2 # mtip32xx device driver configuration
3 #
4
5 config BLK_DEV_PCIESSD_MTIP32XX
6 tristate "Block Device Driver for Micron PCIe SSDs"
7 depends on HOTPLUG_PCI_PCIE
8 help
9 This enables the block driver for Micron PCIe SSDs.
10
drivers/block/mtip32xx/Makefile
File was created 1 #
2 # Makefile for Block device driver for Micron PCIe SSD
3 #
4
5 obj-$(CONFIG_BLK_DEV_PCIESSD_MTIP32XX) += mtip32xx.o
6
drivers/block/mtip32xx/mtip32xx.c
File was created 1 /*
2 * Driver for the Micron P320 SSD
3 * Copyright (C) 2011 Micron Technology, Inc.
4 *
5 * Portions of this code were derived from works subjected to the
6 * following copyright:
7 * Copyright (C) 2009 Integrated Device Technology, Inc.
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 */
20
21 #include <linux/pci.h>
22 #include <linux/interrupt.h>
23 #include <linux/ata.h>
24 #include <linux/delay.h>
25 #include <linux/hdreg.h>
26 #include <linux/uaccess.h>
27 #include <linux/random.h>
28 #include <linux/smp.h>
29 #include <linux/compat.h>
30 #include <linux/fs.h>
31 #include <linux/module.h>
32 #include <linux/genhd.h>
33 #include <linux/blkdev.h>
34 #include <linux/bio.h>
35 #include <linux/dma-mapping.h>
36 #include <linux/idr.h>
37 #include <linux/kthread.h>
38 #include <../drivers/ata/ahci.h>
39 #include "mtip32xx.h"
40
41 #define HW_CMD_SLOT_SZ (MTIP_MAX_COMMAND_SLOTS * 32)
42 #define HW_CMD_TBL_SZ (AHCI_CMD_TBL_HDR_SZ + (MTIP_MAX_SG * 16))
43 #define HW_CMD_TBL_AR_SZ (HW_CMD_TBL_SZ * MTIP_MAX_COMMAND_SLOTS)
44 #define HW_PORT_PRIV_DMA_SZ \
45 (HW_CMD_SLOT_SZ + HW_CMD_TBL_AR_SZ + AHCI_RX_FIS_SZ)
46
47 #define HOST_HSORG 0xFC
48 #define HSORG_DISABLE_SLOTGRP_INTR (1<<24)
49 #define HSORG_DISABLE_SLOTGRP_PXIS (1<<16)
50 #define HSORG_HWREV 0xFF00
51 #define HSORG_STYLE 0x8
52 #define HSORG_SLOTGROUPS 0x7
53
54 #define PORT_COMMAND_ISSUE 0x38
55 #define PORT_SDBV 0x7C
56
57 #define PORT_OFFSET 0x100
58 #define PORT_MEM_SIZE 0x80
59
60 #define PORT_IRQ_ERR \
61 (PORT_IRQ_HBUS_ERR | PORT_IRQ_IF_ERR | PORT_IRQ_CONNECT | \
62 PORT_IRQ_PHYRDY | PORT_IRQ_UNK_FIS | PORT_IRQ_BAD_PMP | \
63 PORT_IRQ_TF_ERR | PORT_IRQ_HBUS_DATA_ERR | PORT_IRQ_IF_NONFATAL | \
64 PORT_IRQ_OVERFLOW)
65 #define PORT_IRQ_LEGACY \
66 (PORT_IRQ_PIOS_FIS | PORT_IRQ_D2H_REG_FIS)
67 #define PORT_IRQ_HANDLED \
68 (PORT_IRQ_SDB_FIS | PORT_IRQ_LEGACY | \
69 PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR | \
70 PORT_IRQ_CONNECT | PORT_IRQ_PHYRDY)
71 #define DEF_PORT_IRQ \
72 (PORT_IRQ_ERR | PORT_IRQ_LEGACY | PORT_IRQ_SDB_FIS)
73
74 /* product numbers */
75 #define MTIP_PRODUCT_UNKNOWN 0x00
76 #define MTIP_PRODUCT_ASICFPGA 0x11
77
78 /* Device instance number, incremented each time a device is probed. */
79 static int instance;
80
81 /*
82 * Global variable used to hold the major block device number
83 * allocated in mtip_init().
84 */
85 static int mtip_major;
86
87 static DEFINE_SPINLOCK(rssd_index_lock);
88 static DEFINE_IDA(rssd_index_ida);
89
90 static int mtip_block_initialize(struct driver_data *dd);
91
92 #ifdef CONFIG_COMPAT
93 struct mtip_compat_ide_task_request_s {
94 __u8 io_ports[8];
95 __u8 hob_ports[8];
96 ide_reg_valid_t out_flags;
97 ide_reg_valid_t in_flags;
98 int data_phase;
99 int req_cmd;
100 compat_ulong_t out_size;
101 compat_ulong_t in_size;
102 };
103 #endif
104
105 /*
106 * This function check_for_surprise_removal is called
107 * while card is removed from the system and it will
108 * read the vendor id from the configration space
109 *
110 * @pdev Pointer to the pci_dev structure.
111 *
112 * return value
113 * true if device removed, else false
114 */
115 static bool mtip_check_surprise_removal(struct pci_dev *pdev)
116 {
117 u16 vendor_id = 0;
118
119 /* Read the vendorID from the configuration space */
120 pci_read_config_word(pdev, 0x00, &vendor_id);
121 if (vendor_id == 0xFFFF)
122 return true; /* device removed */
123
124 return false; /* device present */
125 }
126
127 /*
128 * This function is called for clean the pending command in the
129 * command slot during the surprise removal of device and return
130 * error to the upper layer.
131 *
132 * @dd Pointer to the DRIVER_DATA structure.
133 *
134 * return value
135 * None
136 */
137 static void mtip_command_cleanup(struct driver_data *dd)
138 {
139 int group = 0, commandslot = 0, commandindex = 0;
140 struct mtip_cmd *command;
141 struct mtip_port *port = dd->port;
142
143 for (group = 0; group < 4; group++) {
144 for (commandslot = 0; commandslot < 32; commandslot++) {
145 if (!(port->allocated[group] & (1 << commandslot)))
146 continue;
147
148 commandindex = group << 5 | commandslot;
149 command = &port->commands[commandindex];
150
151 if (atomic_read(&command->active)
152 && (command->async_callback)) {
153 command->async_callback(command->async_data,
154 -ENODEV);
155 command->async_callback = NULL;
156 command->async_data = NULL;
157 }
158
159 dma_unmap_sg(&port->dd->pdev->dev,
160 command->sg,
161 command->scatter_ents,
162 command->direction);
163 }
164 }
165
166 up(&port->cmd_slot);
167
168 atomic_set(&dd->drv_cleanup_done, true);
169 }
170
171 /*
172 * Obtain an empty command slot.
173 *
174 * This function needs to be reentrant since it could be called
175 * at the same time on multiple CPUs. The allocation of the
176 * command slot must be atomic.
177 *
178 * @port Pointer to the port data structure.
179 *
180 * return value
181 * >= 0 Index of command slot obtained.
182 * -1 No command slots available.
183 */
184 static int get_slot(struct mtip_port *port)
185 {
186 int slot, i;
187 unsigned int num_command_slots = port->dd->slot_groups * 32;
188
189 /*
190 * Try 10 times, because there is a small race here.
191 * that's ok, because it's still cheaper than a lock.
192 *
193 * Race: Since this section is not protected by lock, same bit
194 * could be chosen by different process contexts running in
195 * different processor. So instead of costly lock, we are going
196 * with loop.
197 */
198 for (i = 0; i < 10; i++) {
199 slot = find_next_zero_bit(port->allocated,
200 num_command_slots, 1);
201 if ((slot < num_command_slots) &&
202 (!test_and_set_bit(slot, port->allocated)))
203 return slot;
204 }
205 dev_warn(&port->dd->pdev->dev, "Failed to get a tag.\n");
206
207 if (mtip_check_surprise_removal(port->dd->pdev)) {
208 /* Device not present, clean outstanding commands */
209 mtip_command_cleanup(port->dd);
210 }
211 return -1;
212 }
213
214 /*
215 * Release a command slot.
216 *
217 * @port Pointer to the port data structure.
218 * @tag Tag of command to release
219 *
220 * return value
221 * None
222 */
223 static inline void release_slot(struct mtip_port *port, int tag)
224 {
225 smp_mb__before_clear_bit();
226 clear_bit(tag, port->allocated);
227 smp_mb__after_clear_bit();
228 }
229
230 /*
231 * Reset the HBA (without sleeping)
232 *
233 * Just like hba_reset, except does not call sleep, so can be
234 * run from interrupt/tasklet context.
235 *
236 * @dd Pointer to the driver data structure.
237 *
238 * return value
239 * 0 The reset was successful.
240 * -1 The HBA Reset bit did not clear.
241 */
242 static int hba_reset_nosleep(struct driver_data *dd)
243 {
244 unsigned long timeout;
245
246 /* Chip quirk: quiesce any chip function */
247 mdelay(10);
248
249 /* Set the reset bit */
250 writel(HOST_RESET, dd->mmio + HOST_CTL);
251
252 /* Flush */
253 readl(dd->mmio + HOST_CTL);
254
255 /*
256 * Wait 10ms then spin for up to 1 second
257 * waiting for reset acknowledgement
258 */
259 timeout = jiffies + msecs_to_jiffies(1000);
260 mdelay(10);
261 while ((readl(dd->mmio + HOST_CTL) & HOST_RESET)
262 && time_before(jiffies, timeout))
263 mdelay(1);
264
265 if (readl(dd->mmio + HOST_CTL) & HOST_RESET)
266 return -1;
267
268 return 0;
269 }
270
271 /*
272 * Issue a command to the hardware.
273 *
274 * Set the appropriate bit in the s_active and Command Issue hardware
275 * registers, causing hardware command processing to begin.
276 *
277 * @port Pointer to the port structure.
278 * @tag The tag of the command to be issued.
279 *
280 * return value
281 * None
282 */
283 static inline void mtip_issue_ncq_command(struct mtip_port *port, int tag)
284 {
285 unsigned long flags = 0;
286
287 atomic_set(&port->commands[tag].active, 1);
288
289 spin_lock_irqsave(&port->cmd_issue_lock, flags);
290
291 writel((1 << MTIP_TAG_BIT(tag)),
292 port->s_active[MTIP_TAG_INDEX(tag)]);
293 writel((1 << MTIP_TAG_BIT(tag)),
294 port->cmd_issue[MTIP_TAG_INDEX(tag)]);
295
296 spin_unlock_irqrestore(&port->cmd_issue_lock, flags);
297 }
298
299 /*
300 * Enable/disable the reception of FIS
301 *
302 * @port Pointer to the port data structure
303 * @enable 1 to enable, 0 to disable
304 *
305 * return value
306 * Previous state: 1 enabled, 0 disabled
307 */
308 static int mtip_enable_fis(struct mtip_port *port, int enable)
309 {
310 u32 tmp;
311
312 /* enable FIS reception */
313 tmp = readl(port->mmio + PORT_CMD);
314 if (enable)
315 writel(tmp | PORT_CMD_FIS_RX, port->mmio + PORT_CMD);
316 else
317 writel(tmp & ~PORT_CMD_FIS_RX, port->mmio + PORT_CMD);
318
319 /* Flush */
320 readl(port->mmio + PORT_CMD);
321
322 return (((tmp & PORT_CMD_FIS_RX) == PORT_CMD_FIS_RX));
323 }
324
325 /*
326 * Enable/disable the DMA engine
327 *
328 * @port Pointer to the port data structure
329 * @enable 1 to enable, 0 to disable
330 *
331 * return value
332 * Previous state: 1 enabled, 0 disabled.
333 */
334 static int mtip_enable_engine(struct mtip_port *port, int enable)
335 {
336 u32 tmp;
337
338 /* enable FIS reception */
339 tmp = readl(port->mmio + PORT_CMD);
340 if (enable)
341 writel(tmp | PORT_CMD_START, port->mmio + PORT_CMD);
342 else
343 writel(tmp & ~PORT_CMD_START, port->mmio + PORT_CMD);
344
345 readl(port->mmio + PORT_CMD);
346 return (((tmp & PORT_CMD_START) == PORT_CMD_START));
347 }
348
349 /*
350 * Enables the port DMA engine and FIS reception.
351 *
352 * return value
353 * None
354 */
355 static inline void mtip_start_port(struct mtip_port *port)
356 {
357 /* Enable FIS reception */
358 mtip_enable_fis(port, 1);
359
360 /* Enable the DMA engine */
361 mtip_enable_engine(port, 1);
362 }
363
364 /*
365 * Deinitialize a port by disabling port interrupts, the DMA engine,
366 * and FIS reception.
367 *
368 * @port Pointer to the port structure
369 *
370 * return value
371 * None
372 */
373 static inline void mtip_deinit_port(struct mtip_port *port)
374 {
375 /* Disable interrupts on this port */
376 writel(0, port->mmio + PORT_IRQ_MASK);
377
378 /* Disable the DMA engine */
379 mtip_enable_engine(port, 0);
380
381 /* Disable FIS reception */
382 mtip_enable_fis(port, 0);
383 }
384
385 /*
386 * Initialize a port.
387 *
388 * This function deinitializes the port by calling mtip_deinit_port() and
389 * then initializes it by setting the command header and RX FIS addresses,
390 * clearing the SError register and any pending port interrupts before
391 * re-enabling the default set of port interrupts.
392 *
393 * @port Pointer to the port structure.
394 *
395 * return value
396 * None
397 */
398 static void mtip_init_port(struct mtip_port *port)
399 {
400 int i;
401 mtip_deinit_port(port);
402
403 /* Program the command list base and FIS base addresses */
404 if (readl(port->dd->mmio + HOST_CAP) & HOST_CAP_64) {
405 writel((port->command_list_dma >> 16) >> 16,
406 port->mmio + PORT_LST_ADDR_HI);
407 writel((port->rxfis_dma >> 16) >> 16,
408 port->mmio + PORT_FIS_ADDR_HI);
409 }
410
411 writel(port->command_list_dma & 0xFFFFFFFF,
412 port->mmio + PORT_LST_ADDR);
413 writel(port->rxfis_dma & 0xFFFFFFFF, port->mmio + PORT_FIS_ADDR);
414
415 /* Clear SError */
416 writel(readl(port->mmio + PORT_SCR_ERR), port->mmio + PORT_SCR_ERR);
417
418 /* reset the completed registers.*/
419 for (i = 0; i < port->dd->slot_groups; i++)
420 writel(0xFFFFFFFF, port->completed[i]);
421
422 /* Clear any pending interrupts for this port */
423 writel(readl(port->mmio + PORT_IRQ_STAT), port->mmio + PORT_IRQ_STAT);
424
425 /* Enable port interrupts */
426 writel(DEF_PORT_IRQ, port->mmio + PORT_IRQ_MASK);
427 }
428
429 /*
430 * Restart a port
431 *
432 * @port Pointer to the port data structure.
433 *
434 * return value
435 * None
436 */
437 static void mtip_restart_port(struct mtip_port *port)
438 {
439 unsigned long timeout;
440
441 /* Disable the DMA engine */
442 mtip_enable_engine(port, 0);
443
444 /* Chip quirk: wait up to 500ms for PxCMD.CR == 0 */
445 timeout = jiffies + msecs_to_jiffies(500);
446 while ((readl(port->mmio + PORT_CMD) & PORT_CMD_LIST_ON)
447 && time_before(jiffies, timeout))
448 ;
449
450 /*
451 * Chip quirk: escalate to hba reset if
452 * PxCMD.CR not clear after 500 ms
453 */
454 if (readl(port->mmio + PORT_CMD) & PORT_CMD_LIST_ON) {
455 dev_warn(&port->dd->pdev->dev,
456 "PxCMD.CR not clear, escalating reset\n");
457
458 if (hba_reset_nosleep(port->dd))
459 dev_err(&port->dd->pdev->dev,
460 "HBA reset escalation failed.\n");
461
462 /* 30 ms delay before com reset to quiesce chip */
463 mdelay(30);
464 }
465
466 dev_warn(&port->dd->pdev->dev, "Issuing COM reset\n");
467
468 /* Set PxSCTL.DET */
469 writel(readl(port->mmio + PORT_SCR_CTL) |
470 1, port->mmio + PORT_SCR_CTL);
471 readl(port->mmio + PORT_SCR_CTL);
472
473 /* Wait 1 ms to quiesce chip function */
474 timeout = jiffies + msecs_to_jiffies(1);
475 while (time_before(jiffies, timeout))
476 ;
477
478 /* Clear PxSCTL.DET */
479 writel(readl(port->mmio + PORT_SCR_CTL) & ~1,
480 port->mmio + PORT_SCR_CTL);
481 readl(port->mmio + PORT_SCR_CTL);
482
483 /* Wait 500 ms for bit 0 of PORT_SCR_STS to be set */
484 timeout = jiffies + msecs_to_jiffies(500);
485 while (((readl(port->mmio + PORT_SCR_STAT) & 0x01) == 0)
486 && time_before(jiffies, timeout))
487 ;
488
489 if ((readl(port->mmio + PORT_SCR_STAT) & 0x01) == 0)
490 dev_warn(&port->dd->pdev->dev,
491 "COM reset failed\n");
492
493 /* Clear SError, the PxSERR.DIAG.x should be set so clear it */
494 writel(readl(port->mmio + PORT_SCR_ERR), port->mmio + PORT_SCR_ERR);
495
496 /* Enable the DMA engine */
497 mtip_enable_engine(port, 1);
498 }
499
500 /*
501 * Called periodically to see if any read/write commands are
502 * taking too long to complete.
503 *
504 * @data Pointer to the PORT data structure.
505 *
506 * return value
507 * None
508 */
509 static void mtip_timeout_function(unsigned long int data)
510 {
511 struct mtip_port *port = (struct mtip_port *) data;
512 struct host_to_dev_fis *fis;
513 struct mtip_cmd *command;
514 int tag, cmdto_cnt = 0;
515 unsigned int bit, group;
516 unsigned int num_command_slots = port->dd->slot_groups * 32;
517
518 if (unlikely(!port))
519 return;
520
521 if (atomic_read(&port->dd->resumeflag) == true) {
522 mod_timer(&port->cmd_timer,
523 jiffies + msecs_to_jiffies(30000));
524 return;
525 }
526
527 for (tag = 0; tag < num_command_slots; tag++) {
528 /*
529 * Skip internal command slot as it has
530 * its own timeout mechanism
531 */
532 if (tag == MTIP_TAG_INTERNAL)
533 continue;
534
535 if (atomic_read(&port->commands[tag].active) &&
536 (time_after(jiffies, port->commands[tag].comp_time))) {
537 group = tag >> 5;
538 bit = tag & 0x1F;
539
540 command = &port->commands[tag];
541 fis = (struct host_to_dev_fis *) command->command;
542
543 dev_warn(&port->dd->pdev->dev,
544 "Timeout for command tag %d\n", tag);
545
546 cmdto_cnt++;
547 if (cmdto_cnt == 1)
548 set_bit(MTIP_FLAG_EH_ACTIVE_BIT, &port->flags);
549
550 /*
551 * Clear the completed bit. This should prevent
552 * any interrupt handlers from trying to retire
553 * the command.
554 */
555 writel(1 << bit, port->completed[group]);
556
557 /* Call the async completion callback. */
558 if (likely(command->async_callback))
559 command->async_callback(command->async_data,
560 -EIO);
561 command->async_callback = NULL;
562 command->comp_func = NULL;
563
564 /* Unmap the DMA scatter list entries */
565 dma_unmap_sg(&port->dd->pdev->dev,
566 command->sg,
567 command->scatter_ents,
568 command->direction);
569
570 /*
571 * Clear the allocated bit and active tag for the
572 * command.
573 */
574 atomic_set(&port->commands[tag].active, 0);
575 release_slot(port, tag);
576
577 up(&port->cmd_slot);
578 }
579 }
580
581 if (cmdto_cnt) {
582 dev_warn(&port->dd->pdev->dev,
583 "%d commands timed out: restarting port",
584 cmdto_cnt);
585 mtip_restart_port(port);
586 clear_bit(MTIP_FLAG_EH_ACTIVE_BIT, &port->flags);
587 wake_up_interruptible(&port->svc_wait);
588 }
589
590 /* Restart the timer */
591 mod_timer(&port->cmd_timer,
592 jiffies + msecs_to_jiffies(MTIP_TIMEOUT_CHECK_PERIOD));
593 }
594
595 /*
596 * IO completion function.
597 *
598 * This completion function is called by the driver ISR when a
599 * command that was issued by the kernel completes. It first calls the
600 * asynchronous completion function which normally calls back into the block
601 * layer passing the asynchronous callback data, then unmaps the
602 * scatter list associated with the completed command, and finally
603 * clears the allocated bit associated with the completed command.
604 *
605 * @port Pointer to the port data structure.
606 * @tag Tag of the command.
607 * @data Pointer to driver_data.
608 * @status Completion status.
609 *
610 * return value
611 * None
612 */
613 static void mtip_async_complete(struct mtip_port *port,
614 int tag,
615 void *data,
616 int status)
617 {
618 struct mtip_cmd *command;
619 struct driver_data *dd = data;
620 int cb_status = status ? -EIO : 0;
621
622 if (unlikely(!dd) || unlikely(!port))
623 return;
624
625 command = &port->commands[tag];
626
627 if (unlikely(status == PORT_IRQ_TF_ERR)) {
628 dev_warn(&port->dd->pdev->dev,
629 "Command tag %d failed due to TFE\n", tag);
630 }
631
632 /* Upper layer callback */
633 if (likely(command->async_callback))
634 command->async_callback(command->async_data, cb_status);
635
636 command->async_callback = NULL;
637 command->comp_func = NULL;
638
639 /* Unmap the DMA scatter list entries */
640 dma_unmap_sg(&dd->pdev->dev,
641 command->sg,
642 command->scatter_ents,
643 command->direction);
644
645 /* Clear the allocated and active bits for the command */
646 atomic_set(&port->commands[tag].active, 0);
647 release_slot(port, tag);
648
649 up(&port->cmd_slot);
650 }
651
652 /*
653 * Internal command completion callback function.
654 *
655 * This function is normally called by the driver ISR when an internal
656 * command completed. This function signals the command completion by
657 * calling complete().
658 *
659 * @port Pointer to the port data structure.
660 * @tag Tag of the command that has completed.
661 * @data Pointer to a completion structure.
662 * @status Completion status.
663 *
664 * return value
665 * None
666 */
667 static void mtip_completion(struct mtip_port *port,
668 int tag,
669 void *data,
670 int status)
671 {
672 struct mtip_cmd *command = &port->commands[tag];
673 struct completion *waiting = data;
674 if (unlikely(status == PORT_IRQ_TF_ERR))
675 dev_warn(&port->dd->pdev->dev,
676 "Internal command %d completed with TFE\n", tag);
677
678 command->async_callback = NULL;
679 command->comp_func = NULL;
680
681 complete(waiting);
682 }
683
684 /*
685 * Helper function for tag logging
686 */
687 static void print_tags(struct driver_data *dd,
688 char *msg,
689 unsigned long *tagbits)
690 {
691 unsigned int tag, count = 0;
692
693 for (tag = 0; tag < (dd->slot_groups) * 32; tag++) {
694 if (test_bit(tag, tagbits))
695 count++;
696 }
697 if (count)
698 dev_info(&dd->pdev->dev, "%s [%i tags]\n", msg, count);
699 }
700
701 /*
702 * Handle an error.
703 *
704 * @dd Pointer to the DRIVER_DATA structure.
705 *
706 * return value
707 * None
708 */
709 static void mtip_handle_tfe(struct driver_data *dd)
710 {
711 int group, tag, bit, reissue;
712 struct mtip_port *port;
713 struct mtip_cmd *command;
714 u32 completed;
715 struct host_to_dev_fis *fis;
716 unsigned long tagaccum[SLOTBITS_IN_LONGS];
717
718 dev_warn(&dd->pdev->dev, "Taskfile error\n");
719
720 port = dd->port;
721
722 /* Stop the timer to prevent command timeouts. */
723 del_timer(&port->cmd_timer);
724
725 /* Set eh_active */
726 set_bit(MTIP_FLAG_EH_ACTIVE_BIT, &port->flags);
727
728 /* Loop through all the groups */
729 for (group = 0; group < dd->slot_groups; group++) {
730 completed = readl(port->completed[group]);
731
732 /* clear completed status register in the hardware.*/
733 writel(completed, port->completed[group]);
734
735 /* clear the tag accumulator */
736 memset(tagaccum, 0, SLOTBITS_IN_LONGS * sizeof(long));
737
738 /* Process successfully completed commands */
739 for (bit = 0; bit < 32 && completed; bit++) {
740 if (!(completed & (1<<bit)))
741 continue;
742 tag = (group << 5) + bit;
743
744 /* Skip the internal command slot */
745 if (tag == MTIP_TAG_INTERNAL)
746 continue;
747
748 command = &port->commands[tag];
749 if (likely(command->comp_func)) {
750 set_bit(tag, tagaccum);
751 atomic_set(&port->commands[tag].active, 0);
752 command->comp_func(port,
753 tag,
754 command->comp_data,
755 0);
756 } else {
757 dev_err(&port->dd->pdev->dev,
758 "Missing completion func for tag %d",
759 tag);
760 if (mtip_check_surprise_removal(dd->pdev)) {
761 mtip_command_cleanup(dd);
762 /* don't proceed further */
763 return;
764 }
765 }
766 }
767 }
768 print_tags(dd, "TFE tags completed:", tagaccum);
769
770 /* Restart the port */
771 mdelay(20);
772 mtip_restart_port(port);
773
774 /* clear the tag accumulator */
775 memset(tagaccum, 0, SLOTBITS_IN_LONGS * sizeof(long));
776
777 /* Loop through all the groups */
778 for (group = 0; group < dd->slot_groups; group++) {
779 for (bit = 0; bit < 32; bit++) {
780 reissue = 1;
781 tag = (group << 5) + bit;
782
783 /* If the active bit is set re-issue the command */
784 if (atomic_read(&port->commands[tag].active) == 0)
785 continue;
786
787 fis = (struct host_to_dev_fis *)
788 port->commands[tag].command;
789
790 /* Should re-issue? */
791 if (tag == MTIP_TAG_INTERNAL ||
792 fis->command == ATA_CMD_SET_FEATURES)
793 reissue = 0;
794
795 /*
796 * First check if this command has
797 * exceeded its retries.
798 */
799 if (reissue &&
800 (port->commands[tag].retries-- > 0)) {
801
802 set_bit(tag, tagaccum);
803
804 /* Update the timeout value. */
805 port->commands[tag].comp_time =
806 jiffies + msecs_to_jiffies(
807 MTIP_NCQ_COMMAND_TIMEOUT_MS);
808 /* Re-issue the command. */
809 mtip_issue_ncq_command(port, tag);
810
811 continue;
812 }
813
814 /* Retire a command that will not be reissued */
815 dev_warn(&port->dd->pdev->dev,
816 "retiring tag %d\n", tag);
817 atomic_set(&port->commands[tag].active, 0);
818
819 if (port->commands[tag].comp_func)
820 port->commands[tag].comp_func(
821 port,
822 tag,
823 port->commands[tag].comp_data,
824 PORT_IRQ_TF_ERR);
825 else
826 dev_warn(&port->dd->pdev->dev,
827 "Bad completion for tag %d\n",
828 tag);
829 }
830 }
831 print_tags(dd, "TFE tags reissued:", tagaccum);
832
833 /* clear eh_active */
834 clear_bit(MTIP_FLAG_EH_ACTIVE_BIT, &port->flags);
835 wake_up_interruptible(&port->svc_wait);
836
837 mod_timer(&port->cmd_timer,
838 jiffies + msecs_to_jiffies(MTIP_TIMEOUT_CHECK_PERIOD));
839 }
840
841 /*
842 * Handle a set device bits interrupt
843 */
844 static inline void mtip_process_sdbf(struct driver_data *dd)
845 {
846 struct mtip_port *port = dd->port;
847 int group, tag, bit;
848 u32 completed;
849 struct mtip_cmd *command;
850
851 /* walk all bits in all slot groups */
852 for (group = 0; group < dd->slot_groups; group++) {
853 completed = readl(port->completed[group]);
854
855 /* clear completed status register in the hardware.*/
856 writel(completed, port->completed[group]);
857
858 /* Process completed commands. */
859 for (bit = 0;
860 (bit < 32) && completed;
861 bit++, completed >>= 1) {
862 if (completed & 0x01) {
863 tag = (group << 5) | bit;
864
865 /* skip internal command slot. */
866 if (unlikely(tag == MTIP_TAG_INTERNAL))
867 continue;
868
869 command = &port->commands[tag];
870 /* make internal callback */
871 if (likely(command->comp_func)) {
872 command->comp_func(
873 port,
874 tag,
875 command->comp_data,
876 0);
877 } else {
878 dev_warn(&dd->pdev->dev,
879 "Null completion "
880 "for tag %d",
881 tag);
882
883 if (mtip_check_surprise_removal(
884 dd->pdev)) {
885 mtip_command_cleanup(dd);
886 return;
887 }
888 }
889 }
890 }
891 }
892 }
893
894 /*
895 * Process legacy pio and d2h interrupts
896 */
897 static inline void mtip_process_legacy(struct driver_data *dd, u32 port_stat)
898 {
899 struct mtip_port *port = dd->port;
900 struct mtip_cmd *cmd = &port->commands[MTIP_TAG_INTERNAL];
901
902 if (test_bit(MTIP_FLAG_IC_ACTIVE_BIT, &port->flags) &&
903 (cmd != NULL) && !(readl(port->cmd_issue[MTIP_TAG_INTERNAL])
904 & (1 << MTIP_TAG_INTERNAL))) {
905 if (cmd->comp_func) {
906 cmd->comp_func(port,
907 MTIP_TAG_INTERNAL,
908 cmd->comp_data,
909 0);
910 return;
911 }
912 }
913
914 dev_warn(&dd->pdev->dev, "IRQ status 0x%x ignored.\n", port_stat);
915
916 return;
917 }
918
919 /*
920 * Demux and handle errors
921 */
922 static inline void mtip_process_errors(struct driver_data *dd, u32 port_stat)
923 {
924 if (likely(port_stat & (PORT_IRQ_TF_ERR | PORT_IRQ_IF_ERR)))
925 mtip_handle_tfe(dd);
926
927 if (unlikely(port_stat & PORT_IRQ_CONNECT)) {
928 dev_warn(&dd->pdev->dev,
929 "Clearing PxSERR.DIAG.x\n");
930 writel((1 << 26), dd->port->mmio + PORT_SCR_ERR);
931 }
932
933 if (unlikely(port_stat & PORT_IRQ_PHYRDY)) {
934 dev_warn(&dd->pdev->dev,
935 "Clearing PxSERR.DIAG.n\n");
936 writel((1 << 16), dd->port->mmio + PORT_SCR_ERR);
937 }
938
939 if (unlikely(port_stat & ~PORT_IRQ_HANDLED)) {
940 dev_warn(&dd->pdev->dev,
941 "Port stat errors %x unhandled\n",
942 (port_stat & ~PORT_IRQ_HANDLED));
943 }
944 }
945
946 static inline irqreturn_t mtip_handle_irq(struct driver_data *data)
947 {
948 struct driver_data *dd = (struct driver_data *) data;
949 struct mtip_port *port = dd->port;
950 u32 hba_stat, port_stat;
951 int rv = IRQ_NONE;
952
953 hba_stat = readl(dd->mmio + HOST_IRQ_STAT);
954 if (hba_stat) {
955 rv = IRQ_HANDLED;
956
957 /* Acknowledge the interrupt status on the port.*/
958 port_stat = readl(port->mmio + PORT_IRQ_STAT);
959 writel(port_stat, port->mmio + PORT_IRQ_STAT);
960
961 /* Demux port status */
962 if (likely(port_stat & PORT_IRQ_SDB_FIS))
963 mtip_process_sdbf(dd);
964
965 if (unlikely(port_stat & PORT_IRQ_ERR)) {
966 if (unlikely(mtip_check_surprise_removal(dd->pdev))) {
967 mtip_command_cleanup(dd);
968 /* don't proceed further */
969 return IRQ_HANDLED;
970 }
971
972 mtip_process_errors(dd, port_stat & PORT_IRQ_ERR);
973 }
974
975 if (unlikely(port_stat & PORT_IRQ_LEGACY))
976 mtip_process_legacy(dd, port_stat & PORT_IRQ_LEGACY);
977 }
978
979 /* acknowledge interrupt */
980 writel(hba_stat, dd->mmio + HOST_IRQ_STAT);
981
982 return rv;
983 }
984
985 /*
986 * Wrapper for mtip_handle_irq
987 * (ignores return code)
988 */
989 static void mtip_tasklet(unsigned long data)
990 {
991 mtip_handle_irq((struct driver_data *) data);
992 }
993
994 /*
995 * HBA interrupt subroutine.
996 *
997 * @irq IRQ number.
998 * @instance Pointer to the driver data structure.
999 *
1000 * return value
1001 * IRQ_HANDLED A HBA interrupt was pending and handled.
1002 * IRQ_NONE This interrupt was not for the HBA.
1003 */
1004 static irqreturn_t mtip_irq_handler(int irq, void *instance)
1005 {
1006 struct driver_data *dd = instance;
1007 tasklet_schedule(&dd->tasklet);
1008 return IRQ_HANDLED;
1009 }
1010
1011 static void mtip_issue_non_ncq_command(struct mtip_port *port, int tag)
1012 {
1013 atomic_set(&port->commands[tag].active, 1);
1014 writel(1 << MTIP_TAG_BIT(tag),
1015 port->cmd_issue[MTIP_TAG_INDEX(tag)]);
1016 }
1017
1018 /*
1019 * Wait for port to quiesce
1020 *
1021 * @port Pointer to port data structure
1022 * @timeout Max duration to wait (ms)
1023 *
1024 * return value
1025 * 0 Success
1026 * -EBUSY Commands still active
1027 */
1028 static int mtip_quiesce_io(struct mtip_port *port, unsigned long timeout)
1029 {
1030 unsigned long to;
1031 unsigned int n;
1032 unsigned int active = 1;
1033
1034 to = jiffies + msecs_to_jiffies(timeout);
1035 do {
1036 if (test_bit(MTIP_FLAG_SVC_THD_ACTIVE_BIT, &port->flags) &&
1037 test_bit(MTIP_FLAG_ISSUE_CMDS_BIT, &port->flags)) {
1038 msleep(20);
1039 continue; /* svc thd is actively issuing commands */
1040 }
1041 /*
1042 * Ignore s_active bit 0 of array element 0.
1043 * This bit will always be set
1044 */
1045 active = readl(port->s_active[0]) & 0xFFFFFFFE;
1046 for (n = 1; n < port->dd->slot_groups; n++)
1047 active |= readl(port->s_active[n]);
1048
1049 if (!active)
1050 break;
1051
1052 msleep(20);
1053 } while (time_before(jiffies, to));
1054
1055 return active ? -EBUSY : 0;
1056 }
1057
1058 /*
1059 * Execute an internal command and wait for the completion.
1060 *
1061 * @port Pointer to the port data structure.
1062 * @fis Pointer to the FIS that describes the command.
1063 * @fis_len Length in WORDS of the FIS.
1064 * @buffer DMA accessible for command data.
1065 * @buf_len Length, in bytes, of the data buffer.
1066 * @opts Command header options, excluding the FIS length
1067 * and the number of PRD entries.
1068 * @timeout Time in ms to wait for the command to complete.
1069 *
1070 * return value
1071 * 0 Command completed successfully.
1072 * -EFAULT The buffer address is not correctly aligned.
1073 * -EBUSY Internal command or other IO in progress.
1074 * -EAGAIN Time out waiting for command to complete.
1075 */
1076 static int mtip_exec_internal_command(struct mtip_port *port,
1077 void *fis,
1078 int fis_len,
1079 dma_addr_t buffer,
1080 int buf_len,
1081 u32 opts,
1082 gfp_t atomic,
1083 unsigned long timeout)
1084 {
1085 struct mtip_cmd_sg *command_sg;
1086 DECLARE_COMPLETION_ONSTACK(wait);
1087 int rv = 0;
1088 struct mtip_cmd *int_cmd = &port->commands[MTIP_TAG_INTERNAL];
1089
1090 /* Make sure the buffer is 8 byte aligned. This is asic specific. */
1091 if (buffer & 0x00000007) {
1092 dev_err(&port->dd->pdev->dev,
1093 "SG buffer is not 8 byte aligned\n");
1094 return -EFAULT;
1095 }
1096
1097 /* Only one internal command should be running at a time */
1098 if (test_and_set_bit(MTIP_TAG_INTERNAL, port->allocated)) {
1099 dev_warn(&port->dd->pdev->dev,
1100 "Internal command already active\n");
1101 return -EBUSY;
1102 }
1103 set_bit(MTIP_FLAG_IC_ACTIVE_BIT, &port->flags);
1104
1105 if (atomic == GFP_KERNEL) {
1106 /* wait for io to complete if non atomic */
1107 if (mtip_quiesce_io(port, 5000) < 0) {
1108 dev_warn(&port->dd->pdev->dev,
1109 "Failed to quiesce IO\n");
1110 release_slot(port, MTIP_TAG_INTERNAL);
1111 clear_bit(MTIP_FLAG_IC_ACTIVE_BIT, &port->flags);
1112 wake_up_interruptible(&port->svc_wait);
1113 return -EBUSY;
1114 }
1115
1116 /* Set the completion function and data for the command. */
1117 int_cmd->comp_data = &wait;
1118 int_cmd->comp_func = mtip_completion;
1119
1120 } else {
1121 /* Clear completion - we're going to poll */
1122 int_cmd->comp_data = NULL;
1123 int_cmd->comp_func = NULL;
1124 }
1125
1126 /* Copy the command to the command table */
1127 memcpy(int_cmd->command, fis, fis_len*4);
1128
1129 /* Populate the SG list */
1130 int_cmd->command_header->opts =
1131 __force_bit2int cpu_to_le32(opts | fis_len);
1132 if (buf_len) {
1133 command_sg = int_cmd->command + AHCI_CMD_TBL_HDR_SZ;
1134
1135 command_sg->info =
1136 __force_bit2int cpu_to_le32((buf_len-1) & 0x3FFFFF);
1137 command_sg->dba =
1138 __force_bit2int cpu_to_le32(buffer & 0xFFFFFFFF);
1139 command_sg->dba_upper =
1140 __force_bit2int cpu_to_le32((buffer >> 16) >> 16);
1141
1142 int_cmd->command_header->opts |=
1143 __force_bit2int cpu_to_le32((1 << 16));
1144 }
1145
1146 /* Populate the command header */
1147 int_cmd->command_header->byte_count = 0;
1148
1149 /* Issue the command to the hardware */
1150 mtip_issue_non_ncq_command(port, MTIP_TAG_INTERNAL);
1151
1152 /* Poll if atomic, wait_for_completion otherwise */
1153 if (atomic == GFP_KERNEL) {
1154 /* Wait for the command to complete or timeout. */
1155 if (wait_for_completion_timeout(
1156 &wait,
1157 msecs_to_jiffies(timeout)) == 0) {
1158 dev_err(&port->dd->pdev->dev,
1159 "Internal command did not complete [%d] "
1160 "within timeout of %lu ms\n",
1161 atomic, timeout);
1162 rv = -EAGAIN;
1163 }
1164
1165 if (readl(port->cmd_issue[MTIP_TAG_INTERNAL])
1166 & (1 << MTIP_TAG_INTERNAL)) {
1167 dev_warn(&port->dd->pdev->dev,
1168 "Retiring internal command but CI is 1.\n");
1169 }
1170
1171 } else {
1172 /* Spin for <timeout> checking if command still outstanding */
1173 timeout = jiffies + msecs_to_jiffies(timeout);
1174
1175 while ((readl(
1176 port->cmd_issue[MTIP_TAG_INTERNAL])
1177 & (1 << MTIP_TAG_INTERNAL))
1178 && time_before(jiffies, timeout))
1179 ;
1180
1181 if (readl(port->cmd_issue[MTIP_TAG_INTERNAL])
1182 & (1 << MTIP_TAG_INTERNAL)) {
1183 dev_err(&port->dd->pdev->dev,
1184 "Internal command did not complete [%d]\n",
1185 atomic);
1186 rv = -EAGAIN;
1187 }
1188 }
1189
1190 /* Clear the allocated and active bits for the internal command. */
1191 atomic_set(&int_cmd->active, 0);
1192 release_slot(port, MTIP_TAG_INTERNAL);
1193 clear_bit(MTIP_FLAG_IC_ACTIVE_BIT, &port->flags);
1194 wake_up_interruptible(&port->svc_wait);
1195
1196 return rv;
1197 }
1198
1199 /*
1200 * Byte-swap ATA ID strings.
1201 *
1202 * ATA identify data contains strings in byte-swapped 16-bit words.
1203 * They must be swapped (on all architectures) to be usable as C strings.
1204 * This function swaps bytes in-place.
1205 *
1206 * @buf The buffer location of the string
1207 * @len The number of bytes to swap
1208 *
1209 * return value
1210 * None
1211 */
1212 static inline void ata_swap_string(u16 *buf, unsigned int len)
1213 {
1214 int i;
1215 for (i = 0; i < (len/2); i++)
1216 be16_to_cpus(&buf[i]);
1217 }
1218
1219 /*
1220 * Request the device identity information.
1221 *
1222 * If a user space buffer is not specified, i.e. is NULL, the
1223 * identify information is still read from the drive and placed
1224 * into the identify data buffer (@e port->identify) in the
1225 * port data structure.
1226 * When the identify buffer contains valid identify information @e
1227 * port->identify_valid is non-zero.
1228 *
1229 * @port Pointer to the port structure.
1230 * @user_buffer A user space buffer where the identify data should be
1231 * copied.
1232 *
1233 * return value
1234 * 0 Command completed successfully.
1235 * -EFAULT An error occurred while coping data to the user buffer.
1236 * -1 Command failed.
1237 */
1238 static int mtip_get_identify(struct mtip_port *port, void __user *user_buffer)
1239 {
1240 int rv = 0;
1241 struct host_to_dev_fis fis;
1242
1243 /* Build the FIS. */
1244 memset(&fis, 0, sizeof(struct host_to_dev_fis));
1245 fis.type = 0x27;
1246 fis.opts = 1 << 7;
1247 fis.command = ATA_CMD_ID_ATA;
1248
1249 /* Set the identify information as invalid. */
1250 port->identify_valid = 0;
1251
1252 /* Clear the identify information. */
1253 memset(port->identify, 0, sizeof(u16) * ATA_ID_WORDS);
1254
1255 /* Execute the command. */
1256 if (mtip_exec_internal_command(port,
1257 &fis,
1258 5,
1259 port->identify_dma,
1260 sizeof(u16) * ATA_ID_WORDS,
1261 0,
1262 GFP_KERNEL,
1263 MTIP_INTERNAL_COMMAND_TIMEOUT_MS)
1264 < 0) {
1265 rv = -1;
1266 goto out;
1267 }
1268
1269 /*
1270 * Perform any necessary byte-swapping. Yes, the kernel does in fact
1271 * perform field-sensitive swapping on the string fields.
1272 * See the kernel use of ata_id_string() for proof of this.
1273 */
1274 #ifdef __LITTLE_ENDIAN
1275 ata_swap_string(port->identify + 27, 40); /* model string*/
1276 ata_swap_string(port->identify + 23, 8); /* firmware string*/
1277 ata_swap_string(port->identify + 10, 20); /* serial# string*/
1278 #else
1279 {
1280 int i;
1281 for (i = 0; i < ATA_ID_WORDS; i++)
1282 port->identify[i] = le16_to_cpu(port->identify[i]);
1283 }
1284 #endif
1285
1286 /* Set the identify buffer as valid. */
1287 port->identify_valid = 1;
1288
1289 if (user_buffer) {
1290 if (copy_to_user(
1291 user_buffer,
1292 port->identify,
1293 ATA_ID_WORDS * sizeof(u16))) {
1294 rv = -EFAULT;
1295 goto out;
1296 }
1297 }
1298
1299 out:
1300 return rv;
1301 }
1302
1303 /*
1304 * Issue a standby immediate command to the device.
1305 *
1306 * @port Pointer to the port structure.
1307 *
1308 * return value
1309 * 0 Command was executed successfully.
1310 * -1 An error occurred while executing the command.
1311 */
1312 static int mtip_standby_immediate(struct mtip_port *port)
1313 {
1314 int rv;
1315 struct host_to_dev_fis fis;
1316
1317 /* Build the FIS. */
1318 memset(&fis, 0, sizeof(struct host_to_dev_fis));
1319 fis.type = 0x27;
1320 fis.opts = 1 << 7;
1321 fis.command = ATA_CMD_STANDBYNOW1;
1322
1323 /* Execute the command. Use a 15-second timeout for large drives. */
1324 rv = mtip_exec_internal_command(port,
1325 &fis,
1326 5,
1327 0,
1328 0,
1329 0,
1330 GFP_KERNEL,
1331 15000);
1332
1333 return rv;
1334 }
1335
1336 /*
1337 * Get the drive capacity.
1338 *
1339 * @dd Pointer to the device data structure.
1340 * @sectors Pointer to the variable that will receive the sector count.
1341 *
1342 * return value
1343 * 1 Capacity was returned successfully.
1344 * 0 The identify information is invalid.
1345 */
1346 static bool mtip_hw_get_capacity(struct driver_data *dd, sector_t *sectors)
1347 {
1348 struct mtip_port *port = dd->port;
1349 u64 total, raw0, raw1, raw2, raw3;
1350 raw0 = port->identify[100];
1351 raw1 = port->identify[101];
1352 raw2 = port->identify[102];
1353 raw3 = port->identify[103];
1354 total = raw0 | raw1<<16 | raw2<<32 | raw3<<48;
1355 *sectors = total;
1356 return (bool) !!port->identify_valid;
1357 }
1358
1359 /*
1360 * Reset the HBA.
1361 *
1362 * Resets the HBA by setting the HBA Reset bit in the Global
1363 * HBA Control register. After setting the HBA Reset bit the
1364 * function waits for 1 second before reading the HBA Reset
1365 * bit to make sure it has cleared. If HBA Reset is not clear
1366 * an error is returned. Cannot be used in non-blockable
1367 * context.
1368 *
1369 * @dd Pointer to the driver data structure.
1370 *
1371 * return value
1372 * 0 The reset was successful.
1373 * -1 The HBA Reset bit did not clear.
1374 */
1375 static int mtip_hba_reset(struct driver_data *dd)
1376 {
1377 mtip_deinit_port(dd->port);
1378
1379 /* Set the reset bit */
1380 writel(HOST_RESET, dd->mmio + HOST_CTL);
1381
1382 /* Flush */
1383 readl(dd->mmio + HOST_CTL);
1384
1385 /* Wait for reset to clear */
1386 ssleep(1);
1387
1388 /* Check the bit has cleared */
1389 if (readl(dd->mmio + HOST_CTL) & HOST_RESET) {
1390 dev_err(&dd->pdev->dev,
1391 "Reset bit did not clear.\n");
1392 return -1;
1393 }
1394
1395 return 0;
1396 }
1397
1398 /*
1399 * Display the identify command data.
1400 *
1401 * @port Pointer to the port data structure.
1402 *
1403 * return value
1404 * None
1405 */
1406 static void mtip_dump_identify(struct mtip_port *port)
1407 {
1408 sector_t sectors;
1409 unsigned short revid;
1410 char cbuf[42];
1411
1412 if (!port->identify_valid)
1413 return;
1414
1415 strlcpy(cbuf, (char *)(port->identify+10), 21);
1416 dev_info(&port->dd->pdev->dev,
1417 "Serial No.: %s\n", cbuf);
1418
1419 strlcpy(cbuf, (char *)(port->identify+23), 9);
1420 dev_info(&port->dd->pdev->dev,
1421 "Firmware Ver.: %s\n", cbuf);
1422
1423 strlcpy(cbuf, (char *)(port->identify+27), 41);
1424 dev_info(&port->dd->pdev->dev, "Model: %s\n", cbuf);
1425
1426 if (mtip_hw_get_capacity(port->dd, &sectors))
1427 dev_info(&port->dd->pdev->dev,
1428 "Capacity: %llu sectors (%llu MB)\n",
1429 (u64)sectors,
1430 ((u64)sectors) * ATA_SECT_SIZE >> 20);
1431
1432 pci_read_config_word(port->dd->pdev, PCI_REVISION_ID, &revid);
1433 switch (revid & 0xFF) {
1434 case 0x1:
1435 strlcpy(cbuf, "A0", 3);
1436 break;
1437 case 0x3:
1438 strlcpy(cbuf, "A2", 3);
1439 break;
1440 default:
1441 strlcpy(cbuf, "?", 2);
1442 break;
1443 }
1444 dev_info(&port->dd->pdev->dev,
1445 "Card Type: %s\n", cbuf);
1446 }
1447
1448 /*
1449 * Map the commands scatter list into the command table.
1450 *
1451 * @command Pointer to the command.
1452 * @nents Number of scatter list entries.
1453 *
1454 * return value
1455 * None
1456 */
1457 static inline void fill_command_sg(struct driver_data *dd,
1458 struct mtip_cmd *command,
1459 int nents)
1460 {
1461 int n;
1462 unsigned int dma_len;
1463 struct mtip_cmd_sg *command_sg;
1464 struct scatterlist *sg = command->sg;
1465
1466 command_sg = command->command + AHCI_CMD_TBL_HDR_SZ;
1467
1468 for (n = 0; n < nents; n++) {
1469 dma_len = sg_dma_len(sg);
1470 if (dma_len > 0x400000)
1471 dev_err(&dd->pdev->dev,
1472 "DMA segment length truncated\n");
1473 command_sg->info = __force_bit2int
1474 cpu_to_le32((dma_len-1) & 0x3FFFFF);
1475 command_sg->dba = __force_bit2int
1476 cpu_to_le32(sg_dma_address(sg));
1477 command_sg->dba_upper = __force_bit2int
1478 cpu_to_le32((sg_dma_address(sg) >> 16) >> 16);
1479 command_sg++;
1480 sg++;
1481 }
1482 }
1483
1484 /*
1485 * @brief Execute a drive command.
1486 *
1487 * return value 0 The command completed successfully.
1488 * return value -1 An error occurred while executing the command.
1489 */
1490 static int exec_drive_task(struct mtip_port *port, u8 *command)
1491 {
1492 struct host_to_dev_fis fis;
1493 struct host_to_dev_fis *reply = (port->rxfis + RX_FIS_D2H_REG);
1494
1495 /* Build the FIS. */
1496 memset(&fis, 0, sizeof(struct host_to_dev_fis));
1497 fis.type = 0x27;
1498 fis.opts = 1 << 7;
1499 fis.command = command[0];
1500 fis.features = command[1];
1501 fis.sect_count = command[2];
1502 fis.sector = command[3];
1503 fis.cyl_low = command[4];
1504 fis.cyl_hi = command[5];
1505 fis.device = command[6] & ~0x10; /* Clear the dev bit*/
1506
1507
1508 dbg_printk(MTIP_DRV_NAME "%s: User Command: cmd %x, feat %x, "
1509 "nsect %x, sect %x, lcyl %x, "
1510 "hcyl %x, sel %x\n",
1511 __func__,
1512 command[0],
1513 command[1],
1514 command[2],
1515 command[3],
1516 command[4],
1517 command[5],
1518 command[6]);
1519
1520 /* Execute the command. */
1521 if (mtip_exec_internal_command(port,
1522 &fis,
1523 5,
1524 0,
1525 0,
1526 0,
1527 GFP_KERNEL,
1528 MTIP_IOCTL_COMMAND_TIMEOUT_MS) < 0) {
1529 return -1;
1530 }
1531
1532 command[0] = reply->command; /* Status*/
1533 command[1] = reply->features; /* Error*/
1534 command[4] = reply->cyl_low;
1535 command[5] = reply->cyl_hi;
1536
1537 dbg_printk(MTIP_DRV_NAME "%s: Completion Status: stat %x, "
1538 "err %x , cyl_lo %x cyl_hi %x\n",
1539 __func__,
1540 command[0],
1541 command[1],
1542 command[4],
1543 command[5]);
1544
1545 return 0;
1546 }
1547
1548 /*
1549 * @brief Execute a drive command.
1550 *
1551 * @param port Pointer to the port data structure.
1552 * @param command Pointer to the user specified command parameters.
1553 * @param user_buffer Pointer to the user space buffer where read sector
1554 * data should be copied.
1555 *
1556 * return value 0 The command completed successfully.
1557 * return value -EFAULT An error occurred while copying the completion
1558 * data to the user space buffer.
1559 * return value -1 An error occurred while executing the command.
1560 */
1561 static int exec_drive_command(struct mtip_port *port, u8 *command,
1562 void __user *user_buffer)
1563 {
1564 struct host_to_dev_fis fis;
1565 struct host_to_dev_fis *reply = (port->rxfis + RX_FIS_D2H_REG);
1566
1567 /* Build the FIS. */
1568 memset(&fis, 0, sizeof(struct host_to_dev_fis));
1569 fis.type = 0x27;
1570 fis.opts = 1 << 7;
1571 fis.command = command[0];
1572 fis.features = command[2];
1573 fis.sect_count = command[3];
1574 if (fis.command == ATA_CMD_SMART) {
1575 fis.sector = command[1];
1576 fis.cyl_low = 0x4F;
1577 fis.cyl_hi = 0xC2;
1578 }
1579
1580 dbg_printk(MTIP_DRV_NAME
1581 "%s: User Command: cmd %x, sect %x, "
1582 "feat %x, sectcnt %x\n",
1583 __func__,
1584 command[0],
1585 command[1],
1586 command[2],
1587 command[3]);
1588
1589 memset(port->sector_buffer, 0x00, ATA_SECT_SIZE);
1590
1591 /* Execute the command. */
1592 if (mtip_exec_internal_command(port,
1593 &fis,
1594 5,
1595 port->sector_buffer_dma,
1596 (command[3] != 0) ? ATA_SECT_SIZE : 0,
1597 0,
1598 GFP_KERNEL,
1599 MTIP_IOCTL_COMMAND_TIMEOUT_MS)
1600 < 0) {
1601 return -1;
1602 }
1603
1604 /* Collect the completion status. */
1605 command[0] = reply->command; /* Status*/
1606 command[1] = reply->features; /* Error*/
1607 command[2] = command[3];
1608
1609 dbg_printk(MTIP_DRV_NAME
1610 "%s: Completion Status: stat %x, "
1611 "err %x, cmd %x\n",
1612 __func__,
1613 command[0],
1614 command[1],
1615 command[2]);
1616
1617 if (user_buffer && command[3]) {
1618 if (copy_to_user(user_buffer,
1619 port->sector_buffer,
1620 ATA_SECT_SIZE * command[3])) {
1621 return -EFAULT;
1622 }
1623 }
1624
1625 return 0;
1626 }
1627
1628 /*
1629 * Indicates whether a command has a single sector payload.
1630 *
1631 * @command passed to the device to perform the certain event.
1632 * @features passed to the device to perform the certain event.
1633 *
1634 * return value
1635 * 1 command is one that always has a single sector payload,
1636 * regardless of the value in the Sector Count field.
1637 * 0 otherwise
1638 *
1639 */
1640 static unsigned int implicit_sector(unsigned char command,
1641 unsigned char features)
1642 {
1643 unsigned int rv = 0;
1644
1645 /* list of commands that have an implicit sector count of 1 */
1646 switch (command) {
1647 case ATA_CMD_SEC_SET_PASS:
1648 case ATA_CMD_SEC_UNLOCK:
1649 case ATA_CMD_SEC_ERASE_PREP:
1650 case ATA_CMD_SEC_ERASE_UNIT:
1651 case ATA_CMD_SEC_FREEZE_LOCK:
1652 case ATA_CMD_SEC_DISABLE_PASS:
1653 case ATA_CMD_PMP_READ:
1654 case ATA_CMD_PMP_WRITE:
1655 rv = 1;
1656 break;
1657 case ATA_CMD_SET_MAX:
1658 if (features == ATA_SET_MAX_UNLOCK)
1659 rv = 1;
1660 break;
1661 case ATA_CMD_SMART:
1662 if ((features == ATA_SMART_READ_VALUES) ||
1663 (features == ATA_SMART_READ_THRESHOLDS))
1664 rv = 1;
1665 break;
1666 case ATA_CMD_CONF_OVERLAY:
1667 if ((features == ATA_DCO_IDENTIFY) ||
1668 (features == ATA_DCO_SET))
1669 rv = 1;
1670 break;
1671 }
1672 return rv;
1673 }
1674
1675 /*
1676 * Executes a taskfile
1677 * See ide_taskfile_ioctl() for derivation
1678 */
1679 static int exec_drive_taskfile(struct driver_data *dd,
1680 void __user *buf,
1681 ide_task_request_t *req_task,
1682 int outtotal)
1683 {
1684 struct host_to_dev_fis fis;
1685 struct host_to_dev_fis *reply;
1686 u8 *outbuf = NULL;
1687 u8 *inbuf = NULL;
1688 dma_addr_t outbuf_dma = 0;
1689 dma_addr_t inbuf_dma = 0;
1690 dma_addr_t dma_buffer = 0;
1691 int err = 0;
1692 unsigned int taskin = 0;
1693 unsigned int taskout = 0;
1694 u8 nsect = 0;
1695 unsigned int timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS;
1696 unsigned int force_single_sector;
1697 unsigned int transfer_size;
1698 unsigned long task_file_data;
1699 int intotal = outtotal + req_task->out_size;
1700
1701 taskout = req_task->out_size;
1702 taskin = req_task->in_size;
1703 /* 130560 = 512 * 0xFF*/
1704 if (taskin > 130560 || taskout > 130560) {
1705 err = -EINVAL;
1706 goto abort;
1707 }
1708
1709 if (taskout) {
1710 outbuf = kzalloc(taskout, GFP_KERNEL);
1711 if (outbuf == NULL) {
1712 err = -ENOMEM;
1713 goto abort;
1714 }
1715 if (copy_from_user(outbuf, buf + outtotal, taskout)) {
1716 err = -EFAULT;
1717 goto abort;
1718 }
1719 outbuf_dma = pci_map_single(dd->pdev,
1720 outbuf,
1721 taskout,
1722 DMA_TO_DEVICE);
1723 if (outbuf_dma == 0) {
1724 err = -ENOMEM;
1725 goto abort;
1726 }
1727 dma_buffer = outbuf_dma;
1728 }
1729
1730 if (taskin) {
1731 inbuf = kzalloc(taskin, GFP_KERNEL);
1732 if (inbuf == NULL) {
1733 err = -ENOMEM;
1734 goto abort;
1735 }
1736
1737 if (copy_from_user(inbuf, buf + intotal, taskin)) {
1738 err = -EFAULT;
1739 goto abort;
1740 }
1741 inbuf_dma = pci_map_single(dd->pdev,
1742 inbuf,
1743 taskin, DMA_FROM_DEVICE);
1744 if (inbuf_dma == 0) {
1745 err = -ENOMEM;
1746 goto abort;
1747 }
1748 dma_buffer = inbuf_dma;
1749 }
1750
1751 /* only supports PIO and non-data commands from this ioctl. */
1752 switch (req_task->data_phase) {
1753 case TASKFILE_OUT:
1754 nsect = taskout / ATA_SECT_SIZE;
1755 reply = (dd->port->rxfis + RX_FIS_PIO_SETUP);
1756 break;
1757 case TASKFILE_IN:
1758 reply = (dd->port->rxfis + RX_FIS_PIO_SETUP);
1759 break;
1760 case TASKFILE_NO_DATA:
1761 reply = (dd->port->rxfis + RX_FIS_D2H_REG);
1762 break;
1763 default:
1764 err = -EINVAL;
1765 goto abort;
1766 }
1767
1768 /* Build the FIS. */
1769 memset(&fis, 0, sizeof(struct host_to_dev_fis));
1770
1771 fis.type = 0x27;
1772 fis.opts = 1 << 7;
1773 fis.command = req_task->io_ports[7];
1774 fis.features = req_task->io_ports[1];
1775 fis.sect_count = req_task->io_ports[2];
1776 fis.lba_low = req_task->io_ports[3];
1777 fis.lba_mid = req_task->io_ports[4];
1778 fis.lba_hi = req_task->io_ports[5];
1779 /* Clear the dev bit*/
1780 fis.device = req_task->io_ports[6] & ~0x10;
1781
1782 if ((req_task->in_flags.all == 0) && (req_task->out_flags.all & 1)) {
1783 req_task->in_flags.all =
1784 IDE_TASKFILE_STD_IN_FLAGS |
1785 (IDE_HOB_STD_IN_FLAGS << 8);
1786 fis.lba_low_ex = req_task->hob_ports[3];
1787 fis.lba_mid_ex = req_task->hob_ports[4];
1788 fis.lba_hi_ex = req_task->hob_ports[5];
1789 fis.features_ex = req_task->hob_ports[1];
1790 fis.sect_cnt_ex = req_task->hob_ports[2];
1791
1792 } else {
1793 req_task->in_flags.all = IDE_TASKFILE_STD_IN_FLAGS;
1794 }
1795
1796 force_single_sector = implicit_sector(fis.command, fis.features);
1797
1798 if ((taskin || taskout) && (!fis.sect_count)) {
1799 if (nsect)
1800 fis.sect_count = nsect;
1801 else {
1802 if (!force_single_sector) {
1803 dev_warn(&dd->pdev->dev,
1804 "data movement but "
1805 "sect_count is 0\n");
1806 err = -EINVAL;
1807 goto abort;
1808 }
1809 }
1810 }
1811
1812 dbg_printk(MTIP_DRV_NAME
1813 "taskfile: cmd %x, feat %x, nsect %x,"
1814 " sect/lbal %x, lcyl/lbam %x, hcyl/lbah %x,"
1815 " head/dev %x\n",
1816 fis.command,
1817 fis.features,
1818 fis.sect_count,
1819 fis.lba_low,
1820 fis.lba_mid,
1821 fis.lba_hi,
1822 fis.device);
1823
1824 switch (fis.command) {
1825 case ATA_CMD_DOWNLOAD_MICRO:
1826 /* Change timeout for Download Microcode to 60 seconds.*/
1827 timeout = 60000;
1828 break;
1829 case ATA_CMD_SEC_ERASE_UNIT:
1830 /* Change timeout for Security Erase Unit to 4 minutes.*/
1831 timeout = 240000;
1832 break;
1833 case ATA_CMD_STANDBYNOW1:
1834 /* Change timeout for standby immediate to 10 seconds.*/
1835 timeout = 10000;
1836 break;
1837 case 0xF7:
1838 case 0xFA:
1839 /* Change timeout for vendor unique command to 10 secs */
1840 timeout = 10000;
1841 break;
1842 case ATA_CMD_SMART:
1843 /* Change timeout for vendor unique command to 10 secs */
1844 timeout = 10000;
1845 break;
1846 default:
1847 timeout = MTIP_IOCTL_COMMAND_TIMEOUT_MS;
1848 break;
1849 }
1850
1851 /* Determine the correct transfer size.*/
1852 if (force_single_sector)
1853 transfer_size = ATA_SECT_SIZE;
1854 else
1855 transfer_size = ATA_SECT_SIZE * fis.sect_count;
1856
1857 /* Execute the command.*/
1858 if (mtip_exec_internal_command(dd->port,
1859 &fis,
1860 5,
1861 dma_buffer,
1862 transfer_size,
1863 0,
1864 GFP_KERNEL,
1865 timeout) < 0) {
1866 err = -EIO;
1867 goto abort;
1868 }
1869
1870 task_file_data = readl(dd->port->mmio+PORT_TFDATA);
1871
1872 if ((req_task->data_phase == TASKFILE_IN) && !(task_file_data & 1)) {
1873 reply = dd->port->rxfis + RX_FIS_PIO_SETUP;
1874 req_task->io_ports[7] = reply->control;
1875 } else {
1876 reply = dd->port->rxfis + RX_FIS_D2H_REG;
1877 req_task->io_ports[7] = reply->command;
1878 }
1879
1880 /* reclaim the DMA buffers.*/
1881 if (inbuf_dma)
1882 pci_unmap_single(dd->pdev, inbuf_dma,
1883 taskin, DMA_FROM_DEVICE);
1884 if (outbuf_dma)
1885 pci_unmap_single(dd->pdev, outbuf_dma,
1886 taskout, DMA_TO_DEVICE);
1887 inbuf_dma = 0;
1888 outbuf_dma = 0;
1889
1890 /* return the ATA registers to the caller.*/
1891 req_task->io_ports[1] = reply->features;
1892 req_task->io_ports[2] = reply->sect_count;
1893 req_task->io_ports[3] = reply->lba_low;
1894 req_task->io_ports[4] = reply->lba_mid;
1895 req_task->io_ports[5] = reply->lba_hi;
1896 req_task->io_ports[6] = reply->device;
1897
1898 if (req_task->out_flags.all & 1) {
1899
1900 req_task->hob_ports[3] = reply->lba_low_ex;
1901 req_task->hob_ports[4] = reply->lba_mid_ex;
1902 req_task->hob_ports[5] = reply->lba_hi_ex;
1903 req_task->hob_ports[1] = reply->features_ex;
1904 req_task->hob_ports[2] = reply->sect_cnt_ex;
1905 }
1906
1907 /* Com rest after secure erase or lowlevel format */
1908 if (((fis.command == ATA_CMD_SEC_ERASE_UNIT) ||
1909 ((fis.command == 0xFC) &&
1910 (fis.features == 0x27 || fis.features == 0x72 ||
1911 fis.features == 0x62 || fis.features == 0x26))) &&
1912 !(reply->command & 1)) {
1913 mtip_restart_port(dd->port);
1914 }
1915
1916 dbg_printk(MTIP_DRV_NAME
1917 "%s: Completion: stat %x,"
1918 "err %x, sect_cnt %x, lbalo %x,"
1919 "lbamid %x, lbahi %x, dev %x\n",
1920 __func__,
1921 req_task->io_ports[7],
1922 req_task->io_ports[1],
1923 req_task->io_ports[2],
1924 req_task->io_ports[3],
1925 req_task->io_ports[4],
1926 req_task->io_ports[5],
1927 req_task->io_ports[6]);
1928
1929 if (taskout) {
1930 if (copy_to_user(buf + outtotal, outbuf, taskout)) {
1931 err = -EFAULT;
1932 goto abort;
1933 }
1934 }
1935 if (taskin) {
1936 if (copy_to_user(buf + intotal, inbuf, taskin)) {
1937 err = -EFAULT;
1938 goto abort;
1939 }
1940 }
1941 abort:
1942 if (inbuf_dma)
1943 pci_unmap_single(dd->pdev, inbuf_dma,
1944 taskin, DMA_FROM_DEVICE);
1945 if (outbuf_dma)
1946 pci_unmap_single(dd->pdev, outbuf_dma,
1947 taskout, DMA_TO_DEVICE);
1948 kfree(outbuf);
1949 kfree(inbuf);
1950
1951 return err;
1952 }
1953
1954 /*
1955 * Handle IOCTL calls from the Block Layer.
1956 *
1957 * This function is called by the Block Layer when it receives an IOCTL
1958 * command that it does not understand. If the IOCTL command is not supported
1959 * this function returns -ENOTTY.
1960 *
1961 * @dd Pointer to the driver data structure.
1962 * @cmd IOCTL command passed from the Block Layer.
1963 * @arg IOCTL argument passed from the Block Layer.
1964 *
1965 * return value
1966 * 0 The IOCTL completed successfully.
1967 * -ENOTTY The specified command is not supported.
1968 * -EFAULT An error occurred copying data to a user space buffer.
1969 * -EIO An error occurred while executing the command.
1970 */
1971 static int mtip_hw_ioctl(struct driver_data *dd, unsigned int cmd,
1972 unsigned long arg)
1973 {
1974 switch (cmd) {
1975 case HDIO_GET_IDENTITY:
1976 if (mtip_get_identify(dd->port, (void __user *) arg) < 0) {
1977 dev_warn(&dd->pdev->dev,
1978 "Unable to read identity\n");
1979 return -EIO;
1980 }
1981
1982 break;
1983 case HDIO_DRIVE_CMD:
1984 {
1985 u8 drive_command[4];
1986
1987 /* Copy the user command info to our buffer. */
1988 if (copy_from_user(drive_command,
1989 (void __user *) arg,
1990 sizeof(drive_command)))
1991 return -EFAULT;
1992
1993 /* Execute the drive command. */
1994 if (exec_drive_command(dd->port,
1995 drive_command,
1996 (void __user *) (arg+4)))
1997 return -EIO;
1998
1999 /* Copy the status back to the users buffer. */
2000 if (copy_to_user((void __user *) arg,
2001 drive_command,
2002 sizeof(drive_command)))
2003 return -EFAULT;
2004
2005 break;
2006 }
2007 case HDIO_DRIVE_TASK:
2008 {
2009 u8 drive_command[7];
2010
2011 /* Copy the user command info to our buffer. */
2012 if (copy_from_user(drive_command,
2013 (void __user *) arg,
2014 sizeof(drive_command)))
2015 return -EFAULT;
2016
2017 /* Execute the drive command. */
2018 if (exec_drive_task(dd->port, drive_command))
2019 return -EIO;
2020
2021 /* Copy the status back to the users buffer. */
2022 if (copy_to_user((void __user *) arg,
2023 drive_command,
2024 sizeof(drive_command)))
2025 return -EFAULT;
2026
2027 break;
2028 }
2029 case HDIO_DRIVE_TASKFILE: {
2030 ide_task_request_t req_task;
2031 int ret, outtotal;
2032
2033 if (copy_from_user(&req_task, (void __user *) arg,
2034 sizeof(req_task)))
2035 return -EFAULT;
2036
2037 outtotal = sizeof(req_task);
2038
2039 ret = exec_drive_taskfile(dd, (void __user *) arg,
2040 &req_task, outtotal);
2041
2042 if (copy_to_user((void __user *) arg, &req_task,
2043 sizeof(req_task)))
2044 return -EFAULT;
2045
2046 return ret;
2047 }
2048
2049 default:
2050 return -EINVAL;
2051 }
2052 return 0;
2053 }
2054
2055 /*
2056 * Submit an IO to the hw
2057 *
2058 * This function is called by the block layer to issue an io
2059 * to the device. Upon completion, the callback function will
2060 * be called with the data parameter passed as the callback data.
2061 *
2062 * @dd Pointer to the driver data structure.
2063 * @start First sector to read.
2064 * @nsect Number of sectors to read.
2065 * @nents Number of entries in scatter list for the read command.
2066 * @tag The tag of this read command.
2067 * @callback Pointer to the function that should be called
2068 * when the read completes.
2069 * @data Callback data passed to the callback function
2070 * when the read completes.
2071 * @barrier If non-zero, this command must be completed before
2072 * issuing any other commands.
2073 * @dir Direction (read or write)
2074 *
2075 * return value
2076 * None
2077 */
2078 static void mtip_hw_submit_io(struct driver_data *dd, sector_t start,
2079 int nsect, int nents, int tag, void *callback,
2080 void *data, int barrier, int dir)
2081 {
2082 struct host_to_dev_fis *fis;
2083 struct mtip_port *port = dd->port;
2084 struct mtip_cmd *command = &port->commands[tag];
2085
2086 /* Map the scatter list for DMA access */
2087 if (dir == READ)
2088 nents = dma_map_sg(&dd->pdev->dev, command->sg,
2089 nents, DMA_FROM_DEVICE);
2090 else
2091 nents = dma_map_sg(&dd->pdev->dev, command->sg,
2092 nents, DMA_TO_DEVICE);
2093
2094 command->scatter_ents = nents;
2095
2096 /*
2097 * The number of retries for this command before it is
2098 * reported as a failure to the upper layers.
2099 */
2100 command->retries = MTIP_MAX_RETRIES;
2101
2102 /* Fill out fis */
2103 fis = command->command;
2104 fis->type = 0x27;
2105 fis->opts = 1 << 7;
2106 fis->command =
2107 (dir == READ ? ATA_CMD_FPDMA_READ : ATA_CMD_FPDMA_WRITE);
2108 *((unsigned int *) &fis->lba_low) = (start & 0xFFFFFF);
2109 *((unsigned int *) &fis->lba_low_ex) = ((start >> 24) & 0xFFFFFF);
2110 fis->device = 1 << 6;
2111 if (barrier)
2112 fis->device |= FUA_BIT;
2113 fis->features = nsect & 0xFF;
2114 fis->features_ex = (nsect >> 8) & 0xFF;
2115 fis->sect_count = ((tag << 3) | (tag >> 5));
2116 fis->sect_cnt_ex = 0;
2117 fis->control = 0;
2118 fis->res2 = 0;
2119 fis->res3 = 0;
2120 fill_command_sg(dd, command, nents);
2121
2122 /* Populate the command header */
2123 command->command_header->opts =
2124 __force_bit2int cpu_to_le32(
2125 (nents << 16) | 5 | AHCI_CMD_PREFETCH);
2126 command->command_header->byte_count = 0;
2127
2128 /*
2129 * Set the completion function and data for the command
2130 * within this layer.
2131 */
2132 command->comp_data = dd;
2133 command->comp_func = mtip_async_complete;
2134 command->direction = (dir == READ ? DMA_FROM_DEVICE : DMA_TO_DEVICE);
2135
2136 /*
2137 * Set the completion function and data for the command passed
2138 * from the upper layer.
2139 */
2140 command->async_data = data;
2141 command->async_callback = callback;
2142
2143 /*
2144 * To prevent this command from being issued
2145 * if an internal command is in progress or error handling is active.
2146 */
2147 if (unlikely(test_bit(MTIP_FLAG_IC_ACTIVE_BIT, &port->flags) ||
2148 test_bit(MTIP_FLAG_EH_ACTIVE_BIT, &port->flags))) {
2149 set_bit(tag, port->cmds_to_issue);
2150 set_bit(MTIP_FLAG_ISSUE_CMDS_BIT, &port->flags);
2151 return;
2152 }
2153
2154 /* Issue the command to the hardware */
2155 mtip_issue_ncq_command(port, tag);
2156
2157 /* Set the command's timeout value.*/
2158 port->commands[tag].comp_time = jiffies + msecs_to_jiffies(
2159 MTIP_NCQ_COMMAND_TIMEOUT_MS);
2160 }
2161
2162 /*
2163 * Release a command slot.
2164 *
2165 * @dd Pointer to the driver data structure.
2166 * @tag Slot tag
2167 *
2168 * return value
2169 * None
2170 */
2171 static void mtip_hw_release_scatterlist(struct driver_data *dd, int tag)
2172 {
2173 release_slot(dd->port, tag);
2174 }
2175
2176 /*
2177 * Obtain a command slot and return its associated scatter list.
2178 *
2179 * @dd Pointer to the driver data structure.
2180 * @tag Pointer to an int that will receive the allocated command
2181 * slot tag.
2182 *
2183 * return value
2184 * Pointer to the scatter list for the allocated command slot
2185 * or NULL if no command slots are available.
2186 */
2187 static struct scatterlist *mtip_hw_get_scatterlist(struct driver_data *dd,
2188 int *tag)
2189 {
2190 /*
2191 * It is possible that, even with this semaphore, a thread
2192 * may think that no command slots are available. Therefore, we
2193 * need to make an attempt to get_slot().
2194 */
2195 down(&dd->port->cmd_slot);
2196 *tag = get_slot(dd->port);
2197
2198 if (unlikely(*tag < 0))
2199 return NULL;
2200
2201 return dd->port->commands[*tag].sg;
2202 }
2203
2204 /*
2205 * Sysfs register/status dump.
2206 *
2207 * @dev Pointer to the device structure, passed by the kernrel.
2208 * @attr Pointer to the device_attribute structure passed by the kernel.
2209 * @buf Pointer to the char buffer that will receive the stats info.
2210 *
2211 * return value
2212 * The size, in bytes, of the data copied into buf.
2213 */
2214 static ssize_t hw_show_registers(struct device *dev,
2215 struct device_attribute *attr,
2216 char *buf)
2217 {
2218 u32 group_allocated;
2219 struct driver_data *dd = dev_to_disk(dev)->private_data;
2220 int size = 0;
2221 int n;
2222
2223 size += sprintf(&buf[size], "%s:\ns_active:\n", __func__);
2224
2225 for (n = 0; n < dd->slot_groups; n++)
2226 size += sprintf(&buf[size], "0x%08x\n",
2227 readl(dd->port->s_active[n]));
2228
2229 size += sprintf(&buf[size], "Command Issue:\n");
2230
2231 for (n = 0; n < dd->slot_groups; n++)
2232 size += sprintf(&buf[size], "0x%08x\n",
2233 readl(dd->port->cmd_issue[n]));
2234
2235 size += sprintf(&buf[size], "Allocated:\n");
2236
2237 for (n = 0; n < dd->slot_groups; n++) {
2238 if (sizeof(long) > sizeof(u32))
2239 group_allocated =
2240 dd->port->allocated[n/2] >> (32*(n&1));
2241 else
2242 group_allocated = dd->port->allocated[n];
2243 size += sprintf(&buf[size], "0x%08x\n",
2244 group_allocated);
2245 }
2246
2247 size += sprintf(&buf[size], "completed:\n");
2248
2249 for (n = 0; n < dd->slot_groups; n++)
2250 size += sprintf(&buf[size], "0x%08x\n",
2251 readl(dd->port->completed[n]));
2252
2253 size += sprintf(&buf[size], "PORT_IRQ_STAT 0x%08x\n",
2254 readl(dd->port->mmio + PORT_IRQ_STAT));
2255 size += sprintf(&buf[size], "HOST_IRQ_STAT 0x%08x\n",
2256 readl(dd->mmio + HOST_IRQ_STAT));
2257
2258 return size;
2259 }
2260 static DEVICE_ATTR(registers, S_IRUGO, hw_show_registers, NULL);
2261
2262 /*
2263 * Create the sysfs related attributes.
2264 *
2265 * @dd Pointer to the driver data structure.
2266 * @kobj Pointer to the kobj for the block device.
2267 *
2268 * return value
2269 * 0 Operation completed successfully.
2270 * -EINVAL Invalid parameter.
2271 */
2272 static int mtip_hw_sysfs_init(struct driver_data *dd, struct kobject *kobj)
2273 {
2274 if (!kobj || !dd)
2275 return -EINVAL;
2276
2277 if (sysfs_create_file(kobj, &dev_attr_registers.attr))
2278 dev_warn(&dd->pdev->dev,
2279 "Error creating registers sysfs entry\n");
2280 return 0;
2281 }
2282
2283 /*
2284 * Remove the sysfs related attributes.
2285 *
2286 * @dd Pointer to the driver data structure.
2287 * @kobj Pointer to the kobj for the block device.
2288 *
2289 * return value
2290 * 0 Operation completed successfully.
2291 * -EINVAL Invalid parameter.
2292 */
2293 static int mtip_hw_sysfs_exit(struct driver_data *dd, struct kobject *kobj)
2294 {
2295 if (!kobj || !dd)
2296 return -EINVAL;
2297
2298 sysfs_remove_file(kobj, &dev_attr_registers.attr);
2299
2300 return 0;
2301 }
2302
2303 /*
2304 * Perform any init/resume time hardware setup
2305 *
2306 * @dd Pointer to the driver data structure.
2307 *
2308 * return value
2309 * None
2310 */
2311 static inline void hba_setup(struct driver_data *dd)
2312 {
2313 u32 hwdata;
2314 hwdata = readl(dd->mmio + HOST_HSORG);
2315
2316 /* interrupt bug workaround: use only 1 IS bit.*/
2317 writel(hwdata |
2318 HSORG_DISABLE_SLOTGRP_INTR |
2319 HSORG_DISABLE_SLOTGRP_PXIS,
2320 dd->mmio + HOST_HSORG);
2321 }
2322
2323 /*
2324 * Detect the details of the product, and store anything needed
2325 * into the driver data structure. This includes product type and
2326 * version and number of slot groups.
2327 *
2328 * @dd Pointer to the driver data structure.
2329 *
2330 * return value
2331 * None
2332 */
2333 static void mtip_detect_product(struct driver_data *dd)
2334 {
2335 u32 hwdata;
2336 unsigned int rev, slotgroups;
2337
2338 /*
2339 * HBA base + 0xFC [15:0] - vendor-specific hardware interface
2340 * info register:
2341 * [15:8] hardware/software interface rev#
2342 * [ 3] asic-style interface
2343 * [ 2:0] number of slot groups, minus 1 (only valid for asic-style).
2344 */
2345 hwdata = readl(dd->mmio + HOST_HSORG);
2346
2347 dd->product_type = MTIP_PRODUCT_UNKNOWN;
2348 dd->slot_groups = 1;
2349
2350 if (hwdata & 0x8) {
2351 dd->product_type = MTIP_PRODUCT_ASICFPGA;
2352 rev = (hwdata & HSORG_HWREV) >> 8;
2353 slotgroups = (hwdata & HSORG_SLOTGROUPS) + 1;
2354 dev_info(&dd->pdev->dev,
2355 "ASIC-FPGA design, HS rev 0x%x, "
2356 "%i slot groups [%i slots]\n",
2357 rev,
2358 slotgroups,
2359 slotgroups * 32);
2360
2361 if (slotgroups > MTIP_MAX_SLOT_GROUPS) {
2362 dev_warn(&dd->pdev->dev,
2363 "Warning: driver only supports "
2364 "%i slot groups.\n", MTIP_MAX_SLOT_GROUPS);
2365 slotgroups = MTIP_MAX_SLOT_GROUPS;
2366 }
2367 dd->slot_groups = slotgroups;
2368 return;
2369 }
2370
2371 dev_warn(&dd->pdev->dev, "Unrecognized product id\n");
2372 }
2373
2374 /*
2375 * Blocking wait for FTL rebuild to complete
2376 *
2377 * @dd Pointer to the DRIVER_DATA structure.
2378 *
2379 * return value
2380 * 0 FTL rebuild completed successfully
2381 * -EFAULT FTL rebuild error/timeout/interruption
2382 */
2383 static int mtip_ftl_rebuild_poll(struct driver_data *dd)
2384 {
2385 unsigned long timeout, cnt = 0, start;
2386
2387 dev_warn(&dd->pdev->dev,
2388 "FTL rebuild in progress. Polling for completion.\n");
2389
2390 start = jiffies;
2391 dd->ftlrebuildflag = 1;
2392 timeout = jiffies + msecs_to_jiffies(MTIP_FTL_REBUILD_TIMEOUT_MS);
2393
2394 do {
2395 if (mtip_check_surprise_removal(dd->pdev))
2396 return -EFAULT;
2397
2398 if (mtip_get_identify(dd->port, NULL) < 0)
2399 return -EFAULT;
2400
2401 if (*(dd->port->identify + MTIP_FTL_REBUILD_OFFSET) ==
2402 MTIP_FTL_REBUILD_MAGIC) {
2403 ssleep(1);
2404 /* Print message every 3 minutes */
2405 if (cnt++ >= 180) {
2406 dev_warn(&dd->pdev->dev,
2407 "FTL rebuild in progress (%d secs).\n",
2408 jiffies_to_msecs(jiffies - start) / 1000);
2409 cnt = 0;
2410 }
2411 } else {
2412 dev_warn(&dd->pdev->dev,
2413 "FTL rebuild complete (%d secs).\n",
2414 jiffies_to_msecs(jiffies - start) / 1000);
2415 dd->ftlrebuildflag = 0;
2416 mtip_block_initialize(dd);
2417 break;
2418 }
2419 ssleep(10);
2420 } while (time_before(jiffies, timeout));
2421
2422 /* Check for timeout */
2423 if (dd->ftlrebuildflag) {
2424 dev_err(&dd->pdev->dev,
2425 "Timed out waiting for FTL rebuild to complete (%d secs).\n",
2426 jiffies_to_msecs(jiffies - start) / 1000);
2427 return -EFAULT;
2428 }
2429
2430 return 0;
2431 }
2432
2433 /*
2434 * service thread to issue queued commands
2435 *
2436 * @data Pointer to the driver data structure.
2437 *
2438 * return value
2439 * 0
2440 */
2441
2442 static int mtip_service_thread(void *data)
2443 {
2444 struct driver_data *dd = (struct driver_data *)data;
2445 unsigned long slot, slot_start, slot_wrap;
2446 unsigned int num_cmd_slots = dd->slot_groups * 32;
2447 struct mtip_port *port = dd->port;
2448
2449 while (1) {
2450 /*
2451 * the condition is to check neither an internal command is
2452 * is in progress nor error handling is active
2453 */
2454 wait_event_interruptible(port->svc_wait, (port->flags) &&
2455 !test_bit(MTIP_FLAG_IC_ACTIVE_BIT, &port->flags) &&
2456 !test_bit(MTIP_FLAG_EH_ACTIVE_BIT, &port->flags));
2457
2458 if (kthread_should_stop())
2459 break;
2460
2461 set_bit(MTIP_FLAG_SVC_THD_ACTIVE_BIT, &port->flags);
2462 if (test_bit(MTIP_FLAG_ISSUE_CMDS_BIT, &port->flags)) {
2463 slot = 1;
2464 /* used to restrict the loop to one iteration */
2465 slot_start = num_cmd_slots;
2466 slot_wrap = 0;
2467 while (1) {
2468 slot = find_next_bit(port->cmds_to_issue,
2469 num_cmd_slots, slot);
2470 if (slot_wrap == 1) {
2471 if ((slot_start >= slot) ||
2472 (slot >= num_cmd_slots))
2473 break;
2474 }
2475 if (unlikely(slot_start == num_cmd_slots))
2476 slot_start = slot;
2477
2478 if (unlikely(slot == num_cmd_slots)) {
2479 slot = 1;
2480 slot_wrap = 1;
2481 continue;
2482 }
2483
2484 /* Issue the command to the hardware */
2485 mtip_issue_ncq_command(port, slot);
2486
2487 /* Set the command's timeout value.*/
2488 port->commands[slot].comp_time = jiffies +
2489 msecs_to_jiffies(MTIP_NCQ_COMMAND_TIMEOUT_MS);
2490
2491 clear_bit(slot, port->cmds_to_issue);
2492 }
2493
2494 clear_bit(MTIP_FLAG_ISSUE_CMDS_BIT, &port->flags);
2495 } else if (test_bit(MTIP_FLAG_REBUILD_BIT, &port->flags)) {
2496 mtip_ftl_rebuild_poll(dd);
2497 clear_bit(MTIP_FLAG_REBUILD_BIT, &port->flags);
2498 }
2499 clear_bit(MTIP_FLAG_SVC_THD_ACTIVE_BIT, &port->flags);
2500
2501 if (test_bit(MTIP_FLAG_SVC_THD_SHOULD_STOP_BIT, &port->flags))
2502 break;
2503 }
2504 return 0;
2505 }
2506
2507 /*
2508 * Called once for each card.
2509 *
2510 * @dd Pointer to the driver data structure.
2511 *
2512 * return value
2513 * 0 on success, else an error code.
2514 */
2515 static int mtip_hw_init(struct driver_data *dd)
2516 {
2517 int i;
2518 int rv;
2519 unsigned int num_command_slots;
2520
2521 dd->mmio = pcim_iomap_table(dd->pdev)[MTIP_ABAR];
2522
2523 mtip_detect_product(dd);
2524 if (dd->product_type == MTIP_PRODUCT_UNKNOWN) {
2525 rv = -EIO;
2526 goto out1;
2527 }
2528 num_command_slots = dd->slot_groups * 32;
2529
2530 hba_setup(dd);
2531
2532 tasklet_init(&dd->tasklet, mtip_tasklet, (unsigned long)dd);
2533
2534 dd->port = kzalloc(sizeof(struct mtip_port), GFP_KERNEL);
2535 if (!dd->port) {
2536 dev_err(&dd->pdev->dev,
2537 "Memory allocation: port structure\n");
2538 return -ENOMEM;
2539 }
2540
2541 /* Counting semaphore to track command slot usage */
2542 sema_init(&dd->port->cmd_slot, num_command_slots - 1);
2543
2544 /* Spinlock to prevent concurrent issue */
2545 spin_lock_init(&dd->port->cmd_issue_lock);
2546
2547 /* Set the port mmio base address. */
2548 dd->port->mmio = dd->mmio + PORT_OFFSET;
2549 dd->port->dd = dd;
2550
2551 /* Allocate memory for the command list. */
2552 dd->port->command_list =
2553 dmam_alloc_coherent(&dd->pdev->dev,
2554 HW_PORT_PRIV_DMA_SZ + (ATA_SECT_SIZE * 2),
2555 &dd->port->command_list_dma,
2556 GFP_KERNEL);
2557 if (!dd->port->command_list) {
2558 dev_err(&dd->pdev->dev,
2559 "Memory allocation: command list\n");
2560 rv = -ENOMEM;
2561 goto out1;
2562 }
2563
2564 /* Clear the memory we have allocated. */
2565 memset(dd->port->command_list,
2566 0,
2567 HW_PORT_PRIV_DMA_SZ + (ATA_SECT_SIZE * 2));
2568
2569 /* Setup the addresse of the RX FIS. */
2570 dd->port->rxfis = dd->port->command_list + HW_CMD_SLOT_SZ;
2571 dd->port->rxfis_dma = dd->port->command_list_dma + HW_CMD_SLOT_SZ;
2572
2573 /* Setup the address of the command tables. */
2574 dd->port->command_table = dd->port->rxfis + AHCI_RX_FIS_SZ;
2575 dd->port->command_tbl_dma = dd->port->rxfis_dma + AHCI_RX_FIS_SZ;
2576
2577 /* Setup the address of the identify data. */
2578 dd->port->identify = dd->port->command_table +
2579 HW_CMD_TBL_AR_SZ;
2580 dd->port->identify_dma = dd->port->command_tbl_dma +
2581 HW_CMD_TBL_AR_SZ;
2582
2583 /* Setup the address of the sector buffer. */
2584 dd->port->sector_buffer = (void *) dd->port->identify + ATA_SECT_SIZE;
2585 dd->port->sector_buffer_dma = dd->port->identify_dma + ATA_SECT_SIZE;
2586
2587 /* Point the command headers at the command tables. */
2588 for (i = 0; i < num_command_slots; i++) {
2589 dd->port->commands[i].command_header =
2590 dd->port->command_list +
2591 (sizeof(struct mtip_cmd_hdr) * i);
2592 dd->port->commands[i].command_header_dma =
2593 dd->port->command_list_dma +
2594 (sizeof(struct mtip_cmd_hdr) * i);
2595
2596 dd->port->commands[i].command =
2597 dd->port->command_table + (HW_CMD_TBL_SZ * i);
2598 dd->port->commands[i].command_dma =
2599 dd->port->command_tbl_dma + (HW_CMD_TBL_SZ * i);
2600
2601 if (readl(dd->mmio + HOST_CAP) & HOST_CAP_64)
2602 dd->port->commands[i].command_header->ctbau =
2603 __force_bit2int cpu_to_le32(
2604 (dd->port->commands[i].command_dma >> 16) >> 16);
2605 dd->port->commands[i].command_header->ctba =
2606 __force_bit2int cpu_to_le32(
2607 dd->port->commands[i].command_dma & 0xFFFFFFFF);
2608
2609 /*
2610 * If this is not done, a bug is reported by the stock
2611 * FC11 i386. Due to the fact that it has lots of kernel
2612 * debugging enabled.
2613 */
2614 sg_init_table(dd->port->commands[i].sg, MTIP_MAX_SG);
2615
2616 /* Mark all commands as currently inactive.*/
2617 atomic_set(&dd->port->commands[i].active, 0);
2618 }
2619
2620 /* Setup the pointers to the extended s_active and CI registers. */
2621 for (i = 0; i < dd->slot_groups; i++) {
2622 dd->port->s_active[i] =
2623 dd->port->mmio + i*0x80 + PORT_SCR_ACT;
2624 dd->port->cmd_issue[i] =
2625 dd->port->mmio + i*0x80 + PORT_COMMAND_ISSUE;
2626 dd->port->completed[i] =
2627 dd->port->mmio + i*0x80 + PORT_SDBV;
2628 }
2629
2630 /* Reset the HBA. */
2631 if (mtip_hba_reset(dd) < 0) {
2632 dev_err(&dd->pdev->dev,
2633 "Card did not reset within timeout\n");
2634 rv = -EIO;
2635 goto out2;
2636 }
2637
2638 mtip_init_port(dd->port);
2639 mtip_start_port(dd->port);
2640
2641 /* Setup the ISR and enable interrupts. */
2642 rv = devm_request_irq(&dd->pdev->dev,
2643 dd->pdev->irq,
2644 mtip_irq_handler,
2645 IRQF_SHARED,
2646 dev_driver_string(&dd->pdev->dev),
2647 dd);
2648
2649 if (rv) {
2650 dev_err(&dd->pdev->dev,
2651 "Unable to allocate IRQ %d\n", dd->pdev->irq);
2652 goto out2;
2653 }
2654
2655 /* Enable interrupts on the HBA. */
2656 writel(readl(dd->mmio + HOST_CTL) | HOST_IRQ_EN,
2657 dd->mmio + HOST_CTL);
2658
2659 init_timer(&dd->port->cmd_timer);
2660 init_waitqueue_head(&dd->port->svc_wait);
2661
2662 dd->port->cmd_timer.data = (unsigned long int) dd->port;
2663 dd->port->cmd_timer.function = mtip_timeout_function;
2664 mod_timer(&dd->port->cmd_timer,
2665 jiffies + msecs_to_jiffies(MTIP_TIMEOUT_CHECK_PERIOD));
2666
2667 if (mtip_get_identify(dd->port, NULL) < 0) {
2668 rv = -EFAULT;
2669 goto out3;
2670 }
2671
2672 if (*(dd->port->identify + MTIP_FTL_REBUILD_OFFSET) ==
2673 MTIP_FTL_REBUILD_MAGIC) {
2674 set_bit(MTIP_FLAG_REBUILD_BIT, &dd->port->flags);
2675 return MTIP_FTL_REBUILD_MAGIC;
2676 }
2677 mtip_dump_identify(dd->port);
2678 return rv;
2679
2680 out3:
2681 del_timer_sync(&dd->port->cmd_timer);
2682
2683 /* Disable interrupts on the HBA. */
2684 writel(readl(dd->mmio + HOST_CTL) & ~HOST_IRQ_EN,
2685 dd->mmio + HOST_CTL);
2686
2687 /*Release the IRQ. */
2688 devm_free_irq(&dd->pdev->dev, dd->pdev->irq, dd);
2689
2690 out2:
2691 mtip_deinit_port(dd->port);
2692
2693 /* Free the command/command header memory. */
2694 dmam_free_coherent(&dd->pdev->dev,
2695 HW_PORT_PRIV_DMA_SZ + (ATA_SECT_SIZE * 2),
2696 dd->port->command_list,
2697 dd->port->command_list_dma);
2698 out1:
2699 /* Free the memory allocated for the for structure. */
2700 kfree(dd->port);
2701
2702 return rv;
2703 }
2704
2705 /*
2706 * Called to deinitialize an interface.
2707 *
2708 * @dd Pointer to the driver data structure.
2709 *
2710 * return value
2711 * 0
2712 */
2713 static int mtip_hw_exit(struct driver_data *dd)
2714 {
2715 /*
2716 * Send standby immediate (E0h) to the drive so that it
2717 * saves its state.
2718 */
2719 if (atomic_read(&dd->drv_cleanup_done) != true) {
2720
2721 mtip_standby_immediate(dd->port);
2722
2723 /* de-initialize the port. */
2724 mtip_deinit_port(dd->port);
2725
2726 /* Disable interrupts on the HBA. */
2727 writel(readl(dd->mmio + HOST_CTL) & ~HOST_IRQ_EN,
2728 dd->mmio + HOST_CTL);
2729 }
2730
2731 del_timer_sync(&dd->port->cmd_timer);
2732
2733 /* Release the IRQ. */
2734 devm_free_irq(&dd->pdev->dev, dd->pdev->irq, dd);
2735
2736 /* Stop the bottom half tasklet. */
2737 tasklet_kill(&dd->tasklet);
2738
2739 /* Free the command/command header memory. */
2740 dmam_free_coherent(&dd->pdev->dev,
2741 HW_PORT_PRIV_DMA_SZ + (ATA_SECT_SIZE * 2),
2742 dd->port->command_list,
2743 dd->port->command_list_dma);
2744 /* Free the memory allocated for the for structure. */
2745 kfree(dd->port);
2746
2747 return 0;
2748 }
2749
2750 /*
2751 * Issue a Standby Immediate command to the device.
2752 *
2753 * This function is called by the Block Layer just before the
2754 * system powers off during a shutdown.
2755 *
2756 * @dd Pointer to the driver data structure.
2757 *
2758 * return value
2759 * 0
2760 */
2761 static int mtip_hw_shutdown(struct driver_data *dd)
2762 {
2763 /*
2764 * Send standby immediate (E0h) to the drive so that it
2765 * saves its state.
2766 */
2767 mtip_standby_immediate(dd->port);
2768
2769 return 0;
2770 }
2771
2772 /*
2773 * Suspend function
2774 *
2775 * This function is called by the Block Layer just before the
2776 * system hibernates.
2777 *
2778 * @dd Pointer to the driver data structure.
2779 *
2780 * return value
2781 * 0 Suspend was successful
2782 * -EFAULT Suspend was not successful
2783 */
2784 static int mtip_hw_suspend(struct driver_data *dd)
2785 {
2786 /*
2787 * Send standby immediate (E0h) to the drive
2788 * so that it saves its state.
2789 */
2790 if (mtip_standby_immediate(dd->port) != 0) {
2791 dev_err(&dd->pdev->dev,
2792 "Failed standby-immediate command\n");
2793 return -EFAULT;
2794 }
2795
2796 /* Disable interrupts on the HBA.*/
2797 writel(readl(dd->mmio + HOST_CTL) & ~HOST_IRQ_EN,
2798 dd->mmio + HOST_CTL);
2799 mtip_deinit_port(dd->port);
2800
2801 return 0;
2802 }
2803
2804 /*
2805 * Resume function
2806 *
2807 * This function is called by the Block Layer as the
2808 * system resumes.
2809 *
2810 * @dd Pointer to the driver data structure.
2811 *
2812 * return value
2813 * 0 Resume was successful
2814 * -EFAULT Resume was not successful
2815 */
2816 static int mtip_hw_resume(struct driver_data *dd)
2817 {
2818 /* Perform any needed hardware setup steps */
2819 hba_setup(dd);
2820
2821 /* Reset the HBA */
2822 if (mtip_hba_reset(dd) != 0) {
2823 dev_err(&dd->pdev->dev,
2824 "Unable to reset the HBA\n");
2825 return -EFAULT;
2826 }
2827
2828 /*
2829 * Enable the port, DMA engine, and FIS reception specific
2830 * h/w in controller.
2831 */
2832 mtip_init_port(dd->port);
2833 mtip_start_port(dd->port);
2834
2835 /* Enable interrupts on the HBA.*/
2836 writel(readl(dd->mmio + HOST_CTL) | HOST_IRQ_EN,
2837 dd->mmio + HOST_CTL);
2838
2839 return 0;
2840 }
2841
2842 /*
2843 * Helper function for reusing disk name
2844 * upon hot insertion.
2845 */
2846 static int rssd_disk_name_format(char *prefix,
2847 int index,
2848 char *buf,
2849 int buflen)
2850 {
2851 const int base = 'z' - 'a' + 1;
2852 char *begin = buf + strlen(prefix);
2853 char *end = buf + buflen;
2854 char *p;
2855 int unit;
2856
2857 p = end - 1;
2858 *p = '\0';
2859 unit = base;
2860 do {
2861 if (p == begin)
2862 return -EINVAL;
2863 *--p = 'a' + (index % unit);
2864 index = (index / unit) - 1;
2865 } while (index >= 0);
2866
2867 memmove(begin, p, end - p);
2868 memcpy(buf, prefix, strlen(prefix));
2869
2870 return 0;
2871 }
2872
2873 /*
2874 * Block layer IOCTL handler.
2875 *
2876 * @dev Pointer to the block_device structure.
2877 * @mode ignored
2878 * @cmd IOCTL command passed from the user application.
2879 * @arg Argument passed from the user application.
2880 *
2881 * return value
2882 * 0 IOCTL completed successfully.
2883 * -ENOTTY IOCTL not supported or invalid driver data
2884 * structure pointer.
2885 */
2886 static int mtip_block_ioctl(struct block_device *dev,
2887 fmode_t mode,
2888 unsigned cmd,
2889 unsigned long arg)
2890 {
2891 struct driver_data *dd = dev->bd_disk->private_data;
2892
2893 if (!capable(CAP_SYS_ADMIN))
2894 return -EACCES;
2895
2896 if (!dd)
2897 return -ENOTTY;
2898
2899 switch (cmd) {
2900 case BLKFLSBUF:
2901 return -ENOTTY;
2902 default:
2903 return mtip_hw_ioctl(dd, cmd, arg);
2904 }
2905 }
2906
2907 #ifdef CONFIG_COMPAT
2908 /*
2909 * Block layer compat IOCTL handler.
2910 *
2911 * @dev Pointer to the block_device structure.
2912 * @mode ignored
2913 * @cmd IOCTL command passed from the user application.
2914 * @arg Argument passed from the user application.
2915 *
2916 * return value
2917 * 0 IOCTL completed successfully.
2918 * -ENOTTY IOCTL not supported or invalid driver data
2919 * structure pointer.
2920 */
2921 static int mtip_block_compat_ioctl(struct block_device *dev,
2922 fmode_t mode,
2923 unsigned cmd,
2924 unsigned long arg)
2925 {
2926 struct driver_data *dd = dev->bd_disk->private_data;
2927
2928 if (!capable(CAP_SYS_ADMIN))
2929 return -EACCES;
2930
2931 if (!dd)
2932 return -ENOTTY;
2933
2934 switch (cmd) {
2935 case BLKFLSBUF:
2936 return -ENOTTY;
2937 case HDIO_DRIVE_TASKFILE: {
2938 struct mtip_compat_ide_task_request_s __user *compat_req_task;
2939 ide_task_request_t req_task;
2940 int compat_tasksize, outtotal, ret;
2941
2942 compat_tasksize =
2943 sizeof(struct mtip_compat_ide_task_request_s);
2944
2945 compat_req_task =
2946 (struct mtip_compat_ide_task_request_s __user *) arg;
2947
2948 if (copy_from_user(&req_task, (void __user *) arg,
2949 compat_tasksize - (2 * sizeof(compat_long_t))))
2950 return -EFAULT;
2951
2952 if (get_user(req_task.out_size, &compat_req_task->out_size))
2953 return -EFAULT;
2954
2955 if (get_user(req_task.in_size, &compat_req_task->in_size))
2956 return -EFAULT;
2957
2958 outtotal = sizeof(struct mtip_compat_ide_task_request_s);
2959
2960 ret = exec_drive_taskfile(dd, (void __user *) arg,
2961 &req_task, outtotal);
2962
2963 if (copy_to_user((void __user *) arg, &req_task,
2964 compat_tasksize -
2965 (2 * sizeof(compat_long_t))))
2966 return -EFAULT;
2967
2968 if (put_user(req_task.out_size, &compat_req_task->out_size))
2969 return -EFAULT;
2970
2971 if (put_user(req_task.in_size, &compat_req_task->in_size))
2972 return -EFAULT;
2973
2974 return ret;
2975 }
2976 default:
2977 return mtip_hw_ioctl(dd, cmd, arg);
2978 }
2979 }
2980 #endif
2981
2982 /*
2983 * Obtain the geometry of the device.
2984 *
2985 * You may think that this function is obsolete, but some applications,
2986 * fdisk for example still used CHS values. This function describes the
2987 * device as having 224 heads and 56 sectors per cylinder. These values are
2988 * chosen so that each cylinder is aligned on a 4KB boundary. Since a
2989 * partition is described in terms of a start and end cylinder this means
2990 * that each partition is also 4KB aligned. Non-aligned partitions adversely
2991 * affects performance.
2992 *
2993 * @dev Pointer to the block_device strucutre.
2994 * @geo Pointer to a hd_geometry structure.
2995 *
2996 * return value
2997 * 0 Operation completed successfully.
2998 * -ENOTTY An error occurred while reading the drive capacity.
2999 */
3000 static int mtip_block_getgeo(struct block_device *dev,
3001 struct hd_geometry *geo)
3002 {
3003 struct driver_data *dd = dev->bd_disk->private_data;
3004 sector_t capacity;
3005
3006 if (!dd)
3007 return -ENOTTY;
3008
3009 if (!(mtip_hw_get_capacity(dd, &capacity))) {
3010 dev_warn(&dd->pdev->dev,
3011 "Could not get drive capacity.\n");
3012 return -ENOTTY;
3013 }
3014
3015 geo->heads = 224;
3016 geo->sectors = 56;
3017 sector_div(capacity, (geo->heads * geo->sectors));
3018 geo->cylinders = capacity;
3019 return 0;
3020 }
3021
3022 /*
3023 * Block device operation function.
3024 *
3025 * This structure contains pointers to the functions required by the block
3026 * layer.
3027 */
3028 static const struct block_device_operations mtip_block_ops = {
3029 .ioctl = mtip_block_ioctl,
3030 #ifdef CONFIG_COMPAT
3031 .compat_ioctl = mtip_block_compat_ioctl,
3032 #endif
3033 .getgeo = mtip_block_getgeo,
3034 .owner = THIS_MODULE
3035 };
3036
3037 /*
3038 * Block layer make request function.
3039 *
3040 * This function is called by the kernel to process a BIO for
3041 * the P320 device.
3042 *
3043 * @queue Pointer to the request queue. Unused other than to obtain
3044 * the driver data structure.
3045 * @bio Pointer to the BIO.
3046 *
3047 */
3048 static void mtip_make_request(struct request_queue *queue, struct bio *bio)
3049 {
3050 struct driver_data *dd = queue->queuedata;
3051 struct scatterlist *sg;
3052 struct bio_vec *bvec;
3053 int nents = 0;
3054 int tag = 0;
3055
3056 if (unlikely(!bio_has_data(bio))) {
3057 blk_queue_flush(queue, 0);
3058 bio_endio(bio, 0);
3059 return;
3060 }
3061
3062 sg = mtip_hw_get_scatterlist(dd, &tag);
3063 if (likely(sg != NULL)) {
3064 blk_queue_bounce(queue, &bio);
3065
3066 if (unlikely((bio)->bi_vcnt > MTIP_MAX_SG)) {
3067 dev_warn(&dd->pdev->dev,
3068 "Maximum number of SGL entries exceeded");
3069 bio_io_error(bio);
3070 mtip_hw_release_scatterlist(dd, tag);
3071 return;
3072 }
3073
3074 /* Create the scatter list for this bio. */
3075 bio_for_each_segment(bvec, bio, nents) {
3076 sg_set_page(&sg[nents],
3077 bvec->bv_page,
3078 bvec->bv_len,
3079 bvec->bv_offset);
3080 }
3081
3082 /* Issue the read/write. */
3083 mtip_hw_submit_io(dd,
3084 bio->bi_sector,
3085 bio_sectors(bio),
3086 nents,
3087 tag,
3088 bio_endio,
3089 bio,
3090 bio->bi_rw & REQ_FUA,
3091 bio_data_dir(bio));
3092 } else
3093 bio_io_error(bio);
3094 }
3095
3096 /*
3097 * Block layer initialization function.
3098 *
3099 * This function is called once by the PCI layer for each P320
3100 * device that is connected to the system.
3101 *
3102 * @dd Pointer to the driver data structure.
3103 *
3104 * return value
3105 * 0 on success else an error code.
3106 */
3107 static int mtip_block_initialize(struct driver_data *dd)
3108 {
3109 int rv = 0, wait_for_rebuild = 0;
3110 sector_t capacity;
3111 unsigned int index = 0;
3112 struct kobject *kobj;
3113 unsigned char thd_name[16];
3114
3115 if (dd->disk)
3116 goto skip_create_disk; /* hw init done, before rebuild */
3117
3118 /* Initialize the protocol layer. */
3119 wait_for_rebuild = mtip_hw_init(dd);
3120 if (wait_for_rebuild < 0) {
3121 dev_err(&dd->pdev->dev,
3122 "Protocol layer initialization failed\n");
3123 rv = -EINVAL;
3124 goto protocol_init_error;
3125 }
3126
3127 dd->disk = alloc_disk(MTIP_MAX_MINORS);
3128 if (dd->disk == NULL) {
3129 dev_err(&dd->pdev->dev,
3130 "Unable to allocate gendisk structure\n");
3131 rv = -EINVAL;
3132 goto alloc_disk_error;
3133 }
3134
3135 /* Generate the disk name, implemented same as in sd.c */
3136 do {
3137 if (!ida_pre_get(&rssd_index_ida, GFP_KERNEL))
3138 goto ida_get_error;
3139
3140 spin_lock(&rssd_index_lock);
3141 rv = ida_get_new(&rssd_index_ida, &index);
3142 spin_unlock(&rssd_index_lock);
3143 } while (rv == -EAGAIN);
3144
3145 if (rv)
3146 goto ida_get_error;
3147
3148 rv = rssd_disk_name_format("rssd",
3149 index,
3150 dd->disk->disk_name,
3151 DISK_NAME_LEN);
3152 if (rv)
3153 goto disk_index_error;
3154
3155 dd->disk->driverfs_dev = &dd->pdev->dev;
3156 dd->disk->major = dd->major;
3157 dd->disk->first_minor = dd->instance * MTIP_MAX_MINORS;
3158 dd->disk->fops = &mtip_block_ops;
3159 dd->disk->private_data = dd;
3160 dd->index = index;
3161
3162 /*
3163 * if rebuild pending, start the service thread, and delay the block
3164 * queue creation and add_disk()
3165 */
3166 if (wait_for_rebuild == MTIP_FTL_REBUILD_MAGIC)
3167 goto start_service_thread;
3168
3169 skip_create_disk:
3170 /* Allocate the request queue. */
3171 dd->queue = blk_alloc_queue(GFP_KERNEL);
3172 if (dd->queue == NULL) {
3173 dev_err(&dd->pdev->dev,
3174 "Unable to allocate request queue\n");
3175 rv = -ENOMEM;
3176 goto block_queue_alloc_init_error;
3177 }
3178
3179 /* Attach our request function to the request queue. */
3180 blk_queue_make_request(dd->queue, mtip_make_request);
3181
3182 dd->disk->queue = dd->queue;
3183 dd->queue->queuedata = dd;
3184
3185 /* Set device limits. */
3186 set_bit(QUEUE_FLAG_NONROT, &dd->queue->queue_flags);
3187 blk_queue_max_segments(dd->queue, MTIP_MAX_SG);
3188 blk_queue_physical_block_size(dd->queue, 4096);
3189 blk_queue_io_min(dd->queue, 4096);
3190 blk_queue_flush(dd->queue, 0);
3191
3192 /* Set the capacity of the device in 512 byte sectors. */
3193 if (!(mtip_hw_get_capacity(dd, &capacity))) {
3194 dev_warn(&dd->pdev->dev,
3195 "Could not read drive capacity\n");
3196 rv = -EIO;
3197 goto read_capacity_error;
3198 }
3199 set_capacity(dd->disk, capacity);
3200
3201 /* Enable the block device and add it to /dev */
3202 add_disk(dd->disk);
3203
3204 /*
3205 * Now that the disk is active, initialize any sysfs attributes
3206 * managed by the protocol layer.
3207 */
3208 kobj = kobject_get(&disk_to_dev(dd->disk)->kobj);
3209 if (kobj) {
3210 mtip_hw_sysfs_init(dd, kobj);
3211 kobject_put(kobj);
3212 }
3213
3214 if (dd->mtip_svc_handler)
3215 return rv; /* service thread created for handling rebuild */
3216
3217 start_service_thread:
3218 sprintf(thd_name, "mtip_svc_thd_%02d", index);
3219
3220 dd->mtip_svc_handler = kthread_run(mtip_service_thread,
3221 dd, thd_name);
3222
3223 if (IS_ERR(dd->mtip_svc_handler)) {
3224 printk(KERN_ERR "mtip32xx: service thread failed to start\n");
3225 dd->mtip_svc_handler = NULL;
3226 rv = -EFAULT;
3227 goto kthread_run_error;
3228 }
3229
3230 return rv;
3231
3232 kthread_run_error:
3233 /* Delete our gendisk. This also removes the device from /dev */
3234 del_gendisk(dd->disk);
3235
3236 read_capacity_error:
3237 blk_cleanup_queue(dd->queue);
3238
3239 block_queue_alloc_init_error:
3240 disk_index_error:
3241 spin_lock(&rssd_index_lock);
3242 ida_remove(&rssd_index_ida, index);
3243 spin_unlock(&rssd_index_lock);
3244
3245 ida_get_error:
3246 put_disk(dd->disk);
3247
3248 alloc_disk_error:
3249 mtip_hw_exit(dd); /* De-initialize the protocol layer. */
3250
3251 protocol_init_error:
3252 return rv;
3253 }
3254
3255 /*
3256 * Block layer deinitialization function.
3257 *
3258 * Called by the PCI layer as each P320 device is removed.
3259 *
3260 * @dd Pointer to the driver data structure.
3261 *
3262 * return value
3263 * 0
3264 */
3265 static int mtip_block_remove(struct driver_data *dd)
3266 {
3267 struct kobject *kobj;
3268
3269 if (dd->mtip_svc_handler) {
3270 set_bit(MTIP_FLAG_SVC_THD_SHOULD_STOP_BIT, &dd->port->flags);
3271 wake_up_interruptible(&dd->port->svc_wait);
3272 kthread_stop(dd->mtip_svc_handler);
3273 }
3274
3275 /* Clean up the sysfs attributes managed by the protocol layer. */
3276 kobj = kobject_get(&disk_to_dev(dd->disk)->kobj);
3277 if (kobj) {
3278 mtip_hw_sysfs_exit(dd, kobj);
3279 kobject_put(kobj);
3280 }
3281
3282 /*
3283 * Delete our gendisk structure. This also removes the device
3284 * from /dev
3285 */
3286 del_gendisk(dd->disk);
3287 blk_cleanup_queue(dd->queue);
3288 dd->disk = NULL;
3289 dd->queue = NULL;
3290
3291 /* De-initialize the protocol layer. */
3292 mtip_hw_exit(dd);
3293
3294 return 0;
3295 }
3296
3297 /*
3298 * Function called by the PCI layer when just before the
3299 * machine shuts down.
3300 *
3301 * If a protocol layer shutdown function is present it will be called
3302 * by this function.
3303 *
3304 * @dd Pointer to the driver data structure.
3305 *
3306 * return value
3307 * 0
3308 */
3309 static int mtip_block_shutdown(struct driver_data *dd)
3310 {
3311 dev_info(&dd->pdev->dev,
3312 "Shutting down %s ...\n", dd->disk->disk_name);
3313
3314 /* Delete our gendisk structure, and cleanup the blk queue. */
3315 del_gendisk(dd->disk);
3316 blk_cleanup_queue(dd->queue);
3317 dd->disk = NULL;
3318 dd->queue = NULL;
3319
3320 mtip_hw_shutdown(dd);
3321 return 0;
3322 }
3323
3324 static int mtip_block_suspend(struct driver_data *dd)
3325 {
3326 dev_info(&dd->pdev->dev,
3327 "Suspending %s ...\n", dd->disk->disk_name);
3328 mtip_hw_suspend(dd);
3329 return 0;
3330 }
3331
3332 static int mtip_block_resume(struct driver_data *dd)
3333 {
3334 dev_info(&dd->pdev->dev, "Resuming %s ...\n",
3335 dd->disk->disk_name);
3336 mtip_hw_resume(dd);
3337 return 0;
3338 }
3339
3340 /*
3341 * Called for each supported PCI device detected.
3342 *
3343 * This function allocates the private data structure, enables the
3344 * PCI device and then calls the block layer initialization function.
3345 *
3346 * return value
3347 * 0 on success else an error code.
3348 */
3349 static int mtip_pci_probe(struct pci_dev *pdev,
3350 const struct pci_device_id *ent)
3351 {
3352 int rv = 0;
3353 struct driver_data *dd = NULL;
3354
3355 /* Allocate memory for this devices private data. */
3356 dd = kzalloc(sizeof(struct driver_data), GFP_KERNEL);
3357 if (dd == NULL) {
3358 dev_err(&pdev->dev,
3359 "Unable to allocate memory for driver data\n");
3360 return -ENOMEM;
3361 }
3362
3363 /* Set the atomic variable as 1 in case of SRSI */
3364 atomic_set(&dd->drv_cleanup_done, true);
3365
3366 atomic_set(&dd->resumeflag, false);
3367
3368 /* Attach the private data to this PCI device. */
3369 pci_set_drvdata(pdev, dd);
3370
3371 rv = pcim_enable_device(pdev);
3372 if (rv < 0) {
3373 dev_err(&pdev->dev, "Unable to enable device\n");
3374 goto iomap_err;
3375 }
3376
3377 /* Map BAR5 to memory. */
3378 rv = pcim_iomap_regions(pdev, 1 << MTIP_ABAR, MTIP_DRV_NAME);
3379 if (rv < 0) {
3380 dev_err(&pdev->dev, "Unable to map regions\n");
3381 goto iomap_err;
3382 }
3383
3384 if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64))) {
3385 rv = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(64));
3386
3387 if (rv) {
3388 rv = pci_set_consistent_dma_mask(pdev,
3389 DMA_BIT_MASK(32));
3390 if (rv) {
3391 dev_warn(&pdev->dev,
3392 "64-bit DMA enable failed\n");
3393 goto setmask_err;
3394 }
3395 }
3396 }
3397
3398 pci_set_master(pdev);
3399
3400 if (pci_enable_msi(pdev)) {
3401 dev_warn(&pdev->dev,
3402 "Unable to enable MSI interrupt.\n");
3403 goto block_initialize_err;
3404 }
3405
3406 /* Copy the info we may need later into the private data structure. */
3407 dd->major = mtip_major;
3408 dd->instance = instance;
3409 dd->pdev = pdev;
3410
3411 /* Initialize the block layer. */
3412 rv = mtip_block_initialize(dd);
3413 if (rv < 0) {
3414 dev_err(&pdev->dev,
3415 "Unable to initialize block layer\n");
3416 goto block_initialize_err;
3417 }
3418
3419 /*
3420 * Increment the instance count so that each device has a unique
3421 * instance number.
3422 */
3423 instance++;
3424
3425 goto done;
3426
3427 block_initialize_err:
3428 pci_disable_msi(pdev);
3429
3430 setmask_err:
3431 pcim_iounmap_regions(pdev, 1 << MTIP_ABAR);
3432
3433 iomap_err:
3434 kfree(dd);
3435 pci_set_drvdata(pdev, NULL);
3436 return rv;
3437 done:
3438 /* Set the atomic variable as 0 in case of SRSI */
3439 atomic_set(&dd->drv_cleanup_done, true);
3440
3441 return rv;
3442 }
3443
3444 /*
3445 * Called for each probed device when the device is removed or the
3446 * driver is unloaded.
3447 *
3448 * return value
3449 * None
3450 */
3451 static void mtip_pci_remove(struct pci_dev *pdev)
3452 {
3453 struct driver_data *dd = pci_get_drvdata(pdev);
3454 int counter = 0;
3455
3456 if (mtip_check_surprise_removal(pdev)) {
3457 while (atomic_read(&dd->drv_cleanup_done) == false) {
3458 counter++;
3459 msleep(20);
3460 if (counter == 10) {
3461 /* Cleanup the outstanding commands */
3462 mtip_command_cleanup(dd);
3463 break;
3464 }
3465 }
3466 }
3467 /* Set the atomic variable as 1 in case of SRSI */
3468 atomic_set(&dd->drv_cleanup_done, true);
3469
3470 /* Clean up the block layer. */
3471 mtip_block_remove(dd);
3472
3473 pci_disable_msi(pdev);
3474
3475 kfree(dd);
3476 pcim_iounmap_regions(pdev, 1 << MTIP_ABAR);
3477 }
3478
3479 /*
3480 * Called for each probed device when the device is suspended.
3481 *
3482 * return value
3483 * 0 Success
3484 * <0 Error
3485 */
3486 static int mtip_pci_suspend(struct pci_dev *pdev, pm_message_t mesg)
3487 {
3488 int rv = 0;
3489 struct driver_data *dd = pci_get_drvdata(pdev);
3490
3491 if (!dd) {
3492 dev_err(&pdev->dev,
3493 "Driver private datastructure is NULL\n");
3494 return -EFAULT;
3495 }
3496
3497 atomic_set(&dd->resumeflag, true);
3498
3499 /* Disable ports & interrupts then send standby immediate */
3500 rv = mtip_block_suspend(dd);
3501 if (rv < 0) {
3502 dev_err(&pdev->dev,
3503 "Failed to suspend controller\n");
3504 return rv;
3505 }
3506
3507 /*
3508 * Save the pci config space to pdev structure &
3509 * disable the device
3510 */
3511 pci_save_state(pdev);
3512 pci_disable_device(pdev);
3513
3514 /* Move to Low power state*/
3515 pci_set_power_state(pdev, PCI_D3hot);
3516
3517 return rv;
3518 }
3519
3520 /*
3521 * Called for each probed device when the device is resumed.
3522 *
3523 * return value
3524 * 0 Success
3525 * <0 Error
3526 */
3527 static int mtip_pci_resume(struct pci_dev *pdev)
3528 {
3529 int rv = 0;
3530 struct driver_data *dd;
3531
3532 dd = pci_get_drvdata(pdev);
3533 if (!dd) {
3534 dev_err(&pdev->dev,
3535 "Driver private datastructure is NULL\n");
3536 return -EFAULT;
3537 }
3538
3539 /* Move the device to active State */
3540 pci_set_power_state(pdev, PCI_D0);
3541
3542 /* Restore PCI configuration space */
3543 pci_restore_state(pdev);
3544
3545 /* Enable the PCI device*/
3546 rv = pcim_enable_device(pdev);
3547 if (rv < 0) {
3548 dev_err(&pdev->dev,
3549 "Failed to enable card during resume\n");
3550 goto err;
3551 }
3552 pci_set_master(pdev);
3553
3554 /*
3555 * Calls hbaReset, initPort, & startPort function
3556 * then enables interrupts
3557 */
3558 rv = mtip_block_resume(dd);
3559 if (rv < 0)
3560 dev_err(&pdev->dev, "Unable to resume\n");
3561
3562 err:
3563 atomic_set(&dd->resumeflag, false);
3564
3565 return rv;
3566 }
3567
3568 /*
3569 * Shutdown routine
3570 *
3571 * return value
3572 * None
3573 */
3574 static void mtip_pci_shutdown(struct pci_dev *pdev)
3575 {
3576 struct driver_data *dd = pci_get_drvdata(pdev);
3577 if (dd)
3578 mtip_block_shutdown(dd);
3579 }
3580
3581 /* Table of device ids supported by this driver. */
3582 static DEFINE_PCI_DEVICE_TABLE(mtip_pci_tbl) = {
3583 { PCI_DEVICE(PCI_VENDOR_ID_MICRON, P320_DEVICE_ID) },
3584 { 0 }
3585 };
3586
3587 /* Structure that describes the PCI driver functions. */
3588 static struct pci_driver mtip_pci_driver = {
3589 .name = MTIP_DRV_NAME,
3590 .id_table = mtip_pci_tbl,
3591 .probe = mtip_pci_probe,
3592 .remove = mtip_pci_remove,
3593 .suspend = mtip_pci_suspend,
3594 .resume = mtip_pci_resume,
3595 .shutdown = mtip_pci_shutdown,
3596 };
3597
3598 MODULE_DEVICE_TABLE(pci, mtip_pci_tbl);
3599
3600 /*
3601 * Module initialization function.
3602 *
3603 * Called once when the module is loaded. This function allocates a major
3604 * block device number to the Cyclone devices and registers the PCI layer
3605 * of the driver.
3606 *
3607 * Return value
3608 * 0 on success else error code.
3609 */
3610 static int __init mtip_init(void)
3611 {
3612 printk(KERN_INFO MTIP_DRV_NAME " Version " MTIP_DRV_VERSION "\n");
3613
3614 /* Allocate a major block device number to use with this driver. */
3615 mtip_major = register_blkdev(0, MTIP_DRV_NAME);
3616 if (mtip_major < 0) {
3617 printk(KERN_ERR "Unable to register block device (%d)\n",
3618 mtip_major);
3619 return -EBUSY;
3620 }
3621
3622 /* Register our PCI operations. */
3623 return pci_register_driver(&mtip_pci_driver);
3624 }
3625
3626 /*
3627 * Module de-initialization function.
3628 *
3629 * Called once when the module is unloaded. This function deallocates
3630 * the major block device number allocated by mtip_init() and
3631 * unregisters the PCI layer of the driver.
3632 *
3633 * Return value
3634 * none
3635 */
3636 static void __exit mtip_exit(void)
3637 {
3638 /* Release the allocated major block device number. */
3639 unregister_blkdev(mtip_major, MTIP_DRV_NAME);
3640
3641 /* Unregister the PCI driver. */
3642 pci_unregister_driver(&mtip_pci_driver);
3643 }
3644
3645 MODULE_AUTHOR("Micron Technology, Inc");
3646 MODULE_DESCRIPTION("Micron RealSSD PCIe Block Driver");
3647 MODULE_LICENSE("GPL");
3648 MODULE_VERSION(MTIP_DRV_VERSION);
3649
3650 module_init(mtip_init);
3651 module_exit(mtip_exit);
3652
drivers/block/mtip32xx/mtip32xx.h
File was created 1 /*
2 * mtip32xx.h - Header file for the P320 SSD Block Driver
3 * Copyright (C) 2011 Micron Technology, Inc.
4 *
5 * Portions of this code were derived from works subjected to the
6 * following copyright:
7 * Copyright (C) 2009 Integrated Device Technology, Inc.
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
13 *
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 * GNU General Public License for more details.
18 *
19 */
20
21 #ifndef __MTIP32XX_H__
22 #define __MTIP32XX_H__
23
24 #include <linux/spinlock.h>
25 #include <linux/rwsem.h>
26 #include <linux/ata.h>
27 #include <linux/interrupt.h>
28 #include <linux/genhd.h>
29 #include <linux/version.h>
30
31 /* Offset of Subsystem Device ID in pci confoguration space */
32 #define PCI_SUBSYSTEM_DEVICEID 0x2E
33
34 /* offset of Device Control register in PCIe extended capabilites space */
35 #define PCIE_CONFIG_EXT_DEVICE_CONTROL_OFFSET 0x48
36
37 /* # of times to retry timed out IOs */
38 #define MTIP_MAX_RETRIES 5
39
40 /* Various timeout values in ms */
41 #define MTIP_NCQ_COMMAND_TIMEOUT_MS 5000
42 #define MTIP_IOCTL_COMMAND_TIMEOUT_MS 5000
43 #define MTIP_INTERNAL_COMMAND_TIMEOUT_MS 5000
44
45 /* check for timeouts every 500ms */
46 #define MTIP_TIMEOUT_CHECK_PERIOD 500
47
48 /* ftl rebuild */
49 #define MTIP_FTL_REBUILD_OFFSET 142
50 #define MTIP_FTL_REBUILD_MAGIC 0xED51
51 #define MTIP_FTL_REBUILD_TIMEOUT_MS 2400000
52
53 /* Macro to extract the tag bit number from a tag value. */
54 #define MTIP_TAG_BIT(tag) (tag & 0x1F)
55
56 /*
57 * Macro to extract the tag index from a tag value. The index
58 * is used to access the correct s_active/Command Issue register based
59 * on the tag value.
60 */
61 #define MTIP_TAG_INDEX(tag) (tag >> 5)
62
63 /*
64 * Maximum number of scatter gather entries
65 * a single command may have.
66 */
67 #define MTIP_MAX_SG 128
68
69 /*
70 * Maximum number of slot groups (Command Issue & s_active registers)
71 * NOTE: This is the driver maximum; check dd->slot_groups for actual value.
72 */
73 #define MTIP_MAX_SLOT_GROUPS 8
74
75 /* Internal command tag. */
76 #define MTIP_TAG_INTERNAL 0
77
78 /* Micron Vendor ID & P320x SSD Device ID */
79 #define PCI_VENDOR_ID_MICRON 0x1344
80 #define P320_DEVICE_ID 0x5150
81
82 /* Driver name and version strings */
83 #define MTIP_DRV_NAME "mtip32xx"
84 #define MTIP_DRV_VERSION "1.2.6os3"
85
86 /* Maximum number of minor device numbers per device. */
87 #define MTIP_MAX_MINORS 16
88
89 /* Maximum number of supported command slots. */
90 #define MTIP_MAX_COMMAND_SLOTS (MTIP_MAX_SLOT_GROUPS * 32)
91
92 /*
93 * Per-tag bitfield size in longs.
94 * Linux bit manipulation functions
95 * (i.e. test_and_set_bit, find_next_zero_bit)
96 * manipulate memory in longs, so we try to make the math work.
97 * take the slot groups and find the number of longs, rounding up.
98 * Careful! i386 and x86_64 use different size longs!
99 */
100 #define U32_PER_LONG (sizeof(long) / sizeof(u32))
101 #define SLOTBITS_IN_LONGS ((MTIP_MAX_SLOT_GROUPS + \
102 (U32_PER_LONG-1))/U32_PER_LONG)
103
104 /* BAR number used to access the HBA registers. */
105 #define MTIP_ABAR 5
106
107 /* Forced Unit Access Bit */
108 #define FUA_BIT 0x80
109
110 #ifdef DEBUG
111 #define dbg_printk(format, arg...) \
112 printk(pr_fmt(format), ##arg);
113 #else
114 #define dbg_printk(format, arg...)
115 #endif
116
117 #define __force_bit2int (unsigned int __force)
118
119 /* below are bit numbers in 'flags' defined in mtip_port */
120 #define MTIP_FLAG_IC_ACTIVE_BIT 0
121 #define MTIP_FLAG_EH_ACTIVE_BIT 1
122 #define MTIP_FLAG_SVC_THD_ACTIVE_BIT 2
123 #define MTIP_FLAG_ISSUE_CMDS_BIT 4
124 #define MTIP_FLAG_REBUILD_BIT 5
125 #define MTIP_FLAG_SVC_THD_SHOULD_STOP_BIT 8
126
127 /* Register Frame Information Structure (FIS), host to device. */
128 struct host_to_dev_fis {
129 /*
130 * FIS type.
131 * - 27h Register FIS, host to device.
132 * - 34h Register FIS, device to host.
133 * - 39h DMA Activate FIS, device to host.
134 * - 41h DMA Setup FIS, bi-directional.
135 * - 46h Data FIS, bi-directional.
136 * - 58h BIST Activate FIS, bi-directional.
137 * - 5Fh PIO Setup FIS, device to host.
138 * - A1h Set Device Bits FIS, device to host.
139 */
140 unsigned char type;
141 unsigned char opts;
142 unsigned char command;
143 unsigned char features;
144
145 union {
146 unsigned char lba_low;
147 unsigned char sector;
148 };
149 union {
150 unsigned char lba_mid;
151 unsigned char cyl_low;
152 };
153 union {
154 unsigned char lba_hi;
155 unsigned char cyl_hi;
156 };
157 union {
158 unsigned char device;
159 unsigned char head;
160 };
161
162 union {
163 unsigned char lba_low_ex;
164 unsigned char sector_ex;
165 };
166 union {
167 unsigned char lba_mid_ex;
168 unsigned char cyl_low_ex;
169 };
170 union {
171 unsigned char lba_hi_ex;
172 unsigned char cyl_hi_ex;
173 };
174 unsigned char features_ex;
175
176 unsigned char sect_count;
177 unsigned char sect_cnt_ex;
178 unsigned char res2;
179 unsigned char control;
180
181 unsigned int res3;
182 };
183
184 /* Command header structure. */
185 struct mtip_cmd_hdr {
186 /*
187 * Command options.
188 * - Bits 31:16 Number of PRD entries.
189 * - Bits 15:8 Unused in this implementation.
190 * - Bit 7 Prefetch bit, informs the drive to prefetch PRD entries.
191 * - Bit 6 Write bit, should be set when writing data to the device.
192 * - Bit 5 Unused in this implementation.
193 * - Bits 4:0 Length of the command FIS in DWords (DWord = 4 bytes).
194 */
195 unsigned int opts;
196 /* This field is unsed when using NCQ. */
197 union {
198 unsigned int byte_count;
199 unsigned int status;
200 };
201 /*
202 * Lower 32 bits of the command table address associated with this
203 * header. The command table addresses must be 128 byte aligned.
204 */
205 unsigned int ctba;
206 /*
207 * If 64 bit addressing is used this field is the upper 32 bits
208 * of the command table address associated with this command.
209 */
210 unsigned int ctbau;
211 /* Reserved and unused. */
212 unsigned int res[4];
213 };
214
215 /* Command scatter gather structure (PRD). */
216 struct mtip_cmd_sg {
217 /*
218 * Low 32 bits of the data buffer address. For P320 this
219 * address must be 8 byte aligned signified by bits 2:0 being
220 * set to 0.
221 */
222 unsigned int dba;
223 /*
224 * When 64 bit addressing is used this field is the upper
225 * 32 bits of the data buffer address.
226 */
227 unsigned int dba_upper;
228 /* Unused. */
229 unsigned int reserved;
230 /*
231 * Bit 31: interrupt when this data block has been transferred.
232 * Bits 30..22: reserved
233 * Bits 21..0: byte count (minus 1). For P320 the byte count must be
234 * 8 byte aligned signified by bits 2:0 being set to 1.
235 */
236 unsigned int info;
237 };
238 struct mtip_port;
239
240 /* Structure used to describe a command. */
241 struct mtip_cmd {
242
243 struct mtip_cmd_hdr *command_header; /* ptr to command header entry */
244
245 dma_addr_t command_header_dma; /* corresponding physical address */
246
247 void *command; /* ptr to command table entry */
248
249 dma_addr_t command_dma; /* corresponding physical address */
250
251 void *comp_data; /* data passed to completion function comp_func() */
252 /*
253 * Completion function called by the ISR upon completion of
254 * a command.
255 */
256 void (*comp_func)(struct mtip_port *port,
257 int tag,
258 void *data,
259 int status);
260 /* Additional callback function that may be called by comp_func() */
261 void (*async_callback)(void *data, int status);
262
263 void *async_data; /* Addl. data passed to async_callback() */
264
265 int scatter_ents; /* Number of scatter list entries used */
266
267 struct scatterlist sg[MTIP_MAX_SG]; /* Scatter list entries */
268
269 int retries; /* The number of retries left for this command. */
270
271 int direction; /* Data transfer direction */
272
273 unsigned long comp_time; /* command completion time, in jiffies */
274
275 atomic_t active; /* declares if this command sent to the drive. */
276 };
277
278 /* Structure used to describe a port. */
279 struct mtip_port {
280 /* Pointer back to the driver data for this port. */
281 struct driver_data *dd;
282 /*
283 * Used to determine if the data pointed to by the
284 * identify field is valid.
285 */
286 unsigned long identify_valid;
287 /* Base address of the memory mapped IO for the port. */
288 void __iomem *mmio;
289 /* Array of pointers to the memory mapped s_active registers. */
290 void __iomem *s_active[MTIP_MAX_SLOT_GROUPS];
291 /* Array of pointers to the memory mapped completed registers. */
292 void __iomem *completed[MTIP_MAX_SLOT_GROUPS];
293 /* Array of pointers to the memory mapped Command Issue registers. */
294 void __iomem *cmd_issue[MTIP_MAX_SLOT_GROUPS];
295 /*
296 * Pointer to the beginning of the command header memory as used
297 * by the driver.
298 */
299 void *command_list;
300 /*
301 * Pointer to the beginning of the command header memory as used
302 * by the DMA.
303 */
304 dma_addr_t command_list_dma;
305 /*
306 * Pointer to the beginning of the RX FIS memory as used
307 * by the driver.
308 */
309 void *rxfis;
310 /*
311 * Pointer to the beginning of the RX FIS memory as used
312 * by the DMA.
313 */
314 dma_addr_t rxfis_dma;
315 /*
316 * Pointer to the beginning of the command table memory as used
317 * by the driver.
318 */
319 void *command_table;
320 /*
321 * Pointer to the beginning of the command table memory as used
322 * by the DMA.
323 */
324 dma_addr_t command_tbl_dma;
325 /*
326 * Pointer to the beginning of the identify data memory as used
327 * by the driver.
328 */
329 u16 *identify;
330 /*
331 * Pointer to the beginning of the identify data memory as used
332 * by the DMA.
333 */
334 dma_addr_t identify_dma;
335 /*
336 * Pointer to the beginning of a sector buffer that is used
337 * by the driver when issuing internal commands.
338 */
339 u16 *sector_buffer;
340 /*
341 * Pointer to the beginning of a sector buffer that is used
342 * by the DMA when the driver issues internal commands.
343 */
344 dma_addr_t sector_buffer_dma;
345 /*
346 * Bit significant, used to determine if a command slot has
347 * been allocated. i.e. the slot is in use. Bits are cleared
348 * when the command slot and all associated data structures
349 * are no longer needed.
350 */
351 unsigned long allocated[SLOTBITS_IN_LONGS];
352 /*
353 * used to queue commands when an internal command is in progress
354 * or error handling is active
355 */
356 unsigned long cmds_to_issue[SLOTBITS_IN_LONGS];
357 /*
358 * Array of command slots. Structure includes pointers to the
359 * command header and command table, and completion function and data
360 * pointers.
361 */
362 struct mtip_cmd commands[MTIP_MAX_COMMAND_SLOTS];
363 /* Used by mtip_service_thread to wait for an event */
364 wait_queue_head_t svc_wait;
365 /*
366 * indicates the state of the port. Also, helps the service thread
367 * to determine its action on wake up.
368 */
369 unsigned long flags;
370 /*
371 * Timer used to complete commands that have been active for too long.
372 */
373 struct timer_list cmd_timer;
374 /*
375 * Semaphore used to block threads if there are no
376 * command slots available.
377 */
378 struct semaphore cmd_slot;
379 /* Spinlock for working around command-issue bug. */
380 spinlock_t cmd_issue_lock;
381 };
382
383 /*
384 * Driver private data structure.
385 *
386 * One structure is allocated per probed device.
387 */
388 struct driver_data {
389 void __iomem *mmio; /* Base address of the HBA registers. */
390
391 int major; /* Major device number. */
392
393 int instance; /* Instance number. First device probed is 0, ... */
394
395 struct gendisk *disk; /* Pointer to our gendisk structure. */
396
397 struct pci_dev *pdev; /* Pointer to the PCI device structure. */
398
399 struct request_queue *queue; /* Our request queue. */
400
401 struct mtip_port *port; /* Pointer to the port data structure. */
402
403 /* Tasklet used to process the bottom half of the ISR. */
404 struct tasklet_struct tasklet;
405
406 unsigned product_type; /* magic value declaring the product type */
407
408 unsigned slot_groups; /* number of slot groups the product supports */
409
410 atomic_t drv_cleanup_done; /* Atomic variable for SRSI */
411
412 unsigned long index; /* Index to determine the disk name */
413
414 unsigned int ftlrebuildflag; /* FTL rebuild flag */
415
416 atomic_t resumeflag; /* Atomic variable to track suspend/resume */
417
418 atomic_t eh_active; /* Flag for error handling tracking */
419
420 struct task_struct *mtip_svc_handler; /* task_struct of svc thd */
421 };
422
423 #endif
424