#ifndef _DUMPREGS_
#define _DUMPREGS_
#define __constructor __attribute__((constructor))
struct dumpreg {
uint32_t addr;
const char *name;
const char *bits;
int type;
u_int srevMin, srevMax;
u_int phyMin, phyMax;
};
#define SREV(v,r) (((v) << 16) | (r))
#define MAC_MATCH(dr, mv, mr) \
((dr)->srevMin <= SREV(mv,mr) && SREV(mv,mr) < (dr)->srevMax)
#define PHY_MATCH(dr, pr) \
((dr)->phyMin <= (pr) && (pr) < (dr)->phyMax)
#define PHYANY 0,0xffff
enum {
DUMP_BASIC = 0x0001,
DUMP_KEYCACHE = 0x0002,
DUMP_BASEBAND = 0x0004,
DUMP_INTERRUPT = 0x0008,
DUMP_XR = 0x0010,
DUMP_QCU = 0x0020,
DUMP_DCU = 0x0040,
DUMP_PUBLIC = 0x0061,
DUMP_ALL = 0xffff
};
#define _DEFREG(_addr, _name, _type) \
{ .addr = _addr, .name = _name, .type = _type }
#define _DEFREGx(_addr, _name, _type, _srevmin, _srevmax) \
{ .addr = _addr, .name = _name, .type = _type, \
.srevMin = _srevmin, .srevMax = _srevmax }
#define _DEFREGfmt(_addr, _name, _type, _fmt) \
{ .addr = _addr, .name = _name, .type = _type, .bits = _fmt }
#define DEFVOID(_addr, _name) _DEFREG(_addr, _name, 0)
#define DEFVOIDx(_addr, _name, _smin, _smax) \
__DEFREGx(_addr, _name, _smin, _smax, 0)
#define DEFVOIDfmt(_addr, _name, _fmt) \
_DEFREGfmt(_addr, _name, 0, _fmt)
#define DEFBASIC(_addr, _name) _DEFREG(_addr, _name, DUMP_BASIC)
#define DEFBASICfmt(_addr, _name, _fmt) \
_DEFREGfmt(_addr, _name, DUMP_BASIC, _fmt)
#define DEFBASICx(_addr, _name, _smin, _smax) \
_DEFREGx(_addr, _name, DUMP_BASIC, _smin, _smax)
#define DEFBB(_addr, _name) _DEFREG(_addr, _name, DUMP_BASEBAND)
#define DEFINT(_addr, _name) _DEFREG(_addr, _name, DUMP_INTERRUPT)
#define DEFINTfmt(_addr, _name, _fmt) \
_DEFREGfmt(_addr, _name, DUMP_INTERRUPT, _fmt)
#define DEFQCU(_addr, _name) _DEFREG(_addr, _name, DUMP_QCU)
#define DEFDCU(_addr, _name) _DEFREG(_addr, _name, DUMP_DCU)
void register_regs(struct dumpreg *_regs, u_int _nregs,
int def_srev_min, int def_srev_max,
int def_phy_min, int def_phy_max);
void register_keycache(u_int nslots,
int def_srev_min, int def_srev_max,
int def_phy_min, int def_phy_max);
void register_range(u_int brange, u_int erange, int what,
int def_srev_min, int def_srev_max,
int def_phy_min, int def_phy_max);
#endif