/****************************************************************************** * mv_eth_tool_get_regs * Description: * ethtool get registers array * INPUT: * netdev Network device structure pointer * regs registers information * OUTPUT * p registers array * RETURN: * None * *******************************************************************************/ void mv_eth_tool_get_regs(struct net_device *netdev, struct ethtool_regs *regs, void *p) { struct eth_port *priv = MV_ETH_PRIV(netdev); uint32_t *regs_buff = p; memset(p, 0, MV_ETH_TOOL_REGS_LEN * sizeof(uint32_t)); regs->version = mvCtrlModelRevGet(); /* ETH port registers */ regs_buff[0] = MV_REG_READ(ETH_PORT_STATUS_REG(priv->port)); regs_buff[1] = MV_REG_READ(ETH_PORT_SERIAL_CTRL_REG(priv->port)); regs_buff[2] = MV_REG_READ(ETH_PORT_CONFIG_REG(priv->port)); regs_buff[3] = MV_REG_READ(ETH_PORT_CONFIG_EXTEND_REG(priv->port)); regs_buff[4] = MV_REG_READ(ETH_SDMA_CONFIG_REG(priv->port)); /* regs_buff[5] = MV_REG_READ(ETH_TX_FIFO_URGENT_THRESH_REG(priv->port)); */ regs_buff[6] = MV_REG_READ(ETH_RX_QUEUE_COMMAND_REG(priv->port)); /* regs_buff[7] = MV_REG_READ(ETH_TX_QUEUE_COMMAND_REG(priv->port)); */ regs_buff[8] = MV_REG_READ(ETH_INTR_CAUSE_REG(priv->port)); regs_buff[9] = MV_REG_READ(ETH_INTR_CAUSE_EXT_REG(priv->port)); regs_buff[10] = MV_REG_READ(ETH_INTR_MASK_REG(priv->port)); regs_buff[11] = MV_REG_READ(ETH_INTR_MASK_EXT_REG(priv->port)); /* ETH Unit registers */ regs_buff[16] = MV_REG_READ(ETH_PHY_ADDR_REG(priv->port)); regs_buff[17] = MV_REG_READ(ETH_UNIT_INTR_CAUSE_REG(priv->port)); regs_buff[18] = MV_REG_READ(ETH_UNIT_INTR_MASK_REG(priv->port)); regs_buff[19] = MV_REG_READ(ETH_UNIT_ERROR_ADDR_REG(priv->port)); regs_buff[20] = MV_REG_READ(ETH_UNIT_INT_ADDR_ERROR_REG(priv->port)); }
static int __init mv_usb_init(void) { int status, dev, num, isHost; char* name_ptr; struct platform_device* mv_usb_dev_ptr; if(mvCtrlModelRevGet() == MV_5181L_A0_ID) { /* metal problem */ return 0; } num = mvCtrlUsbMaxGet(); for(dev=0; dev<num; dev++) { if (MV_FALSE == mvCtrlPwrClckGet(USB_UNIT_ID, dev)) { printk("\nWarning Integrated USB %d is Powered Off\n",dev); continue; } isHost = mvIsUsbHost & (1 << dev); if(isHost) { name_ptr = usb_host_name; } else { name_ptr = usb_dev_name; } status = mvUsbInit(dev, isHost); mv_usb_dev_ptr = kmalloc(sizeof(struct platform_device), GFP_KERNEL); if(mv_usb_dev_ptr == NULL) { printk("Can't allocate platform_device structure - %d bytes\n", sizeof(struct platform_device) ); return 1; } memset(mv_usb_dev_ptr, 0, sizeof(struct platform_device) ); mv_usb_dev_ptr->name = name_ptr; mv_usb_dev_ptr->id = PCI_VENDOR_ID_MARVELL | (MV_USB_VERSION << 16) | (dev << 24); mv_usb_dev_ptr->num_resources = 2; mv_usb_dev_ptr->resource = (struct resource*)kmalloc(2*sizeof(struct resource), GFP_KERNEL); if(mv_usb_dev_ptr->resource == NULL) { printk("Can't allocate 2 resource structure - %d bytes\n", 2*sizeof(struct resource) ); return 1; } memset(mv_usb_dev_ptr->resource, 0, 2*sizeof(struct resource)); mv_usb_dev_ptr->resource[0].start = ( INTER_REGS_BASE | MV_USB_CORE_CAP_LENGTH_REG(dev)); mv_usb_dev_ptr->resource[0].end = ((INTER_REGS_BASE | MV_USB_CORE_CAP_LENGTH_REG(dev)) + 4096); mv_usb_dev_ptr->resource[0].flags = IORESOURCE_DMA; mv_usb_dev_ptr->resource[1].start = IRQ_USB_CTRL(dev); mv_usb_dev_ptr->resource[1].flags = IORESOURCE_IRQ; mv_usb_dev_ptr->dev.dma_mask = kmalloc(sizeof(u64), GFP_KERNEL); *mv_usb_dev_ptr->dev.dma_mask = MV_USB_DMA_MASK; mv_usb_dev_ptr->dev.coherent_dma_mask = ~0; mv_usb_dev_ptr->dev.release = mv_usb_release; strncpy(mv_usb_dev_ptr->dev.bus_id, usb_bus_name, BUS_ID_SIZE); printk("Marvell USB EHCI %s controller #%d: %p\n", isHost ? "Host" : "Gadget", dev, mv_usb_dev_ptr); status = platform_device_register(mv_usb_dev_ptr); if (status) { printk("Can't register Marvell USB EHCI controller #%d, status=%d\n", dev, status); return status; } } return 0; }