via-velocity: more cleanup

Per Al's suggestion, get rid of the stupid stuff:
Remove cam_type switch,
And deinline things that aren't important for speed.
And make big macro and inline.
And remove some dead/unused code.
And use const char * for chip name.

Signed-off-by: Stephen Hemminger <shemminger@linux-foundation.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
Stephen Hemminger
2007-08-24 14:40:45 -07:00
committed by David S. Miller
parent 501e4d247a
commit 01faccbf86
2 changed files with 177 additions and 207 deletions

View File

@@ -1173,7 +1173,7 @@ enum chip_type {
struct velocity_info_tbl {
enum chip_type chip_id;
char *name;
const char *name;
int txqueue;
u32 flags;
};
@@ -1194,14 +1194,6 @@ struct velocity_info_tbl {
#define mac_disable_int(regs) writel(CR0_GINTMSK1,&((regs)->CR0Clr))
#define mac_enable_int(regs) writel(CR0_GINTMSK1,&((regs)->CR0Set))
#define mac_hw_mibs_read(regs, MIBs) {\
int i;\
BYTE_REG_BITS_ON(MIBCR_MPTRINI,&((regs)->MIBCR));\
for (i=0;i<HW_MIB_SIZE;i++) {\
(MIBs)[i]=readl(&((regs)->MIBData));\
}\
}
#define mac_set_dma_length(regs, n) {\
BYTE_REG_BITS_SET((n),0x07,&((regs)->DCFG));\
}
@@ -1226,195 +1218,17 @@ struct velocity_info_tbl {
writew(TRDCSR_WAK<<(n*4),&((regs)->TDCSRSet));\
}
#define mac_eeprom_reload(regs) {\
int i=0;\
BYTE_REG_BITS_ON(EECSR_RELOAD,&((regs)->EECSR));\
do {\
udelay(10);\
if (i++>0x1000) {\
break;\
}\
}while (BYTE_REG_BITS_IS_ON(EECSR_RELOAD,&((regs)->EECSR)));\
static inline void mac_eeprom_reload(struct mac_regs __iomem * regs) {
int i=0;
BYTE_REG_BITS_ON(EECSR_RELOAD,&(regs->EECSR));
do {
udelay(10);
if (i++>0x1000)
break;
} while (BYTE_REG_BITS_IS_ON(EECSR_RELOAD,&(regs->EECSR)));
}
enum velocity_cam_type {
VELOCITY_VLAN_ID_CAM = 0,
VELOCITY_MULTICAST_CAM
};
/**
* mac_get_cam_mask - Read a CAM mask
* @regs: register block for this velocity
* @mask: buffer to store mask
* @cam_type: CAM to fetch
*
* Fetch the mask bits of the selected CAM and store them into the
* provided mask buffer.
*/
static inline void mac_get_cam_mask(struct mac_regs __iomem * regs, u8 * mask, enum velocity_cam_type cam_type)
{
int i;
/* Select CAM mask */
BYTE_REG_BITS_SET(CAMCR_PS_CAM_MASK, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
if (cam_type == VELOCITY_VLAN_ID_CAM)
writeb(CAMADDR_VCAMSL, &regs->CAMADDR);
else
writeb(0, &regs->CAMADDR);
/* read mask */
for (i = 0; i < 8; i++)
*mask++ = readb(&(regs->MARCAM[i]));
/* disable CAMEN */
writeb(0, &regs->CAMADDR);
/* Select mar */
BYTE_REG_BITS_SET(CAMCR_PS_MAR, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
}
/**
* mac_set_cam_mask - Set a CAM mask
* @regs: register block for this velocity
* @mask: CAM mask to load
* @cam_type: CAM to store
*
* Store a new mask into a CAM
*/
static inline void mac_set_cam_mask(struct mac_regs __iomem * regs, u8 * mask, enum velocity_cam_type cam_type)
{
int i;
/* Select CAM mask */
BYTE_REG_BITS_SET(CAMCR_PS_CAM_MASK, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
if (cam_type == VELOCITY_VLAN_ID_CAM)
writeb(CAMADDR_CAMEN | CAMADDR_VCAMSL, &regs->CAMADDR);
else
writeb(CAMADDR_CAMEN, &regs->CAMADDR);
for (i = 0; i < 8; i++) {
writeb(*mask++, &(regs->MARCAM[i]));
}
/* disable CAMEN */
writeb(0, &regs->CAMADDR);
/* Select mar */
BYTE_REG_BITS_SET(CAMCR_PS_MAR, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
}
/**
* mac_set_cam - set CAM data
* @regs: register block of this velocity
* @idx: Cam index
* @addr: 2 or 6 bytes of CAM data
* @cam_type: CAM to load
*
* Load an address or vlan tag into a CAM
*/
static inline void mac_set_cam(struct mac_regs __iomem * regs, int idx, u8 *addr, enum velocity_cam_type cam_type)
{
int i;
/* Select CAM mask */
BYTE_REG_BITS_SET(CAMCR_PS_CAM_DATA, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
idx &= (64 - 1);
if (cam_type == VELOCITY_VLAN_ID_CAM)
writeb(CAMADDR_CAMEN | CAMADDR_VCAMSL | idx, &regs->CAMADDR);
else
writeb(CAMADDR_CAMEN | idx, &regs->CAMADDR);
if (cam_type == VELOCITY_VLAN_ID_CAM)
writew(*((u16 *) addr), &regs->MARCAM[0]);
else {
for (i = 0; i < 6; i++) {
writeb(*addr++, &(regs->MARCAM[i]));
}
}
BYTE_REG_BITS_ON(CAMCR_CAMWR, &regs->CAMCR);
udelay(10);
writeb(0, &regs->CAMADDR);
/* Select mar */
BYTE_REG_BITS_SET(CAMCR_PS_MAR, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
}
/**
* mac_get_cam - fetch CAM data
* @regs: register block of this velocity
* @idx: Cam index
* @addr: buffer to hold up to 6 bytes of CAM data
* @cam_type: CAM to load
*
* Load an address or vlan tag from a CAM into the buffer provided by
* the caller. VLAN tags are 2 bytes the address cam entries are 6.
*/
static inline void mac_get_cam(struct mac_regs __iomem * regs, int idx, u8 *addr, enum velocity_cam_type cam_type)
{
int i;
/* Select CAM mask */
BYTE_REG_BITS_SET(CAMCR_PS_CAM_DATA, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
idx &= (64 - 1);
if (cam_type == VELOCITY_VLAN_ID_CAM)
writeb(CAMADDR_CAMEN | CAMADDR_VCAMSL | idx, &regs->CAMADDR);
else
writeb(CAMADDR_CAMEN | idx, &regs->CAMADDR);
BYTE_REG_BITS_ON(CAMCR_CAMRD, &regs->CAMCR);
udelay(10);
if (cam_type == VELOCITY_VLAN_ID_CAM)
*((u16 *) addr) = readw(&(regs->MARCAM[0]));
else
for (i = 0; i < 6; i++, addr++)
*((u8 *) addr) = readb(&(regs->MARCAM[i]));
writeb(0, &regs->CAMADDR);
/* Select mar */
BYTE_REG_BITS_SET(CAMCR_PS_MAR, CAMCR_PS1 | CAMCR_PS0, &regs->CAMCR);
}
/**
* mac_wol_reset - reset WOL after exiting low power
* @regs: register block of this velocity
*
* Called after we drop out of wake on lan mode in order to
* reset the Wake on lan features. This function doesn't restore
* the rest of the logic from the result of sleep/wakeup
*/
static inline void mac_wol_reset(struct mac_regs __iomem * regs)
{
/* Turn off SWPTAG right after leaving power mode */
BYTE_REG_BITS_OFF(STICKHW_SWPTAG, &regs->STICKHW);
/* clear sticky bits */
BYTE_REG_BITS_OFF((STICKHW_DS1 | STICKHW_DS0), &regs->STICKHW);
BYTE_REG_BITS_OFF(CHIPGCR_FCGMII, &regs->CHIPGCR);
BYTE_REG_BITS_OFF(CHIPGCR_FCMODE, &regs->CHIPGCR);
/* disable force PME-enable */
writeb(WOLCFG_PMEOVR, &regs->WOLCFGClr);
/* disable power-event config bit */
writew(0xFFFF, &regs->WOLCRClr);
/* clear power status */
writew(0xFFFF, &regs->WOLSRClr);
}
/*
* Header for WOL definitions. Used to compute hashes
*/