void register_keycache(u_int nslots, int def_srev_min, int def_srev_max, int def_phy_min, int def_phy_max) { #define SET(r, a) do { \ r->addr = a; r->type = DUMP_KEYCACHE; r++; \ } while(0) struct dumpreg *keyregs, *r; int i; keyregs = (struct dumpreg *) calloc(nslots, 8*sizeof(struct dumpreg)); if (keyregs == NULL) errx(-1, "no space to %d keycache slots\n", nslots); r = keyregs; for (i = 0; i < nslots; i++) { SET(r, AR_KEYTABLE_KEY0(i)); SET(r, AR_KEYTABLE_KEY1(i)); SET(r, AR_KEYTABLE_KEY2(i)); SET(r, AR_KEYTABLE_KEY3(i)); SET(r, AR_KEYTABLE_KEY4(i)); SET(r, AR_KEYTABLE_TYPE(i)); SET(r, AR_KEYTABLE_MAC0(i)); SET(r, AR_KEYTABLE_MAC1(i)); } register_regs(keyregs, 8*nslots, def_srev_min, def_srev_max, def_phy_min, def_phy_max); #undef SET }
static __constructor void ar5210_ctor(void) { #define MAC5210 SREV(1,0), SREV(2,0) register_regs(ar5210regs, nitems(ar5210regs), MAC5210, PHYANY); register_keycache(64, MAC5210, PHYANY); register_range(0x9800, 0x9840, DUMP_BASEBAND, MAC5210, PHYANY); }
static __constructor void ar5211_ctor(void) { #define MAC5211 SREV(2,0), SREV(4,5) register_regs(ar5211regs, N(ar5211regs), MAC5211, PHYANY); register_keycache(128, MAC5211, PHYANY); register_range(0x9800, 0x987c, DUMP_BASEBAND, MAC5211, PHYANY); register_range(0x9900, 0x995c, DUMP_BASEBAND, MAC5211, PHYANY); register_range(0x9c00, 0x9c1c, DUMP_BASEBAND, MAC5211, PHYANY); }
static __constructor void ar5212_ctor(void) { register_regs(ar5212regs, N(ar5212regs), MAC5212, PHYANY); register_keycache(128, MAC5212, PHYANY); register_range(0x9800, 0x987c, DUMP_BASEBAND, MAC5212, PHYANY); register_range(0x9900, 0x995c, DUMP_BASEBAND, MAC5212, PHYANY); register_range(0x9c00, 0x9c1c, DUMP_BASEBAND, MAC5212, PHYANY); register_range(0xa180, 0xa238, DUMP_BASEBAND, MAC5212, PHYANY); register_range(0xa258, 0xa26c, DUMP_BASEBAND, SREV(7,8), SREV(15,15), PHYANY); }
static __constructor void ar5416_ctor(void) { register_regs(ar5416regs, N(ar5416regs), MAC5416, PHYANY); register_keycache(128, MAC5416, PHYANY); register_range(0x9800, 0x987c, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0x9900, 0x997c, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0x99a4, 0x99a4, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0x9c00, 0x9c1c, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xa180, 0xa238, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xa258, 0xa26c, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xa3c8, 0xa3d4, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xa864, 0xa864, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xa9bc, 0xa9bc, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xb864, 0xb864, DUMP_BASEBAND, MAC5416, PHYANY); register_range(0xb9bc, 0xb9bc, DUMP_BASEBAND, MAC5416, PHYANY); }
void register_range(u_int brange, u_int erange, int type, int def_srev_min, int def_srev_max, int def_phy_min, int def_phy_max) { struct dumpreg *bbregs, *r; int i, nregs; nregs = (erange - brange) / sizeof(uint32_t); bbregs = (struct dumpreg *) calloc(nregs, sizeof(struct dumpreg)); if (bbregs == NULL) errx(-1, "no space for %d register slots (type %d)\n", nregs, type); r = bbregs; for (i = 0; i < nregs; i++) { r->addr = brange + (i<<2); r->type = type; r++; } register_regs(bbregs, nregs, def_srev_min, def_srev_max, def_phy_min, def_phy_max); }