Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
awilliam
GitHub Repository: awilliam/linux-vfio
Path: blob/master/drivers/message/i2o/i2o_block.h
15111 views
1
/*
2
* Block OSM structures/API
3
*
4
* Copyright (C) 1999-2002 Red Hat Software
5
*
6
* Written by Alan Cox, Building Number Three Ltd
7
*
8
* This program is free software; you can redistribute it and/or modify it
9
* under the terms of the GNU General Public License as published by the
10
* Free Software Foundation; either version 2 of the License, or (at your
11
* option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful, but
14
* WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* General Public License for more details.
17
*
18
* For the purpose of avoiding doubt the preferred form of the work
19
* for making modifications shall be a standards compliant form such
20
* gzipped tar and not one requiring a proprietary or patent encumbered
21
* tool to unpack.
22
*
23
* Fixes/additions:
24
* Steve Ralston:
25
* Multiple device handling error fixes,
26
* Added a queue depth.
27
* Alan Cox:
28
* FC920 has an rmw bug. Dont or in the end marker.
29
* Removed queue walk, fixed for 64bitness.
30
* Rewrote much of the code over time
31
* Added indirect block lists
32
* Handle 64K limits on many controllers
33
* Don't use indirects on the Promise (breaks)
34
* Heavily chop down the queue depths
35
* Deepak Saxena:
36
* Independent queues per IOP
37
* Support for dynamic device creation/deletion
38
* Code cleanup
39
* Support for larger I/Os through merge* functions
40
* (taken from DAC960 driver)
41
* Boji T Kannanthanam:
42
* Set the I2O Block devices to be detected in increasing
43
* order of TIDs during boot.
44
* Search and set the I2O block device that we boot off
45
* from as the first device to be claimed (as /dev/i2o/hda)
46
* Properly attach/detach I2O gendisk structure from the
47
* system gendisk list. The I2O block devices now appear in
48
* /proc/partitions.
49
* Markus Lidel <[email protected]>:
50
* Minor bugfixes for 2.6.
51
*/
52
53
#ifndef I2O_BLOCK_OSM_H
54
#define I2O_BLOCK_OSM_H
55
56
#define I2O_BLOCK_RETRY_TIME HZ/4
57
#define I2O_BLOCK_MAX_OPEN_REQUESTS 50
58
59
/* request queue sizes */
60
#define I2O_BLOCK_REQ_MEMPOOL_SIZE 32
61
62
#define KERNEL_SECTOR_SHIFT 9
63
#define KERNEL_SECTOR_SIZE (1 << KERNEL_SECTOR_SHIFT)
64
65
/* I2O Block OSM mempool struct */
66
struct i2o_block_mempool {
67
struct kmem_cache *slab;
68
mempool_t *pool;
69
};
70
71
/* I2O Block device descriptor */
72
struct i2o_block_device {
73
struct i2o_device *i2o_dev; /* pointer to I2O device */
74
struct gendisk *gd;
75
spinlock_t lock; /* queue lock */
76
struct list_head open_queue; /* list of transferred, but unfinished
77
requests */
78
unsigned int open_queue_depth; /* number of requests in the queue */
79
80
int rcache; /* read cache flags */
81
int wcache; /* write cache flags */
82
int flags;
83
u16 power; /* power state */
84
int media_change_flag; /* media changed flag */
85
};
86
87
/* I2O Block device request */
88
struct i2o_block_request {
89
struct list_head queue;
90
struct request *req; /* corresponding request */
91
struct i2o_block_device *i2o_blk_dev; /* I2O block device */
92
struct device *dev; /* device used for DMA */
93
int sg_nents; /* number of SG elements */
94
struct scatterlist sg_table[I2O_MAX_PHYS_SEGMENTS]; /* SG table */
95
};
96
97
/* I2O Block device delayed request */
98
struct i2o_block_delayed_request {
99
struct delayed_work work;
100
struct request_queue *queue;
101
};
102
103
#endif
104
105