3 struct net_device *gblpnetdev;
4 /***************************************************************************************/
5 /* proto-type of lower function */
7 static INT bcm_open(struct net_device *dev)
9 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
11 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "======>");
12 if(Adapter->fw_download_done==FALSE)
14 if(Adapter->LinkUpStatus == 1){
15 if(netif_queue_stopped(Adapter->dev)){
16 netif_carrier_on(Adapter->dev);
17 netif_start_queue(Adapter->dev);
21 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "<======");
25 static INT bcm_close(struct net_device *dev)
27 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
29 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "=====>");
30 if(!netif_queue_stopped(dev)) {
31 netif_carrier_off(dev);
32 netif_stop_queue(dev);
34 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL,"<=====");
38 static struct net_device_stats *bcm_get_stats(struct net_device *dev)
40 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
41 struct net_device_stats* netstats = &dev->stats;
43 netstats->rx_packets = atomic_read(&Adapter->RxRollOverCount)*64*1024
44 + Adapter->PrevNumRecvDescs;
45 netstats->rx_bytes = atomic_read(&Adapter->GoodRxByteCount)
46 + atomic_read(&Adapter->BadRxByteCount);
48 netstats->rx_dropped = atomic_read(&Adapter->RxPacketDroppedCount);
49 netstats->rx_errors = atomic_read(&Adapter->RxPacketDroppedCount);
50 netstats->tx_bytes = atomic_read(&Adapter->GoodTxByteCount);
51 netstats->tx_packets = atomic_read(&Adapter->TxTotalPacketCount);
52 netstats->tx_dropped = atomic_read(&Adapter->TxDroppedPacketCount);
58 @ingroup init_functions
59 Register other driver entry points with the kernel
61 static const struct net_device_ops bcmNetDevOps = {
63 .ndo_stop = bcm_close,
64 .ndo_get_stats = bcm_get_stats,
65 .ndo_start_xmit = bcm_transmit,
66 .ndo_change_mtu = eth_change_mtu,
67 .ndo_set_mac_address = eth_mac_addr,
68 .ndo_validate_addr = eth_validate_addr,
71 static struct device_type wimax_type = {
75 static int bcm_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
79 cmd->speed = SPEED_10000;
80 cmd->duplex = DUPLEX_FULL;
83 cmd->transceiver = XCVR_INTERNAL;
84 cmd->autoneg = AUTONEG_DISABLE;
90 static void bcm_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
92 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
93 PS_INTERFACE_ADAPTER psIntfAdapter = Adapter->pvInterfaceAdapter;
94 struct usb_device *udev = interface_to_usbdev(psIntfAdapter->interface);
96 strcpy(info->driver, DRV_NAME);
97 strcpy(info->version, DRV_VERSION);
98 snprintf(info->fw_version, sizeof(info->fw_version), "%u.%u",
99 Adapter->uiFlashLayoutMajorVersion,
100 Adapter->uiFlashLayoutMinorVersion);
102 usb_make_path(udev, info->bus_info, sizeof(info->bus_info));
105 static u32 bcm_get_link(struct net_device *dev)
107 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
109 return Adapter->LinkUpStatus;
112 static const struct ethtool_ops bcm_ethtool_ops = {
113 .get_settings = bcm_get_settings,
114 .get_drvinfo = bcm_get_drvinfo,
115 .get_link = bcm_get_link,
118 int register_networkdev(PMINI_ADAPTER Adapter)
120 struct net_device *net = Adapter->dev;
123 net->netdev_ops = &bcmNetDevOps;
124 net->ethtool_ops = &bcm_ethtool_ops;
125 net->mtu = MTU_SIZE; /* 1400 Bytes */
126 net->tx_queue_len = TX_QLEN;
127 net->flags |= IFF_NOARP;
128 net->flags &= ~(IFF_BROADCAST|IFF_MULTICAST);
130 netif_carrier_off(net);
132 SET_NETDEV_DEVTYPE(net, &wimax_type);
134 /* Read the MAC Address from EEPROM */
135 ReadMacAddressFromNVM(Adapter);
137 result = register_netdev(net);
139 gblpnetdev = Adapter->dev = net;
148 static int bcm_init(void)
150 printk(KERN_INFO "%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
151 printk(KERN_INFO "%s\n", DRV_COPYRIGHT);
153 return InterfaceInitialize();
157 static void bcm_exit(void)
162 module_init(bcm_init);
163 module_exit(bcm_exit);
165 MODULE_DESCRIPTION(DRV_DESCRIPTION);
166 MODULE_VERSION(DRV_VERSION);
167 MODULE_LICENSE ("GPL");