~ubuntu-branches/ubuntu/quantal/linux-lowlatency/quantal

« back to all changes in this revision

Viewing changes to drivers/block/mtip32xx/mtip32xx.h

  • Committer: Package Import Robot
  • Author(s): Alessio Igor Bogani
  • Date: 2011-10-26 11:13:05 UTC
  • Revision ID: package-import@ubuntu.com-20111026111305-04kado7d1u2er2rl
Tags: 3.2.0-16.25
Add new lowlatency kernel flavour

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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