Skip to content

Commit ae897ae

Browse files
ching Huangmartinkpetersen
authored andcommitted
scsi: arcmsr: Add support for ARC-1886 series RAID controllers
Add support for ARC-1886 series RAID controllers. [mkp: apply zeroday build warning fixes] Link: https://lore.kernel.org/r/78ae03d0ac05054c721cc3a94f41f9e656a5e176.camel@areca.com.tw Signed-off-by: ching Huang <ching2048@areca.com.tw> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
1 parent 893f4a1 commit ae897ae

2 files changed

Lines changed: 367 additions & 18 deletions

File tree

drivers/scsi/arcmsr/arcmsr.h

Lines changed: 98 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ struct device_attribute;
8080
#ifndef PCI_DEVICE_ID_ARECA_1884
8181
#define PCI_DEVICE_ID_ARECA_1884 0x1884
8282
#endif
83+
#define PCI_DEVICE_ID_ARECA_1886 0x188A
8384
#define ARCMSR_HOURS (1000 * 60 * 60 * 4)
8485
#define ARCMSR_MINUTES (1000 * 60 * 60)
8586
/*
@@ -436,6 +437,21 @@ struct FIRMWARE_INFO
436437
#define ARCMSR_HBEMU_DOORBELL_SYNC 0x100
437438
#define ARCMSR_ARC188X_RESET_ADAPTER 0x00000004
438439
#define ARCMSR_ARC1884_DiagWrite_ENABLE 0x00000080
440+
441+
/*
442+
*******************************************************************************
443+
** SPEC. for Areca Type F adapter
444+
*******************************************************************************
445+
*/
446+
#define ARCMSR_SIGNATURE_1886 0x188617D3
447+
// Doorbell and interrupt definition are same as Type E adapter
448+
/* ARC-1886 doorbell sync */
449+
#define ARCMSR_HBFMU_DOORBELL_SYNC 0x100
450+
//set host rw buffer physical address at inbound message 0, 1 (low,high)
451+
#define ARCMSR_HBFMU_DOORBELL_SYNC1 0x300
452+
#define ARCMSR_HBFMU_MESSAGE_FIRMWARE_OK 0x80000000
453+
#define ARCMSR_HBFMU_MESSAGE_NO_VOLUME_CHANGE 0x20000000
454+
439455
/*
440456
*******************************************************************************
441457
** ARECA SCSI COMMAND DESCRIPTOR BLOCK size 0x1F8 (504)
@@ -720,6 +736,80 @@ struct MessageUnit_E{
720736
uint32_t msgcode_rwbuffer[256]; /*2200 23FF*/
721737
};
722738

