Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

3 Commits   0 Branches   0 Tags
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   1) /*******************************************************************
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   2)  * This file is part of the Emulex Linux Device Driver for         *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   3)  * Fibre Channel Host Bus Adapters.                                *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   4)  * Copyright (C) 2017-2019 Broadcom. All Rights Reserved. The term *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   5)  * “Broadcom” refers to Broadcom Inc and/or its subsidiaries.  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   6)  * Copyright (C) 2004-2016 Emulex.  All rights reserved.           *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   7)  * EMULEX and SLI are trademarks of Emulex.                        *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   8)  * www.broadcom.com                                                *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300   9)  *                                                                 *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  10)  * This program is free software; you can redistribute it and/or   *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  11)  * modify it under the terms of version 2 of the GNU General       *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  12)  * Public License as published by the Free Software Foundation.    *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  13)  * This program is distributed in the hope that it will be useful. *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  14)  * ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND          *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  15)  * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY,  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  16)  * FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE      *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  17)  * DISCLAIMED, EXCEPT TO THE EXTENT THAT SUCH DISCLAIMERS ARE HELD *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  18)  * TO BE LEGALLY INVALID.  See the GNU General Public License for  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  19)  * more details, a copy of which can be found in the file COPYING  *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  20)  * included with this package.                                     *
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  21)  *******************************************************************/
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  22) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  23) #include <asm/byteorder.h>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  24) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  25) struct lpfc_hba;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  26) #define LPFC_FCP_CDB_LEN 16
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  27) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  28) #define list_remove_head(list, entry, type, member)		\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  29) 	do {							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  30) 	entry = NULL;						\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  31) 	if (!list_empty(list)) {				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  32) 		entry = list_entry((list)->next, type, member);	\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  33) 		list_del_init(&entry->member);			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  34) 	}							\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  35) 	} while(0)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  36) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  37) #define list_get_first(list, type, member)			\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  38) 	(list_empty(list)) ? NULL :				\
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  39) 	list_entry((list)->next, type, member)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  40) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  41) /* per-port data that is allocated in the FC transport for us */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  42) struct lpfc_rport_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  43) 	struct lpfc_nodelist *pnode;	/* Pointer to the node structure. */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  44) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  45) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  46) struct lpfc_device_id {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  47) 	struct lpfc_name vport_wwpn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  48) 	struct lpfc_name target_wwpn;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  49) 	uint64_t lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  50) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  51) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  52) struct lpfc_device_data {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  53) 	struct list_head listentry;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  54) 	struct lpfc_rport_data *rport_data;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  55) 	struct lpfc_device_id device_id;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  56) 	uint8_t priority;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  57) 	bool oas_enabled;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  58) 	bool available;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  59) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  60) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  61) struct fcp_rsp {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  62) 	uint32_t rspRsvd1;	/* FC Word 0, byte 0:3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  63) 	uint32_t rspRsvd2;	/* FC Word 1, byte 0:3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  64) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  65) 	uint8_t rspStatus0;	/* FCP_STATUS byte 0 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  66) 	uint8_t rspStatus1;	/* FCP_STATUS byte 1 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  67) 	uint8_t rspStatus2;	/* FCP_STATUS byte 2 field validity */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  68) #define RSP_LEN_VALID  0x01	/* bit 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  69) #define SNS_LEN_VALID  0x02	/* bit 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  70) #define RESID_OVER     0x04	/* bit 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  71) #define RESID_UNDER    0x08	/* bit 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  72) 	uint8_t rspStatus3;	/* FCP_STATUS byte 3 SCSI status byte */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  73) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  74) 	uint32_t rspResId;	/* Residual xfer if residual count field set in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  75) 				   fcpStatus2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  76) 	/* Received in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  77) 	uint32_t rspSnsLen;	/* Length of sense data in fcpSnsInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  78) 	/* Received in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  79) 	uint32_t rspRspLen;	/* Length of FCP response data in fcpRspInfo */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  80) 	/* Received in Big Endian format */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  81) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  82) 	uint8_t rspInfo0;	/* FCP_RSP_INFO byte 0 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  83) 	uint8_t rspInfo1;	/* FCP_RSP_INFO byte 1 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  84) 	uint8_t rspInfo2;	/* FCP_RSP_INFO byte 2 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  85) 	uint8_t rspInfo3;	/* FCP_RSP_INFO RSP_CODE byte 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  86) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  87) #define RSP_NO_FAILURE       0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  88) #define RSP_DATA_BURST_ERR   0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  89) #define RSP_CMD_FIELD_ERR    0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  90) #define RSP_RO_MISMATCH_ERR  0x03
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  91) #define RSP_TM_NOT_SUPPORTED 0x04	/* Task mgmt function not supported */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  92) #define RSP_TM_NOT_COMPLETED 0x05	/* Task mgmt function not performed */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  93) #define RSP_TM_INVALID_LU    0x09	/* Task mgmt function to invalid LU */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  94) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  95) 	uint32_t rspInfoRsvd;	/* FCP_RSP_INFO bytes 4-7 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  96) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  97) 	uint8_t rspSnsInfo[128];
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  98) #define SNS_ILLEGAL_REQ 0x05	/* sense key is byte 3 ([2]) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300  99) #define SNSCOD_BADCMD 0x20	/* sense code is byte 13 ([12]) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) struct fcp_cmnd {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) 	struct scsi_lun  fcp_lun;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) 	uint8_t fcpCntl0;	/* FCP_CNTL byte 0 (reserved) */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) 	uint8_t fcpCntl1;	/* FCP_CNTL byte 1 task codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107) #define  SIMPLE_Q        0x00
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) #define  HEAD_OF_Q       0x01
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) #define  ORDERED_Q       0x02
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110) #define  ACA_Q           0x04
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) #define  UNTAGGED        0x05
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) 	uint8_t fcpCntl2;	/* FCP_CTL byte 2 task management codes */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113) #define  FCP_ABORT_TASK_SET  0x02	/* Bit 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) #define  FCP_CLEAR_TASK_SET  0x04	/* bit 2 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) #define  FCP_BUS_RESET       0x08	/* bit 3 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116) #define  FCP_LUN_RESET       0x10	/* bit 4 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) #define  FCP_TARGET_RESET    0x20	/* bit 5 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) #define  FCP_CLEAR_ACA       0x40	/* bit 6 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) #define  FCP_TERMINATE_TASK  0x80	/* bit 7 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) 	uint8_t fcpCntl3;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) #define  WRITE_DATA      0x01	/* Bit 0 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) #define  READ_DATA       0x02	/* Bit 1 */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) 	uint8_t fcpCdb[LPFC_FCP_CDB_LEN]; /* SRB cdb field is copied here */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125) 	uint32_t fcpDl;		/* Total transfer length */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) struct lpfc_scsicmd_bkt {
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) 	uint32_t cmd_count;
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) };
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) #define LPFC_SCSI_DMA_EXT_SIZE	264
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) #define LPFC_BPL_SIZE		1024
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) #define MDAC_DIRECT_CMD		0x22
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) #define FIND_FIRST_OAS_LUN	0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) #define NO_MORE_OAS_LUN		-1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) #define NOT_OAS_ENABLED_LUN	NO_MORE_OAS_LUN
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) #ifndef FC_PORTSPEED_128GBIT
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) #define FC_PORTSPEED_128GBIT	0x2000
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) #endif
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) #define TXRDY_PAYLOAD_LEN	12
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) 
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) /* For sysfs/debugfs tmp string max len */
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148) #define LPFC_MAX_SCSI_INFO_TMP_LEN	79
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149)