aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/aacraid/aacraid.h
diff options
context:
space:
mode:
authorMark Haverkamp <markh@osdl.org>2005-10-24 13:52:22 -0400
committerJames Bottomley <jejb@mulgrave.(none)>2005-10-28 12:41:53 -0400
commit8e0c5ebde82b08f6d996e11983890fc4cc085fab (patch)
tree3ba38ff8e7b9203b47d038c215d9c7d623c250ba /drivers/scsi/aacraid/aacraid.h
parent38a9a621aba953ddb8051547e98c10ec3c741312 (diff)
[SCSI] aacraid: Newer adapter communication iterface support
Received from Mark Salyzyn. This patch adds the 'new comm' interface, which modern AAC based adapters that are less than a year old support in the name of much improved performance. These modern adapters support both the legacy and the 'new comm' interfaces. Signed-off-by: Mark Haverkamp <markh@osdl.org> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/aacraid/aacraid.h')
-rw-r--r--drivers/scsi/aacraid/aacraid.h25
1 files changed, 18 insertions, 7 deletions
diff --git a/drivers/scsi/aacraid/aacraid.h b/drivers/scsi/aacraid/aacraid.h
index 2ebe402bc31a..30fd8d6e3f31 100644
--- a/drivers/scsi/aacraid/aacraid.h
+++ b/drivers/scsi/aacraid/aacraid.h
@@ -481,6 +481,7 @@ enum aac_log_level {
481#define FSAFS_NTC_FIB_CONTEXT 0x030c 481#define FSAFS_NTC_FIB_CONTEXT 0x030c
482 482
483struct aac_dev; 483struct aac_dev;
484struct fib;
484 485
485struct adapter_ops 486struct adapter_ops
486{ 487{
@@ -489,6 +490,7 @@ struct adapter_ops
489 void (*adapter_disable_int)(struct aac_dev *dev); 490 void (*adapter_disable_int)(struct aac_dev *dev);
490 int (*adapter_sync_cmd)(struct aac_dev *dev, u32 command, u32 p1, u32 p2, u32 p3, u32 p4, u32 p5, u32 p6, u32 *status, u32 *r1, u32 *r2, u32 *r3, u32 *r4); 491 int (*adapter_sync_cmd)(struct aac_dev *dev, u32 command, u32 p1, u32 p2, u32 p3, u32 p4, u32 p5, u32 p6, u32 *status, u32 *r1, u32 *r2, u32 *r3, u32 *r4);
491 int (*adapter_check_health)(struct aac_dev *dev); 492 int (*adapter_check_health)(struct aac_dev *dev);
493 int (*adapter_send)(struct fib * fib);
492}; 494};
493 495
494/* 496/*
@@ -659,6 +661,10 @@ struct rx_mu_registers {
659 Status Register */ 661 Status Register */
660 __le32 OIMR; /* 1334h | 34h | Outbound Interrupt 662 __le32 OIMR; /* 1334h | 34h | Outbound Interrupt
661 Mask Register */ 663 Mask Register */
664 __le32 reserved2; /* 1338h | 38h | Reserved */
665 __le32 reserved3; /* 133Ch | 3Ch | Reserved */
666 __le32 InboundQueue;/* 1340h | 40h | Inbound Queue Port relative to firmware */
667 __le32 OutboundQueue;/*1344h | 44h | Outbound Queue Port relative to firmware */
662 /* * Must access through ATU Inbound 668 /* * Must access through ATU Inbound
663 Translation Window */ 669 Translation Window */
664}; 670};
@@ -693,8 +699,8 @@ struct rx_inbound {
693#define OutboundDoorbellReg MUnit.ODR 699#define OutboundDoorbellReg MUnit.ODR
694 700
695struct rx_registers { 701struct rx_registers {
696 struct rx_mu_registers MUnit; /* 1300h - 1334h */ 702 struct rx_mu_registers MUnit; /* 1300h - 1344h */
697 __le32 reserved1[6]; /* 1338h - 134ch */ 703 __le32 reserved1[2]; /* 1348h - 134ch */
698 struct rx_inbound IndexRegs; 704 struct rx_inbound IndexRegs;
699}; 705};
700 706
@@ -711,8 +717,8 @@ struct rx_registers {
711#define rkt_inbound rx_inbound 717#define rkt_inbound rx_inbound
712 718
713struct rkt_registers { 719struct rkt_registers {
714 struct rkt_mu_registers MUnit; /* 1300h - 1334h */ 720 struct rkt_mu_registers MUnit; /* 1300h - 1344h */
715 __le32 reserved1[1010]; /* 1338h - 22fch */ 721 __le32 reserved1[1006]; /* 1348h - 22fch */
716 struct rkt_inbound IndexRegs; /* 2300h - */ 722 struct rkt_inbound IndexRegs; /* 2300h - */
717}; 723};
718 724
@@ -721,8 +727,6 @@ struct rkt_registers {
721#define rkt_writeb(AEP, CSR, value) writeb(value, &((AEP)->regs.rkt->CSR)) 727#define rkt_writeb(AEP, CSR, value) writeb(value, &((AEP)->regs.rkt->CSR))
722#define rkt_writel(AEP, CSR, value) writel(value, &((AEP)->regs.rkt->CSR)) 728#define rkt_writel(AEP, CSR, value) writel(value, &((AEP)->regs.rkt->CSR))
723 729
724struct fib;
725
726typedef void (*fib_callback)(void *ctxt, struct fib *fibctx); 730typedef void (*fib_callback)(void *ctxt, struct fib *fibctx);
727 731
728struct aac_fib_context { 732struct aac_fib_context {
@@ -937,7 +941,6 @@ struct aac_dev
937 const char *name; 941 const char *name;
938 int id; 942 int id;
939 943
940 u16 irq_mask;
941 /* 944 /*
942 * negotiated FIB settings 945 * negotiated FIB settings
943 */ 946 */
@@ -972,6 +975,7 @@ struct aac_dev
972 struct adapter_ops a_ops; 975 struct adapter_ops a_ops;
973 unsigned long fsrev; /* Main driver's revision number */ 976 unsigned long fsrev; /* Main driver's revision number */
974 977
978 unsigned base_size; /* Size of mapped in region */
975 struct aac_init *init; /* Holds initialization info to communicate with adapter */ 979 struct aac_init *init; /* Holds initialization info to communicate with adapter */
976 dma_addr_t init_pa; /* Holds physical address of the init struct */ 980 dma_addr_t init_pa; /* Holds physical address of the init struct */
977 981
@@ -992,6 +996,9 @@ struct aac_dev
992 /* 996 /*
993 * The following is the device specific extension. 997 * The following is the device specific extension.
994 */ 998 */
999#if (!defined(AAC_MIN_FOOTPRINT_SIZE))
1000# define AAC_MIN_FOOTPRINT_SIZE 8192
1001#endif
995 union 1002 union
996 { 1003 {
997 struct sa_registers __iomem *sa; 1004 struct sa_registers __iomem *sa;
@@ -1012,6 +1019,7 @@ struct aac_dev
1012 u8 nondasd_support; 1019 u8 nondasd_support;
1013 u8 dac_support; 1020 u8 dac_support;
1014 u8 raid_scsi_mode; 1021 u8 raid_scsi_mode;
1022 u8 new_comm_interface;
1015 /* macro side-effects BEWARE */ 1023 /* macro side-effects BEWARE */
1016# define raw_io_interface \ 1024# define raw_io_interface \
1017 init->InitStructRevision==cpu_to_le32(ADAPTER_INIT_STRUCT_REVISION_4) 1025 init->InitStructRevision==cpu_to_le32(ADAPTER_INIT_STRUCT_REVISION_4)
@@ -1034,6 +1042,8 @@ struct aac_dev
1034#define aac_adapter_check_health(dev) \ 1042#define aac_adapter_check_health(dev) \
1035 (dev)->a_ops.adapter_check_health(dev) 1043 (dev)->a_ops.adapter_check_health(dev)
1036 1044
1045#define aac_adapter_send(fib) \
1046 ((fib)->dev)->a_ops.adapter_send(fib)
1037 1047
1038#define FIB_CONTEXT_FLAG_TIMED_OUT (0x00000001) 1048#define FIB_CONTEXT_FLAG_TIMED_OUT (0x00000001)
1039 1049
@@ -1779,6 +1789,7 @@ int aac_rkt_init(struct aac_dev *dev);
1779int aac_sa_init(struct aac_dev *dev); 1789int aac_sa_init(struct aac_dev *dev);
1780unsigned int aac_response_normal(struct aac_queue * q); 1790unsigned int aac_response_normal(struct aac_queue * q);
1781unsigned int aac_command_normal(struct aac_queue * q); 1791unsigned int aac_command_normal(struct aac_queue * q);
1792unsigned int aac_intr_normal(struct aac_dev * dev, u32 Index);
1782int aac_command_thread(struct aac_dev * dev); 1793int aac_command_thread(struct aac_dev * dev);
1783int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context *fibctx); 1794int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context *fibctx);
1784int fib_adapter_complete(struct fib * fibptr, unsigned short size); 1795int fib_adapter_complete(struct fib * fibptr, unsigned short size);