Commit d15fc4f6 authored by Jeff Garzik's avatar Jeff Garzik

Merge pobox.com:/spare/repo/netdev-2.6/acenic

into pobox.com:/spare/repo/netdev-2.6/ALL
parents ebb4efde c34150c3
......@@ -52,6 +52,7 @@
#include <linux/config.h>
#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/version.h>
#include <linux/types.h>
#include <linux/errno.h>
......@@ -425,13 +426,15 @@ static int dis_pci_mem_inval[ACE_MAX_MOD_PARMS] = {1, 1, 1, 1, 1, 1, 1, 1};
MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>");
MODULE_LICENSE("GPL");
MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver");
MODULE_PARM(link, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(trace, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(tx_coal_tick, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(max_tx_desc, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(rx_coal_tick, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(max_rx_desc, "1-" __MODULE_STRING(8) "i");
MODULE_PARM(tx_ratio, "1-" __MODULE_STRING(8) "i");
static int num_params;
module_param_array(link, int, num_params, 0);
module_param_array(trace, int, num_params, 0);
module_param_array(tx_coal_tick, int, num_params, 0);
module_param_array(max_tx_desc, int, num_params, 0);
module_param_array(rx_coal_tick, int, num_params, 0);
module_param_array(max_rx_desc, int, num_params, 0);
module_param_array(tx_ratio, int, num_params, 0);
MODULE_PARM_DESC(link, "AceNIC/3C985/NetGear link state");
MODULE_PARM_DESC(trace, "AceNIC/3C985/NetGear firmware trace level");
MODULE_PARM_DESC(tx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first tx descriptor arrives");
......@@ -474,6 +477,7 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
ap = dev->priv;
ap->pdev = pdev;
ap->name = pci_name(pdev);
dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
#if ACENIC_DO_VLAN
......@@ -516,7 +520,7 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
if (!(ap->pci_command & PCI_COMMAND_MEMORY)) {
printk(KERN_INFO "%s: Enabling PCI Memory Mapped "
"access - was not enabled by BIOS/Firmware\n",
dev->name);
ap->name);
ap->pci_command = ap->pci_command | PCI_COMMAND_MEMORY;
pci_write_config_word(ap->pdev, PCI_COMMAND,
ap->pci_command);
......@@ -539,55 +543,40 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
if (!ap->regs) {
printk(KERN_ERR "%s: Unable to map I/O register, "
"AceNIC %i will be disabled.\n",
dev->name, boards_found);
ap->name, boards_found);
goto fail_free_netdev;
}
switch(pdev->vendor) {
case PCI_VENDOR_ID_ALTEON:
if (pdev->device == PCI_DEVICE_ID_FARALLON_PN9100T) {
strncpy(ap->name, "Farallon PN9100-T "
"Gigabit Ethernet", sizeof (ap->name));
printk(KERN_INFO "%s: Farallon PN9100-T ",
dev->name);
ap->name);
} else {
strncpy(ap->name, "AceNIC Gigabit Ethernet",
sizeof (ap->name));
printk(KERN_INFO "%s: Alteon AceNIC ",
dev->name);
ap->name);
}
break;
case PCI_VENDOR_ID_3COM:
strncpy(ap->name, "3Com 3C985 Gigabit Ethernet",
sizeof (ap->name));
printk(KERN_INFO "%s: 3Com 3C985 ", dev->name);
printk(KERN_INFO "%s: 3Com 3C985 ", ap->name);
break;
case PCI_VENDOR_ID_NETGEAR:
strncpy(ap->name, "NetGear GA620 Gigabit Ethernet",
sizeof (ap->name));
printk(KERN_INFO "%s: NetGear GA620 ", dev->name);
printk(KERN_INFO "%s: NetGear GA620 ", ap->name);
break;
case PCI_VENDOR_ID_DEC:
if (pdev->device == PCI_DEVICE_ID_FARALLON_PN9000SX) {
strncpy(ap->name, "Farallon PN9000-SX "
"Gigabit Ethernet", sizeof (ap->name));
printk(KERN_INFO "%s: Farallon PN9000-SX ",
dev->name);
ap->name);
break;
}
case PCI_VENDOR_ID_SGI:
strncpy(ap->name, "SGI AceNIC Gigabit Ethernet",
sizeof (ap->name));
printk(KERN_INFO "%s: SGI AceNIC ", dev->name);
printk(KERN_INFO "%s: SGI AceNIC ", ap->name);
break;
default:
strncpy(ap->name, "Unknown AceNIC based Gigabit "
"Ethernet", sizeof (ap->name));
printk(KERN_INFO "%s: Unknown AceNIC ", dev->name);
printk(KERN_INFO "%s: Unknown AceNIC ", ap->name);
break;
}
ap->name [sizeof (ap->name) - 1] = '\0';
printk("Gigabit Ethernet at 0x%08lx, ", dev->base_addr);
#ifdef __sparc__
printk("irq %s\n", __irq_itoa(pdev->irq));
......@@ -622,6 +611,7 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
printk(KERN_ERR "acenic: device registration failed\n");
goto fail_uninit;
}
ap->name = dev->name;
if (ap->pci_using_dac)
dev->features |= NETIF_F_HIGHDMA;
......@@ -641,7 +631,7 @@ static int __devinit acenic_probe_one(struct pci_dev *pdev,
static void __devexit acenic_remove_one(struct pci_dev *pdev)
{
struct net_device *dev = pci_get_drvdata(pdev);
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
short i;
......@@ -752,7 +742,7 @@ module_exit(acenic_exit);
static void ace_free_descriptors(struct net_device *dev)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
int size;
if (ap->rx_std_ring != NULL) {
......@@ -802,7 +792,7 @@ static void ace_free_descriptors(struct net_device *dev)
static int ace_allocate_descriptors(struct net_device *dev)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
int size;
size = (sizeof(struct rx_desc) *
......@@ -873,7 +863,7 @@ static void ace_init_cleanup(struct net_device *dev)
{
struct ace_private *ap;
ap = dev->priv;
ap = netdev_priv(dev);
ace_free_descriptors(dev);
......@@ -921,7 +911,7 @@ static int __init ace_init(struct net_device *dev)
short i;
unsigned char cache_size;
ap = dev->priv;
ap = netdev_priv(dev);
regs = ap->regs;
board_idx = ap->board_idx;
......@@ -1387,7 +1377,7 @@ static int __init ace_init(struct net_device *dev)
if (board_idx == BOARD_IDX_OVERFLOW) {
printk(KERN_WARNING "%s: more than %i NICs detected, "
"ignoring module parameters!\n",
dev->name, ACE_MAX_MOD_PARMS);
ap->name, ACE_MAX_MOD_PARMS);
} else if (board_idx >= 0) {
if (tx_coal_tick[board_idx])
writel(tx_coal_tick[board_idx],
......@@ -1426,7 +1416,7 @@ static int __init ace_init(struct net_device *dev)
if (option & 0x01) {
printk(KERN_INFO "%s: Setting half duplex link\n",
dev->name);
ap->name);
tmp &= ~LNK_FULL_DUPLEX;
}
if (option & 0x02)
......@@ -1439,7 +1429,7 @@ static int __init ace_init(struct net_device *dev)
tmp |= LNK_1000MB;
if ((option & 0x70) == 0) {
printk(KERN_WARNING "%s: No media speed specified, "
"forcing auto negotiation\n", dev->name);
"forcing auto negotiation\n", ap->name);
tmp |= LNK_NEGOTIATE | LNK_1000MB |
LNK_100MB | LNK_10MB;
}
......@@ -1447,12 +1437,12 @@ static int __init ace_init(struct net_device *dev)
tmp |= LNK_NEG_FCTL;
else
printk(KERN_INFO "%s: Disabling flow control "
"negotiation\n", dev->name);
"negotiation\n", ap->name);
if (option & 0x200)
tmp |= LNK_RX_FLOW_CTL_Y;
if ((option & 0x400) && (ap->version >= 2)) {
printk(KERN_INFO "%s: Enabling TX flow control\n",
dev->name);
ap->name);
tmp |= LNK_TX_FLOW_CTL_Y;
}
}
......@@ -1509,7 +1499,7 @@ static int __init ace_init(struct net_device *dev)
cpu_relax();
if (!ap->fw_running) {
printk(KERN_ERR "%s: Firmware NOT running!\n", dev->name);
printk(KERN_ERR "%s: Firmware NOT running!\n", ap->name);
ace_dump_trace(ap);
writel(readl(&regs->CpuCtrl) | CPU_HALT, &regs->CpuCtrl);
......@@ -1542,13 +1532,13 @@ static int __init ace_init(struct net_device *dev)
ace_load_std_rx_ring(ap, RX_RING_SIZE);
else
printk(KERN_ERR "%s: Someone is busy refilling the RX ring\n",
dev->name);
ap->name);
if (ap->version >= 2) {
if (!test_and_set_bit(0, &ap->mini_refill_busy))
ace_load_mini_rx_ring(ap, RX_MINI_SIZE);
else
printk(KERN_ERR "%s: Someone is busy refilling "
"the RX mini ring\n", dev->name);
"the RX mini ring\n", ap->name);
}
return 0;
......@@ -1564,7 +1554,7 @@ static void ace_set_rxtx_parms(struct net_device *dev, int jumbo)
struct ace_regs *regs;
int board_idx;
ap = dev->priv;
ap = netdev_priv(dev);
regs = ap->regs;
board_idx = ap->board_idx;
......@@ -1604,7 +1594,7 @@ static void ace_set_rxtx_parms(struct net_device *dev, int jumbo)
static void ace_watchdog(struct net_device *data)
{
struct net_device *dev = data;
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
/*
......@@ -1878,13 +1868,13 @@ static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
{
struct ace_private *ap;
ap = dev->priv;
ap = netdev_priv(dev);
while (evtcsm != evtprd) {
switch (ap->evt_ring[evtcsm].evt) {
case E_FW_RUNNING:
printk(KERN_INFO "%s: Firmware up and running\n",
dev->name);
ap->name);
ap->fw_running = 1;
wmb();
break;
......@@ -1899,7 +1889,7 @@ static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
u32 state = readl(&ap->regs->GigLnkState);
printk(KERN_WARNING "%s: Optical link UP "
"(%s Duplex, Flow Control: %s%s)\n",
dev->name,
ap->name,
state & LNK_FULL_DUPLEX ? "Full":"Half",
state & LNK_TX_FLOW_CTL_Y ? "TX " : "",
state & LNK_RX_FLOW_CTL_Y ? "RX" : "");
......@@ -1907,15 +1897,15 @@ static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
}
case E_C_LINK_DOWN:
printk(KERN_WARNING "%s: Optical link DOWN\n",
dev->name);
ap->name);
break;
case E_C_LINK_10_100:
printk(KERN_WARNING "%s: 10/100BaseT link "
"UP\n", dev->name);
"UP\n", ap->name);
break;
default:
printk(KERN_ERR "%s: Unknown optical link "
"state %02x\n", dev->name, code);
"state %02x\n", ap->name, code);
}
break;
}
......@@ -1923,19 +1913,19 @@ static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
switch(ap->evt_ring[evtcsm].code) {
case E_C_ERR_INVAL_CMD:
printk(KERN_ERR "%s: invalid command error\n",
dev->name);
ap->name);
break;
case E_C_ERR_UNIMP_CMD:
printk(KERN_ERR "%s: unimplemented command "
"error\n", dev->name);
"error\n", ap->name);
break;
case E_C_ERR_BAD_CFG:
printk(KERN_ERR "%s: bad config error\n",
dev->name);
ap->name);
break;
default:
printk(KERN_ERR "%s: unknown error %02x\n",
dev->name, ap->evt_ring[evtcsm].code);
ap->name, ap->evt_ring[evtcsm].code);
}
break;
case E_RESET_JUMBO_RNG:
......@@ -1964,13 +1954,13 @@ static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
ap->jumbo = 0;
ap->rx_jumbo_skbprd = 0;
printk(KERN_INFO "%s: Jumbo ring flushed\n",
dev->name);
ap->name);
clear_bit(0, &ap->jumbo_refill_busy);
break;
}
default:
printk(KERN_ERR "%s: Unhandled event 0x%02x\n",
dev->name, ap->evt_ring[evtcsm].evt);
ap->name, ap->evt_ring[evtcsm].evt);
}
evtcsm = (evtcsm + 1) % EVT_RING_ENTRIES;
}
......@@ -1981,7 +1971,7 @@ static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
static void ace_rx_int(struct net_device *dev, u32 rxretprd, u32 rxretcsm)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
u32 idx;
int mini_count = 0, std_count = 0;
......@@ -2108,7 +2098,7 @@ static void ace_rx_int(struct net_device *dev, u32 rxretprd, u32 rxretcsm)
static inline void ace_tx_int(struct net_device *dev,
u32 txcsm, u32 idx)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
do {
struct sk_buff *skb;
......@@ -2181,7 +2171,7 @@ static irqreturn_t ace_interrupt(int irq, void *dev_id, struct pt_regs *ptregs)
u32 txcsm, rxretcsm, rxretprd;
u32 evtcsm, evtprd;
ap = dev->priv;
ap = netdev_priv(dev);
regs = ap->regs;
/*
......@@ -2304,7 +2294,7 @@ static irqreturn_t ace_interrupt(int irq, void *dev_id, struct pt_regs *ptregs)
#if ACENIC_DO_VLAN
static void ace_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
unsigned long flags;
local_irq_save(flags);
......@@ -2319,7 +2309,7 @@ static void ace_vlan_rx_register(struct net_device *dev, struct vlan_group *grp)
static void ace_vlan_rx_kill_vid(struct net_device *dev, unsigned short vid)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
unsigned long flags;
local_irq_save(flags);
......@@ -2340,7 +2330,7 @@ static int ace_open(struct net_device *dev)
struct ace_regs *regs;
struct cmd cmd;
ap = dev->priv;
ap = netdev_priv(dev);
regs = ap->regs;
if (!(ap->fw_running)) {
......@@ -2407,7 +2397,7 @@ static int ace_close(struct net_device *dev)
*/
netif_stop_queue(dev);
ap = dev->priv;
ap = netdev_priv(dev);
regs = ap->regs;
if (ap->promisc) {
......@@ -2522,7 +2512,7 @@ ace_load_tx_bd(struct ace_private *ap, struct tx_desc *desc, u64 addr,
static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
struct tx_desc *desc;
u32 idx, flagsize;
......@@ -2661,7 +2651,7 @@ static int ace_start_xmit(struct sk_buff *skb, struct net_device *dev)
static int ace_change_mtu(struct net_device *dev, int new_mtu)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
if (new_mtu > ACE_JUMBO_MTU)
......@@ -2698,7 +2688,7 @@ static int ace_change_mtu(struct net_device *dev, int new_mtu)
static int ace_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
u32 link;
......@@ -2751,7 +2741,7 @@ static int ace_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
static int ace_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
u32 link, speed;
......@@ -2814,7 +2804,7 @@ static int ace_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
static void ace_get_drvinfo(struct net_device *dev,
struct ethtool_drvinfo *info)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
strlcpy(info->driver, "acenic", sizeof(info->driver));
snprintf(info->version, sizeof(info->version), "%i.%i.%i",
......@@ -2844,7 +2834,7 @@ static int ace_set_mac_addr(struct net_device *dev, void *p)
da = (u8 *)dev->dev_addr;
regs = ((struct ace_private *)dev->priv)->regs;
regs = ((struct ace_private *)netdev_priv(dev))->regs;
writel(da[0] << 8 | da[1], &regs->MacAddrHi);
writel((da[2] << 24) | (da[3] << 16) | (da[4] << 8) | da[5],
&regs->MacAddrLo);
......@@ -2860,7 +2850,7 @@ static int ace_set_mac_addr(struct net_device *dev, void *p)
static void ace_set_multicast_list(struct net_device *dev)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_regs *regs = ap->regs;
struct cmd cmd;
......@@ -2914,7 +2904,7 @@ static void ace_set_multicast_list(struct net_device *dev)
static struct net_device_stats *ace_get_stats(struct net_device *dev)
{
struct ace_private *ap = dev->priv;
struct ace_private *ap = netdev_priv(dev);
struct ace_mac_stats *mac_stats =
(struct ace_mac_stats *)ap->regs->Stats;
......@@ -2997,12 +2987,12 @@ int __init ace_load_firmware(struct net_device *dev)
struct ace_private *ap;
struct ace_regs *regs;
ap = dev->priv;
ap = netdev_priv(dev);
regs = ap->regs;
if (!(readl(&regs->CpuCtrl) & CPU_HALTED)) {
printk(KERN_ERR "%s: trying to download firmware while the "
"CPU is running!\n", dev->name);
"CPU is running!\n", ap->name);
return -EFAULT;
}
......@@ -3178,6 +3168,7 @@ static void __init eeprom_stop(struct ace_regs *regs)
static int __init read_eeprom_byte(struct net_device *dev,
unsigned long offset)
{
struct ace_private *ap;
struct ace_regs *regs;
unsigned long flags;
u32 local;
......@@ -3187,10 +3178,11 @@ static int __init read_eeprom_byte(struct net_device *dev,
if (!dev) {
printk(KERN_ERR "No device!\n");
result = -ENODEV;
goto eeprom_read_error;
goto out;
}
regs = ((struct ace_private *)dev->priv)->regs;
ap = netdev_priv(dev);
regs = ap->regs;
/*
* Don't take interrupts on this CPU will bit banging
......@@ -3203,7 +3195,7 @@ static int __init read_eeprom_byte(struct net_device *dev,
eeprom_prep(regs, EEPROM_WRITE_SELECT);
if (eeprom_check_ack(regs)) {
local_irq_restore(flags);
printk(KERN_ERR "%s: Unable to sync eeprom\n", dev->name);
printk(KERN_ERR "%s: Unable to sync eeprom\n", ap->name);
result = -EIO;
goto eeprom_read_error;
}
......@@ -3212,7 +3204,7 @@ static int __init read_eeprom_byte(struct net_device *dev,
if (eeprom_check_ack(regs)) {
local_irq_restore(flags);
printk(KERN_ERR "%s: Unable to set address byte 0\n",
dev->name);
ap->name);
result = -EIO;
goto eeprom_read_error;
}
......@@ -3221,7 +3213,7 @@ static int __init read_eeprom_byte(struct net_device *dev,
if (eeprom_check_ack(regs)) {
local_irq_restore(flags);
printk(KERN_ERR "%s: Unable to set address byte 1\n",
dev->name);
ap->name);
result = -EIO;
goto eeprom_read_error;
}
......@@ -3231,7 +3223,7 @@ static int __init read_eeprom_byte(struct net_device *dev,
if (eeprom_check_ack(regs)) {
local_irq_restore(flags);
printk(KERN_ERR "%s: Unable to set READ_SELECT\n",
dev->name);
ap->name);
result = -EIO;
goto eeprom_read_error;
}
......@@ -3288,7 +3280,7 @@ static int __init read_eeprom_byte(struct net_device *dev,
eeprom_read_error:
printk(KERN_ERR "%s: Unable to read eeprom byte 0x%02lx\n",
dev->name, offset);
ap->name, offset);
goto out;
}
......
......@@ -693,7 +693,7 @@ struct ace_private
int board_idx;
u16 pci_command;
u8 pci_latency;
char name[48];
const char *name;
#ifdef INDEX_DEBUG
spinlock_t debug_lock
__attribute__ ((aligned (SMP_CACHE_BYTES)));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment