diff options
author | Mark Haverkamp <markh@osdl.org> | 2005-10-24 13:52:22 -0400 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-10-28 12:41:53 -0400 |
commit | 8e0c5ebde82b08f6d996e11983890fc4cc085fab (patch) | |
tree | 3ba38ff8e7b9203b47d038c215d9c7d623c250ba /drivers/scsi/aacraid/aacraid.h | |
parent | 38a9a621aba953ddb8051547e98c10ec3c741312 (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.h | 25 |
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 | ||
483 | struct aac_dev; | 483 | struct aac_dev; |
484 | struct fib; | ||
484 | 485 | ||
485 | struct adapter_ops | 486 | struct 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 | ||
695 | struct rx_registers { | 701 | struct 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 | ||
713 | struct rkt_registers { | 719 | struct 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 | ||
724 | struct fib; | ||
725 | |||
726 | typedef void (*fib_callback)(void *ctxt, struct fib *fibctx); | 730 | typedef void (*fib_callback)(void *ctxt, struct fib *fibctx); |
727 | 731 | ||
728 | struct aac_fib_context { | 732 | struct 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); | |||
1779 | int aac_sa_init(struct aac_dev *dev); | 1789 | int aac_sa_init(struct aac_dev *dev); |
1780 | unsigned int aac_response_normal(struct aac_queue * q); | 1790 | unsigned int aac_response_normal(struct aac_queue * q); |
1781 | unsigned int aac_command_normal(struct aac_queue * q); | 1791 | unsigned int aac_command_normal(struct aac_queue * q); |
1792 | unsigned int aac_intr_normal(struct aac_dev * dev, u32 Index); | ||
1782 | int aac_command_thread(struct aac_dev * dev); | 1793 | int aac_command_thread(struct aac_dev * dev); |
1783 | int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context *fibctx); | 1794 | int aac_close_fib_context(struct aac_dev * dev, struct aac_fib_context *fibctx); |
1784 | int fib_adapter_complete(struct fib * fibptr, unsigned short size); | 1795 | int fib_adapter_complete(struct fib * fibptr, unsigned short size); |