10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/netdevice.h>
16 #include <linux/types.h>
18 #define HARLEY_READ_REGISTER 0x0
19 #define HARLEY_WRITE_REGISTER 0x01
20 #define HARLEY_READ_DPRAM_32 0x02
21 #define HARLEY_READ_DPRAM_LOW 0x03
22 #define HARLEY_READ_DPRAM_HIGH 0x04
23 #define HARLEY_WRITE_DPRAM_32 0x05
24 #define HARLEY_WRITE_DPRAM_LOW 0x06
25 #define HARLEY_WRITE_DPRAM_HIGH 0x07
27 #define HARLEY_READ_OPERATION 0xc1
28 #define HARLEY_WRITE_OPERATION 0x41
32 static int ft1000_reset(
struct net_device *ft1000dev);
39 static u8 tempbuffer[1600];
41 #define MAX_RCV_LOOP 100
70 if ((ft1000dev ==
NULL) || (ft1000dev->
dev ==
NULL)) {
71 DEBUG(
"ft1000dev or ft1000dev->dev == NULL, failure\n");
76 value, index, data, size, timeout);
105 ret = ft1000_control(ft1000dev,
106 usb_rcvctrlpipe(ft1000dev->
dev, 0),
113 USB_CTRL_GET_TIMEOUT);
138 ret = ft1000_control(ft1000dev,
139 usb_sndctrlpipe(ft1000dev->
dev, 0),
146 USB_CTRL_SET_TIMEOUT);
173 ret = ft1000_control(ft1000dev,
174 usb_rcvctrlpipe(ft1000dev->
dev, 0),
181 USB_CTRL_GET_TIMEOUT);
208 cnt += cnt - (cnt % 4);
210 ret = ft1000_control(ft1000dev,
211 usb_sndctrlpipe(ft1000dev->
dev, 0),
218 USB_CTRL_SET_TIMEOUT);
250 ret = ft1000_control(ft1000dev,
251 usb_rcvctrlpipe(ft1000dev->
dev, 0),
258 USB_CTRL_GET_TIMEOUT);
289 ret = ft1000_control(ft1000dev,
290 usb_sndctrlpipe(ft1000dev->
dev, 0),
297 USB_CTRL_SET_TIMEOUT);
325 pos = (indx / 4) * 4;
329 pos = (indx % 4) * 4;
330 *buffer++ = buf[pos++];
331 *buffer++ = buf[pos++];
332 *buffer++ = buf[pos++];
333 *buffer++ = buf[pos++];
335 DEBUG(
"fix_ft1000_read_dpram32: DPRAM32 Read failed\n");
372 pos1 = (indx / 4) * 4;
378 buf[pos2++] = *buffer++;
379 buf[pos2++] = *buffer++;
380 buf[pos2++] = *buffer++;
381 buf[pos2++] = *buffer++;
384 DEBUG(
"fix_ft1000_write_dpram32: DPRAM32 Read failed\n");
392 for (i = 0; i < 16; i++) {
393 if (buf[i] != resultbuffer[i])
400 (
u8 *)&tempbuffer[0], 16);
402 (
u8 *)&resultbuffer[0], 16);
405 for (i = 0; i < 16; i++) {
406 if (tempbuffer[i] != resultbuffer[i]) {
408 DEBUG(
"%s Failed to write\n",
440 DEBUG(
"Reset DSP\n");
447 DEBUG(
"Activate DSP\n");
484 unsigned char *commandbuf;
486 DEBUG(
"card_send_command: enter card_send_command... size=%d\n", size);
489 memcpy((
void *)commandbuf + 2, (
void *)ptempbuffer, size);
501 size += 4 - (size % 4);
511 if ((temp & 0x0100) == 0) {
535 pft1000info = netdev_priv(ft1000dev->
net);
547 DEBUG(
"Reset Register = 0x%x\n", tempword);
550 card_reset_dsp(ft1000dev, 1);
552 card_reset_dsp(ft1000dev, 0);
561 (
u8 *) &templong, 4);
562 DEBUG(
"templong (fefe) = 0x%8x\n", templong);
572 DEBUG(
"dsp_reload returned\n");
594 DEBUG(
"ft1000_hw:ft1000_reset_asic called\n");
609 DEBUG(
"ft1000_hw: interrupt status register = 0x%x\n", tempword);
612 DEBUG(
"ft1000_hw: interrupt status register = 0x%x\n", tempword);
627 static int ft1000_reset_card(
struct net_device *dev)
634 DEBUG(
"ft1000_hw:ft1000_reset_card called.....\n");
641 while (list_empty(&info->
prov_list) == 0) {
642 DEBUG(
"ft1000_reset_card:deleting provisioning record\n");
650 DEBUG(
"ft1000_hw:ft1000_reset_card: reset asic\n");
651 ft1000_reset_asic(dev);
653 DEBUG(
"ft1000_hw:ft1000_reset_card: call dsp_reload\n");
656 DEBUG(
"dsp reload successful\n");
665 DEBUG(
"ft1000_hw:ft1000_reset_card:hi_ho value = 0x%x\n", tempword);
676 .ndo_open = &ft1000_open,
678 .ndo_start_xmit = &ft1000_start_xmit,
679 .ndo_get_stats = &ft1000_netdev_stats,
705 unsigned long gCardIndex = 0;
707 DEBUG(
"Enter init_ft1000_netdev...\n");
709 netdev = alloc_etherdev(
sizeof(
struct ft1000_info));
711 DEBUG(
"init_ft1000_netdev: can not allocate network device\n");
715 pInfo = netdev_priv(netdev);
721 DEBUG(
"init_ft1000_netdev: network device name is %s\n", netdev->
name);
724 card_nr[0] = netdev->
name[3];
763 INIT_LIST_HEAD(&pInfo->
nodes.list);
767 ft1000dev->
net = netdev;
769 DEBUG(
"Initialize free_buff_lock and freercvpool\n");
781 if (pdpram_blk ==
NULL) {
832 netdev = ft1000dev->
net;
833 pInfo = netdev_priv(ft1000dev->
net);
834 DEBUG(
"Enter reg_ft1000_netdev...\n");
838 usb_set_intfdata(intf, pInfo);
843 DEBUG(
"reg_ft1000_netdev: could not register network device\n");
850 DEBUG(
"reg_ft1000_netdev returned\n");
859 ft1000_reset_card(dev);
876 static void ft1000_usb_transmit_complete(
struct urb *
urb)
882 pr_err(
"%s: TX status %d\n", ft1000dev->
net->name, urb->status);
884 netif_wake_queue(ft1000dev->
net);
912 DEBUG(
"ft1000_copy_down_pkt::Card Not Ready\n");
918 DEBUG(
"Error:ft1000_copy_down_pkt:Message Size Overflow!\n");
919 DEBUG(
"size = %d\n", count);
924 count = count + (4 - (count % 4));
930 hdr.destination = 0x20;
933 hdr.sh_str_id = 0x91;
936 hdr.checksum =
hdr.length ^
hdr.source ^
hdr.destination ^
937 hdr.portdest ^
hdr.portsrc ^
hdr.sh_str_id ^
hdr.control;
942 netif_stop_queue(netdev);
944 usb_fill_bulk_urb(pFt1000Dev->
tx_urb,
946 usb_sndbulkpipe(pFt1000Dev->
dev,
948 pFt1000Dev->
tx_buf, count,
949 ft1000_usb_transmit_complete, (
void *)pFt1000Dev);
951 t = (
u8 *) pFt1000Dev->
tx_urb->transfer_buffer;
956 DEBUG(
"ft1000 failed tx_urb %d\n", ret);
959 pInfo->
stats.tx_packets++;
960 pInfo->
stats.tx_bytes += (len + 14);
989 DEBUG(
"ft1000_hw: ft1000_start_xmit:skb == NULL!!!\n");
994 DEBUG(
"network driver is closed, return\n");
1000 maxlen = usb_maxpacket(pFt1000Dev->
dev, pipe, usb_pipeout(pipe));
1002 pdata = (
u8 *) skb->
data;
1006 DEBUG(
"ft1000_hw:ft1000_start_xmit:mediastate is down\n");
1012 DEBUG(
"ft1000_hw:ft1000_start_xmit:invalid ethernet length\n");
1039 static int ft1000_copy_up_pkt(
struct urb *urb)
1055 DEBUG(
"network driver is closed, return\n");
1059 len = urb->transfer_buffer_length;
1060 lena = urb->actual_length;
1064 tempword = *chksum++;
1065 for (i = 1; i < 7; i++)
1066 tempword ^= *chksum++;
1068 if (tempword != *chksum) {
1069 info->
stats.rx_errors++;
1070 ft1000_submit_rx_urb(info);
1074 skb = dev_alloc_skb(len + 12 + 2);
1077 DEBUG(
"ft1000_copy_up_pkt: No Network buffers available\n");
1078 info->
stats.rx_errors++;
1079 ft1000_submit_rx_urb(info);
1083 pbuffer = (
u8 *)
skb_put(skb, len + 12);
1111 info->
stats.rx_packets++;
1113 info->
stats.rx_bytes += (lena + 12);
1115 ft1000_submit_rx_urb(info);
1134 static int ft1000_submit_rx_urb(
struct ft1000_info *info)
1140 DEBUG(
"network driver is closed, return\n");
1144 usb_fill_bulk_urb(pFt1000Dev->
rx_urb,
1146 usb_rcvbulkpipe(pFt1000Dev->
dev,
1149 (usb_complete_t) ft1000_copy_up_pkt, info);
1154 pr_err(
"ft1000_submit_rx_urb: submitting rx_urb %d failed\n",
1177 static int ft1000_open(
struct net_device *dev)
1184 pInfo->
stats.rx_bytes = 0;
1185 pInfo->
stats.tx_bytes = 0;
1186 pInfo->
stats.rx_packets = 0;
1187 pInfo->
stats.tx_packets = 0;
1189 pInfo->
ConTm = tv.tv_sec;
1192 netif_start_queue(dev);
1196 return ft1000_submit_rx_urb(pInfo);
1220 DEBUG(
"ft1000_close: pInfo=%p, ft1000dev=%p\n", pInfo, ft1000dev);
1222 netif_stop_queue(net);
1234 return &(info->
stats);
1258 (
"ft1000_hw:ft1000_chkcard:Card is being reset, return FALSE\n");
1265 if (tempword == 0) {
1267 (
"ft1000_hw:ft1000_chkcard: IMASK = 0 Card not detected\n");
1274 if (tempword != 0x1b01) {
1277 (
"ft1000_hw:ft1000_chkcard: Version = 0xffff Card not detected\n");
1297 int maxsz,
u16 *pnxtph)
1309 DEBUG(
"FT1000:ft1000_receive_cmd:Invalid command length = %d\n",
1313 ppseudohdr = (
u16 *) pbuffer;
1321 for (i = 0; i <= (size >> 2); i++) {
1340 if (size & 0x0001) {
1345 *pbuffer =
ntohs(tempword);
1350 tempword = *ppseudohdr++;
1351 for (i = 1; i < 7; i++)
1352 tempword ^= *ppseudohdr++;
1354 if ((tempword != *ppseudohdr))
1361 static int ft1000_dsp_prov(
void *
arg)
1372 u16 TempShortBuf[256];
1374 DEBUG(
"*** DspProv Entered\n");
1376 while (list_empty(&info->
prov_list) == 0) {
1377 DEBUG(
"DSP Provisioning List Entry\n");
1380 DEBUG(
"check if doorbell is cleared\n");
1384 DEBUG(
"ft1000_dsp_prov::ft1000_read_register error\n");
1392 DEBUG(
"FT1000:ft1000_dsp_prov:message drop\n");
1399 if (!(tempword & FT1000_DB_DPRAM_TX)) {
1400 DEBUG(
"*** Provision Data Sent to DSP\n");
1417 for (i = 1; i < 7; i++) {
1421 TempShortBuf[0] = 0;
1422 TempShortBuf[1] =
htons(len);
1423 memcpy(&TempShortBuf[2], ppseudo_hdr, len);
1427 (
u8 *) &TempShortBuf[0],
1428 (
unsigned short)(len + 2));
1440 DEBUG(
"DSP Provisioning List Entry finished\n");
1474 DEBUG(
"ft1000_proc_drvmsg:cmdbuffer\n");
1475 for (i = 0; i <
size; i += 5) {
1477 DEBUG(
"0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", cmdbuffer[i],
1478 cmdbuffer[i + 1], cmdbuffer[i + 2],
1479 cmdbuffer[i + 3], cmdbuffer[i + 4]);
1482 DEBUG(
"0x%x ", cmdbuffer[
j]);
1488 pdrvmsg = (
struct drv_msg *)&cmdbuffer[2];
1490 DEBUG(
"ft1000_proc_drvmsg:Command message type = 0x%x\n", msgtype);
1494 (
"ft1000_proc_drvmsg:Command message type = MEDIA_STATE");
1496 pmediamsg = (
struct media_msg *)&cmdbuffer[0];
1498 if (pmediamsg->
state) {
1499 DEBUG(
"Media is up\n");
1502 netif_wake_queue(dev->
1508 DEBUG(
"Media is down\n");
1517 DEBUG(
"Media is down\n");
1527 (
"ft1000_proc_drvmsg:Command message type = DSP_INIT_MSG");
1531 DEBUG(
"DSPVER = 0x%2x 0x%2x 0x%2x 0x%2x\n",
1538 DEBUG(
"EUI64=%2x.%2x.%2x.%2x.%2x.%2x.%2x.%2x\n",
1542 dev->
net->dev_addr[0] = info->
eui64[0];
1543 dev->
net->dev_addr[1] = info->
eui64[1];
1544 dev->
net->dev_addr[2] = info->
eui64[2];
1545 dev->
net->dev_addr[3] = info->
eui64[5];
1546 dev->
net->dev_addr[4] = info->
eui64[6];
1547 dev->
net->dev_addr[5] = info->
eui64[7];
1557 DEBUG(
"RFCalVer = 0x%2x 0x%2x\n",
1564 (
"ft1000_proc_drvmsg:Command message type = DSP_PROVISION\n");
1569 if (list_empty(&info->
prov_list) == 0) {
1571 status = ft1000_dsp_prov(dev);
1580 (
"FT1000:drivermsg:No more DSP provisioning data in dsp image\n");
1582 DEBUG(
"ft1000_proc_drvmsg:DSP PROVISION is done\n");
1587 (
"ft1000_proc_drvmsg:Command message type = DSP_STORE_INFO");
1589 DEBUG(
"FT1000:drivermsg:Got DSP_STORE_INFO\n");
1593 pmsg = (
u16 *) &pdrvmsg->
data[0];
1594 for (i = 0; i < ((tempword + 1) / 2); i++) {
1596 (
"FT1000:drivermsg:dsp info data = 0x%x\n",
1606 DEBUG(
"FT1000:drivermsg:Got DSP_GET_INFO\n");
1614 if (tempword & FT1000_DB_DPRAM_TX) {
1619 if (tempword & FT1000_DB_DPRAM_TX) {
1624 if (tempword & FT1000_DB_DPRAM_TX)
1641 ppseudo_hdr->
source = 0x10;
1647 ppseudo_hdr->
rsvd1 = 0;
1648 ppseudo_hdr->
rsvd2 = 0;
1656 for (i = 1; i < 7; i++)
1664 (
unsigned short)(info->
1676 DEBUG(
"FT1000:drivermsg:Got GET_DRV_ERR_RPT_MSG\n");
1684 if (tempword & FT1000_DB_DPRAM_TX) {
1689 if (tempword & FT1000_DB_DPRAM_TX)
1693 if ((tempword & FT1000_DB_DPRAM_TX) == 0) {
1697 pmsg = (
u16 *) &tempbuffer[0];
1700 ppseudo_hdr->
source = 0x10;
1706 ppseudo_hdr->
rsvd1 = 0;
1707 ppseudo_hdr->
rsvd2 = 0;
1715 for (i = 1; i < 7; i++)
1718 pmsg = (
u16 *) &tempbuffer[16];
1720 *pmsg++ =
htons(0x000e);
1734 (
unsigned char *)&tempbuffer[0],
1750 DEBUG(
"return from ft1000_proc_drvmsg\n");
1769 unsigned long flags;
1771 if (ft1000_chkcard(dev) ==
FALSE) {
1772 DEBUG(
"ft1000_poll::ft1000_chkcard: failed\n");
1784 size =
ntohs(data) + 16 + 2;
1786 modulo = 4 - (size % 4);
1796 DEBUG(
"ft1000_poll: FT1000_REG_DOORBELL message type: FT1000_DB_DPRAM_RX : portid DRIVERID\n");
1798 status = ft1000_proc_drvmsg (dev, size);
1812 if (pdpram_blk !=
NULL) {
1827 DEBUG(
"pdpram_blk::ft1000_get_buffer NULL\n");
1831 DEBUG(
"Out of memory in free receive command pool\n");
1840 if (pdpram_blk !=
NULL) {
1850 if (i == MAX_NUM_APP) {
1851 DEBUG(
"FT1000:ft1000_parse_dpram_msg: No application matching id = %d\n", ppseudo_hdr->
portdest);
1874 DEBUG(
"Out of memory in free receive command pool\n");
1880 DEBUG(
"FT1000:dpc:Invalid total length for SlowQ = %d\n", size);
1898 DEBUG(
"Unable to reset ASIC\n");
1909 DEBUG(
"ft1000_poll: FT1000_REG_DOORBELL message type: FT1000_ASIC_RESET_REQ\n");
1922 DEBUG(
"ft1000_poll: FT1000_REG_DOORBELL message type: FT1000_DB_COND_RESET\n");
1933 DEBUG(
"ft1000_hw:DSP conditional reset requested\n");