/* * 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 arrays@compaq.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 #include #include #include #include #endif #include "ida_cmd.h" #define IO_OK 0 #define IO_ERROR 1 #define NWD 16 #define NWD_SHIFT 4 #define IDA_MAX_PART 16 #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]; struct pci_dev *pdev; int ctlr_sig; int log_drives; int highest_lun; int phys_drives; struct pci_dev *pci_dev; /* NULL if EISA */ __u32 board_id; char *product_name; void *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; __u32 *cmd_pool_bits; 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; // Disk structures we need to pass back struct gendisk gendisk; // Index by Minor Numbers struct hd_struct hd[256]; int sizes[256]; int blocksizes[256]; int hardsizes[256]; }; #endif #endif /* CPQARRAY_H */