KERN_INFO " http://www.asix.com.tw\n";
/* configuration of maximum bulk in size */
-static int bsize = AX88772B_MAX_BULKIN_16K;
+static int bsize = AX88772B_MAX_BULKIN_2K;
module_param (bsize, int, 0);
MODULE_PARM_DESC (bsize, "Maximum transfer size per bulk");
static void ax88772_link_reset (struct work_struct *work);
#endif
static int ax88772a_phy_powerup (struct usbnet *dev);
-
#define TAG "AX88xx------>"
/* ASIX AX8817X based USB 2.0 Ethernet Devices */
netif_carrier_off(dev->net);
ax772a_data->Event = AX_NOP;
}
- devdbg(dev, "link is %d PowSave %d ax772a_data->Event %d \n",link, PowSave,ax772a_data->Event);
devwarn(dev, "ax88772a - Link status is: %d", link);
}
struct usbnet *dev = usb_get_intfdata(intf);
u16 *medium;
-#if 0
medium = kmalloc (2, GFP_ATOMIC);
if (!medium)
return axusbnet_suspend (intf, message);
-
+/*
ax8817x_read_cmd (dev, AX_CMD_READ_MEDIUM_MODE, 0, 0, 2, medium);
ax8817x_write_cmd (dev, AX_CMD_WRITE_MEDIUM_MODE,
- (*medium & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL);
+ (*medium & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL);*/
kfree (medium);
-#endif
-
return axusbnet_suspend (intf, message);
}
u16 *tmp16;
u8 *opt;
-#if 0
tmp16 = kmalloc (2, GFP_ATOMIC);
if (!tmp16)
return axusbnet_suspend (intf, message);
opt = (u8 *)tmp16;
-
+ #if 0
ax8817x_read_cmd (dev, AX_CMD_READ_MEDIUM_MODE, 0, 0, 2, tmp16);
ax8817x_write_cmd (dev, AX_CMD_WRITE_MEDIUM_MODE,
(*tmp16 & ~AX88772_MEDIUM_RX_ENABLE), 0, 0, NULL);
*opt, 0, 0, NULL);
}
}
-
- kfree (tmp16);
#endif
-
+ kfree (tmp16);
return axusbnet_suspend (intf, message);
}
{
struct usbnet *dev = usb_get_intfdata(intf);
- //netif_carrier_off (dev->net);
+ netif_carrier_off (dev->net);
return axusbnet_resume (intf);
}
int ret;
void *buf;
-#if 0
buf = kmalloc (6, GFP_KERNEL);
/* Initialize MII structure */
dev->mii.mdio_write = ax88772b_mdio_write_le;
dev->mii.phy_id_mask = 0xff;
dev->mii.reg_num_mask = 0xff;
-
+ #if 0
/* Get the PHY id */
if ((ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID,
0, 0, 2, buf)) < 0) {
ret = -EIO;
goto err_out;
}
-
+ #endif
/* select the embedded 10/100 Ethernet PHY */
if ((ret = ax8817x_write_cmd(dev, AX_CMD_SW_PHY_SELECT,
AX_PHYSEL_SSEN | AX_PHYSEL_PSEL | AX_PHYSEL_SSMII,
if ((ret = ax88772a_phy_powerup (dev)) < 0)
goto err_out;
-
+ #if 0
/* stop MAC operation */
if ((ret = ax8817x_write_cmd(dev, AX_CMD_WRITE_RX_CTL,
AX_RX_CTL_STOP, 0, 0, NULL)) < 0) {
deverr(dev, "Enabling software MII failed: %d", ret);
goto err_out;
}
+ #endif
/* Get the PHY id */
/* ret = ax8817x_read_cmd(dev, AX_CMD_READ_PHY_ID,0, 0, 2, buf);
devwarn(dev, "reading PHY ID: %02x", ret);
*/
kfree (buf);
netif_carrier_off (dev->net);
-#endif
-
return axusbnet_resume (intf);
err_out:
/* End of get EEPROM data */
/* Get the MAC address from EEPROM */
+ #if 0
memset(buf, 0, ETH_ALEN);
for (i = 0; i < (ETH_ALEN >> 1); i++) {
if ((ret = ax8817x_read_cmd (dev, AX_CMD_READ_EEPROM,
goto err_out;
}
}
+ memcpy(dev->net->dev_addr, buf, ETH_ALEN);
+ for(i=0;i<ETH_ALEN;i++){
+ deverr(dev, "yyz________________read mac addr0: 0x%x", *((char *)buf+i));
+ }
+ #endif
+ /* Get the MAC address */
+ memset(buf, 0, ETH_ALEN);
+ if ((ret = ax8817x_read_cmd(dev, AX88772_CMD_READ_NODE_ID,
+ 0, 0, ETH_ALEN, buf)) < 0) {
+ deverr(dev, "Failed to read MAC address: %d", ret);
+ goto err_out;
+ }
memcpy(dev->net->dev_addr, buf, ETH_ALEN);
+ //for(i=0;i<ETH_ALEN;i++){
+ //deverr(dev, "yyz________________read mac addr1: 0x%x", *((char *)buf+i));
+ //}
+
+ #if 0
/* Set the MAC address */
if ((ret = ax8817x_write_cmd (dev, AX88772_CMD_WRITE_NODE_ID,
0, 0, ETH_ALEN, buf)) < 0) {
deverr(dev, "set MAC address failed: %d", ret);
goto err_out;
}
-
+ #endif
/* Initialize MII structure */
dev->mii.dev = dev->net;
dev->mii.mdio_read = ax8817x_mdio_read_le;
.id_table = products,
.probe = axusbnet_probe,
.suspend = ax_suspend,
- .resume = ax_resume,
+ .resume = ax_resume,
.disconnect = axusbnet_disconnect,
};
MODULE_DESCRIPTION("ASIX AX8817X based USB 2.0 Ethernet Devices");
MODULE_LICENSE("GPL");
-
}
} else {
if (netif_msg_ifdown (dev))
- devdbg (dev, "rx: stopped");
+ deverr (dev, "rx: stopped");
retval = -ENOLINK;
}
spin_unlock_irqrestore (&dev->rxq.lock, lockflags);
dev->stats.rx_errors++;
dev->stats.rx_length_errors++;
if (netif_msg_rx_err (dev))
- devdbg (dev, "rx length %d", skb->len);
+ ;// deverr (dev, "rx length %d", skb->len);
}
break;
case -ECONNRESET: /* async unlink */
case -ESHUTDOWN: /* hardware gone */
if (netif_msg_ifdown (dev))
- devdbg (dev, "rx shutdown, code %d", urb_status);
+ ;// deverr (dev, "rx shutdown, code %d", urb_status);
goto block;
/* we get controller i/o faults during khubd disconnect() delays.
if (!timer_pending (&dev->delay)) {
mod_timer (&dev->delay, jiffies + THROTTLE_JIFFIES);
if (netif_msg_link (dev))
- devdbg (dev, "rx throttle %d", urb_status);
+ ;// deverr (dev, "rx throttle %d", urb_status);
}
block:
entry->state = rx_cleanup;
entry->state = rx_cleanup;
dev->stats.rx_errors++;
if (netif_msg_rx_err (dev))
- devdbg (dev, "rx status %d", urb_status);
+ ;// deverr (dev, "rx status %d", urb_status);
break;
}
usb_free_urb (urb);
}
if (netif_msg_rx_err (dev))
- devdbg (dev, "no read resubmitted");
+ deverr (dev, "no read resubmitted");
}
-
+extern void dwc_otg_clear_halt(struct urb *_urb);
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
static void intr_complete (struct urb *urb, struct pt_regs *regs)
#else
case -ESHUTDOWN: /* hardware gone */
if (netif_msg_ifdown (dev))
devdbg (dev, "intr shutdown, code %d", status);
- return;
+ break;
+ // return;
/* NOTE: not throttling like RX/TX, since this endpoint
* already polls infrequently
*/
default:
devdbg (dev, "intr status %d", status);
+ if(status < 0)
+ dwc_otg_clear_halt(urb);
break;
}
#endif
DECLARE_WAITQUEUE (wait, current);
- devdbg(dev," %s %d\n",__FUNCTION__,__LINE__);
netif_stop_queue (net);
if (netif_msg_ifdown (dev))
struct usbnet *dev = netdev_priv(net);
int retval = 0;
struct driver_info *info = dev->driver_info;
- devdbg(dev, " %s %d\n",__FUNCTION__,__LINE__);
+
// put into "known safe" state
if (info->reset && (retval = info->reset (dev)) < 0) {
if (netif_msg_ifup (dev))
struct usbnet *dev = (struct usbnet *) param;
struct sk_buff *skb;
struct skb_data *entry;
+
while ((skb = skb_dequeue (&dev->done))) {
entry = (struct skb_data *) skb->cb;
switch (entry->state) {