ctcm: infrastructure for replaced ctc driver
ctcm driver supports the channel-to-channel connections of the old ctc driver plus an additional MPC protocol to provide SNA connectivity. This new ctcm driver replaces the existing ctc driver. Signed-off-by: Peter Tiedemann <ptiedem@de.ibm.com> Signed-off-by: Ursula Braun <braunu@de.ibm.com> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
committed by
Jeff Garzik
parent
f423f73506
commit
293d984f0e
158
drivers/s390/net/ctcm_dbug.h
Normal file
158
drivers/s390/net/ctcm_dbug.h
Normal file
@ -0,0 +1,158 @@
|
||||
/*
|
||||
* drivers/s390/net/ctcm_dbug.h
|
||||
*
|
||||
* Copyright IBM Corp. 2001, 2007
|
||||
* Authors: Peter Tiedemann (ptiedem@de.ibm.com)
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef _CTCM_DBUG_H_
|
||||
#define _CTCM_DBUG_H_
|
||||
|
||||
/*
|
||||
* Debug Facility stuff
|
||||
*/
|
||||
|
||||
#include <asm/debug.h>
|
||||
|
||||
#ifdef DEBUG
|
||||
#define do_debug 1
|
||||
#else
|
||||
#define do_debug 0
|
||||
#endif
|
||||
#ifdef DEBUGDATA
|
||||
#define do_debug_data 1
|
||||
#else
|
||||
#define do_debug_data 0
|
||||
#endif
|
||||
#ifdef DEBUGCCW
|
||||
#define do_debug_ccw 1
|
||||
#else
|
||||
#define do_debug_ccw 0
|
||||
#endif
|
||||
|
||||
/* define dbf debug levels similar to kernel msg levels */
|
||||
#define CTC_DBF_ALWAYS 0 /* always print this */
|
||||
#define CTC_DBF_EMERG 0 /* system is unusable */
|
||||
#define CTC_DBF_ALERT 1 /* action must be taken immediately */
|
||||
#define CTC_DBF_CRIT 2 /* critical conditions */
|
||||
#define CTC_DBF_ERROR 3 /* error conditions */
|
||||
#define CTC_DBF_WARN 4 /* warning conditions */
|
||||
#define CTC_DBF_NOTICE 5 /* normal but significant condition */
|
||||
#define CTC_DBF_INFO 5 /* informational */
|
||||
#define CTC_DBF_DEBUG 6 /* debug-level messages */
|
||||
|
||||
DECLARE_PER_CPU(char[256], ctcm_dbf_txt_buf);
|
||||
|
||||
enum ctcm_dbf_names {
|
||||
CTCM_DBF_SETUP,
|
||||
CTCM_DBF_ERROR,
|
||||
CTCM_DBF_TRACE,
|
||||
CTCM_DBF_MPC_SETUP,
|
||||
CTCM_DBF_MPC_ERROR,
|
||||
CTCM_DBF_MPC_TRACE,
|
||||
CTCM_DBF_INFOS /* must be last element */
|
||||
};
|
||||
|
||||
struct ctcm_dbf_info {
|
||||
char name[DEBUG_MAX_NAME_LEN];
|
||||
int pages;
|
||||
int areas;
|
||||
int len;
|
||||
int level;
|
||||
debug_info_t *id;
|
||||
};
|
||||
|
||||
extern struct ctcm_dbf_info ctcm_dbf[CTCM_DBF_INFOS];
|
||||
|
||||
int ctcm_register_dbf_views(void);
|
||||
void ctcm_unregister_dbf_views(void);
|
||||
|
||||
static inline const char *strtail(const char *s, int n)
|
||||
{
|
||||
int l = strlen(s);
|
||||
return (l > n) ? s + (l - n) : s;
|
||||
}
|
||||
|
||||
/* sort out levels early to avoid unnecessary sprintfs */
|
||||
static inline int ctcm_dbf_passes(debug_info_t *dbf_grp, int level)
|
||||
{
|
||||
return (dbf_grp->level >= level);
|
||||
}
|
||||
|
||||
#define CTCM_FUNTAIL strtail((char *)__func__, 16)
|
||||
|
||||
#define CTCM_DBF_TEXT(name, level, text) \
|
||||
do { \
|
||||
debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, level, text); \
|
||||
} while (0)
|
||||
|
||||
#define CTCM_DBF_HEX(name, level, addr, len) \
|
||||
do { \
|
||||
debug_event(ctcm_dbf[CTCM_DBF_##name].id, \
|
||||
level, (void *)(addr), len); \
|
||||
} while (0)
|
||||
|
||||
#define CTCM_DBF_TEXT_(name, level, text...) \
|
||||
do { \
|
||||
if (ctcm_dbf_passes(ctcm_dbf[CTCM_DBF_##name].id, level)) { \
|
||||
char *ctcm_dbf_txt_buf = \
|
||||
get_cpu_var(ctcm_dbf_txt_buf); \
|
||||
sprintf(ctcm_dbf_txt_buf, text); \
|
||||
debug_text_event(ctcm_dbf[CTCM_DBF_##name].id, \
|
||||
level, ctcm_dbf_txt_buf); \
|
||||
put_cpu_var(ctcm_dbf_txt_buf); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
|
||||
* dev : netdevice with valid name field.
|
||||
* text: any text string.
|
||||
*/
|
||||
#define CTCM_DBF_DEV_NAME(cat, dev, text) \
|
||||
do { \
|
||||
CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%s) : %s", \
|
||||
CTCM_FUNTAIL, dev->name, text); \
|
||||
} while (0)
|
||||
|
||||
#define MPC_DBF_DEV_NAME(cat, dev, text) \
|
||||
do { \
|
||||
CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%s) : %s", \
|
||||
CTCM_FUNTAIL, dev->name, text); \
|
||||
} while (0)
|
||||
|
||||
#define CTCMY_DBF_DEV_NAME(cat, dev, text) \
|
||||
do { \
|
||||
if (IS_MPCDEV(dev)) \
|
||||
MPC_DBF_DEV_NAME(cat, dev, text); \
|
||||
else \
|
||||
CTCM_DBF_DEV_NAME(cat, dev, text); \
|
||||
} while (0)
|
||||
|
||||
/*
|
||||
* cat : one of {setup, mpc_setup, trace, mpc_trace, error, mpc_error}.
|
||||
* dev : netdevice.
|
||||
* text: any text string.
|
||||
*/
|
||||
#define CTCM_DBF_DEV(cat, dev, text) \
|
||||
do { \
|
||||
CTCM_DBF_TEXT_(cat, CTC_DBF_INFO, "%s(%p) : %s", \
|
||||
CTCM_FUNTAIL, dev, text); \
|
||||
} while (0)
|
||||
|
||||
#define MPC_DBF_DEV(cat, dev, text) \
|
||||
do { \
|
||||
CTCM_DBF_TEXT_(MPC_##cat, CTC_DBF_INFO, "%s(%p) : %s", \
|
||||
CTCM_FUNTAIL, dev, text); \
|
||||
} while (0)
|
||||
|
||||
#define CTCMY_DBF_DEV(cat, dev, text) \
|
||||
do { \
|
||||
if (IS_MPCDEV(dev)) \
|
||||
MPC_DBF_DEV(cat, dev, text); \
|
||||
else \
|
||||
CTCM_DBF_DEV(cat, dev, text); \
|
||||
} while (0)
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user