162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * QLogic Fibre Channel HBA Driver
462306a36Sopenharmony_ci * Copyright (c)  2003-2014 QLogic Corporation
562306a36Sopenharmony_ci */
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#ifndef __QLA_DMP27_H__
862306a36Sopenharmony_ci#define	__QLA_DMP27_H__
962306a36Sopenharmony_ci
1062306a36Sopenharmony_ci#define IOBASE_ADDR	offsetof(struct device_reg_24xx, iobase_addr)
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_cistruct __packed qla27xx_fwdt_template {
1362306a36Sopenharmony_ci	__le32 template_type;
1462306a36Sopenharmony_ci	__le32 entry_offset;
1562306a36Sopenharmony_ci	__le32 template_size;
1662306a36Sopenharmony_ci	uint32_t count;		/* borrow field for running/residual count */
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci	__le32 entry_count;
1962306a36Sopenharmony_ci	uint32_t template_version;
2062306a36Sopenharmony_ci	__le32 capture_timestamp;
2162306a36Sopenharmony_ci	uint32_t template_checksum;
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci	uint32_t reserved_2;
2462306a36Sopenharmony_ci	__le32 driver_info[3];
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ci	uint32_t saved_state[16];
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci	uint32_t reserved_3[8];
2962306a36Sopenharmony_ci	__le32 firmware_version[5];
3062306a36Sopenharmony_ci};
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ci#define TEMPLATE_TYPE_FWDUMP		99
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_ci#define ENTRY_TYPE_NOP			0
3562306a36Sopenharmony_ci#define ENTRY_TYPE_TMP_END		255
3662306a36Sopenharmony_ci#define ENTRY_TYPE_RD_IOB_T1		256
3762306a36Sopenharmony_ci#define ENTRY_TYPE_WR_IOB_T1		257
3862306a36Sopenharmony_ci#define ENTRY_TYPE_RD_IOB_T2		258
3962306a36Sopenharmony_ci#define ENTRY_TYPE_WR_IOB_T2		259
4062306a36Sopenharmony_ci#define ENTRY_TYPE_RD_PCI		260
4162306a36Sopenharmony_ci#define ENTRY_TYPE_WR_PCI		261
4262306a36Sopenharmony_ci#define ENTRY_TYPE_RD_RAM		262
4362306a36Sopenharmony_ci#define ENTRY_TYPE_GET_QUEUE		263
4462306a36Sopenharmony_ci#define ENTRY_TYPE_GET_FCE		264
4562306a36Sopenharmony_ci#define ENTRY_TYPE_PSE_RISC		265
4662306a36Sopenharmony_ci#define ENTRY_TYPE_RST_RISC		266
4762306a36Sopenharmony_ci#define ENTRY_TYPE_DIS_INTR		267
4862306a36Sopenharmony_ci#define ENTRY_TYPE_GET_HBUF		268
4962306a36Sopenharmony_ci#define ENTRY_TYPE_SCRATCH		269
5062306a36Sopenharmony_ci#define ENTRY_TYPE_RDREMREG		270
5162306a36Sopenharmony_ci#define ENTRY_TYPE_WRREMREG		271
5262306a36Sopenharmony_ci#define ENTRY_TYPE_RDREMRAM		272
5362306a36Sopenharmony_ci#define ENTRY_TYPE_PCICFG		273
5462306a36Sopenharmony_ci#define ENTRY_TYPE_GET_SHADOW		274
5562306a36Sopenharmony_ci#define ENTRY_TYPE_WRITE_BUF		275
5662306a36Sopenharmony_ci#define ENTRY_TYPE_CONDITIONAL		276
5762306a36Sopenharmony_ci#define ENTRY_TYPE_RDPEPREG		277
5862306a36Sopenharmony_ci#define ENTRY_TYPE_WRPEPREG		278
5962306a36Sopenharmony_ci
6062306a36Sopenharmony_ci#define CAPTURE_FLAG_PHYS_ONLY		BIT_0
6162306a36Sopenharmony_ci#define CAPTURE_FLAG_PHYS_VIRT		BIT_1
6262306a36Sopenharmony_ci
6362306a36Sopenharmony_ci#define DRIVER_FLAG_SKIP_ENTRY		BIT_7
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_cistruct __packed qla27xx_fwdt_entry {
6662306a36Sopenharmony_ci	struct __packed {
6762306a36Sopenharmony_ci		__le32 type;
6862306a36Sopenharmony_ci		__le32 size;
6962306a36Sopenharmony_ci		uint32_t reserved_1;
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci		uint8_t  capture_flags;
7262306a36Sopenharmony_ci		uint8_t  reserved_2[2];
7362306a36Sopenharmony_ci		uint8_t  driver_flags;
7462306a36Sopenharmony_ci	} hdr;
7562306a36Sopenharmony_ci	union __packed {
7662306a36Sopenharmony_ci		struct __packed {
7762306a36Sopenharmony_ci		} t0;
7862306a36Sopenharmony_ci
7962306a36Sopenharmony_ci		struct __packed {
8062306a36Sopenharmony_ci		} t255;
8162306a36Sopenharmony_ci
8262306a36Sopenharmony_ci		struct __packed {
8362306a36Sopenharmony_ci			__le32 base_addr;
8462306a36Sopenharmony_ci			uint8_t  reg_width;
8562306a36Sopenharmony_ci			__le16 reg_count;
8662306a36Sopenharmony_ci			uint8_t  pci_offset;
8762306a36Sopenharmony_ci		} t256;
8862306a36Sopenharmony_ci
8962306a36Sopenharmony_ci		struct __packed {
9062306a36Sopenharmony_ci			__le32 base_addr;
9162306a36Sopenharmony_ci			__le32 write_data;
9262306a36Sopenharmony_ci			uint8_t  pci_offset;
9362306a36Sopenharmony_ci			uint8_t  reserved[3];
9462306a36Sopenharmony_ci		} t257;
9562306a36Sopenharmony_ci
9662306a36Sopenharmony_ci		struct __packed {
9762306a36Sopenharmony_ci			__le32 base_addr;
9862306a36Sopenharmony_ci			uint8_t  reg_width;
9962306a36Sopenharmony_ci			__le16 reg_count;
10062306a36Sopenharmony_ci			uint8_t  pci_offset;
10162306a36Sopenharmony_ci			uint8_t  banksel_offset;
10262306a36Sopenharmony_ci			uint8_t  reserved[3];
10362306a36Sopenharmony_ci			__le32 bank;
10462306a36Sopenharmony_ci		} t258;
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci		struct __packed {
10762306a36Sopenharmony_ci			__le32 base_addr;
10862306a36Sopenharmony_ci			__le32 write_data;
10962306a36Sopenharmony_ci			uint8_t  reserved[2];
11062306a36Sopenharmony_ci			uint8_t  pci_offset;
11162306a36Sopenharmony_ci			uint8_t  banksel_offset;
11262306a36Sopenharmony_ci			__le32 bank;
11362306a36Sopenharmony_ci		} t259;
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci		struct __packed {
11662306a36Sopenharmony_ci			uint8_t pci_offset;
11762306a36Sopenharmony_ci			uint8_t reserved[3];
11862306a36Sopenharmony_ci		} t260;
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_ci		struct __packed {
12162306a36Sopenharmony_ci			uint8_t pci_offset;
12262306a36Sopenharmony_ci			uint8_t reserved[3];
12362306a36Sopenharmony_ci			__le32 write_data;
12462306a36Sopenharmony_ci		} t261;
12562306a36Sopenharmony_ci
12662306a36Sopenharmony_ci		struct __packed {
12762306a36Sopenharmony_ci			uint8_t  ram_area;
12862306a36Sopenharmony_ci			uint8_t  reserved[3];
12962306a36Sopenharmony_ci			__le32 start_addr;
13062306a36Sopenharmony_ci			__le32 end_addr;
13162306a36Sopenharmony_ci		} t262;
13262306a36Sopenharmony_ci
13362306a36Sopenharmony_ci		struct __packed {
13462306a36Sopenharmony_ci			uint32_t num_queues;
13562306a36Sopenharmony_ci			uint8_t  queue_type;
13662306a36Sopenharmony_ci			uint8_t  reserved[3];
13762306a36Sopenharmony_ci		} t263;
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_ci		struct __packed {
14062306a36Sopenharmony_ci			uint32_t fce_trace_size;
14162306a36Sopenharmony_ci			uint64_t write_pointer;
14262306a36Sopenharmony_ci			uint64_t base_pointer;
14362306a36Sopenharmony_ci			uint32_t fce_enable_mb0;
14462306a36Sopenharmony_ci			uint32_t fce_enable_mb2;
14562306a36Sopenharmony_ci			uint32_t fce_enable_mb3;
14662306a36Sopenharmony_ci			uint32_t fce_enable_mb4;
14762306a36Sopenharmony_ci			uint32_t fce_enable_mb5;
14862306a36Sopenharmony_ci			uint32_t fce_enable_mb6;
14962306a36Sopenharmony_ci		} t264;
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci		struct __packed {
15262306a36Sopenharmony_ci		} t265;
15362306a36Sopenharmony_ci
15462306a36Sopenharmony_ci		struct __packed {
15562306a36Sopenharmony_ci		} t266;
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci		struct __packed {
15862306a36Sopenharmony_ci			uint8_t  pci_offset;
15962306a36Sopenharmony_ci			uint8_t  reserved[3];
16062306a36Sopenharmony_ci			__le32 data;
16162306a36Sopenharmony_ci		} t267;
16262306a36Sopenharmony_ci
16362306a36Sopenharmony_ci		struct __packed {
16462306a36Sopenharmony_ci			uint8_t  buf_type;
16562306a36Sopenharmony_ci			uint8_t  reserved[3];
16662306a36Sopenharmony_ci			uint32_t buf_size;
16762306a36Sopenharmony_ci			uint64_t start_addr;
16862306a36Sopenharmony_ci		} t268;
16962306a36Sopenharmony_ci
17062306a36Sopenharmony_ci		struct __packed {
17162306a36Sopenharmony_ci			uint32_t scratch_size;
17262306a36Sopenharmony_ci		} t269;
17362306a36Sopenharmony_ci
17462306a36Sopenharmony_ci		struct __packed {
17562306a36Sopenharmony_ci			__le32 addr;
17662306a36Sopenharmony_ci			__le32 count;
17762306a36Sopenharmony_ci		} t270;
17862306a36Sopenharmony_ci
17962306a36Sopenharmony_ci		struct __packed {
18062306a36Sopenharmony_ci			__le32 addr;
18162306a36Sopenharmony_ci			__le32 data;
18262306a36Sopenharmony_ci		} t271;
18362306a36Sopenharmony_ci
18462306a36Sopenharmony_ci		struct __packed {
18562306a36Sopenharmony_ci			__le32 addr;
18662306a36Sopenharmony_ci			__le32 count;
18762306a36Sopenharmony_ci		} t272;
18862306a36Sopenharmony_ci
18962306a36Sopenharmony_ci		struct __packed {
19062306a36Sopenharmony_ci			__le32 addr;
19162306a36Sopenharmony_ci			__le32 count;
19262306a36Sopenharmony_ci		} t273;
19362306a36Sopenharmony_ci
19462306a36Sopenharmony_ci		struct __packed {
19562306a36Sopenharmony_ci			uint32_t num_queues;
19662306a36Sopenharmony_ci			uint8_t  queue_type;
19762306a36Sopenharmony_ci			uint8_t  reserved[3];
19862306a36Sopenharmony_ci		} t274;
19962306a36Sopenharmony_ci
20062306a36Sopenharmony_ci		struct __packed {
20162306a36Sopenharmony_ci			__le32 length;
20262306a36Sopenharmony_ci			uint8_t  buffer[];
20362306a36Sopenharmony_ci		} t275;
20462306a36Sopenharmony_ci
20562306a36Sopenharmony_ci		struct __packed {
20662306a36Sopenharmony_ci			__le32 cond1;
20762306a36Sopenharmony_ci			__le32 cond2;
20862306a36Sopenharmony_ci		} t276;
20962306a36Sopenharmony_ci
21062306a36Sopenharmony_ci		struct __packed {
21162306a36Sopenharmony_ci			__le32 cmd_addr;
21262306a36Sopenharmony_ci			__le32 wr_cmd_data;
21362306a36Sopenharmony_ci			__le32 data_addr;
21462306a36Sopenharmony_ci		} t277;
21562306a36Sopenharmony_ci
21662306a36Sopenharmony_ci		struct __packed {
21762306a36Sopenharmony_ci			__le32 cmd_addr;
21862306a36Sopenharmony_ci			__le32 wr_cmd_data;
21962306a36Sopenharmony_ci			__le32 data_addr;
22062306a36Sopenharmony_ci			__le32 wr_data;
22162306a36Sopenharmony_ci		} t278;
22262306a36Sopenharmony_ci	};
22362306a36Sopenharmony_ci};
22462306a36Sopenharmony_ci
22562306a36Sopenharmony_ci#define T262_RAM_AREA_CRITICAL_RAM	1
22662306a36Sopenharmony_ci#define T262_RAM_AREA_EXTERNAL_RAM	2
22762306a36Sopenharmony_ci#define T262_RAM_AREA_SHARED_RAM	3
22862306a36Sopenharmony_ci#define T262_RAM_AREA_DDR_RAM		4
22962306a36Sopenharmony_ci#define T262_RAM_AREA_MISC		5
23062306a36Sopenharmony_ci
23162306a36Sopenharmony_ci#define T263_QUEUE_TYPE_REQ		1
23262306a36Sopenharmony_ci#define T263_QUEUE_TYPE_RSP		2
23362306a36Sopenharmony_ci#define T263_QUEUE_TYPE_ATIO		3
23462306a36Sopenharmony_ci
23562306a36Sopenharmony_ci#define T268_BUF_TYPE_EXTD_TRACE	1
23662306a36Sopenharmony_ci#define T268_BUF_TYPE_EXCH_BUFOFF	2
23762306a36Sopenharmony_ci#define T268_BUF_TYPE_EXTD_LOGIN	3
23862306a36Sopenharmony_ci#define T268_BUF_TYPE_REQ_MIRROR	4
23962306a36Sopenharmony_ci#define T268_BUF_TYPE_RSP_MIRROR	5
24062306a36Sopenharmony_ci
24162306a36Sopenharmony_ci#define T274_QUEUE_TYPE_REQ_SHAD	1
24262306a36Sopenharmony_ci#define T274_QUEUE_TYPE_RSP_SHAD	2
24362306a36Sopenharmony_ci#define T274_QUEUE_TYPE_ATIO_SHAD	3
24462306a36Sopenharmony_ci
24562306a36Sopenharmony_ci#endif
246