Logo Search packages:      
Sourcecode: linux version File versions  Download package

cpqarray.h

/*
 *    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 */

Generated by  Doxygen 1.6.0   Back to index