3 #define DRV_NAME "beceem"
4 #define DRV_VERSION "5.2.7.3P1"
5 #define DRV_DESCRIPTION "Beceem Communications Inc. WiMAX driver"
6 #define DRV_COPYRIGHT "Copyright 2010. Beceem Communications Inc"
9 struct net_device *gblpnetdev;
10 /***************************************************************************************/
11 /* proto-type of lower function */
13 static INT bcm_open(struct net_device *dev)
15 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
17 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "======>");
18 if(Adapter->fw_download_done==FALSE)
20 if(Adapter->LinkUpStatus == 1){
21 if(netif_queue_stopped(Adapter->dev)){
22 netif_carrier_on(Adapter->dev);
23 netif_start_queue(Adapter->dev);
27 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "<======");
31 static INT bcm_close(struct net_device *dev)
33 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
35 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "=====>");
36 if(!netif_queue_stopped(dev)) {
37 netif_carrier_off(dev);
38 netif_stop_queue(dev);
40 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL,"<=====");
44 static struct net_device_stats *bcm_get_stats(struct net_device *dev)
46 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
47 struct net_device_stats* netstats = &dev->stats;
49 netstats->rx_packets = atomic_read(&Adapter->RxRollOverCount)*64*1024
50 + Adapter->PrevNumRecvDescs;
51 netstats->rx_bytes = atomic_read(&Adapter->GoodRxByteCount)
52 + atomic_read(&Adapter->BadRxByteCount);
54 netstats->rx_dropped = atomic_read(&Adapter->RxPacketDroppedCount);
55 netstats->rx_errors = atomic_read(&Adapter->RxPacketDroppedCount);
56 netstats->tx_bytes = atomic_read(&Adapter->GoodTxByteCount);
57 netstats->tx_packets = atomic_read(&Adapter->TxTotalPacketCount);
58 netstats->tx_dropped = atomic_read(&Adapter->TxDroppedPacketCount);
64 @ingroup init_functions
65 Register other driver entry points with the kernel
67 static const struct net_device_ops bcmNetDevOps = {
69 .ndo_stop = bcm_close,
70 .ndo_get_stats = bcm_get_stats,
71 .ndo_start_xmit = bcm_transmit,
72 .ndo_change_mtu = eth_change_mtu,
73 .ndo_set_mac_address = eth_mac_addr,
74 .ndo_validate_addr = eth_validate_addr,
77 static struct device_type wimax_type = {
81 static int bcm_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
85 cmd->speed = SPEED_10000;
86 cmd->duplex = DUPLEX_FULL;
89 cmd->transceiver = XCVR_INTERNAL;
90 cmd->autoneg = AUTONEG_DISABLE;
96 static void bcm_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
98 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
99 PS_INTERFACE_ADAPTER psIntfAdapter = Adapter->pvInterfaceAdapter;
100 struct usb_device *udev = interface_to_usbdev(psIntfAdapter->interface);
102 strcpy(info->driver, DRV_NAME);
103 strcpy(info->version, DRV_VERSION);
104 snprintf(info->fw_version, sizeof(info->fw_version), "%u.%u",
105 Adapter->uiFlashLayoutMajorVersion,
106 Adapter->uiFlashLayoutMinorVersion);
108 usb_make_path(udev, info->bus_info, sizeof(info->bus_info));
111 static u32 bcm_get_link(struct net_device *dev)
113 PMINI_ADAPTER Adapter = GET_BCM_ADAPTER(dev);
115 return Adapter->LinkUpStatus;
118 static const struct ethtool_ops bcm_ethtool_ops = {
119 .get_settings = bcm_get_settings,
120 .get_drvinfo = bcm_get_drvinfo,
121 .get_link = bcm_get_link,
124 int register_networkdev(PMINI_ADAPTER Adapter)
126 struct net_device *net;
128 PS_INTERFACE_ADAPTER psIntfAdapter = Adapter->pvInterfaceAdapter;
129 struct usb_interface *uintf = psIntfAdapter->interface;
132 net = alloc_etherdev(sizeof(PMINI_ADAPTER));
134 pr_notice("bcmnet: no memory for device\n");
138 Adapter->dev = net; /* FIXME - only allows one adapter! */
139 temp = netdev_priv(net);
142 net->netdev_ops = &bcmNetDevOps;
143 net->ethtool_ops = &bcm_ethtool_ops;
144 net->mtu = MTU_SIZE; /* 1400 Bytes */
145 net->tx_queue_len = TX_QLEN;
146 netif_carrier_off(net);
148 SET_NETDEV_DEV(net, &uintf->dev);
149 SET_NETDEV_DEVTYPE(net, &wimax_type);
151 /* Read the MAC Address from EEPROM */
152 ReadMacAddressFromNVM(Adapter);
154 result = register_netdev(net);
156 gblpnetdev = Adapter->dev = net;
165 void bcm_unregister_networkdev(PMINI_ADAPTER Adapter)
167 BCM_DEBUG_PRINT(Adapter,DBG_TYPE_INITEXIT, DRV_ENTRY, DBG_LVL_ALL, "Unregistering the Net Dev...\n");
169 unregister_netdev(Adapter->dev);
174 static int bcm_init(void)
176 printk(KERN_INFO "%s, %s\n", DRV_DESCRIPTION, DRV_VERSION);
177 printk(KERN_INFO "%s\n", DRV_COPYRIGHT);
179 return InterfaceInitialize();
183 static void bcm_exit(void)
188 module_init(bcm_init);
189 module_exit(bcm_exit);
191 MODULE_DESCRIPTION(DRV_DESCRIPTION);
192 MODULE_VERSION(DRV_VERSION);
193 MODULE_LICENSE ("GPL");