Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Apr 2007 14:40:07 GMT
From:      Boris Samorodov <bsam@ipt.ru>
To:        freebsd-bugs@FreeBSD.org
Subject:   Re: kern/106488: [patch] [twa] twa driver out of date
Message-ID:  <200704131440.l3DEe7ci090274@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
The following reply was made to PR kern/106488; it has been noted by GNATS.

From: Boris Samorodov <bsam@ipt.ru>
To: bug-followup@FreeBSD.org,mandrews@bit0.com
Cc:  
Subject: Re: kern/106488: [patch] [twa] twa driver out of date
Date: Fri, 13 Apr 2007 18:39:27 +0400

 --=-=-=
 
 Well, /sys/modules/twa/Makefile and /sys/conf/files should also be
 changed, /sys/dev/twa/tw_cl_fwimg.c removed. For those who wish to
 test (and may be commit), here are instructions and unified diffs
 between 4.9.1 vendor version and the cvs tree:
 
 # cd /usr/src
 # patch < twa-7.x.diff
 (note for 6-x use twa-6.x.diff, tested at 6.2-STABLE)
 and remove /sys/dev/twa/tw_cl_fwimg.c file!
 
 Actually, both 7.x and 6.x patches are the same (may be minus lines
 drift), but the diffs for /sys/conf/files are not the same. ;-)
 
 Changes since previous version:
 
 . added support for 9000 PCIe series cards;
 . flashing stuff removed.
 
 WBR
 -- 
 bsam
 
 --=-=-=
 Content-Disposition: attachment; filename=twa-7.x.diff.bz2.uu
 Content-Description: 7.x patch
 
 begin 644 twa-7.x.diff.bz2
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
 1Q'\QK&#_\7<D4X4)!/96Q$``
 `
 end
 
 --=-=-=
 Content-Type: text/x-patch
 Content-Disposition: attachment; filename=twa-6.x.diff
 Content-Description: 6.x patch
 
 Index: sys/conf/files
 ===================================================================
 RCS file: /home/ncvs/src/sys/conf/files,v
 retrieving revision 1.1031.2.55
 diff -u -r1.1031.2.55 files
 --- sys/conf/files	10 Apr 2007 21:44:17 -0000	1.1031.2.55
 +++ sys/conf/files	13 Apr 2007 12:59:20 -0000
 @@ -945,7 +945,6 @@
  dev/tdfx/tdfx_linux.c		optional tdfx_linux tdfx compat_linux
  dev/tdfx/tdfx_pci.c		optional tdfx pci
  dev/trm/trm.c			optional trm
 -dev/twa/tw_cl_fwimg.c		optional twa
  dev/twa/tw_cl_init.c		optional twa
  dev/twa/tw_cl_intr.c		optional twa
  dev/twa/tw_cl_io.c		optional twa
 Index: sys/dev/twa/tw_cl.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl.h
 --- sys/dev/twa/tw_cl.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl.h	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -50,11 +51,6 @@
  #define TW_CLI_RESET_TIMEOUT_PERIOD	60 /* seconds */
  #define TW_CLI_MAX_RESET_ATTEMPTS	2
  
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -/* Number of chunks the fw image is broken into, while flashing. */
 -#define TW_CLI_NUM_FW_IMAGE_CHUNKS	500
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  /* Possible values of ctlr->state. */
  /* Initialization done, and controller is active. */
  #define TW_CLI_CTLR_STATE_ACTIVE		(1<<0)
 @@ -144,19 +140,6 @@
  							OSL & CL. */
  	struct tw_cli_req_context *req_ctxt_buf;/* pointer to the array of CL's
  						internal request context pkts */
 -
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	TW_UINT32		free_req_ids[TW_CL_MAX_SIMULTANEOUS_REQUESTS];
 -						/* Array of free req_id's */
 -	struct tw_cli_req_context *busy_reqs[TW_CL_MAX_SIMULTANEOUS_REQUESTS + 1];
 -				/* Array of busy reqs -- index is req_id */
 -	TW_UINT32		free_req_head;
 -	TW_UINT32		free_req_tail;
 -	TW_UINT32		num_free_req_ids;
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	struct tw_cl_command_packet *cmd_pkt_buf;/* ptr to array of cmd pkts */
  
  	TW_UINT64		cmd_pkt_phys;	/* phys addr of cmd_pkt_buf */
 @@ -171,11 +154,6 @@
  	/* Request queues and arrays. */
  	struct tw_cl_link	req_q_head[TW_CLI_Q_COUNT];
  
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	TW_VOID			*flash_dma_mem;	/* mem for flashing fw image */
 -	TW_UINT64		flash_dma_mem_phys;/* flash_dma_mem phys addr */
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  	TW_UINT8		*internal_req_data;/* internal req data buf */
  	TW_UINT64		internal_req_data_phys;/* phys addr of internal
  							req data buf */
 @@ -294,13 +272,6 @@
  {
  	struct tw_cli_ctlr_context	*ctlr = req->ctlr;
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q) ||
 -		((q_type == TW_CLI_PENDING_Q) &&
 -		(!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL))))
 -		return;
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock);
  	TW_CL_Q_INSERT_HEAD(&(ctlr->req_q_head[q_type]), &(req->link));
  	TW_CLI_Q_INSERT(ctlr, q_type);
 @@ -315,45 +286,6 @@
  {
  	struct tw_cli_ctlr_context	*ctlr = req->ctlr;
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q) ||
 -		((q_type == TW_CLI_PENDING_Q) &&
 -		(!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL))))
 -		return;
 -	if ((q_type == TW_CLI_FREE_Q) &&
 -		(!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL))) {
 -		TW_SYNC_HANDLE		sync_handle;
 -
 -		tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock);
 -		if (req->state == TW_CLI_REQ_STATE_COMPLETE) {
 -			if (ctlr->flags & TW_CL_DEFERRED_INTR_USED)
 -				tw_osl_sync_io_block(ctlr->ctlr_handle,
 -					&sync_handle);
 -		} else {
 -			if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED))
 -				tw_osl_sync_isr_block(ctlr->ctlr_handle,
 -					&sync_handle);
 -		}
 -		ctlr->free_req_ids[ctlr->free_req_tail] = req->request_id;
 -		ctlr->busy_reqs[req->request_id] = TW_CL_NULL;
 -		ctlr->free_req_tail = (ctlr->free_req_tail + 1) %
 -			(ctlr->max_simult_reqs - 1);
 -		ctlr->num_free_req_ids++;
 -
 -		if (req->state == TW_CLI_REQ_STATE_COMPLETE) {
 -			if (ctlr->flags & TW_CL_DEFERRED_INTR_USED)
 -				tw_osl_sync_io_unblock(ctlr->ctlr_handle,
 -					&sync_handle);
 -		} else {
 -			if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED))
 -				tw_osl_sync_isr_unblock(ctlr->ctlr_handle,
 -					&sync_handle);
 -		}
 -		tw_osl_free_lock(ctlr->ctlr_handle, ctlr->gen_lock);
 -		return;
 -	}
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock);
  	TW_CL_Q_INSERT_TAIL(&(ctlr->req_q_head[q_type]), &(req->link));
  	TW_CLI_Q_INSERT(ctlr, q_type);
 @@ -369,11 +301,6 @@
  	struct tw_cli_req_context	*req = TW_CL_NULL;
  	struct tw_cl_link		*link;
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q))
 -		return(req);
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock);
  	if ((link = TW_CL_Q_FIRST_ITEM(&(ctlr->req_q_head[q_type]))) !=
  		TW_CL_NULL) {
 @@ -394,13 +321,6 @@
  {
  	struct tw_cli_ctlr_context	*ctlr = req->ctlr;
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	if ((q_type == TW_CLI_BUSY_Q) || (q_type == TW_CLI_COMPLETE_Q) ||
 -		((q_type == TW_CLI_PENDING_Q) &&
 -		(!(req->flags & TW_CLI_REQ_FLAGS_INTERNAL))))
 -		return;
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	tw_osl_get_lock(ctlr->ctlr_handle, ctlr->gen_lock);
  	TW_CL_Q_REMOVE_ITEM(&(ctlr->req_q_head[q_type]), &(req->link));
  	TW_CLI_Q_REMOVE(ctlr, q_type);
 Index: sys/dev/twa/tw_cl_externs.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_externs.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_externs.h
 --- sys/dev/twa/tw_cl_externs.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_externs.h	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -50,18 +51,6 @@
  extern TW_INT8			*tw_cli_severity_string_table[];
  
  
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -
 -/* Functions in tw_cl_init.c */
 -
 -/* Flash bundled firmware image onto controller. */
 -extern TW_INT32	tw_cli_flash_firmware(struct tw_cli_ctlr_context *ctlr);
 -
 -/* Hard reset the controller. */
 -extern TW_INT32	tw_cli_hard_reset(struct tw_cli_ctlr_context *ctlr);
 -
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  /* Do controller initialization. */
  extern TW_INT32	tw_cli_start_ctlr(struct tw_cli_ctlr_context *ctlr);
  
 @@ -197,9 +186,6 @@
  /* Get a free CL internal request context packet. */
  extern struct tw_cli_req_context *
  	tw_cli_get_request(struct tw_cli_ctlr_context *ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	, struct tw_cl_req_packet *req_pkt
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  	);
  
  /* Notify OSL of controller info (fw/BIOS versions, etc.). */
 Index: sys/dev/twa/tw_cl_fwif.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_fwif.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_fwif.h
 --- sys/dev/twa/tw_cl_fwif.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_fwif.h	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -134,7 +135,6 @@
  
  
  /* Misc defines. */
 -#define TWA_BUNDLED_FW_VERSION_STRING	"3.02.00.004"
  #define TWA_SHUTDOWN_MESSAGE_CREDITS	0x001
  #define TWA_64BIT_SG_ADDRESSES		0x00000001
  #define TWA_EXTENDED_INIT_CONNECT	0x00000002
 @@ -152,8 +152,6 @@
  #define TWA_ARCH_ID_9K_X		0x6	/* 9000 PCI-X controllers */
  #define TWA_CTLR_FW_SAME_OR_NEWER	0x00000001
  #define TWA_CTLR_FW_COMPATIBLE		0x00000002
 -#define TWA_BUNDLED_FW_SAFE_TO_FLASH	0x00000004
 -#define TWA_CTLR_FW_RECOMMENDS_FLASH	0x00000008
  #define TWA_SENSE_DATA_LENGTH		18
  
  
 Index: sys/dev/twa/tw_cl_init.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_init.c,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_init.c
 --- sys/dev/twa/tw_cl_init.c	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_init.c	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -63,7 +64,8 @@
  {
  	if ((vendor_id == TW_CL_VENDOR_ID) &&
  		((device_id == TW_CL_DEVICE_ID_9K) ||
 -		(device_id == TW_CL_DEVICE_ID_9K_X)))
 +		 (device_id == TW_CL_DEVICE_ID_9K_X) ||
 +		 (device_id == TW_CL_DEVICE_ID_9K_E)))
  		return(TW_CL_TRUE);
  	return(TW_CL_FALSE);
  }
 @@ -113,6 +115,7 @@
  		break;
  
  	case TW_CL_DEVICE_ID_9K_X:
 +	case TW_CL_DEVICE_ID_9K_E:
  		switch(bar_type) {
  		case TW_CL_BAR_TYPE_IO:
  			*bar_num = 2;
 @@ -162,8 +165,6 @@
   *			non_dma_mem_size -- # of bytes of memory needed for
   *					non-DMA purposes
   *			dma_mem_size -- # of bytes of DMA'able memory needed
 - *			flash_dma_mem_size -- # of bytes of DMA'able memory
 - *					needed for firmware flash, if applicable
   *			per_req_dma_mem_size -- # of bytes of DMA'able memory
   *					needed per request, if applicable
   *			per_req_non_dma_mem_size -- # of bytes of memory needed
 @@ -178,15 +179,6 @@
  	TW_UINT32 flags, TW_INT32 device_id, TW_INT32 max_simult_reqs,
  	TW_INT32 max_aens, TW_UINT32 *alignment, TW_UINT32 *sg_size_factor,
  	TW_UINT32 *non_dma_mem_size, TW_UINT32 *dma_mem_size
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	, TW_UINT32 *flash_dma_mem_size
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -	, TW_UINT32 *per_req_dma_mem_size
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	, TW_UINT32 *per_req_non_dma_mem_size
 -#endif /* TW_OSL_N0N_DMA_MEM_ALLOC_PER_REQUEST */
  	)
  {
  	if (device_id == 0)
 @@ -211,20 +203,11 @@
  	 * the controller context, request packets (including the 1 needed for
  	 * CL internal requests), and event packets.
  	 */
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	*non_dma_mem_size = sizeof(struct tw_cli_ctlr_context) +
 -		(sizeof(struct tw_cli_req_context)) +
 -		(sizeof(struct tw_cl_event_packet) * max_aens);
 -	*per_req_non_dma_mem_size = sizeof(struct tw_cli_req_context);
 -
 -#else /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  
  	*non_dma_mem_size = sizeof(struct tw_cli_ctlr_context) +
  		(sizeof(struct tw_cli_req_context) * (max_simult_reqs + 1)) +
  		(sizeof(struct tw_cl_event_packet) * max_aens);
  
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  
  	/*
  	 * Total DMA'able memory needed is the sum total of memory needed for
 @@ -232,31 +215,10 @@
  	 * requests), and memory needed to hold the payload for internal
  	 * requests.
  	 */
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	*dma_mem_size = sizeof(struct tw_cl_command_packet) +
 -		TW_CLI_SECTOR_SIZE;
 -	*per_req_dma_mem_size = sizeof(struct tw_cl_command_packet);
 -
 -#else /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  
  	*dma_mem_size = (sizeof(struct tw_cl_command_packet) *
  		(max_simult_reqs + 1)) + (TW_CLI_SECTOR_SIZE);
  
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
 -
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -
 -	/* Memory needed to hold the firmware image while flashing. */
 -	*flash_dma_mem_size =
 -		((tw_cli_fw_img_size / TW_CLI_NUM_FW_IMAGE_CHUNKS) +
 -		511) & ~511;
 -/*		(TWA_SG_ELEMENT_SIZE_FACTOR(device_id) - 1)) &
 -		~(TWA_SG_ELEMENT_SIZE_FACTOR(device_id) - 1); */
 -
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  	return(0);
  }
  
 @@ -276,9 +238,6 @@
   *			non_dma_mem -- ptr to allocated non-DMA memory
   *			dma_mem -- ptr to allocated DMA'able memory
   *			dma_mem_phys -- physical address of dma_mem
 - *			flash_dma_mem -- ptr to allocated DMA'able memory
 - *				needed for firmware flash, if applicable
 - *			flash_dma_mem_phys -- physical address of flash_dma_mem
   * Output:		None
   * Return value:	0	-- success
   *			non-zero-- failure
 @@ -287,10 +246,6 @@
  tw_cl_init_ctlr(struct tw_cl_ctlr_handle *ctlr_handle, TW_UINT32 flags,
  	TW_INT32 device_id, TW_INT32 max_simult_reqs, TW_INT32 max_aens,
  	TW_VOID *non_dma_mem, TW_VOID *dma_mem, TW_UINT64 dma_mem_phys
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	, TW_VOID *flash_dma_mem,
 -	TW_UINT64 flash_dma_mem_phys
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  	)
  {
  	struct tw_cli_ctlr_context	*ctlr;
 @@ -319,10 +274,6 @@
  	}
  
  	if ((non_dma_mem == TW_CL_NULL) || (dma_mem == TW_CL_NULL)
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -		|| ((flags & TW_CL_FLASH_FIRMWARE) ?
 -		(flash_dma_mem == TW_CL_NULL) : TW_CL_FALSE)
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  		) {
  		tw_cl_create_event(ctlr_handle, TW_CL_FALSE,
  			TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 @@ -332,27 +283,14 @@
  		return(TW_OSL_ENOMEM);
  	}
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	tw_osl_memzero(non_dma_mem, sizeof(struct tw_cli_ctlr_context) +
 -		sizeof(struct tw_cli_req_context) +
 -		(sizeof(struct tw_cl_event_packet) * max_aens));
 -#else /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  	tw_osl_memzero(non_dma_mem, sizeof(struct tw_cli_ctlr_context) +
  		(sizeof(struct tw_cli_req_context) * (max_simult_reqs + 1)) +
  		(sizeof(struct tw_cl_event_packet) * max_aens));
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -	tw_osl_memzero(dma_mem,
 -		sizeof(struct tw_cl_command_packet) +
 -		TW_CLI_SECTOR_SIZE);
 -#else /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  	tw_osl_memzero(dma_mem,
  		(sizeof(struct tw_cl_command_packet) *
  		(max_simult_reqs + 1)) +
  		TW_CLI_SECTOR_SIZE);
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  
  	free_non_dma_mem = (TW_UINT8 *)non_dma_mem;
  
 @@ -369,11 +307,6 @@
  	ctlr->max_simult_reqs = max_simult_reqs + 1;
  	ctlr->max_aens_supported = max_aens;
  
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	ctlr->flash_dma_mem = flash_dma_mem;
 -	ctlr->flash_dma_mem_phys = flash_dma_mem_phys;
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  	/* Initialize queues of CL internal request context packets. */
  	tw_cli_req_q_init(ctlr, TW_CLI_FREE_Q);
  	tw_cli_req_q_init(ctlr, TW_CLI_BUSY_Q);
 @@ -397,7 +330,9 @@
  	 * with command register writes.
  	 */
  	if ((ctlr->flags & TW_CL_64BIT_ADDRESSES) &&
 -		(ctlr->device_id == TW_CL_DEVICE_ID_9K)) {
 +	    ((ctlr->device_id == TW_CL_DEVICE_ID_9K) ||
 +	     (ctlr->device_id == TW_CL_DEVICE_ID_9K_X) ||
 +	     (ctlr->device_id == TW_CL_DEVICE_ID_9K_E))) {
  		ctlr->state |= TW_CLI_CTLR_STATE_G66_WORKAROUND_NEEDED;
  		ctlr->intr_lock = ctlr->io_lock;
  	} else {
 @@ -410,9 +345,7 @@
  	ctlr->req_ctxt_buf = (struct tw_cli_req_context *)free_non_dma_mem;
  	free_non_dma_mem += (sizeof(struct tw_cli_req_context) *
  		(
 -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
  		max_simult_reqs +
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		1));
  
  	ctlr->cmd_pkt_buf = (struct tw_cl_command_packet *)dma_mem;
 @@ -421,59 +354,31 @@
  	ctlr->internal_req_data = (TW_UINT8 *)
  		(ctlr->cmd_pkt_buf +
  		(
 -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
  		max_simult_reqs +
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  		1));
  	ctlr->internal_req_data_phys = ctlr->cmd_pkt_phys +
  		(sizeof(struct tw_cl_command_packet) *
  		(
 -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
  		max_simult_reqs +
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  		1));
  
  	for (i = 0;
  		i < (
 -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
  		max_simult_reqs +
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		1); i++) {
  		req = &(ctlr->req_ctxt_buf[i]);
  
 -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
  		req->cmd_pkt = &(ctlr->cmd_pkt_buf[i]);
  		req->cmd_pkt_phys = ctlr->cmd_pkt_phys +
  			(i * sizeof(struct tw_cl_command_packet));
  
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  		req->request_id = i;
  		req->ctlr = ctlr;
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		req->flags |= TW_CLI_REQ_FLAGS_INTERNAL;
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
  		/* Insert request into the free queue. */
  		tw_cli_req_q_insert_tail(req, TW_CLI_FREE_Q);
  	}
  
 -
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	ctlr->free_req_head = i - 1;
 -	ctlr->free_req_tail = i - 1;
 -
 -	for (; i < (max_simult_reqs + 1); i++)
 -		ctlr->free_req_ids[i - 1] = i;
 -
 -	ctlr->num_free_req_ids = max_simult_reqs;
 -
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
 -
  	/* Initialize the AEN queue. */
  	ctlr->aen_queue = (struct tw_cl_event_packet *)free_non_dma_mem;
  
 @@ -517,317 +422,12 @@
  	return(error);
  }
  
 -
 -
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -/*
 - * Function name:	tw_cli_flash_firmware
 - * Description:		Flashes bundled firmware image onto controller.
 - *
 - * Input:		ctlr	-- ptr to per ctlr structure
 - * Output:		None
 - * Return value:	0	-- success
 - *			non-zero-- failure
 - */
 -TW_INT32
 -tw_cli_flash_firmware(struct tw_cli_ctlr_context *ctlr)
 -{
 -	struct tw_cli_req_context		*req;
 -	struct tw_cl_command_header		*cmd_hdr;
 -	struct tw_cl_command_download_firmware	*cmd;
 -	TW_UINT32				fw_img_chunk_size;
 -	TW_UINT32				num_chunks;
 -	TW_UINT32				this_chunk_size = 0;
 -	TW_INT32				remaining_img_size = 0;
 -	TW_INT32				hard_reset_needed = TW_CL_FALSE;
 -	TW_INT32				error = TW_OSL_EGENFAILURE;
 -	TW_UINT32				i;
 -
 -	tw_cli_dbg_printf(3, ctlr->ctlr_handle, tw_osl_cur_func(), "entered");
 -	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -		)) == TW_CL_NULL) {
 -		/* No free request packets available.  Can't proceed. */
 -		error = TW_OSL_EBUSY;
 -		goto out;
 -	}
 -
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = ctlr->cmd_pkt_buf;
 -	req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
 -	req->flags |= TW_CLI_REQ_FLAGS_INTERNAL;
 -	
 -	/*
 -	 * Determine amount of memory needed to hold a chunk of the
 -	 * firmware image.  As yet, the Download_Firmware command does not
 -	 * support SG elements that are ctlr->sg_size_factor multiples.  It
 -	 * requires them to be 512-byte multiples.
 -	 */
 -	fw_img_chunk_size = ((tw_cli_fw_img_size / TW_CLI_NUM_FW_IMAGE_CHUNKS) +
 -		511) & ~511;
 -/*		(ctlr->sg_size_factor - 1)) &
 -		~(ctlr->sg_size_factor - 1); */
 -
 -	/* Calculate the actual number of chunks needed. */
 -	num_chunks = (tw_cli_fw_img_size / fw_img_chunk_size) +
 -		((tw_cli_fw_img_size % fw_img_chunk_size) ? 1 : 0);
 -
 -	req->data = ctlr->flash_dma_mem;
 -	req->data_phys = ctlr->flash_dma_mem_phys;
 -
 -	remaining_img_size = tw_cli_fw_img_size;
 -
 -	cmd_hdr = &(req->cmd_pkt->cmd_hdr);
 -	cmd = &(req->cmd_pkt->command.cmd_pkt_7k.download_fw);
 -
 -	for (i = 0; i < num_chunks; i++) {
 -		/* Build a cmd pkt for downloading firmware. */
 -		tw_osl_memzero(req->cmd_pkt,
 -			sizeof(struct tw_cl_command_packet));
 -
 -		cmd_hdr->header_desc.size_header = 128;
 -
 -		/* sgl_offset (offset in dwords, to sg list) is 2. */
 -		cmd->sgl_off__opcode =
 -			BUILD_SGL_OFF__OPCODE(2, TWA_FW_CMD_DOWNLOAD_FIRMWARE);
 -		cmd->request_id = (TW_UINT8)(TW_CL_SWAP16(req->request_id));
 -		cmd->unit = 0;
 -		cmd->status = 0;
 -		cmd->flags = 0;
 -		cmd->param = TW_CL_SWAP16(8);	/* prom image */
 -
 -		if (i != (num_chunks - 1))
 -			this_chunk_size = fw_img_chunk_size;
 -		else	 /* last chunk */
 -			this_chunk_size = remaining_img_size;
 -	
 -		remaining_img_size -= this_chunk_size;
 -
 -		tw_osl_memcpy(req->data, tw_cli_fw_img + (i * fw_img_chunk_size),
 -			this_chunk_size);
 -
 -		/*
 -		 * The next line will effect only the last chunk.
 -		 */
 -		req->length = (this_chunk_size + 511) & ~511;
 -/*			(ctlr->sg_size_factor - 1)) &
 -			~(ctlr->sg_size_factor - 1); */
 -
 -		if (ctlr->flags & TW_CL_64BIT_ADDRESSES) {
 -			((struct tw_cl_sg_desc64 *)(cmd->sgl))[0].address =
 -				TW_CL_SWAP64(req->data_phys);
 -			((struct tw_cl_sg_desc64 *)(cmd->sgl))[0].length =
 -				TW_CL_SWAP32(req->length);
 -			cmd->size = 2 + 3;
 -		} else {
 -			((struct tw_cl_sg_desc32 *)(cmd->sgl))[0].address =
 -				TW_CL_SWAP32(req->data_phys);
 -			((struct tw_cl_sg_desc32 *)(cmd->sgl))[0].length =
 -				TW_CL_SWAP32(req->length);
 -			cmd->size = 2 + 2;
 -		}
 -
 -		error = tw_cli_submit_and_poll_request(req,
 -			TW_CLI_REQUEST_TIMEOUT_PERIOD);
 -		if (error) {
 -			tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -				TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -				0x1005, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -				"Firmware flash request could not be posted",
 -				"error = %d\n", error);
 -			if (error == TW_OSL_ETIMEDOUT)
 -				/* clean-up done by tw_cli_submit_and_poll_request */
 -				return(error);
 -			break;
 -		}
 -		error = cmd->status;
 -
 -		if (((i == (num_chunks - 1)) && (error)) ||
 -			((i != (num_chunks - 1)) &&
 -			((error = cmd_hdr->status_block.error) !=
 -			TWA_ERROR_MORE_DATA))) {
 -				/*
 -				 * It's either that download of the last chunk
 -				 * failed, or the download of one of the earlier
 -				 * chunks failed with an error other than
 -				 * TWA_ERROR_MORE_DATA.  Report the error.
 -				 */
 -				tw_cli_create_ctlr_event(ctlr,
 -					TW_CL_MESSAGE_SOURCE_CONTROLLER_ERROR,
 -					cmd_hdr);
 -				tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -					TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -					0x1006, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -					"Firmware flash failed",
 -					"cmd = 0x%x, chunk # %d, cmd status = %d",
 -					GET_OPCODE(cmd->sgl_off__opcode),
 -					i, cmd->status);
 -				/*
 -				 * Make a note to hard reset the controller,
 -				 * so that it doesn't wait for the remaining
 -				 * chunks.  Don't call the hard reset function
 -				 * right here, since we have committed to having
 -				 * only 1 active internal request at a time, and
 -				 * this request has not yet been freed.
 -				 */
 -				hard_reset_needed = TW_CL_TRUE;
 -				break;
 -		}
 -	} /* for */
 -
 -out:
 -	if (req)
 -		tw_cli_req_q_insert_tail(req, TW_CLI_FREE_Q);
 -
 -	if (hard_reset_needed)
 -		tw_cli_hard_reset(ctlr);
 -
 -	return(error);
 -}
 -
 -
 -
 -/*
 - * Function name:	tw_cli_hard_reset
 - * Description:		Hard resets the controller.
 - *
 - * Input:		ctlr	-- ptr to per ctlr structure
 - * Output:		None
 - * Return value:	0	-- success
 - *			non-zero-- failure
 - */
 -TW_INT32
 -tw_cli_hard_reset(struct tw_cli_ctlr_context *ctlr)
 -{
 -	struct tw_cli_req_context		*req;
 -	struct tw_cl_command_reset_firmware	*cmd;
 -	TW_INT32				error;
 -
 -	tw_cli_dbg_printf(3, ctlr->ctlr_handle, tw_osl_cur_func(), "entered");
 -
 -	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -		)) == TW_CL_NULL)
 -		return(TW_OSL_EBUSY);
 -
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = ctlr->cmd_pkt_buf;
 -	req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
 -	req->flags |= TW_CLI_REQ_FLAGS_INTERNAL;
 -
 -	/* Build a cmd pkt for sending down the hard reset command. */
 -	req->cmd_pkt->cmd_hdr.header_desc.size_header = 128;
 -	
 -	cmd = &(req->cmd_pkt->command.cmd_pkt_7k.reset_fw);
 -	cmd->res1__opcode =
 -		BUILD_RES__OPCODE(0, TWA_FW_CMD_HARD_RESET_FIRMWARE);
 -	cmd->size = 2;
 -	cmd->request_id = (TW_UINT8)(TW_CL_SWAP16(req->request_id));
 -	cmd->unit = 0;
 -	cmd->status = 0;
 -	cmd->flags = 0;
 -	cmd->param = 0;	/* don't reload FPGA logic */
 -
 -	req->data = TW_CL_NULL;
 -	req->length = 0;
 -
 -	tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -		TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -		0x1017, 0x3, TW_CL_SEVERITY_INFO_STRING,
 -		"Issuing hard (commanded) reset to the controller...",
 -		" ");
 -
 -	error = tw_cli_submit_and_poll_request(req,
 -		TW_CLI_REQUEST_TIMEOUT_PERIOD);
 -	if (error) {
 -		tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -			TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -			0x1007, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -			"Hard reset request could not be posted",
 -			"error = %d", error);
 -		if (error == TW_OSL_ETIMEDOUT)
 -			/* clean-up done by tw_cli_submit_and_poll_request */
 -			return(error);
 -		goto out;
 -	}
 -	if ((error = cmd->status)) {
 -		tw_cli_create_ctlr_event(ctlr,
 -			TW_CL_MESSAGE_SOURCE_CONTROLLER_ERROR,
 -			&(req->cmd_pkt->cmd_hdr));
 -		tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -			TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -			0x1008, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -			"Hard reset request failed",
 -			"error = %d", error);
 -	}
 -
 -	if (ctlr->device_id == TW_CL_DEVICE_ID_9K_X) {
 -		/*
 -		 * There's a hardware bug in the G133 ASIC, which can lead to
 -		 * PCI parity errors and hangs, if the host accesses any
 -		 * registers when the firmware is resetting the hardware, as
 -		 * part of a hard/soft reset.  The window of time when the
 -		 * problem can occur is about 10 ms.  Here, we will handshake
 -		 * with the firmware to find out when the firmware is pulling
 -		 * down the hardware reset pin, and wait for about 500 ms to
 -		 * make sure we don't access any hardware registers (for
 -		 * polling) during that window.
 -		 */
 -		ctlr->state |= TW_CLI_CTLR_STATE_RESET_PHASE1_IN_PROGRESS;
 -		while (tw_cli_find_response(ctlr,
 -			TWA_RESET_PHASE1_NOTIFICATION_RESPONSE) != TW_OSL_ESUCCESS)
 -			tw_osl_delay(10);
 -		tw_osl_delay(TWA_RESET_PHASE1_WAIT_TIME_MS * 1000);
 -		ctlr->state &= ~TW_CLI_CTLR_STATE_RESET_PHASE1_IN_PROGRESS;
 -	}
 -
 -	/* Wait for the MC_RDY bit to get set. */
 -	if ((error = tw_cli_poll_status(ctlr, TWA_STATUS_MICROCONTROLLER_READY,
 -			TW_CLI_RESET_TIMEOUT_PERIOD))) {
 -		tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -			TW_CL_MESSAGE_SOURCE_COMMON_LAYER_EVENT,
 -			0x1018, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -			"Micro-ctlr not ready following hard reset",
 -			"error = %d", error);
 -	}
 -
 -out:
 -	if (req)
 -		tw_cli_req_q_insert_tail(req, TW_CLI_FREE_Q);
 -	return(error);
 -}
 -
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
 -
 -
  /*
   * Function name:	tw_cli_start_ctlr
   * Description:		Establishes a logical connection with the controller.
 - *			If bundled with firmware, determines whether or not
 - *			to flash firmware, based on arch_id, fw SRL (Spec.
 - *			Revision Level), branch & build #'s.  Also determines
 - *			whether or not the driver is compatible with the
 - *			firmware on the controller, before proceeding to work
 - *			with it.
 + *			Determines whether or not the driver is compatible 
 + *                      with the firmware on the controller, before proceeding
 + *                      to work with it.
   *
   * Input:		ctlr	-- ptr to per ctlr structure
   * Output:		None
 @@ -843,10 +443,6 @@
  	TW_UINT16	fw_on_ctlr_build = 0;
  	TW_UINT32	init_connect_result = 0;
  	TW_INT32	error = TW_OSL_ESUCCESS;
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	TW_INT8		fw_flashed = TW_CL_FALSE;
 -	TW_INT8		fw_flash_failed = TW_CL_FALSE;
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  
  	tw_cli_dbg_printf(3, ctlr->ctlr_handle, tw_osl_cur_func(), "entered");
  
 @@ -887,67 +483,9 @@
  			"error = %d", error);
  		return(error);
  	}
 -
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -
 -	if ((ctlr->flags & TW_CL_FLASH_FIRMWARE) &&
 -		(init_connect_result & TWA_BUNDLED_FW_SAFE_TO_FLASH) &&
 -		(init_connect_result & TWA_CTLR_FW_RECOMMENDS_FLASH)) {
 -		/*
 -		 * The bundled firmware is safe to flash, and the firmware
 -		 * on the controller recommends a flash.  So, flash!
 -		 */
 -		tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -			TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -			0x100C, 0x3, TW_CL_SEVERITY_INFO_STRING,
 -			"Flashing bundled firmware...",
 -			" ");
 -		if ((error = tw_cli_flash_firmware(ctlr))) {
 -			fw_flash_failed = TW_CL_TRUE;
 -			tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -				TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -				0x100D, 0x2, TW_CL_SEVERITY_WARNING_STRING,
 -				"Unable to flash bundled firmware. "
 -				"Attempting to work with fw on ctlr...",
 -				" ");
 -		} else {
 -			tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -				TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -				0x100E, 0x3, TW_CL_SEVERITY_INFO_STRING,
 -				"Successfully flashed bundled firmware",
 -				" ");
 -			fw_flashed = TW_CL_TRUE;
 -		}
 -	}
 -
 -	if (fw_flashed) {
 -		/* The firmware was flashed.  Have the new image loaded */
 -		error = tw_cli_hard_reset(ctlr);
 -		if (error)
 -			tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
 -				TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -				0x100F, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -				"Could not reset controller after flash!",
 -				" ");
 -		else	/* Go through initialization again. */
 -			error = tw_cli_start_ctlr(ctlr);
 -		/*
 -		 * If hard reset of controller failed, we need to return.
 -		 * Otherwise, the above recursive call to tw_cli_start_ctlr
 -		 * will have completed the rest of the initialization (starting
 -		 * from tw_cli_drain_aen_queue below).  Don't do it again.
 -		 * Just return.
 -		 */
 -		return(error);
 -	} else
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  	{
 -		/*
 -		 * Either we are not bundled with a firmware image, or
 -		 * the bundled firmware is not safe to flash,
 -		 * or flash failed for some reason.  See if we can at
 -		 * least work with the firmware on the controller in the
 -		 * current mode.
 +		 /* See if we can at least work with the firmware on the
 +                 * controller in the current mode.
  		 */
  		if (init_connect_result & TWA_CTLR_FW_COMPATIBLE) {
  			/* Yes, we can.  Make note of the operating mode. */
 @@ -965,8 +503,7 @@
  		} else {
  			/*
  			 * No, we can't.  See if we can at least work with
 -			 * it in the base mode.  We should never come here
 -			 * if firmware has just been flashed.
 +			 * it in the base mode.
  			 */
  			tw_cl_create_event(ctlr->ctlr_handle, TW_CL_FALSE,
  				TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 @@ -999,28 +536,6 @@
  				 * compatible with our base mode.  We cannot
  				 * work with it.  Bail...
  				 */
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -				if (fw_flash_failed)
 -					tw_cl_create_event(ctlr->ctlr_handle,
 -					TW_CL_FALSE,
 -					TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -					0x1012, 0x1,
 -					TW_CL_SEVERITY_ERROR_STRING,
 -					"Incompatible firmware on controller"
 -					"...and could not flash bundled "
 -					"firmware",
 -					" ");
 -				else
 -					tw_cl_create_event(ctlr->ctlr_handle,
 -					TW_CL_FALSE,
 -					TW_CL_MESSAGE_SOURCE_COMMON_LAYER_ERROR,
 -					0x1013, 0x1,
 -					TW_CL_SEVERITY_ERROR_STRING,
 -					"Incompatible firmware on controller"
 -					"...and bundled firmware not safe to "
 -					"flash",
 -					" ");
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  				return(1);
  			}
  			/*
 @@ -1156,22 +671,9 @@
  
  	/* Get a request packet. */
  	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		)) == TW_CL_NULL)
  		goto out;
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = ctlr->cmd_pkt_buf;
 -	req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	req->flags |= TW_CLI_REQ_FLAGS_INTERNAL;
  
  	/* Build the cmd pkt. */
 Index: sys/dev/twa/tw_cl_intr.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_intr.c,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_intr.c
 --- sys/dev/twa/tw_cl_intr.c	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_intr.c	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -69,6 +70,10 @@
  
  	tw_cli_dbg_printf(10, ctlr_handle, tw_osl_cur_func(), "entered");
  
 +	/* If we don't have controller context, bail */
 +	if (ctlr == NULL)
 +		goto out;
 +
  	/*
  	 * Synchronize access between writes to command and control registers
  	 * in 64-bit environments, on G66.
 @@ -79,7 +84,7 @@
  	/* Read the status register to determine the type of interrupt. */
  	status_reg = TW_CLI_READ_STATUS_REGISTER(ctlr_handle);
  	if (tw_cli_check_ctlr_state(ctlr, status_reg))
 -		goto out;
 +		goto out_unlock;
  
  	/* Clear the interrupt. */
  	if (status_reg & TWA_STATUS_HOST_INTERRUPT) {
 @@ -114,10 +119,10 @@
  		ctlr->resp_intr_pending = 1;
  		rc |= TW_CL_TRUE; /* request for a deferred isr call */
  	}
 -out:
 +out_unlock:
  	if (ctlr->state & TW_CLI_CTLR_STATE_G66_WORKAROUND_NEEDED)
  		tw_osl_free_lock(ctlr_handle, ctlr->io_lock);
 -
 +out:
  	return(rc);
  }
  
 @@ -290,11 +295,6 @@
  
  		/* Response queue is not empty. */
  		resp = TW_CLI_READ_RESPONSE_QUEUE(ctlr->ctlr_handle);
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		if (GET_RESP_ID(resp) >= 1)
 -			req = ctlr->busy_reqs[GET_RESP_ID(resp)];
 -		else
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		{
  			req = &(ctlr->req_ctxt_buf[GET_RESP_ID(resp)]);
  		}
 @@ -322,13 +322,6 @@
  		req->state = TW_CLI_REQ_STATE_COMPLETE;
  		tw_cli_req_q_insert_tail(req, TW_CLI_COMPLETE_Q);
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		tw_osl_free_lock(ctlr->ctlr_handle, ctlr->intr_lock);
 -		/* Call the CL internal callback, if there's one. */
 -		if (req->tw_cli_callback)
 -			req->tw_cli_callback(req);
 -		tw_osl_get_lock(ctlr->ctlr_handle, ctlr->intr_lock);
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  	}
  
  	/* Unmask the response interrupt. */
 @@ -337,10 +330,8 @@
  
  	tw_osl_free_lock(ctlr->ctlr_handle, ctlr->intr_lock);
  
 -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
  	/* Complete this, and other requests in the complete queue. */
  	tw_cli_process_complete_queue(ctlr);
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  	
  	return(error);
  }
 Index: sys/dev/twa/tw_cl_io.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_io.c,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_io.c
 --- sys/dev/twa/tw_cl_io.c	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_io.c	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -96,9 +97,6 @@
  	}
  
  	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, req_pkt
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		)) == TW_CL_NULL) {
  		tw_cli_dbg_printf(2, ctlr_handle, tw_osl_cur_func(),
  			"Out of request context packets: returning busy");
 @@ -107,17 +105,6 @@
  	}
  
  	req_handle->cl_req_ctxt = req;
 -
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = req_pkt->dma_mem;
 -	req->cmd_pkt_phys = req_pkt->dma_mem_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	req->req_handle = req_handle;
  	req->orig_req = req_pkt;
  	req->tw_cli_callback = tw_cli_complete_io;
 @@ -184,23 +171,17 @@
  	TW_UINT32			status_reg;
  	TW_INT32			error;
  	TW_UINT8			notify_osl_of_ctlr_busy = TW_CL_FALSE;
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	TW_SYNC_HANDLE			sync_handle;
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  
  	tw_cli_dbg_printf(10, ctlr_handle, tw_osl_cur_func(), "entered");
  
  	/* Serialize access to the controller cmd queue. */
  	tw_osl_get_lock(ctlr_handle, ctlr->io_lock);
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	if (req->flags & TW_CLI_REQ_FLAGS_EXTERNAL) {
 -		if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED))
 -			tw_osl_sync_isr_block(ctlr_handle, &sync_handle);
 -	} else {
 -		if (ctlr->flags & TW_CL_DEFERRED_INTR_USED)
 -			tw_osl_sync_io_block(ctlr_handle, &sync_handle);
 -	}
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 +
 +	/* For 9650SE first write low 4 bytes */
 +	if (ctlr->device_id == TW_CL_DEVICE_ID_9K_E)
 +		tw_osl_write_reg(ctlr_handle,
 +				 TWA_COMMAND_QUEUE_OFFSET_LOW,
 +				 (TW_UINT32)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)), 4);
  
  	/* Check to see if we can post a command. */
  	status_reg = TW_CLI_READ_STATUS_REGISTER(ctlr_handle);
 @@ -215,10 +196,8 @@
  			"Cmd queue full");
  
  		if ((req->flags & TW_CLI_REQ_FLAGS_INTERNAL)
 -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
  			|| ((req_pkt) &&
  			(req_pkt->flags & TW_CL_REQ_RETRY_ON_BUSY))
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  			) {
  			if (req->state != TW_CLI_REQ_STATE_PENDING) {
  				tw_cli_dbg_printf(2, ctlr_handle,
 @@ -237,28 +216,31 @@
  		tw_cli_dbg_printf(10, ctlr_handle, tw_osl_cur_func(),
  			"Submitting command");
  
 -		/*
 -		 * The controller cmd queue is not full.  Mark the request as
 -		 * currently being processed by the firmware, and move it into
 -		 * the busy queue.  Then submit the cmd.
 -		 */
 +		/* Insert command into busy queue */
  		req->state = TW_CLI_REQ_STATE_BUSY;
  		tw_cli_req_q_insert_tail(req, TW_CLI_BUSY_Q);
 -		TW_CLI_WRITE_COMMAND_QUEUE(ctlr_handle,
 -			req->cmd_pkt_phys +
 -			sizeof(struct tw_cl_command_header));
 -	}
  
 -out:
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	if (req->flags & TW_CLI_REQ_FLAGS_EXTERNAL) {
 -		if (!(ctlr->flags & TW_CL_DEFERRED_INTR_USED))
 -			tw_osl_sync_isr_unblock(ctlr_handle, &sync_handle);
 -	} else {
 -		if (ctlr->flags & TW_CL_DEFERRED_INTR_USED)
 -			tw_osl_sync_io_unblock(ctlr_handle, &sync_handle);
 +		if (ctlr->device_id == TW_CL_DEVICE_ID_9K_E) {
 +			/* Now write the high 4 bytes */
 +			tw_osl_write_reg(ctlr_handle, 
 +					 TWA_COMMAND_QUEUE_OFFSET_HIGH,
 +					 (TW_UINT32)(((TW_UINT64)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)))>>32), 4);
 +		} else {
 +			if (ctlr->flags & TW_CL_64BIT_ADDRESSES) {
 +				/* First write the low 4 bytes, then the high 4. */
 +				tw_osl_write_reg(ctlr_handle,
 +						 TWA_COMMAND_QUEUE_OFFSET_LOW,
 +						 (TW_UINT32)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)), 4);
 +				tw_osl_write_reg(ctlr_handle, 
 +						 TWA_COMMAND_QUEUE_OFFSET_HIGH,
 +						 (TW_UINT32)(((TW_UINT64)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)))>>32), 4);
 +			} else
 +				tw_osl_write_reg(ctlr_handle, 
 +						 TWA_COMMAND_QUEUE_OFFSET,
 +						 (TW_UINT32)(req->cmd_pkt_phys + sizeof(struct tw_cl_command_header)), 4);
 +		}
  	}
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 +out:
  	tw_osl_free_lock(ctlr_handle, ctlr->io_lock);
  
  	if (status_reg & TWA_STATUS_COMMAND_QUEUE_FULL) {
 @@ -324,9 +306,6 @@
  	}
  
  	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, req_pkt
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		)) == TW_CL_NULL) {
  		tw_cli_dbg_printf(2, ctlr_handle, tw_osl_cur_func(),
  			"Out of request context packets: returning busy");
 @@ -335,17 +314,6 @@
  	}
  
  	req_handle->cl_req_ctxt = req;
 -
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = req_pkt->dma_mem;
 -	req->cmd_pkt_phys = req_pkt->dma_mem_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	req->req_handle = req_handle;
  	req->orig_req = req_pkt;
  	req->tw_cli_callback = tw_cli_complete_io;
 @@ -725,7 +693,7 @@
  			TWA_CURRENT_FW_BUILD(ctlr->arch_id);
  		comp_pkt.driver_srl_low = TWA_BASE_FW_SRL;
  		comp_pkt.driver_branch_low = TWA_BASE_FW_BRANCH;
 -		comp_pkt.driver_build_high = TWA_BASE_FW_BUILD;
 +		comp_pkt.driver_build_low = TWA_BASE_FW_BUILD;
  		comp_pkt.fw_on_ctlr_srl = ctlr->fw_on_ctlr_srl;
  		comp_pkt.fw_on_ctlr_branch = ctlr->fw_on_ctlr_branch;
  		comp_pkt.fw_on_ctlr_build = ctlr->fw_on_ctlr_build;
 @@ -781,9 +749,6 @@
  
  	/* Get a request packet. */
  	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		)) == TW_CL_NULL)
  		goto out;
  
 @@ -793,17 +758,6 @@
  		goto out;
  	}
  	ctlr->state |= TW_CLI_CTLR_STATE_INTERNAL_REQ_BUSY;
 -
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = ctlr->cmd_pkt_buf;
 -	req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	req->data = ctlr->internal_req_data;
  	req->data_phys = ctlr->internal_req_data_phys;
  	req->length = TW_CLI_SECTOR_SIZE;
 @@ -914,9 +868,6 @@
  
  	/* Get a request packet. */
  	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		)) == TW_CL_NULL)
  		goto out;
  
 @@ -926,17 +877,6 @@
  		goto out;
  	}
  	ctlr->state |= TW_CLI_CTLR_STATE_INTERNAL_REQ_BUSY;
 -
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = ctlr->cmd_pkt_buf;
 -	req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	req->data = ctlr->internal_req_data;
  	req->data_phys = ctlr->internal_req_data_phys;
  	req->length = TW_CLI_SECTOR_SIZE;
 @@ -1232,7 +1172,8 @@
  
  	TW_CLI_SOFT_RESET(ctlr_handle);
  
 -	if (ctlr->device_id == TW_CL_DEVICE_ID_9K_X) {
 +	if ((ctlr->device_id == TW_CL_DEVICE_ID_9K_X) ||
 +	    (ctlr->device_id == TW_CL_DEVICE_ID_9K_E)) {
  		/*
  		 * There's a hardware bug in the G133 ASIC, which can lead to
  		 * PCI parity errors and hangs, if the host accesses any
 @@ -1406,22 +1347,9 @@
  	tw_cli_dbg_printf(4, ctlr->ctlr_handle, tw_osl_cur_func(), "entered");
  
  	if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -		, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  		)) == TW_CL_NULL)
  		return(TW_OSL_EBUSY);
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	req->cmd_pkt = ctlr->cmd_pkt_buf;
 -	req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -	tw_osl_memzero(req->cmd_pkt,
 -		sizeof(struct tw_cl_command_header) +
 -		28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	req->flags |= TW_CLI_REQ_FLAGS_INTERNAL;
  	req->flags |= TW_CLI_REQ_FLAGS_9K;
  	req->tw_cli_callback = tw_cli_aen_callback;
 Index: sys/dev/twa/tw_cl_ioctl.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_ioctl.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_ioctl.h
 --- sys/dev/twa/tw_cl_ioctl.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_ioctl.h	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 Index: sys/dev/twa/tw_cl_misc.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_misc.c,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_misc.c
 --- sys/dev/twa/tw_cl_misc.c	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_misc.c	13 Apr 2007 12:59:20 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -314,24 +315,11 @@
  
  	for (;;) {
  		if ((req = tw_cli_get_request(ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -			, TW_CL_NULL
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  			)) == TW_CL_NULL) {
  			error = TW_OSL_EBUSY;
  			break;
  		}
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -		req->cmd_pkt = ctlr->cmd_pkt_buf;
 -		req->cmd_pkt_phys = ctlr->cmd_pkt_phys;
 -		tw_osl_memzero(req->cmd_pkt,
 -			sizeof(struct tw_cl_command_header) +
 -			28 /* max bytes before sglist */);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  		req->flags |= TW_CLI_REQ_FLAGS_INTERNAL;
  		req->tw_cli_callback = TW_CL_NULL;
  		if ((error = tw_cli_send_scsi_cmd(req,
 @@ -601,31 +589,12 @@
   */
  struct tw_cli_req_context *
  tw_cli_get_request(struct tw_cli_ctlr_context *ctlr
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	, struct tw_cl_req_packet *req_pkt
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  	)
  {
  	struct tw_cli_req_context	*req;
  
  	tw_cli_dbg_printf(4, ctlr->ctlr_handle, tw_osl_cur_func(), "entered");
  
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	if (req_pkt) {
 -		if (ctlr->num_free_req_ids == 0)
 -			return(TW_CL_NULL);
 -
 -		ctlr->num_free_req_ids--;
 -		req = (struct tw_cli_req_context *)(req_pkt->non_dma_mem);
 -		req->ctlr = ctlr;
 -		req->request_id = ctlr->free_req_ids[ctlr->free_req_head];
 -		ctlr->busy_reqs[req->request_id] = req;
 -		ctlr->free_req_head = (ctlr->free_req_head + 1) %
 -			(ctlr->max_simult_reqs - 1);
 -	} else
 -
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  	{
  		/* Get a free request packet. */
  		req = tw_cli_req_q_remove_head(ctlr, TW_CLI_FREE_Q);
 @@ -643,8 +612,6 @@
  		req->orig_req = TW_CL_NULL;
  		req->tw_cli_callback = TW_CL_NULL;
  
 -#ifndef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
  		/*
  		 * Look at the status field in the command packet to see how
  		 * it completed the last time it was used, and zero out only
 @@ -659,7 +626,6 @@
  			tw_osl_memzero(&(req->cmd_pkt->command),
  				28 /* max bytes before sglist */);
  
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  	}
  	return(req);
  }
 @@ -843,13 +809,14 @@
  		}
  
  		if (status_reg & TWA_STATUS_QUEUE_ERROR_INTERRUPT) {
 -			tw_cl_create_event(ctlr_handle, TW_CL_TRUE,
 -				TW_CL_MESSAGE_SOURCE_COMMON_LAYER_EVENT,
 -				0x1305, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 -				"Controller queue error: clearing... ",
 -				"status reg = 0x%x %s",
 -				status_reg,
 -				tw_cli_describe_bits(status_reg, desc));
 +			if (ctlr->device_id != TW_CL_DEVICE_ID_9K_E)
 +				tw_cl_create_event(ctlr_handle, TW_CL_TRUE,
 +						   TW_CL_MESSAGE_SOURCE_COMMON_LAYER_EVENT,
 +						   0x1305, 0x1, TW_CL_SEVERITY_ERROR_STRING,
 +						   "Controller queue error: clearing... ",
 +						   "status reg = 0x%x %s",
 +						   status_reg,
 +						   tw_cli_describe_bits(status_reg, desc));
  			TW_CLI_WRITE_CONTROL_REGISTER(ctlr->ctlr_handle,
  				TWA_CONTROL_CLEAR_QUEUE_ERROR);
  		}
 Index: sys/dev/twa/tw_cl_share.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_cl_share.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_cl_share.h
 --- sys/dev/twa/tw_cl_share.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_cl_share.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -45,9 +46,6 @@
   * and defined by CL.
   */
  
 -
 -#define TW_CL_VERSION_STRING		"1.00.01.011"
 -
  #define TW_CL_NULL			((TW_VOID *)0)
  #define TW_CL_TRUE			1
  #define TW_CL_FALSE			0
 @@ -55,6 +53,7 @@
  #define TW_CL_VENDOR_ID			0x13C1	/* 3ware vendor id */
  #define TW_CL_DEVICE_ID_9K		0x1002	/* 9000 PCI series device id */
  #define TW_CL_DEVICE_ID_9K_X		0x1003	/* 9000 PCI-X series device id */
 +#define TW_CL_DEVICE_ID_9K_E		0x1004  /* 9000 PCIe series device id */
  
  #define TW_CL_BAR_TYPE_IO		1	/* I/O base address */
  #define TW_CL_BAR_TYPE_MEM		2	/* memory base address */
 @@ -64,7 +63,7 @@
  #define TW_CL_MAX_NUM_UNITS		65	/* max # of units we support
  						-- enclosure target id is 64 */
  #else /* TW_OSL_ENCLOSURE_SUPPORT */
 -#define TW_CL_MAX_NUM_UNITS		16	/* max # of units we support */
 +#define TW_CL_MAX_NUM_UNITS		32	/* max # of units we support */
  #endif /* TW_OSL_ENCLOSURE_SUPPORT */
  
  #define TW_CL_MAX_NUM_LUNS		16	/* max # of LUN's we support */
 @@ -86,7 +85,6 @@
  #define TW_CL_64BIT_SG_LENGTH	(1<<1) /* 64 bit SG length */
  #define TW_CL_START_CTLR_ONLY	(1<<2) /* Start ctlr only */
  #define TW_CL_STOP_CTLR_ONLY	(1<<3) /* Stop ctlr only */
 -#define TW_CL_FLASH_FIRMWARE	(1<<4) /* Flash firmware */
  #define TW_CL_DEFERRED_INTR_USED (1<<5) /* OS Layer uses deferred intr */
  
  /* Possible error values from the Common Layer. */
 @@ -101,9 +99,7 @@
  
  
  /* Possible values of req_pkt->flags */
 -#ifndef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
  #define TW_CL_REQ_RETRY_ON_BUSY		(1<<0)
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
  #define TW_CL_REQ_CALLBACK_FOR_SGLIST	(1<<1)
  
  
 @@ -184,19 +180,6 @@
  			TW_UINT32 *num_sgl_entries);
  			/* OSL callback to get SG list. */
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	TW_VOID		*dma_mem;
 -	TW_UINT64	dma_mem_phys;
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	TW_VOID		*non_dma_mem;
 -
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	union {
  		struct tw_cl_scsi_req_packet		scsi_req; /* SCSI req */
  		struct tw_cl_passthru_req_packet	pt_req;/*Passthru req*/
 @@ -496,39 +479,6 @@
  extern TW_INT32	tw_osl_strlen(TW_VOID *str);
  #endif
  
 -
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -
 -#ifndef tw_osl_sync_io_block
 -/* Block new I/O requests from being sent by the OS Layer. */
 -extern TW_VOID	tw_osl_sync_io_block(struct tw_cl_ctlr_handle *ctlr_handle,
 -	TW_SYNC_HANDLE *sync_handle);
 -#endif
 -
 -
 -#ifndef tw_osl_sync_io_unblock
 -/* Allow new I/O requests from the OS Layer. */
 -extern TW_VOID	tw_osl_sync_io_unblock(struct tw_cl_ctlr_handle *ctlr_handle,
 -	TW_SYNC_HANDLE *sync_handle);
 -#endif
 -
 -
 -#ifndef tw_osl_sync_isr_block
 -/* Block the ISR from being called by the OS Layer. */
 -extern TW_VOID	tw_osl_sync_isr_block(struct tw_cl_ctlr_handle *ctlr_handle,
 -	TW_SYNC_HANDLE *sync_handle);
 -#endif
 -
 -
 -#ifndef tw_osl_sync_isr_unblock
 -/* Allow calls to the ISR from the OS Layer. */
 -extern TW_VOID	tw_osl_sync_isr_unblock(struct tw_cl_ctlr_handle *ctlr_handle,
 -	TW_SYNC_HANDLE *sync_handle);
 -#endif
 -
 -#endif /* TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST */
 -
 -
  #ifndef tw_osl_vsprintf
  /* Standard vsprintf. */
  extern TW_INT32	tw_osl_vsprintf(TW_INT8 *dest, const TW_INT8 *fmt, va_list ap);
 @@ -591,15 +541,6 @@
  	TW_INT32 device_id, TW_INT32 max_simult_reqs, TW_INT32 max_aens,
  	TW_UINT32 *alignment, TW_UINT32 *sg_size_factor,
  	TW_UINT32 *non_dma_mem_size, TW_UINT32 *dma_mem_size
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	, TW_UINT32 *flash_dma_mem_size
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -	, TW_UINT32 *per_req_dma_mem_size
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -#ifdef TW_OSL_NON_DMA_MEM_ALLOC_PER_REQUEST
 -	, TW_UINT32 *per_req_non_dma_mem_size
 -#endif /* TW_OSL_N0N_DMA_MEM_ALLOC_PER_REQUEST */
  	);
  
  
 @@ -613,9 +554,6 @@
  	TW_UINT32 flags, TW_INT32 device_id, TW_INT32 max_simult_reqs,
  	TW_INT32 max_aens, TW_VOID *non_dma_mem, TW_VOID *dma_mem,
  	TW_UINT64 dma_mem_phys
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	, TW_VOID *flash_dma_mem, TW_UINT64 flash_dma_mem_phys
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  	);
  
  
 Index: sys/dev/twa/tw_osl.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_osl.h
 --- sys/dev/twa/tw_osl.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_osl.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -133,11 +134,6 @@
  	TW_VOID			*non_dma_mem;
  	TW_VOID			*dma_mem;
  	TW_UINT64		dma_mem_phys;
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	TW_VOID			*flash_dma_mem;
 -	TW_UINT64		flash_dma_mem_phys;
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  
  	/* Request queues and arrays. */
  	struct tw_cl_link	req_q_head[TW_OSLI_Q_COUNT];
 @@ -164,10 +160,6 @@
  	bus_dma_tag_t		ioctl_tag; /* ioctl data buffer DMA tag */
  	bus_dmamap_t		cmd_map; /* DMA map for CL's DMA'able mem */
  	bus_dmamap_t		ioctl_map; /* DMA map for ioctl data buffers */
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	bus_dma_tag_t		flash_tag;/* DMA tag for CL's fw flash mem */
 -	bus_dmamap_t		flash_map;/* DMA map for CL's fw flash mem */
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  	struct resource		*irq_res;	/* interrupt resource */
  	TW_INT32		irq_res_id;	/* register resource id */
  	TW_VOID			*intr_handle;	/* interrupt handle */
 Index: sys/dev/twa/tw_osl_cam.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_cam.c,v
 retrieving revision 1.3.2.1
 diff -u -r1.3.2.1 tw_osl_cam.c
 --- sys/dev/twa/tw_osl_cam.c	7 Dec 2005 18:18:05 -0000	1.3.2.1
 +++ sys/dev/twa/tw_osl_cam.c	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -130,6 +131,7 @@
  			0x2102,
  			"Failed to register the bus",
  			ENXIO);
 +		mtx_unlock(&Giant);
  		return(ENXIO);
  	}
  
 @@ -147,6 +149,7 @@
  			0x2103,
  			"Failed to create path",
  			ENXIO);
 +		mtx_unlock(&Giant);
  		return(ENXIO);
  	}
  
 @@ -580,8 +583,11 @@
  	bzero(ccb, sizeof(union ccb));
  	mtx_lock(&Giant);
  	if (xpt_create_path(&path, xpt_periph, cam_sim_path(sc->sim),
 -		CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP)
 +			    CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
 +		free(ccb, M_TEMP);
 +		mtx_unlock(&Giant);
  		return(EIO);
 +	}
  
  	xpt_setup_ccb(&ccb->ccb_h, path, 5);
  	ccb->ccb_h.func_code = XPT_SCAN_BUS;
 Index: sys/dev/twa/tw_osl_externs.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_externs.h,v
 retrieving revision 1.1
 diff -u -r1.1 tw_osl_externs.h
 --- sys/dev/twa/tw_osl_externs.h	12 Apr 2005 22:07:09 -0000	1.1
 +++ sys/dev/twa/tw_osl_externs.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 Index: sys/dev/twa/tw_osl_freebsd.c
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_freebsd.c,v
 retrieving revision 1.1.4.2
 diff -u -r1.1.4.2 tw_osl_freebsd.c
 --- sys/dev/twa/tw_osl_freebsd.c	14 Dec 2006 02:57:07 -0000	1.1.4.2
 +++ sys/dev/twa/tw_osl_freebsd.c	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * Copyright (c) 2000 Michael Smith
   * Copyright (c) 2000 BSDi
 @@ -33,6 +33,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -207,7 +208,6 @@
  };
  
  DRIVER_MODULE(twa, pci, twa_pci_driver, twa_devclass, 0, 0);
 -
  MODULE_DEPEND(twa, pci, 1, 1, 1);
  MODULE_DEPEND(twa, cam, 1, 1, 1);
  
 @@ -393,9 +393,6 @@
  			TW_OSLI_MAX_NUM_IOS, TW_OSLI_MAX_NUM_AENS,
  			sc->non_dma_mem, sc->dma_mem,
  			sc->dma_mem_phys
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -			, sc->flash_dma_mem, sc->flash_dma_mem_phys
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  			))) {
  		tw_osli_printf(sc, "error = %d",
  			TW_CL_SEVERITY_ERROR_STRING,
 @@ -407,23 +404,6 @@
  		return(error);
  	}
  
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	/* Free any memory allocated for firmware flashing. */
 -	if (sc->flash_dma_mem) {
 -		bus_dmamap_unload(sc->flash_tag, sc->flash_map);
 -		bus_dmamem_free(sc->flash_tag, sc->flash_dma_mem,
 -			sc->flash_map);
 -	}
 -	if (sc->flash_tag)
 -		bus_dma_tag_destroy(sc->flash_tag);
 -	/*
 -	 * Set flash_tag and flash_dma_mem to 0, so we don't try freeing them
 -	 * again, later.
 -	 */
 -	sc->flash_tag = 0;
 -	sc->flash_dma_mem = 0;
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  	/* Create the control device. */
  	sc->ctrl_dev = make_dev(&twa_cdevsw, device_get_unit(sc->bus_dev),
  			UID_ROOT, GID_OPERATOR, S_IRUSR | S_IWUSR,
 @@ -462,12 +442,6 @@
  	TW_UINT32			max_sg_elements;
  	TW_UINT32			non_dma_mem_size;
  	TW_UINT32			dma_mem_size;
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	TW_UINT32			flash_dma_mem_size;
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -	TW_UINT32			per_req_dma_mem_size;
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  	TW_INT32			error;
  	TW_INT32			i;
  
 @@ -475,9 +449,6 @@
  
  	sc->flags |= (sizeof(bus_addr_t) == 8) ? TW_CL_64BIT_ADDRESSES : 0;
  	sc->flags |= (sizeof(bus_size_t) == 8) ? TW_CL_64BIT_SG_LENGTH : 0;
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	sc->flags |= TW_CL_FLASH_FIRMWARE; 
 -#endif /* TW_OSL_FLASH_FIRMWARE */
  #ifdef TW_OSLI_DEFERRED_INTR_USED
  	sc->flags |= TW_CL_DEFERRED_INTR_USED; 
  #endif /* TW_OSLI_DEFERRED_INTR_USED */
 @@ -489,12 +460,6 @@
  			sc->device_id, TW_OSLI_MAX_NUM_IOS,  TW_OSLI_MAX_NUM_AENS,
  			&(sc->alignment), &(sc->sg_size_factor),
  			&non_dma_mem_size, &dma_mem_size
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -			, &flash_dma_mem_size
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -			, &per_req_dma_mem_size
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  			))) {
  		tw_osli_printf(sc, "error = %d",
  			TW_CL_SEVERITY_ERROR_STRING,
 @@ -546,10 +511,6 @@
  				BUS_SPACE_MAXADDR,	/* lowaddr */
  				BUS_SPACE_MAXADDR, 	/* highaddr */
  				NULL, NULL, 		/* filter, filterarg */
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -				(TW_OSLI_MAX_NUM_IOS *
 -				per_req_dma_mem_size) +	
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  				dma_mem_size,		/* maxsize */
  				1,			/* nsegments */
  				BUS_SPACE_MAXSIZE,	/* maxsegsize */
 @@ -587,53 +548,6 @@
  		dma_mem_size, twa_map_load_callback,
  		&sc->dma_mem_phys, 0);
  
 -
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -	/*
 -	 * Create a dma tag for Common Layer's DMA'able memory,
 -	 * used to flash firmware (flash_dma_mem).
 -	 */
 -	if (bus_dma_tag_create(sc->parent_tag,		/* parent */
 -				sc->alignment,		/* alignment */
 -				0,			/* boundary */
 -				BUS_SPACE_MAXADDR,	/* lowaddr */
 -				BUS_SPACE_MAXADDR, 	/* highaddr */
 -				NULL, NULL, 		/* filter, filterarg */
 -				flash_dma_mem_size,	/* maxsize */
 -				1,			/* nsegments */
 -				flash_dma_mem_size,	/* maxsegsize */
 -				0,			/* flags */
 -				NULL,			/* lockfunc */
 -				NULL,			/* lockfuncarg */
 -				&sc->flash_tag		/* tag */)) {
 -		tw_osli_printf(sc, "error = %d",
 -			TW_CL_SEVERITY_ERROR_STRING,
 -			TW_CL_MESSAGE_SOURCE_FREEBSD_DRIVER,
 -			0x200D,
 -			"Can't allocate DMA tag for Common Layer's "
 -			"firmware flash memory",
 -			ENOMEM);
 -		return(ENOMEM);
 -	}
 -
 -	if (bus_dmamem_alloc(sc->flash_tag, &sc->flash_dma_mem,
 -		BUS_DMA_NOWAIT, &sc->flash_map)) {
 -		tw_osli_printf(sc, "error = %d",
 -			TW_CL_SEVERITY_ERROR_STRING,
 -			TW_CL_MESSAGE_SOURCE_FREEBSD_DRIVER,
 -			0x200E,
 -			"Can't allocate DMA'able memory for Common Layer's "
 -			"firmware flash",
 -			ENOMEM);
 -		return(ENOMEM);
 -	}
 -
 -	bus_dmamap_load(sc->flash_tag, sc->flash_map, sc->flash_dma_mem,
 -		flash_dma_mem_size, twa_map_load_callback,
 -		&sc->flash_dma_mem_phys, 0);
 -
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  	/*
  	 * Create a dma tag for data buffers; size will be the maximum
  	 * possible I/O size (128kB).
 @@ -730,27 +644,10 @@
  			return(ENOMEM);
  		}
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -		req->req_pkt.dma_mem = ((TW_INT8 *)(sc->dma_mem)) +
 -			(i * per_req_dma_mem_size);
 -		req->req_pkt.dma_mem_phys = sc->dma_mem_phys +
 -			(i * per_req_dma_mem_size);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  		/* Insert request into the free queue. */
  		tw_osli_req_q_insert_tail(req, TW_OSLI_FREE_Q);
  	}
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -	sc->dma_mem = ((TW_INT8 *)(sc->dma_mem)) +
 -		(TW_OSLI_MAX_NUM_IOS * per_req_dma_mem_size);
 -	sc->dma_mem_phys += (TW_OSLI_MAX_NUM_IOS * per_req_dma_mem_size);
 -
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  	return(0);
  }
  
 @@ -806,22 +703,6 @@
  			tw_osli_dbg_dprintf(1, sc,
  				"dma_tag_destroy(cmd) returned %d", error);
  
 -
 -#ifdef TW_OSL_FLASH_FIRMWARE
 -
 -	if (sc->flash_dma_mem) {
 -		/* In case this piece of memory has already been freed. */
 -		bus_dmamap_unload(sc->flash_tag, sc->flash_map);
 -		bus_dmamem_free(sc->flash_tag, sc->flash_dma_mem,
 -			sc->flash_map);
 -	}
 -	if (sc->flash_tag)
 -		if ((error = bus_dma_tag_destroy(sc->flash_tag)))
 -			tw_osli_dbg_dprintf(1, sc,
 -				"dma_tag_destroy(flash) returned %d", error);
 -
 -#endif /* TW_OSL_FLASH_FIRMWARE */
 -
  	if (sc->dma_tag)
  		if ((error = bus_dma_tag_destroy(sc->dma_tag)))
  			tw_osli_dbg_dprintf(1, sc,
 @@ -1312,21 +1193,8 @@
  		req->error_code = 0;
  		req->orig_req = NULL;
  
 -#ifdef TW_OSL_DMA_MEM_ALLOC_PER_REQUEST
 -
 -		/* Don't zero dma_mem & dma_mem_phys in req_pkt. */
 -		req->req_pkt.cmd = 0;
 -		req->req_pkt.flags = 0;
 -		req->req_pkt.status = 0;
 -		req->req_pkt.tw_osl_callback = NULL;
 -		bzero(&(req->req_pkt.gen_req_pkt),
 -			sizeof(req->req_pkt.gen_req_pkt));
 -
 -#else /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
 -
  		bzero(&(req->req_pkt), sizeof(struct tw_cl_req_packet));
  
 -#endif /* TW_OSL_DMA_MEM_ALLOC_PER_REQUEST */
  	}
  	return(req);
  }
 Index: sys/dev/twa/tw_osl_includes.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_includes.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_osl_includes.h
 --- sys/dev/twa/tw_osl_includes.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_osl_includes.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 Index: sys/dev/twa/tw_osl_inline.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_inline.h,v
 retrieving revision 1.1.2.1
 diff -u -r1.1.2.1 tw_osl_inline.h
 --- sys/dev/twa/tw_osl_inline.h	7 Dec 2005 18:18:05 -0000	1.1.2.1
 +++ sys/dev/twa/tw_osl_inline.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 Index: sys/dev/twa/tw_osl_ioctl.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_ioctl.h,v
 retrieving revision 1.1.4.1
 diff -u -r1.1.4.1 tw_osl_ioctl.h
 --- sys/dev/twa/tw_osl_ioctl.h	7 Dec 2005 18:18:05 -0000	1.1.4.1
 +++ sys/dev/twa/tw_osl_ioctl.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 Index: sys/dev/twa/tw_osl_share.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_share.h,v
 retrieving revision 1.2.2.1
 diff -u -r1.2.2.1 tw_osl_share.h
 --- sys/dev/twa/tw_osl_share.h	7 Dec 2005 18:18:05 -0000	1.2.2.1
 +++ sys/dev/twa/tw_osl_share.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 @@ -70,10 +71,6 @@
  #define TW_OSL_DEBUG	TWA_DEBUG
  #endif
  
 -#ifdef TWA_FLASH_FIRMWARE
 -#define TW_OSL_FLASH_FIRMWARE
 -#endif
 -
  #ifdef TWA_ENCLOSURE_SUPPORT
  #define TW_OSL_ENCLOSURE_SUPPORT
  #endif
 @@ -86,7 +83,6 @@
  typedef TW_VOID			*TW_SLEEP_HANDLE;
  #endif /* TW_OSL_CAN_SLEEP */
  
 -/*#define TW_OSL_DMA_MEM_ALLOC_PER_REQUEST*/
  #define TW_OSL_PCI_CONFIG_ACCESSIBLE
  
  #if _BYTE_ORDER == _BIG_ENDIAN
 Index: sys/dev/twa/tw_osl_types.h
 ===================================================================
 RCS file: /home/ncvs/src/sys/dev/twa/tw_osl_types.h,v
 retrieving revision 1.1
 diff -u -r1.1 tw_osl_types.h
 --- sys/dev/twa/tw_osl_types.h	12 Apr 2005 22:07:09 -0000	1.1
 +++ sys/dev/twa/tw_osl_types.h	13 Apr 2007 12:59:21 -0000
 @@ -1,5 +1,5 @@
  /*
 - * Copyright (c) 2004-05 Applied Micro Circuits Corporation.
 + * Copyright (c) 2004-07 Applied Micro Circuits Corporation.
   * Copyright (c) 2004-05 Vinod Kashyap.
   * All rights reserved.
   *
 @@ -31,6 +31,7 @@
   * AMCC'S 3ware driver for 9000 series storage controllers.
   *
   * Author: Vinod Kashyap
 + * Modifications by: Adam Radford
   */
  
  
 Index: sys/modules/twa/Makefile
 ===================================================================
 RCS file: /home/ncvs/src/sys/modules/twa/Makefile,v
 retrieving revision 1.4.2.1
 diff -u -r1.4.2.1 Makefile
 --- sys/modules/twa/Makefile	7 Dec 2005 18:18:06 -0000	1.4.2.1
 +++ sys/modules/twa/Makefile	13 Apr 2007 12:59:21 -0000
 @@ -1,6 +1,6 @@
  # $FreeBSD: src/sys/modules/twa/Makefile,v 1.4.2.1 2005/12/07 18:18:06 vkashyap Exp $
  #
 -# Copyright (c) 2004 Applied Micro Circuits Corporation.
 +# Copyright (c) 2004-06 Applied Micro Circuits Corporation.
  # All rights reserved.
  #
  # Redistribution and use in source and binary forms, with or without
 @@ -29,31 +29,9 @@
  # 3ware driver for 9000 series storage controllers.
  #
  # Author: Vinod Kashyap
 +# Modifications by: Adam Radford
  #
  
 -
 -
 -#
 -# In the line following this comment, a value of 0 on the right hand
 -# side will not cause firmware to be bundled.  Change this value to 1
 -# to bundle the firmware with the driver, which may be flashed onto
 -# the controller, if the firmware on the controller is older than the
 -# one bundled, and needs to be upgraded.  The size of the driver will
 -# increase significantly (to over 500kB) if this option is selected.
 -# Typically, the firmware image bundled (in tw_cl_fwimg.c) corresponds
 -# to the latest controller architecture as of the date of the release.
 -# If the firmware for an earlier controller architecture needs to be
 -# flashed, the (older) driver with the appropriate firmware image
 -# bundled can be downloaded from the 3ware website, used to flash the
 -# firmware, and then the newer driver can be switched to.  Alternatively,
 -# the appropriate firmware image (tw_cl_fwimg.c) from the older driver can
 -# be used to re-build the newer driver.  In this case, the branch
 -# (TWA_CURRENT_FW_BRANCH_*) and build (TWA_CURRENT_FW_BUILD_*) numbers for
 -# the bundled firmware need to be appropriately updated in tw_cl_fwif.h
 -# before building the driver.
 -#
 -TWA_FLASH_FIRMWARE?=0
 -
  KMOD = twa
  .PATH: ${.CURDIR}/../../dev/${KMOD}
  SRCS=  tw_osl_freebsd.c tw_osl_cam.c \
 @@ -66,10 +44,6 @@
  #CFLAGS+= -DTWA_DEBUG=0
  CFLAGS+= -I${.CURDIR}/../../dev/${KMOD}
  
 -.if $(TWA_FLASH_FIRMWARE) != 0
 -CFLAGS+= -DTWA_FLASH_FIRMWARE
 -SRCS+= tw_cl_fwimg.c
 -.endif
 -
  .include <bsd.kmod.mk>
  
 +
 
 --=-=-=--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200704131440.l3DEe7ci090274>