linux/drivers/scsi/device_handler/scsi_dh_rdac.c

/*
 * LSI/Engenio/NetApp E-Series RDAC SCSI Device Handler
 *
 * Copyright (C) 2005 Mike Christie. All rights reserved.
 * Copyright (C) Chandra Seetharaman, IBM Corp. 2007
 *
 * 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.  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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 */
#include <scsi/scsi.h>
#include <scsi/scsi_eh.h>
#include <scsi/scsi_dh.h>
#include <linux/workqueue.h>
#include <linux/slab.h>
#include <linux/module.h>

#define RDAC_NAME
#define RDAC_RETRY_COUNT

/*
 * LSI mode page stuff
 *
 * These struct definitions and the forming of the
 * mode page were taken from the LSI RDAC 2.4 GPL'd
 * driver, and then converted to Linux conventions.
 */
#define RDAC_QUIESCENCE_TIME
/*
 * Page Codes
 */
#define RDAC_PAGE_CODE_REDUNDANT_CONTROLLER

/*
 * Controller modes definitions
 */
#define RDAC_MODE_TRANSFER_SPECIFIED_LUNS

/*
 * RDAC Options field
 */
#define RDAC_FORCED_QUIESENCE

#define RDAC_TIMEOUT
#define RDAC_RETRIES

struct rdac_mode_6_hdr {};

struct rdac_mode_10_hdr {};

struct rdac_mode_common {};

struct rdac_pg_legacy {};

struct rdac_pg_expanded {};

struct c9_inquiry {};

#define SUBSYS_ID_LEN
#define SLOT_ID_LEN
#define ARRAY_LABEL_LEN

struct c4_inquiry {};

#define UNIQUE_ID_LEN
struct c8_inquiry {};

struct rdac_controller {};

struct c2_inquiry {};

struct rdac_dh_data {};

static const char *mode[] =;
static const char *lun_state[] =;

struct rdac_queue_data {};

static LIST_HEAD(ctlr_list);
static DEFINE_SPINLOCK(list_lock);
static struct workqueue_struct *kmpath_rdacd;
static void send_mode_select(struct work_struct *work);

/*
 * module parameter to enable rdac debug logging.
 * 2 bits for each type of logging, only two types defined for now
 * Can be enhanced if required at later point
 */
static int rdac_logging =;
module_param(rdac_logging, int, S_IRUGO|S_IWUSR);
MODULE_PARM_DESC();

#define RDAC_LOG_FAILOVER
#define RDAC_LOG_SENSE

#define RDAC_LOG_BITS

#define RDAC_LOG_LEVEL(SHIFT)

#define RDAC_LOG(SHIFT, sdev, f, arg...)

static unsigned int rdac_failover_get(struct rdac_controller *ctlr,
				      struct list_head *list,
				      unsigned char *cdb)
{}

static void release_controller(struct kref *kref)
{}

static struct rdac_controller *get_controller(int index, char *array_name,
			u8 *array_id, struct scsi_device *sdev)
{}

static int get_lun_info(struct scsi_device *sdev, struct rdac_dh_data *h,
			char *array_name, u8 *array_id)
{}

static int check_ownership(struct scsi_device *sdev, struct rdac_dh_data *h)
{}

static int initialize_controller(struct scsi_device *sdev,
		struct rdac_dh_data *h, char *array_name, u8 *array_id)
{}

static int set_mode_select(struct scsi_device *sdev, struct rdac_dh_data *h)
{}

static int mode_select_handle_sense(struct scsi_device *sdev,
				    struct scsi_sense_hdr *sense_hdr)
{}

static void send_mode_select(struct work_struct *work)
{}

static int queue_mode_select(struct scsi_device *sdev,
				activate_complete fn, void *data)
{}

static int rdac_activate(struct scsi_device *sdev,
			activate_complete fn, void *data)
{}

static blk_status_t rdac_prep_fn(struct scsi_device *sdev, struct request *req)
{}

static enum scsi_disposition rdac_check_sense(struct scsi_device *sdev,
					      struct scsi_sense_hdr *sense_hdr)
{}

static int rdac_bus_attach(struct scsi_device *sdev)
{}

static void rdac_bus_detach( struct scsi_device *sdev )
{}

static struct scsi_device_handler rdac_dh =;

static int __init rdac_init(void)
{}

static void __exit rdac_exit(void)
{}

module_init();
module_exit(rdac_exit);

MODULE_DESCRIPTION();
MODULE_AUTHOR();
MODULE_VERSION();
MODULE_LICENSE();