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