linux/drivers/block/cpqarray.h
<<
>>
Prefs
   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
  47typedef 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
  58struct ctlr_info;
  59typedef struct ctlr_info ctlr_info_t;
  60
  61struct 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
  69struct board_type {
  70        __u32   board_id;
  71        char    *product_name;
  72        struct access_method *access;
  73};
  74
  75struct 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