]> git.karo-electronics.de Git - linux-beck.git/blob - drivers/block/mtip32xx/mtip32xx.h
dlm: fix QUECVT when convert queue is empty
[linux-beck.git] / drivers / block / mtip32xx / mtip32xx.h
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 #ifdef DEBUG
108  #define dbg_printk(format, arg...)     \
109         printk(pr_fmt(format), ##arg);
110 #else
111  #define dbg_printk(format, arg...)
112 #endif
113
114 #define __force_bit2int (unsigned int __force)
115
116 /* below are bit numbers in 'flags' defined in mtip_port */
117 #define MTIP_FLAG_IC_ACTIVE_BIT                 0
118 #define MTIP_FLAG_EH_ACTIVE_BIT                 1
119 #define MTIP_FLAG_SVC_THD_ACTIVE_BIT            2
120 #define MTIP_FLAG_ISSUE_CMDS_BIT                4
121 #define MTIP_FLAG_REBUILD_BIT                   5
122 #define MTIP_FLAG_SVC_THD_SHOULD_STOP_BIT       8
123
124 /* Register Frame Information Structure (FIS), host to device. */
125 struct host_to_dev_fis {
126         /*
127          * FIS type.
128          * - 27h Register FIS, host to device.
129          * - 34h Register FIS, device to host.
130          * - 39h DMA Activate FIS, device to host.
131          * - 41h DMA Setup FIS, bi-directional.
132          * - 46h Data FIS, bi-directional.
133          * - 58h BIST Activate FIS, bi-directional.
134          * - 5Fh PIO Setup FIS, device to host.
135          * - A1h Set Device Bits FIS, device to host.
136          */
137         unsigned char type;
138         unsigned char opts;
139         unsigned char command;
140         unsigned char features;
141
142         union {
143                 unsigned char lba_low;
144                 unsigned char sector;
145         };
146         union {
147                 unsigned char lba_mid;
148                 unsigned char cyl_low;
149         };
150         union {
151                 unsigned char lba_hi;
152                 unsigned char cyl_hi;
153         };
154         union {
155                 unsigned char device;
156                 unsigned char head;
157         };
158
159         union {
160                 unsigned char lba_low_ex;
161                 unsigned char sector_ex;
162         };
163         union {
164                 unsigned char lba_mid_ex;
165                 unsigned char cyl_low_ex;
166         };
167         union {
168                 unsigned char lba_hi_ex;
169                 unsigned char cyl_hi_ex;
170         };
171         unsigned char features_ex;
172
173         unsigned char sect_count;
174         unsigned char sect_cnt_ex;
175         unsigned char res2;
176         unsigned char control;
177
178         unsigned int res3;
179 };
180
181 /* Command header structure. */
182 struct mtip_cmd_hdr {
183         /*
184          * Command options.
185          * - Bits 31:16 Number of PRD entries.
186          * - Bits 15:8 Unused in this implementation.
187          * - Bit 7 Prefetch bit, informs the drive to prefetch PRD entries.
188          * - Bit 6 Write bit, should be set when writing data to the device.
189          * - Bit 5 Unused in this implementation.
190          * - Bits 4:0 Length of the command FIS in DWords (DWord = 4 bytes).
191          */
192         unsigned int opts;
193         /* This field is unsed when using NCQ. */
194         union {
195                 unsigned int byte_count;
196                 unsigned int status;
197         };
198         /*
199          * Lower 32 bits of the command table address associated with this
200          * header. The command table addresses must be 128 byte aligned.
201          */
202         unsigned int ctba;
203         /*
204          * If 64 bit addressing is used this field is the upper 32 bits
205          * of the command table address associated with this command.
206          */
207         unsigned int ctbau;
208         /* Reserved and unused. */
209         unsigned int res[4];
210 };
211
212 /* Command scatter gather structure (PRD). */
213 struct mtip_cmd_sg {
214         /*
215          * Low 32 bits of the data buffer address. For P320 this
216          * address must be 8 byte aligned signified by bits 2:0 being
217          * set to 0.
218          */
219         unsigned int dba;
220         /*
221          * When 64 bit addressing is used this field is the upper
222          * 32 bits of the data buffer address.
223          */
224         unsigned int dba_upper;
225         /* Unused. */
226         unsigned int reserved;
227         /*
228          * Bit 31: interrupt when this data block has been transferred.
229          * Bits 30..22: reserved
230          * Bits 21..0: byte count (minus 1).  For P320 the byte count must be
231          * 8 byte aligned signified by bits 2:0 being set to 1.
232          */
233         unsigned int info;
234 };
235 struct mtip_port;
236
237 /* Structure used to describe a command. */
238 struct mtip_cmd {
239
240         struct mtip_cmd_hdr *command_header; /* ptr to command header entry */
241
242         dma_addr_t command_header_dma; /* corresponding physical address */
243
244         void *command; /* ptr to command table entry */
245
246         dma_addr_t command_dma; /* corresponding physical address */
247
248         void *comp_data; /* data passed to completion function comp_func() */
249         /*
250          * Completion function called by the ISR upon completion of
251          * a command.
252          */
253         void (*comp_func)(struct mtip_port *port,
254                                 int tag,
255                                 void *data,
256                                 int status);
257         /* Additional callback function that may be called by comp_func() */
258         void (*async_callback)(void *data, int status);
259
260         void *async_data; /* Addl. data passed to async_callback() */
261
262         int scatter_ents; /* Number of scatter list entries used */
263
264         struct scatterlist sg[MTIP_MAX_SG]; /* Scatter list entries */
265
266         int retries; /* The number of retries left for this command. */
267
268         int direction; /* Data transfer direction */
269
270         unsigned long comp_time; /* command completion time, in jiffies */
271
272         atomic_t active; /* declares if this command sent to the drive. */
273 };
274
275 /* Structure used to describe a port. */
276 struct mtip_port {
277         /* Pointer back to the driver data for this port. */
278         struct driver_data *dd;
279         /*
280          * Used to determine if the data pointed to by the
281          * identify field is valid.
282          */
283         unsigned long identify_valid;
284         /* Base address of the memory mapped IO for the port. */
285         void __iomem *mmio;
286         /* Array of pointers to the memory mapped s_active registers. */
287         void __iomem *s_active[MTIP_MAX_SLOT_GROUPS];
288         /* Array of pointers to the memory mapped completed registers. */
289         void __iomem *completed[MTIP_MAX_SLOT_GROUPS];
290         /* Array of pointers to the memory mapped Command Issue registers. */
291         void __iomem *cmd_issue[MTIP_MAX_SLOT_GROUPS];
292         /*
293          * Pointer to the beginning of the command header memory as used
294          * by the driver.
295          */
296         void *command_list;
297         /*
298          * Pointer to the beginning of the command header memory as used
299          * by the DMA.
300          */
301         dma_addr_t command_list_dma;
302         /*
303          * Pointer to the beginning of the RX FIS memory as used
304          * by the driver.
305          */
306         void *rxfis;
307         /*
308          * Pointer to the beginning of the RX FIS memory as used
309          * by the DMA.
310          */
311         dma_addr_t rxfis_dma;
312         /*
313          * Pointer to the beginning of the command table memory as used
314          * by the driver.
315          */
316         void *command_table;
317         /*
318          * Pointer to the beginning of the command table memory as used
319          * by the DMA.
320          */
321         dma_addr_t command_tbl_dma;
322         /*
323          * Pointer to the beginning of the identify data memory as used
324          * by the driver.
325          */
326         u16 *identify;
327         /*
328          * Pointer to the beginning of the identify data memory as used
329          * by the DMA.
330          */
331         dma_addr_t identify_dma;
332         /*
333          * Pointer to the beginning of a sector buffer that is used
334          * by the driver when issuing internal commands.
335          */
336         u16 *sector_buffer;
337         /*
338          * Pointer to the beginning of a sector buffer that is used
339          * by the DMA when the driver issues internal commands.
340          */
341         dma_addr_t sector_buffer_dma;
342         /*
343          * Bit significant, used to determine if a command slot has
344          * been allocated. i.e. the slot is in use.  Bits are cleared
345          * when the command slot and all associated data structures
346          * are no longer needed.
347          */
348         unsigned long allocated[SLOTBITS_IN_LONGS];
349         /*
350          * used to queue commands when an internal command is in progress
351          * or error handling is active
352          */
353         unsigned long cmds_to_issue[SLOTBITS_IN_LONGS];
354         /*
355          * Array of command slots. Structure includes pointers to the
356          * command header and command table, and completion function and data
357          * pointers.
358          */
359         struct mtip_cmd commands[MTIP_MAX_COMMAND_SLOTS];
360         /* Used by mtip_service_thread to wait for an event */
361         wait_queue_head_t svc_wait;
362         /*
363          * indicates the state of the port. Also, helps the service thread
364          * to determine its action on wake up.
365          */
366         unsigned long flags;
367         /*
368          * Timer used to complete commands that have been active for too long.
369          */
370         struct timer_list cmd_timer;
371         /*
372          * Semaphore used to block threads if there are no
373          * command slots available.
374          */
375         struct semaphore cmd_slot;
376         /* Spinlock for working around command-issue bug. */
377         spinlock_t cmd_issue_lock;
378 };
379
380 /*
381  * Driver private data structure.
382  *
383  * One structure is allocated per probed device.
384  */
385 struct driver_data {
386         void __iomem *mmio; /* Base address of the HBA registers. */
387
388         int major; /* Major device number. */
389
390         int instance; /* Instance number. First device probed is 0, ... */
391
392         struct gendisk *disk; /* Pointer to our gendisk structure. */
393
394         struct pci_dev *pdev; /* Pointer to the PCI device structure. */
395
396         struct request_queue *queue; /* Our request queue. */
397
398         struct mtip_port *port; /* Pointer to the port data structure. */
399
400         /* Tasklet used to process the bottom half of the ISR. */
401         struct tasklet_struct tasklet;
402
403         unsigned product_type; /* magic value declaring the product type */
404
405         unsigned slot_groups; /* number of slot groups the product supports */
406
407         atomic_t drv_cleanup_done; /* Atomic variable for SRSI */
408
409         unsigned long index; /* Index to determine the disk name */
410
411         unsigned int ftlrebuildflag; /* FTL rebuild flag */
412
413         atomic_t resumeflag; /* Atomic variable to track suspend/resume */
414
415         struct task_struct *mtip_svc_handler; /* task_struct of svc thd */
416 };
417
418 #endif