| /* | |
| * Disk Array driver for Compaq SMART2 Controllers | |
| * Copyright 1998 Compaq Computer Corporation | |
| * | |
| * This program is free software; you can redistribute it and/or modify | |
| * it under the terms of the GNU General Public License as published by | |
| * the Free Software Foundation; either version 2 of the License, or | |
| * (at your option) any later version. | |
| * | |
| * This program is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or | |
| * NON INFRINGEMENT. See the GNU General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU General Public License | |
| * along with this program; if not, write to the Free Software | |
| * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. | |
| * | |
| * Questions/Comments/Bugfixes to iss_storagedev@hp.com | |
| * | |
| * If you want to make changes, improve or add functionality to this | |
| * driver, you'll probably need the Compaq Array Controller Interface | |
| * Specificiation (Document number ECG086/1198) | |
| */ | |
| #ifndef CPQARRAY_H | |
| #define CPQARRAY_H | |
| #ifdef __KERNEL__ | |
| #include <linux/blkdev.h> | |
| #include <linux/slab.h> | |
| #include <linux/proc_fs.h> | |
| #include <linux/timer.h> | |
| #endif | |
| #include "ida_cmd.h" | |
| #define IO_OK 0 | |
| #define IO_ERROR 1 | |
| #define NWD 16 | |
| #define NWD_SHIFT 4 | |
| #define IDA_TIMER (5*HZ) | |
| #define IDA_TIMEOUT (10*HZ) | |
| #define MISC_NONFATAL_WARN 0x01 | |
| typedef struct { | |
| unsigned blk_size; | |
| unsigned nr_blks; | |
| unsigned cylinders; | |
| unsigned heads; | |
| unsigned sectors; | |
| int usage_count; | |
| } drv_info_t; | |
| #ifdef __KERNEL__ | |
| struct ctlr_info; | |
| typedef struct ctlr_info ctlr_info_t; | |
| struct access_method { | |
| void (*submit_command)(ctlr_info_t *h, cmdlist_t *c); | |
| void (*set_intr_mask)(ctlr_info_t *h, unsigned long val); | |
| unsigned long (*fifo_full)(ctlr_info_t *h); | |
| unsigned long (*intr_pending)(ctlr_info_t *h); | |
| unsigned long (*command_completed)(ctlr_info_t *h); | |
| }; | |
| struct board_type { | |
| __u32 board_id; | |
| char *product_name; | |
| struct access_method *access; | |
| }; | |
| struct ctlr_info { | |
| int ctlr; | |
| char devname[8]; | |
| __u32 log_drv_map; | |
| __u32 drv_assign_map; | |
| __u32 drv_spare_map; | |
| __u32 mp_failed_drv_map; | |
| char firm_rev[4]; | |
| int ctlr_sig; | |
| int log_drives; | |
| int phys_drives; | |
| struct pci_dev *pci_dev; /* NULL if EISA */ | |
| __u32 board_id; | |
| char *product_name; | |
| void __iomem *vaddr; | |
| unsigned long paddr; | |
| unsigned long io_mem_addr; | |
| unsigned long io_mem_length; | |
| int intr; | |
| int usage_count; | |
| drv_info_t drv[NWD]; | |
| struct proc_dir_entry *proc; | |
| struct access_method access; | |
| cmdlist_t *reqQ; | |
| cmdlist_t *cmpQ; | |
| cmdlist_t *cmd_pool; | |
| dma_addr_t cmd_pool_dhandle; | |
| unsigned long *cmd_pool_bits; | |
| struct request_queue *queue; | |
| spinlock_t lock; | |
| unsigned int Qdepth; | |
| unsigned int maxQsinceinit; | |
| unsigned int nr_requests; | |
| unsigned int nr_allocs; | |
| unsigned int nr_frees; | |
| struct timer_list timer; | |
| unsigned int misc_tflags; | |
| }; | |
| #define IDA_LOCK(i) (&hba[i]->lock) | |
| #endif | |
| #endif /* CPQARRAY_H */ |