1*52fa7bf9SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-only */ 2a36c61f9SKrishna Gudipati /* 3889d0d42SAnil Gurumurthy * Copyright (c) 2005-2014 Brocade Communications Systems, Inc. 4889d0d42SAnil Gurumurthy * Copyright (c) 2014- QLogic Corporation. 5a36c61f9SKrishna Gudipati * All rights reserved 6889d0d42SAnil Gurumurthy * www.qlogic.com 7a36c61f9SKrishna Gudipati * 831e1d569SAnil Gurumurthy * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter. 9a36c61f9SKrishna Gudipati */ 10a36c61f9SKrishna Gudipati #ifndef __BFA_PORTLOG_H__ 11a36c61f9SKrishna Gudipati #define __BFA_PORTLOG_H__ 12a36c61f9SKrishna Gudipati 13a36c61f9SKrishna Gudipati #include "bfa_fc.h" 14a36c61f9SKrishna Gudipati #include "bfa_defs.h" 15a36c61f9SKrishna Gudipati 16a36c61f9SKrishna Gudipati #define BFA_PL_NLOG_ENTS 256 17a36c61f9SKrishna Gudipati #define BFA_PL_LOG_REC_INCR(_x) ((_x)++, (_x) %= BFA_PL_NLOG_ENTS) 18a36c61f9SKrishna Gudipati 19a36c61f9SKrishna Gudipati #define BFA_PL_STRING_LOG_SZ 32 /* number of chars in string log */ 20a36c61f9SKrishna Gudipati #define BFA_PL_INT_LOG_SZ 8 /* number of integers in the integer log */ 21a36c61f9SKrishna Gudipati 22a36c61f9SKrishna Gudipati enum bfa_plog_log_type { 23a36c61f9SKrishna Gudipati BFA_PL_LOG_TYPE_INVALID = 0, 24a36c61f9SKrishna Gudipati BFA_PL_LOG_TYPE_INT = 1, 25a36c61f9SKrishna Gudipati BFA_PL_LOG_TYPE_STRING = 2, 26a36c61f9SKrishna Gudipati }; 27a36c61f9SKrishna Gudipati 28a36c61f9SKrishna Gudipati /* 29a36c61f9SKrishna Gudipati * the (fixed size) record format for each entry in the portlog 30a36c61f9SKrishna Gudipati */ 31a36c61f9SKrishna Gudipati struct bfa_plog_rec_s { 32a36c61f9SKrishna Gudipati u64 tv; /* timestamp */ 33a36c61f9SKrishna Gudipati u8 port; /* Source port that logged this entry */ 34a36c61f9SKrishna Gudipati u8 mid; /* module id */ 35a36c61f9SKrishna Gudipati u8 eid; /* indicates Rx, Tx, IOCTL, etc. bfa_plog_eid */ 36a36c61f9SKrishna Gudipati u8 log_type; /* string/integer log, bfa_plog_log_type_t */ 37a36c61f9SKrishna Gudipati u8 log_num_ints; 38a36c61f9SKrishna Gudipati /* 39a36c61f9SKrishna Gudipati * interpreted only if log_type is INT_LOG. indicates number of 40a36c61f9SKrishna Gudipati * integers in the int_log[] (0-PL_INT_LOG_SZ). 41a36c61f9SKrishna Gudipati */ 42a36c61f9SKrishna Gudipati u8 rsvd; 43a36c61f9SKrishna Gudipati u16 misc; /* can be used to indicate fc frame length */ 44a36c61f9SKrishna Gudipati union { 45a36c61f9SKrishna Gudipati char string_log[BFA_PL_STRING_LOG_SZ]; 46a36c61f9SKrishna Gudipati u32 int_log[BFA_PL_INT_LOG_SZ]; 47a36c61f9SKrishna Gudipati } log_entry; 48a36c61f9SKrishna Gudipati 49a36c61f9SKrishna Gudipati }; 50a36c61f9SKrishna Gudipati 51a36c61f9SKrishna Gudipati /* 52a36c61f9SKrishna Gudipati * the following #defines will be used by the logging entities to indicate 53a36c61f9SKrishna Gudipati * their module id. BFAL will convert the integer value to string format 54a36c61f9SKrishna Gudipati * 55a36c61f9SKrishna Gudipati * process to be used while changing the following #defines: 56a36c61f9SKrishna Gudipati * - Always add new entries at the end 57a36c61f9SKrishna Gudipati * - define corresponding string in BFAL 58a36c61f9SKrishna Gudipati * - Do not remove any entry or rearrange the order. 59a36c61f9SKrishna Gudipati */ 60a36c61f9SKrishna Gudipati enum bfa_plog_mid { 61a36c61f9SKrishna Gudipati BFA_PL_MID_INVALID = 0, 62a36c61f9SKrishna Gudipati BFA_PL_MID_DEBUG = 1, 63a36c61f9SKrishna Gudipati BFA_PL_MID_DRVR = 2, 64a36c61f9SKrishna Gudipati BFA_PL_MID_HAL = 3, 65a36c61f9SKrishna Gudipati BFA_PL_MID_HAL_FCXP = 4, 66a36c61f9SKrishna Gudipati BFA_PL_MID_HAL_UF = 5, 67a36c61f9SKrishna Gudipati BFA_PL_MID_FCS = 6, 68a36c61f9SKrishna Gudipati BFA_PL_MID_LPS = 7, 69a36c61f9SKrishna Gudipati BFA_PL_MID_MAX = 8 70a36c61f9SKrishna Gudipati }; 71a36c61f9SKrishna Gudipati 72a36c61f9SKrishna Gudipati #define BFA_PL_MID_STRLEN 8 73a36c61f9SKrishna Gudipati struct bfa_plog_mid_strings_s { 74a36c61f9SKrishna Gudipati char m_str[BFA_PL_MID_STRLEN]; 75a36c61f9SKrishna Gudipati }; 76a36c61f9SKrishna Gudipati 77a36c61f9SKrishna Gudipati /* 78a36c61f9SKrishna Gudipati * the following #defines will be used by the logging entities to indicate 79a36c61f9SKrishna Gudipati * their event type. BFAL will convert the integer value to string format 80a36c61f9SKrishna Gudipati * 81a36c61f9SKrishna Gudipati * process to be used while changing the following #defines: 82a36c61f9SKrishna Gudipati * - Always add new entries at the end 83a36c61f9SKrishna Gudipati * - define corresponding string in BFAL 84a36c61f9SKrishna Gudipati * - Do not remove any entry or rearrange the order. 85a36c61f9SKrishna Gudipati */ 86a36c61f9SKrishna Gudipati enum bfa_plog_eid { 87a36c61f9SKrishna Gudipati BFA_PL_EID_INVALID = 0, 88a36c61f9SKrishna Gudipati BFA_PL_EID_IOC_DISABLE = 1, 89a36c61f9SKrishna Gudipati BFA_PL_EID_IOC_ENABLE = 2, 90a36c61f9SKrishna Gudipati BFA_PL_EID_PORT_DISABLE = 3, 91a36c61f9SKrishna Gudipati BFA_PL_EID_PORT_ENABLE = 4, 92a36c61f9SKrishna Gudipati BFA_PL_EID_PORT_ST_CHANGE = 5, 93a36c61f9SKrishna Gudipati BFA_PL_EID_TX = 6, 94a36c61f9SKrishna Gudipati BFA_PL_EID_TX_ACK1 = 7, 95a36c61f9SKrishna Gudipati BFA_PL_EID_TX_RJT = 8, 96a36c61f9SKrishna Gudipati BFA_PL_EID_TX_BSY = 9, 97a36c61f9SKrishna Gudipati BFA_PL_EID_RX = 10, 98a36c61f9SKrishna Gudipati BFA_PL_EID_RX_ACK1 = 11, 99a36c61f9SKrishna Gudipati BFA_PL_EID_RX_RJT = 12, 100a36c61f9SKrishna Gudipati BFA_PL_EID_RX_BSY = 13, 101a36c61f9SKrishna Gudipati BFA_PL_EID_CT_IN = 14, 102a36c61f9SKrishna Gudipati BFA_PL_EID_CT_OUT = 15, 103a36c61f9SKrishna Gudipati BFA_PL_EID_DRIVER_START = 16, 104a36c61f9SKrishna Gudipati BFA_PL_EID_RSCN = 17, 105a36c61f9SKrishna Gudipati BFA_PL_EID_DEBUG = 18, 106a36c61f9SKrishna Gudipati BFA_PL_EID_MISC = 19, 107a36c61f9SKrishna Gudipati BFA_PL_EID_FIP_FCF_DISC = 20, 108a36c61f9SKrishna Gudipati BFA_PL_EID_FIP_FCF_CVL = 21, 109a36c61f9SKrishna Gudipati BFA_PL_EID_LOGIN = 22, 110a36c61f9SKrishna Gudipati BFA_PL_EID_LOGO = 23, 111a36c61f9SKrishna Gudipati BFA_PL_EID_TRUNK_SCN = 24, 112a36c61f9SKrishna Gudipati BFA_PL_EID_MAX 113a36c61f9SKrishna Gudipati }; 114a36c61f9SKrishna Gudipati 115a36c61f9SKrishna Gudipati #define BFA_PL_ENAME_STRLEN 8 116a36c61f9SKrishna Gudipati struct bfa_plog_eid_strings_s { 117a36c61f9SKrishna Gudipati char e_str[BFA_PL_ENAME_STRLEN]; 118a36c61f9SKrishna Gudipati }; 119a36c61f9SKrishna Gudipati 120a36c61f9SKrishna Gudipati #define BFA_PL_SIG_LEN 8 121a36c61f9SKrishna Gudipati #define BFA_PL_SIG_STR "12pl123" 122a36c61f9SKrishna Gudipati 123a36c61f9SKrishna Gudipati /* 124a36c61f9SKrishna Gudipati * per port circular log buffer 125a36c61f9SKrishna Gudipati */ 126a36c61f9SKrishna Gudipati struct bfa_plog_s { 127a36c61f9SKrishna Gudipati char plog_sig[BFA_PL_SIG_LEN]; /* Start signature */ 128a36c61f9SKrishna Gudipati u8 plog_enabled; 129a36c61f9SKrishna Gudipati u8 rsvd[7]; 130a36c61f9SKrishna Gudipati u32 ticks; 131a36c61f9SKrishna Gudipati u16 head; 132a36c61f9SKrishna Gudipati u16 tail; 133a36c61f9SKrishna Gudipati struct bfa_plog_rec_s plog_recs[BFA_PL_NLOG_ENTS]; 134a36c61f9SKrishna Gudipati }; 135a36c61f9SKrishna Gudipati 136a36c61f9SKrishna Gudipati void bfa_plog_init(struct bfa_plog_s *plog); 137a36c61f9SKrishna Gudipati void bfa_plog_str(struct bfa_plog_s *plog, enum bfa_plog_mid mid, 138a36c61f9SKrishna Gudipati enum bfa_plog_eid event, u16 misc, char *log_str); 139a36c61f9SKrishna Gudipati void bfa_plog_intarr(struct bfa_plog_s *plog, enum bfa_plog_mid mid, 140a36c61f9SKrishna Gudipati enum bfa_plog_eid event, u16 misc, 141a36c61f9SKrishna Gudipati u32 *intarr, u32 num_ints); 142a36c61f9SKrishna Gudipati void bfa_plog_fchdr(struct bfa_plog_s *plog, enum bfa_plog_mid mid, 143a36c61f9SKrishna Gudipati enum bfa_plog_eid event, u16 misc, struct fchs_s *fchdr); 144a36c61f9SKrishna Gudipati void bfa_plog_fchdr_and_pl(struct bfa_plog_s *plog, enum bfa_plog_mid mid, 145a36c61f9SKrishna Gudipati enum bfa_plog_eid event, u16 misc, 146a36c61f9SKrishna Gudipati struct fchs_s *fchdr, u32 pld_w0); 147a36c61f9SKrishna Gudipati 148a36c61f9SKrishna Gudipati #endif /* __BFA_PORTLOG_H__ */ 149