185 lines
5.5 KiB
C
185 lines
5.5 KiB
C
/*
|
|
* Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
|
|
* All rights reserved
|
|
* www.brocade.com
|
|
*
|
|
* Linux driver for Brocade Fibre Channel Host Bus Adapter.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License (GPL) Version 2 as
|
|
* published by the Free Software Foundation
|
|
*
|
|
* This program is distributed in the hope that it will be useful, but
|
|
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* General Public License for more details.
|
|
*/
|
|
|
|
/**
|
|
* bfa_log.h BFA log library data structure and function definition
|
|
*/
|
|
|
|
#ifndef __BFA_LOG_H__
|
|
#define __BFA_LOG_H__
|
|
|
|
#include <bfa_os_inc.h>
|
|
#include <defs/bfa_defs_status.h>
|
|
#include <defs/bfa_defs_aen.h>
|
|
|
|
/*
|
|
* BFA log module definition
|
|
*
|
|
* To create a new module id:
|
|
* Add a #define at the end of the list below. Select a value for your
|
|
* definition so that it is one (1) greater than the previous
|
|
* definition. Modify the definition of BFA_LOG_MODULE_ID_MAX to become
|
|
* your new definition.
|
|
* Should have no gaps in between the values because this is used in arrays.
|
|
* IMPORTANT: AEN_IDs must be at the begining, otherwise update bfa_defs_aen.h
|
|
*/
|
|
|
|
enum bfa_log_module_id {
|
|
BFA_LOG_UNUSED_ID = 0,
|
|
|
|
/* AEN defs begin */
|
|
BFA_LOG_AEN_MIN = BFA_LOG_UNUSED_ID,
|
|
|
|
BFA_LOG_AEN_ID_ADAPTER = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ADAPTER,/* 1 */
|
|
BFA_LOG_AEN_ID_PORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_PORT, /* 2 */
|
|
BFA_LOG_AEN_ID_LPORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_LPORT, /* 3 */
|
|
BFA_LOG_AEN_ID_RPORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_RPORT, /* 4 */
|
|
BFA_LOG_AEN_ID_ITNIM = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ITNIM, /* 5 */
|
|
BFA_LOG_AEN_ID_TIN = BFA_LOG_AEN_MIN + BFA_AEN_CAT_TIN, /* 6 */
|
|
BFA_LOG_AEN_ID_IPFC = BFA_LOG_AEN_MIN + BFA_AEN_CAT_IPFC, /* 7 */
|
|
BFA_LOG_AEN_ID_AUDIT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_AUDIT, /* 8 */
|
|
BFA_LOG_AEN_ID_IOC = BFA_LOG_AEN_MIN + BFA_AEN_CAT_IOC, /* 9 */
|
|
BFA_LOG_AEN_ID_ETHPORT = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ETHPORT,/* 10 */
|
|
|
|
BFA_LOG_AEN_MAX = BFA_LOG_AEN_ID_ETHPORT,
|
|
/* AEN defs end */
|
|
|
|
BFA_LOG_MODULE_ID_MIN = BFA_LOG_AEN_MAX,
|
|
|
|
BFA_LOG_FW_ID = BFA_LOG_MODULE_ID_MIN + 1,
|
|
BFA_LOG_HAL_ID = BFA_LOG_MODULE_ID_MIN + 2,
|
|
BFA_LOG_FCS_ID = BFA_LOG_MODULE_ID_MIN + 3,
|
|
BFA_LOG_WDRV_ID = BFA_LOG_MODULE_ID_MIN + 4,
|
|
BFA_LOG_LINUX_ID = BFA_LOG_MODULE_ID_MIN + 5,
|
|
BFA_LOG_SOLARIS_ID = BFA_LOG_MODULE_ID_MIN + 6,
|
|
|
|
BFA_LOG_MODULE_ID_MAX = BFA_LOG_SOLARIS_ID,
|
|
|
|
/* Not part of any arrays */
|
|
BFA_LOG_MODULE_ID_ALL = BFA_LOG_MODULE_ID_MAX + 1,
|
|
BFA_LOG_AEN_ALL = BFA_LOG_MODULE_ID_MAX + 2,
|
|
BFA_LOG_DRV_ALL = BFA_LOG_MODULE_ID_MAX + 3,
|
|
};
|
|
|
|
/*
|
|
* BFA log catalog name
|
|
*/
|
|
#define BFA_LOG_CAT_NAME "BFA"
|
|
|
|
/*
|
|
* bfa log severity values
|
|
*/
|
|
enum bfa_log_severity {
|
|
BFA_LOG_INVALID = 0,
|
|
BFA_LOG_CRITICAL = 1,
|
|
BFA_LOG_ERROR = 2,
|
|
BFA_LOG_WARNING = 3,
|
|
BFA_LOG_INFO = 4,
|
|
BFA_LOG_NONE = 5,
|
|
BFA_LOG_LEVEL_MAX = BFA_LOG_NONE
|
|
};
|
|
|
|
#define BFA_LOG_MODID_OFFSET 16
|
|
|
|
|
|
struct bfa_log_msgdef_s {
|
|
u32 msg_id; /* message id */
|
|
int attributes; /* attributes */
|
|
int severity; /* severity level */
|
|
char *msg_value;
|
|
/* msg string */
|
|
char *message;
|
|
/* msg format string */
|
|
int arg_type; /* argument type */
|
|
int arg_num; /* number of argument */
|
|
};
|
|
|
|
/*
|
|
* supported argument type
|
|
*/
|
|
enum bfa_log_arg_type {
|
|
BFA_LOG_S = 0, /* string */
|
|
BFA_LOG_D, /* decimal */
|
|
BFA_LOG_I, /* integer */
|
|
BFA_LOG_O, /* oct number */
|
|
BFA_LOG_U, /* unsigned integer */
|
|
BFA_LOG_X, /* hex number */
|
|
BFA_LOG_F, /* floating */
|
|
BFA_LOG_C, /* character */
|
|
BFA_LOG_L, /* double */
|
|
BFA_LOG_P /* pointer */
|
|
};
|
|
|
|
#define BFA_LOG_ARG_TYPE 2
|
|
#define BFA_LOG_ARG0 (0 * BFA_LOG_ARG_TYPE)
|
|
#define BFA_LOG_ARG1 (1 * BFA_LOG_ARG_TYPE)
|
|
#define BFA_LOG_ARG2 (2 * BFA_LOG_ARG_TYPE)
|
|
#define BFA_LOG_ARG3 (3 * BFA_LOG_ARG_TYPE)
|
|
|
|
#define BFA_LOG_GET_MOD_ID(msgid) ((msgid >> BFA_LOG_MODID_OFFSET) & 0xff)
|
|
#define BFA_LOG_GET_MSG_IDX(msgid) (msgid & 0xffff)
|
|
#define BFA_LOG_GET_MSG_ID(msgdef) ((msgdef)->msg_id)
|
|
#define BFA_LOG_GET_MSG_FMT_STRING(msgdef) ((msgdef)->message)
|
|
#define BFA_LOG_GET_SEVERITY(msgdef) ((msgdef)->severity)
|
|
|
|
/*
|
|
* Event attributes
|
|
*/
|
|
#define BFA_LOG_ATTR_NONE 0
|
|
#define BFA_LOG_ATTR_AUDIT 1
|
|
#define BFA_LOG_ATTR_LOG 2
|
|
#define BFA_LOG_ATTR_FFDC 4
|
|
|
|
#define BFA_LOG_CREATE_ID(msw, lsw) \
|
|
(((u32)msw << BFA_LOG_MODID_OFFSET) | lsw)
|
|
|
|
struct bfa_log_mod_s;
|
|
|
|
/**
|
|
* callback function
|
|
*/
|
|
typedef void (*bfa_log_cb_t)(struct bfa_log_mod_s *log_mod, u32 msg_id,
|
|
const char *format, ...);
|
|
|
|
|
|
struct bfa_log_mod_s {
|
|
char instance_info[16]; /* instance info */
|
|
int log_level[BFA_LOG_MODULE_ID_MAX + 1];
|
|
/* log level for modules */
|
|
bfa_log_cb_t cbfn; /* callback function */
|
|
};
|
|
|
|
extern int bfa_log_init(struct bfa_log_mod_s *log_mod,
|
|
char *instance_name, bfa_log_cb_t cbfn);
|
|
extern int bfa_log(struct bfa_log_mod_s *log_mod, u32 msg_id, ...);
|
|
extern bfa_status_t bfa_log_set_level(struct bfa_log_mod_s *log_mod,
|
|
int mod_id, enum bfa_log_severity log_level);
|
|
extern bfa_status_t bfa_log_set_level_all(struct bfa_log_mod_s *log_mod,
|
|
enum bfa_log_severity log_level);
|
|
extern bfa_status_t bfa_log_set_level_aen(struct bfa_log_mod_s *log_mod,
|
|
enum bfa_log_severity log_level);
|
|
extern enum bfa_log_severity bfa_log_get_level(struct bfa_log_mod_s *log_mod,
|
|
int mod_id);
|
|
extern enum bfa_log_severity bfa_log_get_msg_level(
|
|
struct bfa_log_mod_s *log_mod, u32 msg_id);
|
|
/*
|
|
* array of messages generated from xml files
|
|
*/
|
|
extern struct bfa_log_msgdef_s bfa_log_msg_array[];
|
|
|
|
#endif
|