public inbox for linux-scsi@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH 2.6.12-rc4-mm1 1/4] megaraid_sas: updating the driver
@ 2005-05-16  6:51 Bagalkote, Sreenivas
  2005-05-16 14:56 ` 'Christoph Hellwig'
  0 siblings, 1 reply; 2+ messages in thread
From: Bagalkote, Sreenivas @ 2005-05-16  6:51 UTC (permalink / raw)
  To: 'linux-scsi@vger.kernel.org',
	'linux-kernel@vger.kernel.org'
  Cc: 'Matt_Domsch@Dell.com', Andrew Morton,
	'Christoph Hellwig', 'James Bottomley',
	Ju, Seokmann, Doelfel, Hardy

Hello All,

Please review this update to the previously submitted megaraid_sas driver.
I have adopted all the feedback received for the initial submission. Since
most of the code is rearranged, I have split the patches into four parts - 
the first two remove the original code and the second two add the new code.

Thank you,
Sreenivas Bagalkote
LSI Logic Corporation

Patch 1 of 4:

Signed-off by: Sreenivas Bagalkote <sreenivas.bagalkote@lsil.com>

diff -Naurp linux-2.6.12-rc4-mm1.a/Documentation/scsi/ChangeLog.megaraid_sas
linux-2.6.12-rc4-mm1.b/Documentation/scsi/ChangeLog.megaraid_sas
--- linux-2.6.12-rc4-mm1.a/Documentation/scsi/ChangeLog.megaraid_sas
2005-05-15 21:49:04.173111328 -0400
+++ linux-2.6.12-rc4-mm1.b/Documentation/scsi/ChangeLog.megaraid_sas
1969-12-31 19:00:00.000000000 -0500
@@ -1,9 +0,0 @@
-Release Date	: Fri Mar  4 21:06:57 EST 2005
-Released by	: Sreenivas Bagalkote (sreenivas.bagalkote@lsil.com)
-Current Version	: 00.00.01.00
-Older Version	: NA
-
-1.	Initial announcement to community - Module for LSI Logic's SAS based
-	RAID controllers.
-
-
diff -Naurp linux-2.6.12-rc4-mm1.a/drivers/scsi/megaraid/megaraid_sas.h
linux-2.6.12-rc4-mm1.b/drivers/scsi/megaraid/megaraid_sas.h
--- linux-2.6.12-rc4-mm1.a/drivers/scsi/megaraid/megaraid_sas.h	2005-05-15
21:49:05.733874056 -0400
+++ linux-2.6.12-rc4-mm1.b/drivers/scsi/megaraid/megaraid_sas.h	1969-12-31
19:00:00.000000000 -0500
@@ -1,1118 +0,0 @@
-/*
- *
- *		Linux MegaRAID driver for SAS based RAID controllers
- *
- * Copyright (c) 2003-2005  LSI Logic 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.
- *
- * FILE		: megaraid_sas.h
- */
-
-#ifndef LSI_MEGARAID_SAS_H
-#define LSI_MEGARAID_SAS_H
-
-#include <linux/kernel.h>
-#include <linux/types.h>
-#include <linux/pci.h>
-#include <linux/list.h>
-#include <linux/version.h>
-#include <linux/moduleparam.h>
-#include <linux/spinlock.h>
-#include <linux/interrupt.h>
-#include <linux/delay.h>
-#include <asm/uaccess.h>
-
-#include <scsi/scsi.h>
-#include <scsi/scsi_cmnd.h>
-#include <scsi/scsi_device.h>
-#include <scsi/scsi_host.h>
-
-/**
- * MegaRAID SAS Driver meta data
- */
-#define MEGASAS_VERSION				"00.00.01.00"
-#define MEGASAS_RELDATE				"Mar 05, 2005"
-#define MEGASAS_EXT_VERSION			""
-
-/**
- * MegaRAID SAS supported controllers
- */
-#define	PCI_DEVICE_LSI_1064			0x0411
-#define	PCI_SUBVENDOR_x0000			0x0000
-#define	PCI_SUBVENDOR_x1000			0x1000
-#define PCI_SUBSYSTEM_x0000			0x0000
-#define PCI_SUBSYSTEM_x0001			0x0001
-#define PCI_SUBSYSTEM_x0002			0x0002
-#define PCI_SUBSYSTEM_x1001			0x1001
-
-#define PCI_DEVICE_ID_PERC5			0x0015
-#define PCI_SUBSYSTEM_PERC5H			0x1F01
-#define PCI_SUBSYSTEM_PERC5L			0x1F02
-#define PCI_SUBSYSTEM_PERC5I			0x1F03
-
-#define PCI_SUB_DEVICEID_FSC			0x1081
-#define PCI_SUB_VENDORID_FSC			0x1734
-/*
- * =====================================
- * MegaRAID SAS MFI firmware definitions
- * =====================================
- */
-
-/**
- * FW posts its state in upper 4 bits of outbound_msg_0 register
- */
-#define MFI_STATE_MASK				0xF0000000
-#define MFI_STATE_UNDEFINED			0x00000000
-#define MFI_STATE_BB_INIT			0x10000000
-#define MFI_STATE_FW_INIT			0x40000000
-#define MFI_STATE_WAIT_HANDSHAKE		0x60000000
-#define MFI_STATE_DEVICE_SCAN			0x80000000
-#define MFI_STATE_READY				0xB0000000
-#define MFI_STATE_OPERATIONAL			0xC0000000
-#define MFI_STATE_FAULT				0xF0000000
-
-#define MEGAMFI_FRAME_SIZE			64
-
-/**
- * During FW init, clear pending cmds & reset state using inbound_msg_0
- *
- * ABORT	: Abort all pending cmds
- * READY	: Move from OPERATIONAL to READY state; discard queue info
- * MFIMODE	: Discard (possible) low MFA posted in 64-bit mode (??)
- * CLR_HANDSHAKE: FW is waiting for HANDSHAKE from BIOS or Driver
- */
-#define MFI_INIT_ABORT				0x00000000
-#define MFI_INIT_READY				0x00000002
-#define MFI_INIT_MFIMODE			0x00000004
-#define MFI_INIT_CLEAR_HANDSHAKE		0x00000008
-#define MFI_RESET_FLAGS
MFI_INIT_READY|MFI_INIT_MFIMODE
-
-/**
- * MFI frame flags
- */
-#define MFI_FRAME_POST_IN_REPLY_QUEUE		0x0000
-#define MFI_FRAME_DONT_POST_IN_REPLY_QUEUE	0x0001
-#define MFI_FRAME_SGL32				0x0000
-#define MFI_FRAME_SGL64				0x0002
-#define MFI_FRAME_SENSE32			0x0000
-#define MFI_FRAME_SENSE64			0x0004
-#define MFI_FRAME_DIR_NONE			0x0000
-#define MFI_FRAME_DIR_WRITE			0x0008
-#define MFI_FRAME_DIR_READ			0x0010
-#define MFI_FRAME_DIR_BOTH			0x0018
-
-/**
- * Definition for cmd_status
- */
-#define MFI_CMD_STATUS_POLL_MODE		0xFF
-
-/**
- * MFI command opcodes
- */
-#define MFI_CMD_INIT				0x00
-#define MFI_CMD_LD_READ				0x01
-#define MFI_CMD_LD_WRITE			0x02
-#define MFI_CMD_LD_SCSI_IO			0x03
-#define MFI_CMD_PD_SCSI_IO			0x04
-#define MFI_CMD_DCMD				0x05
-#define MFI_CMD_ABORT				0x06
-#define MFI_CMD_SMP				0x07
-#define MFI_CMD_STP				0x08
-
-#define MR_DCMD_CTRL_GET_INFO			0x01010000
-
-#define MR_DCMD_CTRL_CACHE_FLUSH		0x01101000
-#define MR_FLUSH_CTRL_CACHE			0x01
-#define MR_FLUSH_DISK_CACHE			0x02
-
-#define MR_DCMD_CTRL_SHUTDOWN			0x01050000
-#define MR_ENABLE_DRIVE_SPINDOWN		0x01
-
-#define MR_DCMD_CTRL_EVENT_GET_INFO		0x01040100
-#define MR_DCMD_CTRL_EVENT_GET			0x01040300
-#define MR_DCMD_CTRL_EVENT_WAIT			0x01040500
-#define MR_DCMD_LD_GET_PROPERTIES		0x03030000
-
-/**
- * MFI command completion codes
- */
-enum MFI_STAT {
-	MFI_STAT_OK				= 0x00,
-	MFI_STAT_INVALID_CMD			= 0x01,
-	MFI_STAT_INVALID_DCMD			= 0x02,
-	MFI_STAT_INVALID_PARAMETER		= 0x03,
-	MFI_STAT_INVALID_SEQUENCE_NUMBER	= 0x04,
-	MFI_STAT_ABORT_NOT_POSSIBLE		= 0x05,
-	MFI_STAT_APP_HOST_CODE_NOT_FOUND	= 0x06,
-	MFI_STAT_APP_IN_USE			= 0x07,
-	MFI_STAT_APP_NOT_INITIALIZED		= 0x08,
-	MFI_STAT_ARRAY_INDEX_INVALID		= 0x09,
-	MFI_STAT_ARRAY_ROW_NOT_EMPTY		= 0x0a,
-	MFI_STAT_CONFIG_RESOURCE_CONFLICT	= 0x0b,
-	MFI_STAT_DEVICE_NOT_FOUND		= 0x0c,
-	MFI_STAT_DRIVE_TOO_SMALL		= 0x0d,
-	MFI_STAT_FLASH_ALLOC_FAIL		= 0x0e,
-	MFI_STAT_FLASH_BUSY			= 0x0f,
-	MFI_STAT_FLASH_ERROR			= 0x10,
-	MFI_STAT_FLASH_IMAGE_BAD		= 0x11,
-	MFI_STAT_FLASH_IMAGE_INCOMPLETE		= 0x12,
-	MFI_STAT_FLASH_NOT_OPEN			= 0x13,
-	MFI_STAT_FLASH_NOT_STARTED		= 0x14,
-	MFI_STAT_FLUSH_FAILED			= 0x15,
-	MFI_STAT_HOST_CODE_NOT_FOUNT		= 0x16,
-	MFI_STAT_LD_CC_IN_PROGRESS		= 0x17,
-	MFI_STAT_LD_INIT_IN_PROGRESS		= 0x18,
-	MFI_STAT_LD_LBA_OUT_OF_RANGE		= 0x19,
-	MFI_STAT_LD_MAX_CONFIGURED		= 0x1a,
-	MFI_STAT_LD_NOT_OPTIMAL			= 0x1b,
-	MFI_STAT_LD_RBLD_IN_PROGRESS		= 0x1c,
-	MFI_STAT_LD_RECON_IN_PROGRESS		= 0x1d,
-	MFI_STAT_LD_WRONG_RAID_LEVEL		= 0x1e,
-	MFI_STAT_MAX_SPARES_EXCEEDED		= 0x1f,
-	MFI_STAT_MEMORY_NOT_AVAILABLE		= 0x20,
-	MFI_STAT_MFC_HW_ERROR			= 0x21,
-	MFI_STAT_NO_HW_PRESENT			= 0x22,
-	MFI_STAT_NOT_FOUND			= 0x23,
-	MFI_STAT_NOT_IN_ENCL			= 0x24,
-	MFI_STAT_PD_CLEAR_IN_PROGRESS		= 0x25,
-	MFI_STAT_PD_TYPE_WRONG			= 0x26,
-	MFI_STAT_PR_DISABLED			= 0x27,
-	MFI_STAT_ROW_INDEX_INVALID		= 0x28,
-	MFI_STAT_SAS_CONFIG_INVALID_ACTION	= 0x29,
-	MFI_STAT_SAS_CONFIG_INVALID_DATA	= 0x2a,
-	MFI_STAT_SAS_CONFIG_INVALID_PAGE	= 0x2b,
-	MFI_STAT_SAS_CONFIG_INVALID_TYPE	= 0x2c,
-	MFI_STAT_SCSI_DONE_WITH_ERROR		= 0x2d,
-	MFI_STAT_SCSI_IO_FAILED			= 0x2e,
-	MFI_STAT_SCSI_RESERVATION_CONFLICT	= 0x2f,
-	MFI_STAT_SHUTDOWN_FAILED		= 0x30,
-	MFI_STAT_TIME_NOT_SET			= 0x31,
-	MFI_STAT_WRONG_STATE			= 0x32,
-	MFI_STAT_INVALID_STATUS			= 0xFF
-
-};
-
-enum MR_EVT_CLASS {
-
-	MR_EVT_CLASS_DEBUG		= -2,
-	MR_EVT_CLASS_PROGRESS		= -1,
-	MR_EVT_CLASS_INFO		=  0,
-	MR_EVT_CLASS_WARNING		=  1,
-	MR_EVT_CLASS_CRITICAL		=  2,
-	MR_EVT_CLASS_FATAL		=  3,
-	MR_EVT_CLASS_DEAD		=  4,
-
-};
-
-enum MR_EVT_LOCALE{
-
-	MR_EVT_LOCALE_LD		= 0x0001,
-	MR_EVT_LOCALE_PD		= 0x0002,
-	MR_EVT_LOCALE_ENCL		= 0x0004,
-	MR_EVT_LOCALE_BBU		= 0x0008,
-	MR_EVT_LOCALE_SAS		= 0x0010,
-	MR_EVT_LOCALE_CTRL		= 0x0020,
-	MR_EVT_LOCALE_CONFIG		= 0x0040,
-	MR_EVT_LOCALE_CLUSTER		= 0x0080,
-	MR_EVT_LOCALE_ALL		= 0xffff,
-
-};
-
-enum MR_EVT_ARGS {
-
-	MR_EVT_ARGS_NONE,
-	MR_EVT_ARGS_CDB_SENSE,
-	MR_EVT_ARGS_LD,
-	MR_EVT_ARGS_LD_COUNT,
-	MR_EVT_ARGS_LD_LBA,
-	MR_EVT_ARGS_LD_OWNER,
-	MR_EVT_ARGS_LD_LBA_PD_LBA,
-	MR_EVT_ARGS_LD_PROG,
-	MR_EVT_ARGS_LD_STATE,
-	MR_EVT_ARGS_LD_STRIP,
-	MR_EVT_ARGS_PD,
-	MR_EVT_ARGS_PD_ERR,
-	MR_EVT_ARGS_PD_LBA,
-	MR_EVT_ARGS_PD_LBA_LD,
-	MR_EVT_ARGS_PD_PROG,
-	MR_EVT_ARGS_PD_STATE,
-	MR_EVT_ARGS_PCI,
-	MR_EVT_ARGS_RATE,
-	MR_EVT_ARGS_STR,
-	MR_EVT_ARGS_TIME,
-	MR_EVT_ARGS_ECC,
-
-};
-
-/*
- * SAS controller properties
- */
-struct megasas_ctrl_prop {
-
-	uint16_t	seq_num;
-	uint16_t	pred_fail_poll_interval;
-	uint16_t	intr_throttle_count;
-	uint16_t	intr_throttle_timeouts;
-
-	uint8_t		rebuild_rate;
-	uint8_t		patrol_read_rate;
-	uint8_t		bgi_rate;
-	uint8_t		cc_rate;
-	uint8_t		recon_rate;
-
-	uint8_t		cache_flush_interval;
-
-	uint8_t		spinup_drv_count;
-	uint8_t		spinup_delay;
-
-	uint8_t		cluster_enable;
-	uint8_t		coercion_mode;
-	uint8_t		disk_write_cache_disable;
-	uint8_t		alarm_enable;
-
-	uint8_t		reserved[44];
-
-} __attribute__ ((packed));
-
-/*
- * SAS controller information
- */
-struct megasas_ctrl_info {
-
-	/*
-	 * PCI device information
-	 */
-	struct {
-
-		uint16_t	vendor_id;
-		uint16_t	device_id;
-		uint16_t	sub_vendor_id;
-		uint16_t	sub_device_id;
-		uint8_t		reserved[24];
-
-	} __attribute__ ((packed)) pci;
-
-	/*
-	 * Host interface information
-	 */
-	struct {
-
-		uint8_t		PCIX		: 1;
-		uint8_t		PCIE		: 1;
-		uint8_t		iSCSI		: 1;
-		uint8_t		SAS_3G		: 1;
-		uint8_t		reserved_0	: 4;
-		uint8_t		reserved_1[6];
-		uint8_t		port_count;
-		uint64_t	port_addr[8];
-
-	} __attribute__ ((packed)) host_interface;
-
-	/*
-	 * Device (backend) interface information
-	 */
-	struct {
-
-		uint8_t		SPI		: 1;
-		uint8_t		SAS_3G		: 1;
-		uint8_t		SATA_1_5G	: 1;
-		uint8_t		SATA_3G		: 1;
-		uint8_t		reserved_0	: 4;
-		uint8_t		reserved_1[6];
-		uint8_t		port_count;
-		uint64_t	port_addr[8];
-
-	} __attribute__ ((packed)) device_interface;
-
-	/*
-	 * List of components residing in flash. All str are null terminated
-	 */
-	uint32_t	image_check_word;
-	uint32_t	image_component_count;
-
-	struct {
-
-		char	name[8];
-		char	version[32];
-		char	build_date[16];
-		char	built_time[16];
-
-	} __attribute__ ((packed)) image_component[8];
-
-	/*
-	 * List of flash components that have been flashed on the card, but
-	 * are not in use, pending reset of the adapter. This list will be
-	 * empty if a flash operation has not occurred. All stings are null
-	 * terminated
-	 */
-	uint32_t	pending_image_component_count;
-
-	struct {
-
-		char	name[8];
-		char	version[32];
-		char	build_date[16];
-		char	build_time[16];
-
-	} __attribute__ ((packed)) pending_image_component[8];
-
-	uint8_t		max_arms;
-	uint8_t		max_spans;
-	uint8_t		max_arrays;
-	uint8_t		max_lds;
-
-	char		product_name[80];
-	char		serial_no[32];
-
-	/*
-	 * Other physical/controller/operation information. Indicates the
-	 * presence of the hardware
-	 */
-	struct {
-
-		uint32_t	bbu		: 1;
-		uint32_t	alarm		: 1;
-		uint32_t	nvram		: 1;
-		uint32_t	uart		: 1;
-		uint32_t	reserved	: 28;
-
-	} __attribute__ ((packed)) hw_present;
-
-	uint32_t	current_fw_time;
-
-	/*
-	 * Maximum data transfer sizes
-	 */
-	uint16_t	max_concurrent_cmds;
-	uint16_t	max_sge_count;
-	uint32_t	max_request_size;
-
-	/*
-	 * Logical and physical device counts
-	 */
-	uint16_t	ld_present_count;
-	uint16_t	ld_degraded_count;
-	uint16_t	ld_offline_count;
-
-	uint16_t	pd_present_count;
-	uint16_t	pd_disk_present_count;
-	uint16_t	pd_disk_pred_failure_count;
-	uint16_t	pd_disk_failed_count;
-
-	/*
-	 * Memory size information
-	 */
-	uint16_t	nvram_size;
-	uint16_t	memory_size;
-	uint16_t	flash_size;
-
-	/*
-	 * Error counters
-	 */
-	uint16_t	mem_correctable_error_count;
-	uint16_t	mem_uncorrectable_error_count;
-
-	/*
-	 * Cluster information
-	 */
-	uint8_t		cluster_permitted;
-	uint8_t		cluster_active;
-	uint8_t		reserved_1[2];
-
-	/*
-	 * Controller capabilities structures
-	 */
-	struct {
-
-		uint32_t	raid_level_0	: 1;
-		uint32_t	raid_level_1	: 1;
-		uint32_t	raid_level_5	: 1;
-		uint32_t	raid_level_1E	: 1;
-		uint32_t	reserved	: 28;
-
-	} __attribute__ ((packed)) raid_levels;
-
-	struct {
-
-		uint32_t	rbld_rate		: 1;
-		uint32_t	cc_rate			: 1;
-		uint32_t	bgi_rate		: 1;
-		uint32_t	recon_rate		: 1;
-		uint32_t	patrol_rate		: 1;
-		uint32_t	alarm_control		: 1;
-		uint32_t	cluster_supported	: 1;
-		uint32_t	bbu			: 1;
-		uint32_t	spanning_allowed	: 1;
-		uint32_t	dedicated_hotspares	: 1;
-		uint32_t	revertible_hotspares	: 1;
-		uint32_t	foreign_config_import	: 1;
-		uint32_t	self_diagnostic		: 1;
-		uint32_t	reserved		: 19;
-
-	} __attribute__ ((packed)) adapter_operations;
-
-	struct {
-
-		uint32_t	read_policy	: 1;
-		uint32_t	write_policy	: 1;
-		uint32_t	io_policy	: 1;
-		uint32_t	access_policy	: 1;
-		uint32_t	reserved	: 28;
-
-	} __attribute__ ((packed)) ld_operations;
-
-	struct {
-
-		uint8_t		min;
-		uint8_t		max;
-		uint8_t		reserved[2];
-
-	} __attribute__ ((packed)) stripe_size_operations;
-
-	struct {
-
-		uint32_t	force_online	: 1;
-		uint32_t	force_offline	: 1;
-		uint32_t	force_rebuild	: 1;
-		uint32_t	reserved	: 29;
-
-	} __attribute__ ((packed)) pd_operations;
-
-	struct {
-
-		uint32_t	ctrl_supports_sas	: 1;
-		uint32_t	ctrl_supports_sata	: 1;
-		uint32_t	allow_mix_in_encl	: 1;
-		uint32_t	allow_mix_in_ld		: 1;
-		uint32_t	allow_sata_in_cluster	: 1;
-		uint32_t	reserved		: 27;
-
-	} __attribute__ ((packed)) pd_mix_support;
-
-	/*
-	 * Include the controller properties (changeable items)
-	 */
-	uint8_t				reserved_2[12];
-	struct megasas_ctrl_prop	properties;
-
-	uint8_t				pad[0x800 - 0x640];
-
-} __attribute__ ((packed));
-
-/*
- * ===============================
- * MegaRAID SAS driver definitions
- * ===============================
- */
-
-
-#define MEGADRV_MAX_NUM_CMD			1024
-
-#define MEGADRV_MAX_PD_CHANNELS			2
-#define MEGADRV_MAX_LD_CHANNELS			2
-#define MEGADRV_MAX_CHANNELS			(MEGADRV_MAX_PD_CHANNELS + \
-						MEGADRV_MAX_LD_CHANNELS)
-#define MEGADRV_MAX_DEV_PER_CHANNEL		128
-#define MEGADRV_DEFAULT_INIT_ID			-1
-#define MEGADRV_MAX_CMD_PER_LUN			1000
-#define MEGADRV_MAX_LUN				8
-#define MEGADRV_MAX_LD				64
-
-#define MEGADRV_RESET_WAIT_TIME			300
-#define	MEGADRV_RESET_NOTICE_INTERVAL		5
-
-/*
- * All MFI register set macros accept megasas_register_set*
- */
-#define RD_OB_MSG_0(regs)	readl((void*)(&(regs)->outbound_msg_0))
-#define WR_IN_MSG_0(v, regs)	writel((v),(void*)(&(regs)->inbound_msg_0))
-#define WR_IN_DOORBELL(v, regs)
writel((v),(void*)(&(regs)->inbound_doorbell))
-#define WR_IN_QPORT(v, regs)
writel((v),(void*)(&(regs)->inbound_queue_port))
-
-#define RD_OB_INTR_STATUS(regs)
readl((void*)(&(regs)->outbound_intr_status))
-#define WR_OB_INTR_STATUS(v, regs)
writel((v),(&(regs)->outbound_intr_status))
-
-/*
- * When FW is in MFI_STATE_READY or MFI_STATE_OPERATIONAL, the state data
- * of Outbound Msg Reg 0 indicates max concurrent cmds supported, max SGEs
- * supported per cmd and if 64-bit MFAs (M64) is enabled or disabled.
- */
-#define MFI_MAX_SUPP_CMDS(regs)	((RD_OB_MSG_0(regs)) & 0x00FFFF)
-#define MFI_MAX_SUPP_SGES(regs)	(((RD_OB_MSG_0(regs)) & 0x0FF0000)
>> 0x10)
-#define MFI_M64_ENABLED(regs)	((RD_OB_MSG_0(regs)) & 0x1000000)
-
-#define MFI_OB_INTR_STATUS_MASK		0x00000002
-#define MFI_POLL_TIMEOUT_SECS		10
-
-#define MFI_ENABLE_INTR(regs)
writel(1,(void*)(&(regs)->outbound_intr_mask))
-
-#define MFI_DISABLE_INTR(regs)						\
-{									\
-	uint32_t disable = ~0x00000001;					\
-	uint32_t mask = readl((void*)(&(regs)->outbound_intr_mask));	\
-	mask &= disable;						\
-	writel(mask, (void*)(&(regs)->outbound_intr_mask));		\
-}
-
-
-struct megasas_register_set {
-
-	uint32_t	reserved_0[4];			/*0000h*/
-
-	uint32_t	inbound_msg_0;			/*0010h*/
-	uint32_t	inbound_msg_1;			/*0014h*/
-	uint32_t	outbound_msg_0;			/*0018h*/
-	uint32_t	outbound_msg_1;			/*001Ch*/
-
-	uint32_t	inbound_doorbell;		/*0020h*/
-	uint32_t	inbound_intr_status;		/*0024h*/
-	uint32_t	inbound_intr_mask;		/*0028h*/
-
-	uint32_t	outbound_doorbell;		/*002Ch*/
-	uint32_t	outbound_intr_status;		/*0030h*/
-	uint32_t	outbound_intr_mask;		/*0034h*/
-
-	uint32_t	reserved_1[2];			/*0038h*/
-
-	uint32_t	inbound_queue_port;		/*0040h*/
-	uint32_t	outbound_queue_port;		/*0044h*/
-
-	uint32_t	reserved_2;			/*004Ch*/
-
-	uint32_t	index_registers[1004];		/*0050h*/
-
-} __attribute__ ((packed));
-
-struct megasas_sge32 {
-
-	uint32_t	phys_addr;
-	uint32_t	length;
-
-} __attribute__ ((packed));
-
-struct megasas_sge64 {
-
-	uint64_t	phys_addr;
-	uint32_t	length;
-
-} __attribute__ ((packed));
-
-union megasas_sgl {
-
-	struct megasas_sge32	sge32[1];
-	struct megasas_sge64	sge64[1];
-
-} __attribute__ ((packed));
-
-struct megasas_header {
-
-	uint8_t		cmd;				/*00h*/
-	uint8_t		sense_len;			/*01h*/
-	uint8_t		cmd_status;			/*02h*/
-	uint8_t		scsi_status;			/*03h*/
-
-	uint8_t		target_id;			/*04h*/
-	uint8_t		lun;				/*05h*/
-	uint8_t		cdb_len;			/*06h*/
-	uint8_t		sge_count;			/*07h*/
-
-	uint32_t	context;			/*08h*/
-	uint32_t	pad_0;				/*0Ch*/
-
-	uint16_t	flags;				/*10h*/
-	uint16_t	timeout;			/*12h*/
-	uint32_t	data_xferlen;			/*14h*/
-
-} __attribute__ ((packed));
-
-union megasas_sgl_frame {
-
-	struct megasas_sge32	sge32[8];
-	struct megasas_sge64	sge64[5];
-
-} __attribute__ ((packed));
-
-struct megasas_init_frame {
-
-	uint8_t		cmd;				/*00h*/
-	uint8_t		reserved_0;			/*01h*/
-	uint8_t		cmd_status;			/*02h*/
-
-	uint8_t		reserved_1;			/*03h*/
-	uint32_t	reserved_2;			/*04h*/
-
-	uint32_t	context;			/*08h*/
-	uint32_t	pad_0;				/*0Ch*/
-
-	uint16_t	flags;				/*10h*/
-	uint16_t	reserved_3;			/*12h*/
-	uint32_t	data_xfer_len;			/*14h*/
-
-	uint32_t	queue_info_new_phys_addr_lo;	/*18h*/
-	uint32_t	queue_info_new_phys_addr_hi;	/*1Ch*/
-	uint32_t	queue_info_old_phys_addr_lo;	/*20h*/
-	uint32_t	queue_info_old_phys_addr_hi;	/*24h*/
-
-	uint32_t	reserved_4[6];			/*28h*/
-
-} __attribute__ ((packed));
-
-struct megasas_init_queue_info {
-
-	uint32_t	init_flags;			/*00h*/
-	uint32_t	reply_queue_entries;		/*04h*/
-
-	uint32_t	reply_queue_start_phys_addr_lo;	/*08h*/
-	uint32_t	reply_queue_start_phys_addr_hi;	/*0Ch*/
-	uint32_t	producer_index_phys_addr_lo;	/*10h*/
-	uint32_t	producer_index_phys_addr_hi;	/*14h*/
-	uint32_t	consumer_index_phys_addr_lo;	/*18h*/
-	uint32_t	consumer_index_phys_addr_hi;	/*1Ch*/
-
-} __attribute__ ((packed));
-
-struct megasas_io_frame {
-
-	uint8_t			cmd;			/*00h*/
-	uint8_t			sense_len;		/*01h*/
-	uint8_t			cmd_status;		/*02h*/
-	uint8_t			scsi_status;		/*03h*/
-
-	uint8_t			target_id;		/*04h*/
-	uint8_t			access_byte;		/*05h*/
-	uint8_t			reserved_0;		/*06h*/
-	uint8_t			sge_count;		/*07h*/
-
-	uint32_t		context;		/*08h*/
-	uint32_t		pad_0;			/*0Ch*/
-
-	uint16_t		flags;			/*10h*/
-	uint16_t		timeout;		/*12h*/
-	uint32_t		lba_count;		/*14h*/
-
-	uint32_t		sense_buf_phys_addr_lo;	/*18h*/
-	uint32_t		sense_buf_phys_addr_hi;	/*1Ch*/
-
-	unsigned long		start_lba_lo;		/*20h*/
-	unsigned long		start_lba_hi;		/*24h*/
-
-	union megasas_sgl	sgl;			/*28h*/
-
-} __attribute__ ((packed));
-
-struct megasas_pthru_frame {
-
-	uint8_t			cmd;				/*00h*/
-	uint8_t			sense_len;			/*01h*/
-	uint8_t			cmd_status;			/*02h*/
-	uint8_t			scsi_status;			/*03h*/
-
-	uint8_t			target_id;			/*04h*/
-	uint8_t			lun;				/*05h*/
-	uint8_t			cdb_len;			/*06h*/
-	uint8_t			sge_count;			/*07h*/
-
-	uint32_t		context;			/*08h*/
-	uint32_t		pad_0;				/*0Ch*/
-
-	uint16_t		flags;				/*10h*/
-	uint16_t		timeout;			/*12h*/
-	uint32_t		data_xfer_len;			/*14h*/
-
-	uint32_t		sense_buf_phys_addr_lo;		/*18h*/
-	uint32_t		sense_buf_phys_addr_hi;		/*1Ch*/
-
-	uint8_t			cdb[16];			/*20h*/
-	union megasas_sgl	sgl;				/*30h*/
-
-} __attribute__ ((packed));
-
-struct megasas_dcmd_frame {
-
-	uint8_t			cmd;				/*00h*/
-	uint8_t			reserved_0;			/*01h*/
-	uint8_t			cmd_status;			/*02h*/
-	uint8_t			reserved_1[4];			/*03h*/
-	uint8_t			sge_count;			/*07h*/
-
-	uint32_t		context;			/*08h*/
-	uint32_t		pad_0;				/*0Ch*/
-
-	uint16_t		flags;				/*10h*/
-	uint16_t		timeout;			/*12h*/
-
-	uint32_t		data_xfer_len;			/*14h*/
-	uint32_t		opcode;				/*18h*/
-
-	uint8_t			mbox[12];			/*1Ch*/
-
-	union megasas_sgl	sgl;				/*28h*/
-
-} __attribute__ ((packed));
-
-struct megasas_abort_frame {
-
-	uint8_t		cmd;				/*00h*/
-	uint8_t		reserved_0;			/*01h*/
-	uint8_t		cmd_status;			/*02h*/
-
-	uint8_t		reserved_1;			/*03h*/
-	uint32_t	reserved_2;			/*04h*/
-
-	uint32_t	context;			/*08h*/
-	uint32_t	pad_0;				/*0Ch*/
-
-	uint16_t	flags;				/*10h*/
-	uint16_t	reserved_3;			/*12h*/
-	uint32_t	reserved_4;			/*14h*/
-
-	uint32_t	abort_context;			/*18h*/
-	uint32_t	pad_1;				/*1Ch*/
-
-	uint32_t	abort_mfi_phys_addr_lo;		/*20h*/
-	uint32_t	abort_mfi_phys_addr_hi;		/*24h*/
-
-	uint32_t	reserved_5[6];			/*28h*/
-
-} __attribute__ ((packed));
-
-struct megasas_smp_frame {
-
-	uint8_t			cmd;				/*00h*/
-	uint8_t			reserved_1;			/*01h*/
-	uint8_t			cmd_status;			/*02h*/
-	uint8_t			connection_status;		/*03h*/
-
-	uint8_t			reserved_2[3];			/*04h*/
-	uint8_t			sge_count;			/*07h*/
-
-	uint32_t		context;			/*08h*/
-	uint32_t		pad_0;				/*0Ch*/
-
-	uint16_t		flags;				/*10h*/
-	uint16_t		timeout;			/*12h*/
-
-	uint32_t		data_xfer_len;			/*14h*/
-
-	uint8_t			phy_id;				/*18h*/
-	uint8_t			port_id;			/*19h*/
-	uint8_t			connection_rate;		/*1Ah*/
-	uint8_t			reserved_3;			/*1Bh*/
-
-	uint32_t		reserved_4;			/*1Ch*/
-
-	uint64_t		sas_addr;			/*20h*/
-
-	union megasas_sgl	request_sgl;			/*28h*/
-	union megasas_sgl	response_sgl;
-
-} __attribute__ ((packed));
-
-union megasas_frame {
-
-	struct megasas_header		hdr;
-	struct megasas_init_frame	init;
-	struct megasas_io_frame		io;
-	struct megasas_pthru_frame	pthru;
-	struct megasas_dcmd_frame	dcmd;
-	struct megasas_abort_frame	abort;
-	struct megasas_smp_frame	smp;
-
-	uint8_t				raw_bytes[64];
-
-};
-
-struct megasas_cmd;
-
-union megasas_evt_class_locale {
-
-	struct {
-		uint16_t		locale;
-		uint8_t			reserved;
-		int8_t			class;
-	} __attribute__ ((packed)) members;
-
-	uint32_t			word;
-
-} __attribute__ ((packed));
-
-struct megasas_evt_log_info {
-	uint32_t		newest_seq_num;
-	uint32_t		oldest_seq_num;
-	uint32_t		clear_seq_num;
-	uint32_t		shutdown_seq_num;
-	uint32_t		boot_seq_num;
-
-} __attribute__ ((packed));
-
-struct megasas_progress {
-
-	uint16_t	progress;
-	uint16_t	elapsed_seconds;
-
-} __attribute__ ((packed));
-
-struct megasas_evtarg_ld {
-
-	uint16_t	target_id;
-	uint8_t		ld_index;
-	uint8_t		reserved;
-
-} __attribute__ ((packed));
-
-struct megasas_evtarg_pd {
-	uint16_t	device_id;
-	uint8_t		encl_index;
-	uint8_t		slot_number;
-
-} __attribute__ ((packed));
-
-struct megasas_evt_detail {
-
-	uint32_t				seq_num;
-	uint32_t				time_stamp;
-	uint32_t				code;
-	union megasas_evt_class_locale		cl;
-	uint8_t					arg_type;
-	uint8_t					reserved1[15];
-
-	union {
-		struct {
-			struct megasas_evtarg_pd	pd;
-			uint8_t				cdb_length;
-			uint8_t				sense_length;
-			uint8_t				reserved[2];
-			uint8_t				cdb[16];
-			uint8_t				sense[64];
-		} __attribute__ ((packed)) cdbSense;
-
-		struct megasas_evtarg_ld		ld;
-
-	        struct {
-			struct megasas_evtarg_ld	ld;
-			uint64_t			count;
-		} __attribute__ ((packed)) ld_count;
-
-		struct {
-			uint64_t			lba;
-			struct megasas_evtarg_ld	ld;
-		} __attribute__ ((packed)) ld_lba;
-
-		struct {
-			struct megasas_evtarg_ld	ld;
-			uint32_t			prevOwner;
-			uint32_t			newOwner;
-		} __attribute__ ((packed)) ld_owner;
-
-		struct {
-			uint64_t			ld_lba;
-			uint64_t			pd_lba;
-			struct megasas_evtarg_ld	ld;
-			struct megasas_evtarg_pd	pd;
-		} __attribute__ ((packed)) ld_lba_pd_lba;
-
-		struct {
-			struct megasas_evtarg_ld	ld;
-			struct megasas_progress		prog;
-		} __attribute__ ((packed)) ld_prog;
-
-		struct {
-			struct megasas_evtarg_ld	ld;
-			uint32_t			prev_state;
-			uint32_t			new_state;
-		} __attribute__ ((packed)) ld_state;
-
-		struct {
-			uint64_t			strip;
-			struct megasas_evtarg_ld	ld;
-		} __attribute__ ((packed)) ld_strip;
-
-		struct megasas_evtarg_pd	pd;
-
-		struct {
-			struct megasas_evtarg_pd	pd;
-			uint32_t			err;
-		} __attribute__ ((packed)) pd_err;
-
-		struct {
-			uint64_t			lba;
-			struct megasas_evtarg_pd	pd;
-		} __attribute__ ((packed)) pd_lba;
-
-		struct {
-			uint64_t			lba;
-			struct megasas_evtarg_pd	pd;
-			struct megasas_evtarg_ld	ld;
-		} __attribute__ ((packed)) pd_lba_ld;
-
-		struct {
-			struct megasas_evtarg_pd	pd;
-			struct megasas_progress		prog;
-		} __attribute__ ((packed)) pd_prog;
-
-		struct {
-			struct megasas_evtarg_pd	pd;
-			uint32_t			prevState;
-			uint32_t			newState;
-		} __attribute__ ((packed)) pd_state;
-
-		struct {
-			uint16_t		vendorId;
-			uint16_t		deviceId;
-			uint16_t		subVendorId;
-			uint16_t		subDeviceId;
-		} __attribute__ ((packed)) pci;
-
-		uint32_t			rate;
-		char				str[96];
-
-		struct {
-			uint32_t		rtc;
-			uint32_t		elapsedSeconds;
-		} __attribute__ ((packed)) time;
-
-		struct {
-			uint32_t		ecar;
-			uint32_t		elog;
-			char			str[64];
-		} __attribute__ ((packed)) ecc;
-
-		uint8_t				b[96];
-		uint16_t			s[48];
-		uint32_t			w[24];
-		uint64_t			d[12];
-	} args;
-
-	char					description[128];
-
-} __attribute__ ((packed));
-
-struct megasas_instance {
-
-	uint32_t				producer;
-	uint32_t				consumer;
-
-	uint32_t*				reply_queue;
-	dma_addr_t				reply_queue_phys_addr;
-
-	dma_addr_t				phys_addr;
-
-	unsigned long				base_addr;
-	struct megasas_register_set __iomem*	reg_set;
-
-	int8_t					init_id;
-	uint8_t					reserved[3];
-
-	uint16_t				max_num_sge;
-	uint16_t				max_fw_cmds;
-	uint32_t				max_sectors_per_req;
-
-	struct megasas_cmd*			cmd_list;
-	struct list_head			cmd_pool;
-	spinlock_t				cmd_pool_lock;
-	struct dma_pool*			frame_dma_pool;
-	struct dma_pool*			sense_dma_pool;
-
-	struct megasas_evt_detail		evt_detail;
-	struct megasas_cmd*			aen_cmd;
-
-	struct Scsi_Host*			host;
-	spinlock_t				lock;
-	spinlock_t*				host_lock;
-
-	wait_queue_head_t			int_cmd_wait_q;
-	wait_queue_head_t			abort_cmd_wait_q;
-
-	struct pci_dev*				pdev;
-	uint32_t				unique_id;
-};
-
-/*
- * Various conversion macros from SCSI command
- */
-#define SCP2HOST(scp)		(scp)->device->host	// to host
-#define SCP2HOSTDATA(scp)	SCP2HOST(scp)->hostdata	// to soft state
-#define SCP2CHANNEL(scp)	(scp)->device->channel	// to channel
-#define SCP2TARGET(scp)		(scp)->device->id	// to target
-#define SCP2LUN(scp)		(scp)->device->lun	// to LUN
-
-#define SCSIHOST2ADAP(host)	(((caddr_t *)(host->hostdata))[0])
-#define SCP2ADAPTER(scp)	(struct
megasas_instance*)SCSIHOST2ADAP(SCP2HOST(scp))
-
-#define MEGADRV_IS_LOGICAL(scp)
\
-	(SCP2CHANNEL(scp) < MEGADRV_MAX_PD_CHANNELS) ? 0 : 1
-
-#define MEGADRV_DEV_INDEX(inst, scp)					\
-	((SCP2CHANNEL(scp) % 2) * MEGADRV_MAX_DEV_PER_CHANNEL) +
SCP2TARGET(scp)
-
-struct megasas_cmd {
-
-	union megasas_frame*	frame;
-	dma_addr_t		frame_phys_addr;
-	uint8_t*		sense;
-	dma_addr_t		sense_phys_addr;
-
-	uint32_t		index;
-	uint8_t			sync_cmd;
-	uint8_t			cmd_status;
-	uint16_t		abort_aen;
-
-	struct list_head	list;
-	struct scsi_cmnd*	scmd;
-	uint32_t		frame_count;
-};
-
-#define MAX_MGMT_ADAPTERS			1024
-#define IOC_SIGNATURE				"LSILOGIC"
-
-#define IOC_CMD_FIRMWARE			0x0
-#define MR_DRIVER_IOCTL_COMMON			0xF0010000
-#define MR_DRIVER_IOCTL_DRIVER_VERSION		0xF0010100
-#define MR_DRIVER_IOCTL_PCI_INFORMATION		0xF0010200
-#define MR_DRIVER_IOCTL_MEGARAID_STATISTICS	0xF0010300
-
-#define MR_DRIVER_IOCTL_LINUX			0xF0040000
-#define MR_LINUX_GET_ADAPTER_COUNT		(MR_DRIVER_IOCTL_LINUX |
0x0100)
-#define MR_LINUX_GET_ADAPTER_MAP		(MR_DRIVER_IOCTL_LINUX |
0x0200)
-#define MR_LINUX_GET_AEN			(MR_DRIVER_IOCTL_LINUX |
0x0300)
-
-#define MR_MAX_SENSE_LENGTH			32
-
-struct iocpacket {
-
-	uint16_t		version;
-	uint16_t		controller_id;
-	uint8_t			signature[8];
-	uint32_t		reserved_1;
-	uint32_t		control_code;
-	uint32_t		reserved_2[2];
-	uint8_t			frame[64];
-	union megasas_sgl_frame	sgl_frame;
-	uint8_t			sense_buff[MR_MAX_SENSE_LENGTH];
-	uint8_t			data[1];
-
-} __attribute__ ((packed));
-
-struct megasas_mgmt_info {
-
-	uint16_t			count;
-	struct megasas_instance*	instance[MAX_MGMT_ADAPTERS];
-	uint16_t			map[MAX_MGMT_ADAPTERS];
-	int				max_index;
-};
-
-struct megasas_drv_ver {
-	uint8_t			signature[12];
-	uint8_t			os_name[16];
-	uint8_t			os_ver[12];
-	uint8_t			drv_name[20];
-	uint8_t			drv_ver[32];
-	uint8_t			drv_rel_date[20];
-
-} __attribute__ ((packed));
-
-#endif /*LSI_MEGARAID_SAS_H*/

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: [PATCH 2.6.12-rc4-mm1 1/4] megaraid_sas: updating the driver
  2005-05-16  6:51 [PATCH 2.6.12-rc4-mm1 1/4] megaraid_sas: updating the driver Bagalkote, Sreenivas
@ 2005-05-16 14:56 ` 'Christoph Hellwig'
  0 siblings, 0 replies; 2+ messages in thread
From: 'Christoph Hellwig' @ 2005-05-16 14:56 UTC (permalink / raw)
  To: Bagalkote, Sreenivas
  Cc: 'linux-scsi@vger.kernel.org',
	'linux-kernel@vger.kernel.org',
	'Matt_Domsch@Dell.com', Andrew Morton,
	'Christoph Hellwig', 'James Bottomley',
	Ju, Seokmann, Doelfel, Hardy

On Mon, May 16, 2005 at 02:51:22AM -0400, Bagalkote, Sreenivas wrote:
> Hello All,
> 
> Please review this update to the previously submitted megaraid_sas driver.
> I have adopted all the feedback received for the initial submission. Since
> most of the code is rearranged, I have split the patches into four parts - 
> the first two remove the original code and the second two add the new code.

As your driver is not in the scsi tree yet please send diff in future that
just apply against the scsi-misc tree.  Also please use a mailer that
doesn't mangle the patches.


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2005-05-16 14:56 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-16  6:51 [PATCH 2.6.12-rc4-mm1 1/4] megaraid_sas: updating the driver Bagalkote, Sreenivas
2005-05-16 14:56 ` 'Christoph Hellwig'

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox