kernel-fxtec-pro1x/drivers/scsi/bfa/include/cs/bfa_log.h
Krishna Gudipati 0a4b1fc0b2 [SCSI] bfa: Replace bfa_get_attr() with specific APIs
bfa_ioc_attr_s is a big structure and some times could cause
stack overflow if defined locally, so add specific APIs that
are needed to replace the use of ioc_attr local var.

Signed-off-by: Krishna Gudipati <kgudipat@brocade.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
2010-03-07 13:07:00 +05:30

184 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[BFA_STRING_32]; /* 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