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 iss_storagedev@hp.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/slab.h> 31 #include <linux/proc_fs.h> 32 #include <linux/timer.h> 33 #endif 34 35 #include "ida_cmd.h" 36 37 #define IO_OK 0 38 #define IO_ERROR 1 39 #define NWD 16 40 #define NWD_SHIFT 4 41 42 #define IDA_TIMER (5*HZ) 43 #define IDA_TIMEOUT (10*HZ) 44 45 #define MISC_NONFATAL_WARN 0x01 46 47 typedef struct { 48 unsigned blk_size; 49 unsigned nr_blks; 50 unsigned cylinders; 51 unsigned heads; 52 unsigned sectors; 53 int usage_count; 54 } drv_info_t; 55 56 #ifdef __KERNEL__ 57 58 struct ctlr_info; 59 typedef struct ctlr_info ctlr_info_t; 60 61 struct access_method { 62 void (*submit_command)(ctlr_info_t *h, cmdlist_t *c); 63 void (*set_intr_mask)(ctlr_info_t *h, unsigned long val); 64 unsigned long (*fifo_full)(ctlr_info_t *h); 65 unsigned long (*intr_pending)(ctlr_info_t *h); 66 unsigned long (*command_completed)(ctlr_info_t *h); 67 }; 68 69 struct board_type { 70 __u32 board_id; 71 char *product_name; 72 struct access_method *access; 73 }; 74 75 struct ctlr_info { 76 int ctlr; 77 char devname[8]; 78 __u32 log_drv_map; 79 __u32 drv_assign_map; 80 __u32 drv_spare_map; 81 __u32 mp_failed_drv_map; 82 83 char firm_rev[4]; 84 int ctlr_sig; 85 86 int log_drives; 87 int phys_drives; 88 89 struct pci_dev *pci_dev; /* NULL if EISA */ 90 __u32 board_id; 91 char *product_name; 92 93 void __iomem *vaddr; 94 unsigned long paddr; 95 unsigned long io_mem_addr; 96 unsigned long io_mem_length; 97 int intr; 98 int usage_count; 99 drv_info_t drv[NWD]; 100 struct proc_dir_entry *proc; 101 102 struct access_method access; 103 104 cmdlist_t *reqQ; 105 cmdlist_t *cmpQ; 106 cmdlist_t *cmd_pool; 107 dma_addr_t cmd_pool_dhandle; 108 unsigned long *cmd_pool_bits; 109 struct request_queue *queue; 110 spinlock_t lock; 111 112 unsigned int Qdepth; 113 unsigned int maxQsinceinit; 114 115 unsigned int nr_requests; 116 unsigned int nr_allocs; 117 unsigned int nr_frees; 118 struct timer_list timer; 119 unsigned int misc_tflags; 120 }; 121 122 #define IDA_LOCK(i) (&hba[i]->lock) 123 124 #endif 125 126 #endif /* CPQARRAY_H */ 127