make oldconfig will rebuild these...
[linux-2.4.21-pre4.git] / drivers / block / cpqarray.h
1 /*
2  *    Disk Array driver for Compaq SMART2 Controllers
3  *    Copyright 1998 Compaq Computer Corporation
4  *
5  *    This program is free software; you can redistribute it and/or modify
6  *    it under the terms of the GNU General Public License as published by
7  *    the Free Software Foundation; either version 2 of the License, or
8  *    (at your option) any later version.
9  *
10  *    This program is distributed in the hope that it will be useful,
11  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or
13  *    NON INFRINGEMENT.  See the GNU General Public License for more details.
14  *
15  *    You should have received a copy of the GNU General Public License
16  *    along with this program; if not, write to the Free Software
17  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *
19  *    Questions/Comments/Bugfixes to arrays@compaq.com
20  *
21  *    If you want to make changes, improve or add functionality to this
22  *    driver, you'll probably need the Compaq Array Controller Interface
23  *    Specificiation (Document number ECG086/1198)
24  */
25 #ifndef CPQARRAY_H
26 #define CPQARRAY_H
27
28 #ifdef __KERNEL__
29 #include <linux/blkdev.h>
30 #include <linux/locks.h>
31 #include <linux/slab.h>
32 #include <linux/proc_fs.h>
33 #include <linux/timer.h>
34 #endif
35
36 #include "ida_cmd.h"
37
38 #define IO_OK           0
39 #define IO_ERROR        1
40 #define NWD             16
41 #define NWD_SHIFT       4
42 #define IDA_MAX_PART    16
43
44 #define IDA_TIMER       (5*HZ)
45 #define IDA_TIMEOUT     (10*HZ)
46
47 #define MISC_NONFATAL_WARN      0x01
48
49 typedef struct {
50         unsigned blk_size;
51         unsigned nr_blks;
52         unsigned cylinders;
53         unsigned heads;
54         unsigned sectors;
55         int usage_count;
56 } drv_info_t;
57
58 #ifdef __KERNEL__
59
60 struct ctlr_info;
61 typedef struct ctlr_info ctlr_info_t;
62
63 struct access_method {
64         void (*submit_command)(ctlr_info_t *h, cmdlist_t *c);
65         void (*set_intr_mask)(ctlr_info_t *h, unsigned long val);
66         unsigned long (*fifo_full)(ctlr_info_t *h);
67         unsigned long (*intr_pending)(ctlr_info_t *h);
68         unsigned long (*command_completed)(ctlr_info_t *h);
69 };
70
71 struct board_type {
72         __u32   board_id;
73         char    *product_name;
74         struct access_method *access;
75 };
76
77 struct ctlr_info {
78         int     ctlr;
79         char    devname[8];
80         __u32   log_drv_map;
81         __u32   drv_assign_map;
82         __u32   drv_spare_map;
83         __u32   mp_failed_drv_map;
84
85         char    firm_rev[4];
86         struct pci_dev *pdev;
87         int     ctlr_sig;
88
89         int     log_drives;
90         int     highest_lun;
91         int     phys_drives;
92
93         struct pci_dev *pci_dev;    /* NULL if EISA */
94         __u32   board_id;
95         char    *product_name;  
96
97         void *vaddr;
98         unsigned long paddr;
99         unsigned long io_mem_addr;
100         unsigned long io_mem_length;    
101         int     intr;
102         int     usage_count;
103         drv_info_t      drv[NWD];
104         struct proc_dir_entry *proc;
105
106         struct access_method access;
107
108         cmdlist_t *reqQ;
109         cmdlist_t *cmpQ;
110         cmdlist_t *cmd_pool;
111         dma_addr_t cmd_pool_dhandle;
112         __u32   *cmd_pool_bits;
113
114         unsigned int Qdepth;
115         unsigned int maxQsinceinit;
116
117         unsigned int nr_requests;
118         unsigned int nr_allocs;
119         unsigned int nr_frees;
120         struct timer_list timer;
121         unsigned int misc_tflags;
122         // Disk structures we need to pass back
123         struct gendisk gendisk;
124         // Index by Minor Numbers
125         struct hd_struct        hd[256];
126         int                     sizes[256];
127         int                     blocksizes[256];
128         int                     hardsizes[256];
129 };
130 #endif
131
132 #endif /* CPQARRAY_H */