linux/drivers/message/i2o/i2o_block.h
<<
>>
Prefs
   1/*
   2 *      Block OSM structures/API
   3 *
   4 *      Copyright (C) 1999-2002 Red Hat Software
   5 *
   6 *      Written by Alan Cox, Building Number Three Ltd
   7 *
   8 *      This program is free software; you can redistribute it and/or modify it
   9 *      under the terms of the GNU General Public License as published by the
  10 *      Free Software Foundation; either version 2 of the License, or (at your
  11 *      option) any later version.
  12 *
  13 *      This program is distributed in the hope that it will be useful, but
  14 *      WITHOUT ANY WARRANTY; without even the implied warranty of
  15 *      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16 *      General Public License for more details.
  17 *
  18 *      For the purpose of avoiding doubt the preferred form of the work
  19 *      for making modifications shall be a standards compliant form such
  20 *      gzipped tar and not one requiring a proprietary or patent encumbered
  21 *      tool to unpack.
  22 *
  23 *      Fixes/additions:
  24 *              Steve Ralston:
  25 *                      Multiple device handling error fixes,
  26 *                      Added a queue depth.
  27 *              Alan Cox:
  28 *                      FC920 has an rmw bug. Dont or in the end marker.
  29 *                      Removed queue walk, fixed for 64bitness.
  30 *                      Rewrote much of the code over time
  31 *                      Added indirect block lists
  32 *                      Handle 64K limits on many controllers
  33 *                      Don't use indirects on the Promise (breaks)
  34 *                      Heavily chop down the queue depths
  35 *              Deepak Saxena:
  36 *                      Independent queues per IOP
  37 *                      Support for dynamic device creation/deletion
  38 *                      Code cleanup
  39 *                      Support for larger I/Os through merge* functions
  40 *                      (taken from DAC960 driver)
  41 *              Boji T Kannanthanam:
  42 *                      Set the I2O Block devices to be detected in increasing
  43 *                      order of TIDs during boot.
  44 *                      Search and set the I2O block device that we boot off
  45 *                      from as the first device to be claimed (as /dev/i2o/hda)
  46 *                      Properly attach/detach I2O gendisk structure from the
  47 *                      system gendisk list. The I2O block devices now appear in
  48 *                      /proc/partitions.
  49 *              Markus Lidel <Markus.Lidel@shadowconnect.com>:
  50 *                      Minor bugfixes for 2.6.
  51 */
  52
  53#ifndef I2O_BLOCK_OSM_H
  54#define I2O_BLOCK_OSM_H
  55
  56#define I2O_BLOCK_RETRY_TIME HZ/4
  57#define I2O_BLOCK_MAX_OPEN_REQUESTS 50
  58
  59/* request queue sizes */
  60#define I2O_BLOCK_REQ_MEMPOOL_SIZE              32
  61
  62#define KERNEL_SECTOR_SHIFT 9
  63#define KERNEL_SECTOR_SIZE (1 << KERNEL_SECTOR_SHIFT)
  64
  65/* I2O Block OSM mempool struct */
  66struct i2o_block_mempool {
  67        struct kmem_cache *slab;
  68        mempool_t *pool;
  69};
  70
  71/* I2O Block device descriptor */
  72struct i2o_block_device {
  73        struct i2o_device *i2o_dev;     /* pointer to I2O device */
  74        struct gendisk *gd;
  75        spinlock_t lock;        /* queue lock */
  76        struct list_head open_queue;    /* list of transferred, but unfinished
  77                                           requests */
  78        unsigned int open_queue_depth;  /* number of requests in the queue */
  79
  80        int rcache;             /* read cache flags */
  81        int wcache;             /* write cache flags */
  82        int flags;
  83        u16 power;              /* power state */
  84        int media_change_flag;  /* media changed flag */
  85};
  86
  87/* I2O Block device request */
  88struct i2o_block_request {
  89        struct list_head queue;
  90        struct request *req;    /* corresponding request */
  91        struct i2o_block_device *i2o_blk_dev;   /* I2O block device */
  92        struct device *dev;     /* device used for DMA */
  93        int sg_nents;           /* number of SG elements */
  94        struct scatterlist sg_table[I2O_MAX_PHYS_SEGMENTS];     /* SG table */
  95};
  96
  97/* I2O Block device delayed request */
  98struct i2o_block_delayed_request {
  99        struct delayed_work work;
 100        struct request_queue *queue;
 101};
 102
 103#endif
 104