aic79xx: sequencer fixes
Subsystems (2)
PATCH 2/4 aic79xx: sequencer fixes
This patch updates the aic79xx sequencer with latest fixes from adaptec. The sequencer code now corresponds with adaptec version 2.0.15.
drivers/scsi/aic7xxx/aic79xx.reg +25 -4
@@ -1,7 +1,7 @@ /* * Aic79xx register and scratch ram definitions. * - * Copyright (c) 1994-2001 Justin T. Gibbs. + * Copyright (c) 1994-2001, 2004 Justin T. Gibbs. * Copyright (c) 2000-2002 Adaptec Inc. * All rights reserved. *
@@ -39,7 +39,7 @@ * * $FreeBSD$ */ -VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $" +VERSION = "$Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $" /* * This file is processed by the aic7xxx_asm utility for use in assembling
@@ -3715,8 +3715,9 @@ scratch_ram { SEQ_FLAGS2 { size 1 - field TARGET_MSG_PENDING 0x02 - field SELECTOUT_QFROZEN 0x04 + field PENDING_MK_MESSAGE 0x01 + field TARGET_MSG_PENDING 0x02 + field SELECTOUT_QFROZEN 0x04 } ALLOCFIFO_SCBPTR {
@@ -3777,6 +3778,26 @@ scratch_ram { CMDSIZE_TABLE { size 8 } + /* + * When an SCB with the MK_MESSAGE flag is + * queued to the controller, it cannot enter + * the waiting for selection list until the + * selections for any previously queued + * commands to that target complete. During + * the wait, the MK_MESSAGE SCB is queued + * here. + */ + MK_MESSAGE_SCB { + size 2 + } + /* + * Saved SCSIID of MK_MESSAGE_SCB to avoid + * an extra SCBPTR operation when deciding + * if the MK_MESSAGE_SCB can be run. + */ + MK_MESSAGE_SCSIID { + size 1 + } } /************************* Hardware SCB Definition ****************************/
drivers/scsi/aic7xxx/aic79xx.seq +120 -23
235 lines not on this page · raw message
drivers/scsi/aic7xxx/aic79xx_core.c +188 -72
484 lines not on this page · raw message
drivers/scsi/aic7xxx/aic79xx_inline.h +4 -3
@@ -37,7 +37,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#58 $ +* $Id: //depot/aic7xxx/aic7xxx/aic79xx_inline.h#59 $ * * $FreeBSD$ */
@@ -804,9 +804,10 @@ ahd_queue_scb(struct ahd_softc *ahd, struint64_t host_dataptr; host_dataptr =ahd_le64toh (scb->hscb->dataptr); -printf ("%s: Queueing SCB 0x%x bus addr 0x%x - 0x%x%x/0x%x\n" , +printf ("%s: Queueing SCB %d:0x%x bus addr 0x%x - 0x%x%x/0x%x\n" ,ahd_name (ahd), -SCB_GET_TAG (scb),ahd_le32toh (scb->hscb->hscb_busaddr), +SCB_GET_TAG (scb), scb->hscb->scsiid, +ahd_le32toh (scb->hscb->hscb_busaddr), (u_int)((host_dataptr >>32 ) &0xFFFFFFFF ), (u_int)(host_dataptr &0xFFFFFFFF ),ahd_le32toh (scb->hscb->datacnt));
drivers/scsi/aic7xxx/aic79xx_osm.h +1 -1
@@ -36,7 +36,7 @@* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGES. * -* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#137 $ +* $Id: //depot/aic7xxx/linux/drivers/scsi/aic7xxx/aic79xx_osm.h#166 $ * */ #ifndef _AIC79XX_LINUX_H_
drivers/scsi/aic7xxx/aic79xx_osm_pci.c +8 -9
@@ -220,10 +220,10 @@ ahd_linux_pci_reserve_io_regions(struct *base2 =pci_resource_start (ahd->dev_softc,3 );if (*base ==0 || *base2 ==0 )return (ENOMEM ); -if (request_region (*base,256 ,"aic79xx" ) ==0 ) +if (!request_region (*base,256 ,"aic79xx" ))return (ENOMEM ); -if (request_region (*base2,256 ,"aic79xx" ) ==0 ) { -release_region (*base2,256 ); +if (!request_region (*base2,256 ,"aic79xx" )) { +release_region (*base,256 );return (ENOMEM ); }return (0 );
@@ -237,7 +237,7 @@ ahd_linux_pci_reserve_mem_region(structu_long start;u_long base_page;u_long base_offset; -int error; +int error =0 ;if (aic79xx_allow_memio ==0 )return (ENOMEM );
@@ -245,16 +245,15 @@ ahd_linux_pci_reserve_mem_region(structif ((ahd->bugs &AHD_PCIX_MMAPIO_BUG ) !=0 )return (ENOMEM ); - error =0 ; start =pci_resource_start (ahd->dev_softc,1 ); base_page = start &PAGE_MASK ; base_offset = start - base_page;if (start !=0 ) { *bus_addr = start; -if (request_mem_region (start,0x1000 ,"aic79xx" ) ==0 ) +if (!request_mem_region (start,0x1000 ,"aic79xx" )) error =ENOMEM ; -if (error ==0 ) { - *maddr =ioremap_nocache (base_page, base_offset +256 ); +if (!error) { + *maddr =ioremap_nocache (base_page, base_offset +512 );if (*maddr ==NULL ) { error =ENOMEM ;release_mem_region (start,0x1000 );
@@ -344,7 +343,7 @@ ahd_pci_map_int(struct ahd_softc *ahd) error =request_irq (ahd->dev_softc->irq, ahd_linux_isr,SA_SHIRQ ,"aic79xx" , ahd); -if (error ==0 ) +if (!error) ahd->platform_data->irq = ahd->dev_softc->irq;return (-error);
drivers/scsi/aic7xxx/aic79xx_reg.h_shipped +23 -4
@@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#119 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#76 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#120 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $ */ typedef int (ahd_reg_print_t)(u_int, u_int *, u_int); typedef struct ahd_reg_parse_entry {
@@ -2204,6 +2204,20 @@ ahd_reg_print_t ahd_cmdsize_table_print; #endif #if AIC_DEBUG_REGISTERS +ahd_reg_print_t ahd_mk_message_scb_print; +#else +#define ahd_mk_message_scb_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "MK_MESSAGE_SCB", 0x160, regvalue, cur_col, wrap) +#endif + +#if AIC_DEBUG_REGISTERS +ahd_reg_print_t ahd_mk_message_scsiid_print; +#else +#define ahd_mk_message_scsiid_print(regvalue, cur_col, wrap) \ + ahd_print_register(NULL, 0, "MK_MESSAGE_SCSIID", 0x162, regvalue, cur_col, wrap) +#endif + +#if AIC_DEBUG_REGISTERS ahd_reg_print_t ahd_scb_base_print; #else #define ahd_scb_base_print(regvalue, cur_col, wrap) \
@@ -3638,6 +3652,7 @@ ahd_reg_print_t ahd_scb_disconnected_lis #define SEQ_FLAGS2 0x14d #define SELECTOUT_QFROZEN 0x04 #define TARGET_MSG_PENDING 0x02 +#define PENDING_MK_MESSAGE 0x01 #define ALLOCFIFO_SCBPTR 0x14e
@@ -3655,6 +3670,10 @@ ahd_reg_print_t ahd_scb_disconnected_lis #define CMDSIZE_TABLE 0x158 +#define MK_MESSAGE_SCB 0x160 + +#define MK_MESSAGE_SCSIID 0x162 + #define SCB_BASE 0x180 #define SCB_RESIDUAL_DATACNT 0x180
@@ -3800,5 +3819,5 @@ ahd_reg_print_t ahd_scb_disconnected_lis /* Exported Labels */ -#define LABEL_seq_isr 0x285 -#define LABEL_timer_isr 0x281 +#define LABEL_seq_isr 0x28f +#define LABEL_timer_isr 0x28b
drivers/scsi/aic7xxx/aic79xx_reg_print.c_shipped +18 -3
@@ -2,8 +2,8 @@ * DO NOT EDIT - This file is automatically generated * from the following source files: * - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#118 $ - * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#75 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.seq#120 $ + * $Id: //depot/aic7xxx/aic7xxx/aic79xx.reg#77 $ */ #include "aic79xx_osm.h"
@@ -3382,6 +3382,7 @@ ahd_initiator_tag_print(u_int regvalue, } static ahd_reg_parse_entry_t SEQ_FLAGS2_parse_table[] = { + { "PENDING_MK_MESSAGE", 0x01, 0x01 }, { "TARGET_MSG_PENDING", 0x02, 0x02 }, { "SELECTOUT_QFROZEN", 0x04, 0x04 } };
@@ -3389,7 +3390,7 @@ static ahd_reg_parse_entry_t SEQ_FLAGS2_ int ahd_seq_flags2_print(u_int regvalue, u_int *cur_col, u_int wrap) { - return (ahd_print_register(SEQ_FLAGS2_parse_table, 2, "SEQ_FLAGS2", + return (ahd_print_register(SEQ_FLAGS2_parse_table, 3, "SEQ_FLAGS2", 0x14d, regvalue, cur_col, wrap)); }
@@ -3450,6 +3451,20 @@ ahd_cmdsize_table_print(u_int regvalue, } int +ahd_mk_message_scb_print(u_int regvalue, u_int *cur_col, u_int wrap) +{ + return (ahd_print_register(NULL, 0, "MK_MESSAGE_SCB", + 0x160, regvalue, cur_col, wrap)); +} + +int +ahd_mk_message_scsiid_print(u_int regvalue, u_int *cur_col, u_int wrap) +{ + return (ahd_print_register(NULL, 0, "MK_MESSAGE_SCSIID", + 0x162, regvalue, cur_col, wrap)); +} + +int ahd_scb_base_print(u_int regvalue, u_int *cur_col, u_int wrap) { return (ahd_print_register(NULL, 0, "SCB_BASE",
drivers/scsi/aic7xxx/aic79xx_seq.h_shipped +447 -434
1,278 lines not on this page · raw message