Linux-libre 2.6.32.58-gnu1
[librecmc/linux-libre.git] / drivers / scsi / bfa / include / cs / bfa_log.h
1 /*
2  * Copyright (c) 2005-2009 Brocade Communications Systems, Inc.
3  * All rights reserved
4  * www.brocade.com
5  *
6  * Linux driver for Brocade Fibre Channel Host Bus Adapter.
7  *
8  * This program is free software; you can redistribute it and/or modify it
9  * under the terms of the GNU General Public License (GPL) Version 2 as
10  * published by the Free Software Foundation
11  *
12  * This program is distributed in the hope that it will be useful, but
13  * WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * General Public License for more details.
16  */
17
18 /**
19  *  bfa_log.h BFA log library data structure and function definition
20  */
21
22 #ifndef __BFA_LOG_H__
23 #define __BFA_LOG_H__
24
25 #include <bfa_os_inc.h>
26 #include <defs/bfa_defs_status.h>
27 #include <defs/bfa_defs_aen.h>
28
29 /*
30  * BFA log module definition
31  *
32  * To create a new module id:
33  * Add a #define at the end of the list below. Select a value for your
34  * definition so that it is one (1) greater than the previous
35  * definition. Modify the definition of BFA_LOG_MODULE_ID_MAX to become
36  * your new definition.
37  * Should have no gaps in between the values because this is used in arrays.
38  * IMPORTANT: AEN_IDs must be at the begining, otherwise update bfa_defs_aen.h
39  */
40
41 enum bfa_log_module_id {
42         BFA_LOG_UNUSED_ID       = 0,
43
44         /* AEN defs begin */
45         BFA_LOG_AEN_MIN         = BFA_LOG_UNUSED_ID,
46
47         BFA_LOG_AEN_ID_ADAPTER  = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ADAPTER,/* 1 */
48         BFA_LOG_AEN_ID_PORT     = BFA_LOG_AEN_MIN + BFA_AEN_CAT_PORT,   /* 2 */
49         BFA_LOG_AEN_ID_LPORT    = BFA_LOG_AEN_MIN + BFA_AEN_CAT_LPORT,  /* 3 */
50         BFA_LOG_AEN_ID_RPORT    = BFA_LOG_AEN_MIN + BFA_AEN_CAT_RPORT,  /* 4 */
51         BFA_LOG_AEN_ID_ITNIM    = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ITNIM,  /* 5 */
52         BFA_LOG_AEN_ID_TIN      = BFA_LOG_AEN_MIN + BFA_AEN_CAT_TIN,    /* 6 */
53         BFA_LOG_AEN_ID_IPFC     = BFA_LOG_AEN_MIN + BFA_AEN_CAT_IPFC,   /* 7 */
54         BFA_LOG_AEN_ID_AUDIT    = BFA_LOG_AEN_MIN + BFA_AEN_CAT_AUDIT,  /* 8 */
55         BFA_LOG_AEN_ID_IOC      = BFA_LOG_AEN_MIN + BFA_AEN_CAT_IOC,    /* 9 */
56         BFA_LOG_AEN_ID_ETHPORT  = BFA_LOG_AEN_MIN + BFA_AEN_CAT_ETHPORT,/* 10 */
57
58         BFA_LOG_AEN_MAX         = BFA_LOG_AEN_ID_ETHPORT,
59         /* AEN defs end */
60
61         BFA_LOG_MODULE_ID_MIN   = BFA_LOG_AEN_MAX,
62
63         BFA_LOG_FW_ID           = BFA_LOG_MODULE_ID_MIN + 1,
64         BFA_LOG_HAL_ID          = BFA_LOG_MODULE_ID_MIN + 2,
65         BFA_LOG_FCS_ID          = BFA_LOG_MODULE_ID_MIN + 3,
66         BFA_LOG_WDRV_ID         = BFA_LOG_MODULE_ID_MIN + 4,
67         BFA_LOG_LINUX_ID        = BFA_LOG_MODULE_ID_MIN + 5,
68         BFA_LOG_SOLARIS_ID      = BFA_LOG_MODULE_ID_MIN + 6,
69
70         BFA_LOG_MODULE_ID_MAX   = BFA_LOG_SOLARIS_ID,
71
72         /* Not part of any arrays */
73         BFA_LOG_MODULE_ID_ALL   = BFA_LOG_MODULE_ID_MAX + 1,
74         BFA_LOG_AEN_ALL         = BFA_LOG_MODULE_ID_MAX + 2,
75         BFA_LOG_DRV_ALL         = BFA_LOG_MODULE_ID_MAX + 3,
76 };
77
78 /*
79  * BFA log catalog name
80  */
81 #define BFA_LOG_CAT_NAME        "BFA"
82
83 /*
84  * bfa log severity values
85  */
86 enum bfa_log_severity {
87         BFA_LOG_INVALID = 0,
88         BFA_LOG_CRITICAL = 1,
89         BFA_LOG_ERROR = 2,
90         BFA_LOG_WARNING = 3,
91         BFA_LOG_INFO = 4,
92         BFA_LOG_NONE = 5,
93         BFA_LOG_LEVEL_MAX = BFA_LOG_NONE
94 };
95
96 #define BFA_LOG_MODID_OFFSET            16
97
98
99 struct bfa_log_msgdef_s {
100         u32     msg_id;         /*  message id */
101         int             attributes;     /*  attributes */
102         int             severity;       /*  severity level */
103         char            *msg_value;
104                                         /*  msg string */
105         char            *message;
106                                         /*  msg format string */
107         int             arg_type;       /*  argument type */
108         int             arg_num;        /*  number of argument */
109 };
110
111 /*
112  * supported argument type
113  */
114 enum bfa_log_arg_type {
115         BFA_LOG_S = 0,          /*  string */
116         BFA_LOG_D,              /*  decimal */
117         BFA_LOG_I,              /*  integer */
118         BFA_LOG_O,              /*  oct number */
119         BFA_LOG_U,              /*  unsigned integer */
120         BFA_LOG_X,              /*  hex number */
121         BFA_LOG_F,              /*  floating */
122         BFA_LOG_C,              /*  character */
123         BFA_LOG_L,              /*  double */
124         BFA_LOG_P               /*  pointer */
125 };
126
127 #define BFA_LOG_ARG_TYPE        2
128 #define BFA_LOG_ARG0            (0 * BFA_LOG_ARG_TYPE)
129 #define BFA_LOG_ARG1            (1 * BFA_LOG_ARG_TYPE)
130 #define BFA_LOG_ARG2            (2 * BFA_LOG_ARG_TYPE)
131 #define BFA_LOG_ARG3            (3 * BFA_LOG_ARG_TYPE)
132
133 #define BFA_LOG_GET_MOD_ID(msgid) ((msgid >> BFA_LOG_MODID_OFFSET) & 0xff)
134 #define BFA_LOG_GET_MSG_IDX(msgid) (msgid & 0xffff)
135 #define BFA_LOG_GET_MSG_ID(msgdef) ((msgdef)->msg_id)
136 #define BFA_LOG_GET_MSG_FMT_STRING(msgdef) ((msgdef)->message)
137 #define BFA_LOG_GET_SEVERITY(msgdef) ((msgdef)->severity)
138
139 /*
140  * Event attributes
141  */
142 #define BFA_LOG_ATTR_NONE       0
143 #define BFA_LOG_ATTR_AUDIT      1
144 #define BFA_LOG_ATTR_LOG        2
145 #define BFA_LOG_ATTR_FFDC       4
146
147 #define BFA_LOG_CREATE_ID(msw, lsw) \
148         (((u32)msw << BFA_LOG_MODID_OFFSET) | lsw)
149
150 struct bfa_log_mod_s;
151
152 /**
153  * callback function
154  */
155 typedef void (*bfa_log_cb_t)(struct bfa_log_mod_s *log_mod, u32 msg_id,
156                         const char *format, ...);
157
158
159 struct bfa_log_mod_s {
160         char            instance_info[16];      /*  instance info */
161         int             log_level[BFA_LOG_MODULE_ID_MAX + 1];
162                                                 /*  log level for modules */
163         bfa_log_cb_t    cbfn;                   /*  callback function */
164 };
165
166 extern int bfa_log_init(struct bfa_log_mod_s *log_mod,
167                         char *instance_name, bfa_log_cb_t cbfn);
168 extern int bfa_log(struct bfa_log_mod_s *log_mod, u32 msg_id, ...);
169 extern bfa_status_t bfa_log_set_level(struct bfa_log_mod_s *log_mod,
170                         int mod_id, enum bfa_log_severity log_level);
171 extern bfa_status_t bfa_log_set_level_all(struct bfa_log_mod_s *log_mod,
172                         enum bfa_log_severity log_level);
173 extern bfa_status_t bfa_log_set_level_aen(struct bfa_log_mod_s *log_mod,
174                         enum bfa_log_severity log_level);
175 extern enum bfa_log_severity bfa_log_get_level(struct bfa_log_mod_s *log_mod,
176                         int mod_id);
177 extern enum bfa_log_severity bfa_log_get_msg_level(
178                         struct bfa_log_mod_s *log_mod, u32 msg_id);
179 /*
180  * array of messages generated from xml files
181  */
182 extern struct bfa_log_msgdef_s bfa_log_msg_array[];
183
184 #endif