739+
/*
740+
*********************************************************************
741+
** Messaging Unit (MU) of Type F processor(LSI)
742+
*********************************************************************
743+
*/
744+
struct MessageUnit_F {
745+
uint32_t iobound_doorbell; /*0000 0003*/
746+
uint32_t write_sequence_3xxx; /*0004 0007*/
747+
uint32_t host_diagnostic_3xxx; /*0008 000B*/
748+
uint32_t posted_outbound_doorbell; /*000C 000F*/
749+
uint32_t master_error_attribute; /*0010 0013*/
750+
uint32_t master_error_address_low; /*0014 0017*/
751+
uint32_t master_error_address_high; /*0018 001B*/
752+
uint32_t hcb_size; /*001C 001F*/
753+
uint32_t inbound_doorbell; /*0020 0023*/
754+
uint32_t diagnostic_rw_data; /*0024 0027*/
755+
uint32_t diagnostic_rw_address_low; /*0028 002B*/
756+
uint32_t diagnostic_rw_address_high; /*002C 002F*/
757+
uint32_t host_int_status; /*0030 0033*/
758+
uint32_t host_int_mask; /*0034 0037*/
759+
uint32_t dcr_data; /*0038 003B*/
760+
uint32_t dcr_address; /*003C 003F*/
761+
uint32_t inbound_queueport; /*0040 0043*/
762+
uint32_t outbound_queueport; /*0044 0047*/
763+
uint32_t hcb_pci_address_low; /*0048 004B*/
764+
uint32_t hcb_pci_address_high; /*004C 004F*/
765+
uint32_t iop_int_status; /*0050 0053*/
766+
uint32_t iop_int_mask; /*0054 0057*/
767+
uint32_t iop_inbound_queue_port; /*0058 005B*/
768+
uint32_t iop_outbound_queue_port; /*005C 005F*/
769+
uint32_t inbound_free_list_index; /*0060 0063*/
770+
uint32_t inbound_post_list_index; /*0064 0067*/
771+
uint32_t reply_post_producer_index; /*0068 006B*/
772+
uint32_t reply_post_consumer_index; /*006C 006F*/
773+
uint32_t inbound_doorbell_clear; /*0070 0073*/
774+
uint32_t i2o_message_unit_control; /*0074 0077*/
775+
uint32_t last_used_message_source_address_low; /*0078 007B*/
776+
uint32_t last_used_message_source_address_high; /*007C 007F*/
777+
uint32_t pull_mode_data_byte_count[4]; /*0080 008F*/
778+
uint32_t message_dest_address_index; /*0090 0093*/
779+
uint32_t done_queue_not_empty_int_counter_timer; /*0094 0097*/
780+
uint32_t utility_A_int_counter_timer; /*0098 009B*/
781+
uint32_t outbound_doorbell; /*009C 009F*/
782+
uint32_t outbound_doorbell_clear; /*00A0 00A3*/
783+
uint32_t message_source_address_index; /*00A4 00A7*/
784+
uint32_t message_done_queue_index; /*00A8 00AB*/
785+
uint32_t reserved0; /*00AC 00AF*/
786+
uint32_t inbound_msgaddr0; /*00B0 00B3*/
787+
uint32_t inbound_msgaddr1; /*00B4 00B7*/
788+
uint32_t outbound_msgaddr0; /*00B8 00BB*/
789+
uint32_t outbound_msgaddr1; /*00BC 00BF*/
790+
uint32_t inbound_queueport_low; /*00C0 00C3*/
791+
uint32_t inbound_queueport_high; /*00C4 00C7*/
792+
uint32_t outbound_queueport_low; /*00C8 00CB*/
793+
uint32_t outbound_queueport_high; /*00CC 00CF*/
794+
uint32_t iop_inbound_queue_port_low; /*00D0 00D3*/
795+
uint32_t iop_inbound_queue_port_high; /*00D4 00D7*/
796+
uint32_t iop_outbound_queue_port_low; /*00D8 00DB*/
797+
uint32_t iop_outbound_queue_port_high; /*00DC 00DF*/
798+
uint32_t message_dest_queue_port_low; /*00E0 00E3*/
799+
uint32_t message_dest_queue_port_high; /*00E4 00E7*/
800+
uint32_t last_used_message_dest_address_low; /*00E8 00EB*/
801+
uint32_t last_used_message_dest_address_high; /*00EC 00EF*/
802+
uint32_t message_done_queue_base_address_low; /*00F0 00F3*/
803+
uint32_t message_done_queue_base_address_high; /*00F4 00F7*/
804+
uint32_t host_diagnostic; /*00F8 00FB*/
805+
uint32_t write_sequence; /*00FC 00FF*/
806+
uint32_t reserved1[46]; /*0100 01B7*/
807+
uint32_t reply_post_producer_index1; /*01B8 01BB*/
808+
uint32_t reply_post_consumer_index1; /*01BC 01BF*/
809+
};
810+
811+
#define MESG_RW_BUFFER_SIZE (256 * 3)
812+
723813
typedef struct deliver_completeQ {
724814
uint16_t cmdFlag;
725815
uint16_t cmdSMID;
@@ -739,6 +829,7 @@ struct AdapterControlBlock
739829
#define ACB_ADAPTER_TYPE_C 0x00000002 /* hbc L IOP */
740830
#define ACB_ADAPTER_TYPE_D 0x00000003 /* hbd M IOP */
741831
#define ACB_ADAPTER_TYPE_E 0x00000004 /* hba L IOP */
832+
#define ACB_ADAPTER_TYPE_F 0x00000005 /* hba L IOP */
742833
u32 ioqueue_size;
743834
struct pci_dev * pdev;
744835
struct Scsi_Host * host;
@@ -760,10 +851,16 @@ struct AdapterControlBlock
760851
struct MessageUnit_C __iomem *pmuC;
761852
struct MessageUnit_D *pmuD;
762853
struct MessageUnit_E __iomem *pmuE;
854+
struct MessageUnit_F __iomem *pmuF;
763855
};
764856
/* message unit ATU inbound base address0 */
765857
void __iomem *mem_base0;
766858
void __iomem *mem_base1;
859+
//0x000 - COMPORT_IN (Host sent to ROC)
860+
uint32_t *message_wbuffer;
861+
//0x100 - COMPORT_OUT (ROC sent to Host)
862+
uint32_t *message_rbuffer;
863+
uint32_t *msgcode_rwbuffer; //0x200 - BIOS_AREA
767864
uint32_t acb_flags;
768865
u16 dev_id;
769866
uint8_t adapter_index;
@@ -846,6 +943,7 @@ struct AdapterControlBlock
846943
uint32_t out_doorbell;
847944
uint32_t completionQ_entry;
848945
pCompletion_Q pCompletionQ;
946+
uint32_t completeQ_size;
849947
};/* HW_DEVICE_EXTENSION */
850948
/*
851949
*******************************************************************************

0 commit comments

Comments
 (0)