aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/ft1000
diff options
context:
space:
mode:
authorMarek Belisko <marek.belisko@open-nandra.com>2011-03-10 05:51:35 -0500
committerGreg Kroah-Hartman <gregkh@suse.de>2011-03-14 14:51:21 -0400
commit6d2b67219523afbb7d83e8664cb9b0f4f267bd9a (patch)
treeaaa5a8c49fe270991e0c69baa20dce9e0af01b20 /drivers/staging/ft1000
parentfc796a6502de4c146bf3893390cca43df2d0e539 (diff)
staging: ft1000: Fix coding style in ft1000_proc_drvmsg function.
Signed-off-by: Marek Belisko <marek.belisko@open-nandra.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/ft1000')
-rw-r--r--drivers/staging/ft1000/ft1000-usb/ft1000_hw.c558
1 files changed, 295 insertions, 263 deletions
diff --git a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c
index 01877581a57..78dcd49bb98 100644
--- a/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c
+++ b/drivers/staging/ft1000/ft1000-usb/ft1000_hw.c
@@ -1530,286 +1530,318 @@ static int ft1000_dsp_prov(void *arg)
1530 return STATUS_SUCCESS; 1530 return STATUS_SUCCESS;
1531} 1531}
1532 1532
1533static int ft1000_proc_drvmsg (struct ft1000_device *dev, u16 size) { 1533static int ft1000_proc_drvmsg(struct ft1000_device *dev, u16 size)
1534{
1534 struct ft1000_info *info = netdev_priv(dev->net); 1535 struct ft1000_info *info = netdev_priv(dev->net);
1535 u16 msgtype; 1536 u16 msgtype;
1536 u16 tempword; 1537 u16 tempword;
1537 struct media_msg *pmediamsg; 1538 struct media_msg *pmediamsg;
1538 struct dsp_init_msg *pdspinitmsg; 1539 struct dsp_init_msg *pdspinitmsg;
1539 struct drv_msg *pdrvmsg; 1540 struct drv_msg *pdrvmsg;
1540 u16 i; 1541 u16 i;
1541 struct pseudo_hdr *ppseudo_hdr; 1542 struct pseudo_hdr *ppseudo_hdr;
1542 u16 *pmsg; 1543 u16 *pmsg;
1543 u16 status; 1544 u16 status;
1544 union { 1545 union {
1545 u8 byte[2]; 1546 u8 byte[2];
1546 u16 wrd; 1547 u16 wrd;
1547 } convert; 1548 } convert;
1548
1549
1550 char *cmdbuffer = kmalloc(1600, GFP_KERNEL);
1551 if (!cmdbuffer)
1552 return STATUS_FAILURE;
1553
1554 status = ft1000_read_dpram32(dev, 0x200, cmdbuffer, size);
1555 1549
1550 char *cmdbuffer = kmalloc(1600, GFP_KERNEL);
1551 if (!cmdbuffer)
1552 return STATUS_FAILURE;
1556 1553
1554 status = ft1000_read_dpram32(dev, 0x200, cmdbuffer, size);
1557 1555
1558#ifdef JDEBUG 1556#ifdef JDEBUG
1559 DEBUG("ft1000_proc_drvmsg:cmdbuffer\n"); 1557 DEBUG("ft1000_proc_drvmsg:cmdbuffer\n");
1560 for(i = 0; i < size; i+=5) 1558 for (i = 0; i < size; i += 5) {
1561 { 1559 if ((i + 5) < size)
1562 if( (i + 5) < size ) 1560 DEBUG("0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", cmdbuffer[i],
1563 DEBUG("0x%x, 0x%x, 0x%x, 0x%x, 0x%x\n", cmdbuffer[i], cmdbuffer[i+1], cmdbuffer[i+2], cmdbuffer[i+3], cmdbuffer[i+4]); 1561 cmdbuffer[i + 1], cmdbuffer[i + 2],
1564 else 1562 cmdbuffer[i + 3], cmdbuffer[i + 4]);
1565 { 1563 else {
1566 for (j = i; j < size; j++) 1564 for (j = i; j < size; j++)
1567 DEBUG("0x%x ", cmdbuffer[j]); 1565 DEBUG("0x%x ", cmdbuffer[j]);
1568 DEBUG("\n"); 1566 DEBUG("\n");
1569 break; 1567 break;
1570 } 1568 }
1571 } 1569 }
1572#endif 1570#endif
1573 pdrvmsg = (struct drv_msg *)&cmdbuffer[2]; 1571 pdrvmsg = (struct drv_msg *)&cmdbuffer[2];
1574 msgtype = ntohs(pdrvmsg->type); 1572 msgtype = ntohs(pdrvmsg->type);
1575 DEBUG("ft1000_proc_drvmsg:Command message type = 0x%x\n", msgtype); 1573 DEBUG("ft1000_proc_drvmsg:Command message type = 0x%x\n", msgtype);
1576 switch (msgtype) { 1574 switch (msgtype) {
1577 case MEDIA_STATE: { 1575 case MEDIA_STATE:{
1578 DEBUG("ft1000_proc_drvmsg:Command message type = MEDIA_STATE"); 1576 DEBUG
1579 1577 ("ft1000_proc_drvmsg:Command message type = MEDIA_STATE");
1580 pmediamsg = (struct media_msg *)&cmdbuffer[0]; 1578
1581 if (info->ProgConStat != 0xFF) { 1579 pmediamsg = (struct media_msg *)&cmdbuffer[0];
1582 if (pmediamsg->state) { 1580 if (info->ProgConStat != 0xFF) {
1583 DEBUG("Media is up\n"); 1581 if (pmediamsg->state) {
1584 if (info->mediastate == 0) { 1582 DEBUG("Media is up\n");
1585 if ( info->NetDevRegDone ) 1583 if (info->mediastate == 0) {
1586 { 1584 if (info->NetDevRegDone) {
1587 //netif_carrier_on(dev->net);//mbelian 1585 //netif_carrier_on(dev->net);//mbelian
1588 netif_wake_queue(dev->net); 1586 netif_wake_queue(dev->
1589 } 1587 net);
1590 info->mediastate = 1; 1588 }
1591 /*do_gettimeofday(&tv); 1589 info->mediastate = 1;
1592 info->ConTm = tv.tv_sec;*/ //mbelian 1590 /*do_gettimeofday(&tv);
1593 } 1591 info->ConTm = tv.tv_sec; *///mbelian
1594 } 1592 }
1595 else { 1593 } else {
1596 DEBUG("Media is down\n"); 1594 DEBUG("Media is down\n");
1597 if (info->mediastate == 1) { 1595 if (info->mediastate == 1) {
1598 info->mediastate = 0; 1596 info->mediastate = 0;
1599 if ( info->NetDevRegDone ) 1597 if (info->NetDevRegDone) {
1600 { 1598 //netif_carrier_off(dev->net); mbelian
1601 //netif_carrier_off(dev->net); mbelian 1599 //netif_stop_queue(dev->net);
1602 //netif_stop_queue(dev->net); 1600 }
1603 } 1601 info->ConTm = 0;
1604 info->ConTm = 0; 1602 }
1605 } 1603 }
1606 } 1604 } else {
1607 } 1605 DEBUG("Media is down\n");
1608 else { 1606 if (info->mediastate == 1) {
1609 DEBUG("Media is down\n"); 1607 info->mediastate = 0;
1610 if (info->mediastate == 1) { 1608 if (info->NetDevRegDone) {
1611 info->mediastate = 0; 1609 //netif_carrier_off(dev->net); //mbelian
1612 if ( info->NetDevRegDone) 1610 //netif_stop_queue(dev->net);
1613 { 1611 }
1614 //netif_carrier_off(dev->net); //mbelian 1612 info->ConTm = 0;
1615 //netif_stop_queue(dev->net); 1613 }
1616 } 1614 }
1617 info->ConTm = 0; 1615 break;
1618 } 1616 }
1619 } 1617 case DSP_INIT_MSG:{
1620 break; 1618 DEBUG
1621 } 1619 ("ft1000_proc_drvmsg:Command message type = DSP_INIT_MSG");
1622 case DSP_INIT_MSG: { 1620
1623 DEBUG("ft1000_proc_drvmsg:Command message type = DSP_INIT_MSG"); 1621 pdspinitmsg = (struct dsp_init_msg *)&cmdbuffer[2];
1624 1622 memcpy(info->DspVer, pdspinitmsg->DspVer, DSPVERSZ);
1625 pdspinitmsg = (struct dsp_init_msg *)&cmdbuffer[2]; 1623 DEBUG("DSPVER = 0x%2x 0x%2x 0x%2x 0x%2x\n",
1626 memcpy(info->DspVer, pdspinitmsg->DspVer, DSPVERSZ); 1624 info->DspVer[0], info->DspVer[1], info->DspVer[2],
1627 DEBUG("DSPVER = 0x%2x 0x%2x 0x%2x 0x%2x\n", info->DspVer[0], info->DspVer[1], info->DspVer[2], info->DspVer[3]); 1625 info->DspVer[3]);
1628 memcpy(info->HwSerNum, pdspinitmsg->HwSerNum, HWSERNUMSZ); 1626 memcpy(info->HwSerNum, pdspinitmsg->HwSerNum,
1629 memcpy(info->Sku, pdspinitmsg->Sku, SKUSZ); 1627 HWSERNUMSZ);
1630 memcpy(info->eui64, pdspinitmsg->eui64, EUISZ); 1628 memcpy(info->Sku, pdspinitmsg->Sku, SKUSZ);
1631 DEBUG("EUI64=%2x.%2x.%2x.%2x.%2x.%2x.%2x.%2x\n", info->eui64[0],info->eui64[1], info->eui64[2], info->eui64[3], info->eui64[4], info->eui64[5],info->eui64[6], info->eui64[7]); 1629 memcpy(info->eui64, pdspinitmsg->eui64, EUISZ);
1632 dev->net->dev_addr[0] = info->eui64[0]; 1630 DEBUG("EUI64=%2x.%2x.%2x.%2x.%2x.%2x.%2x.%2x\n",
1633 dev->net->dev_addr[1] = info->eui64[1]; 1631 info->eui64[0], info->eui64[1], info->eui64[2],
1634 dev->net->dev_addr[2] = info->eui64[2]; 1632 info->eui64[3], info->eui64[4], info->eui64[5],
1635 dev->net->dev_addr[3] = info->eui64[5]; 1633 info->eui64[6], info->eui64[7]);
1636 dev->net->dev_addr[4] = info->eui64[6]; 1634 dev->net->dev_addr[0] = info->eui64[0];
1637 dev->net->dev_addr[5] = info->eui64[7]; 1635 dev->net->dev_addr[1] = info->eui64[1];
1638 1636 dev->net->dev_addr[2] = info->eui64[2];
1639 if (ntohs(pdspinitmsg->length) == (sizeof(struct dsp_init_msg) - 20)) { 1637 dev->net->dev_addr[3] = info->eui64[5];
1640 memcpy(info->ProductMode, pdspinitmsg->ProductMode, MODESZ); 1638 dev->net->dev_addr[4] = info->eui64[6];
1641 memcpy(info->RfCalVer, pdspinitmsg->RfCalVer, CALVERSZ); 1639 dev->net->dev_addr[5] = info->eui64[7];
1642 memcpy(info->RfCalDate, pdspinitmsg->RfCalDate, CALDATESZ); 1640
1643 DEBUG("RFCalVer = 0x%2x 0x%2x\n", info->RfCalVer[0], info->RfCalVer[1]); 1641 if (ntohs(pdspinitmsg->length) ==
1644 } 1642 (sizeof(struct dsp_init_msg) - 20)) {
1645 break; 1643 memcpy(info->ProductMode,
1646 } 1644 pdspinitmsg->ProductMode, MODESZ);
1647 case DSP_PROVISION: { 1645 memcpy(info->RfCalVer, pdspinitmsg->RfCalVer,
1648 DEBUG("ft1000_proc_drvmsg:Command message type = DSP_PROVISION\n"); 1646 CALVERSZ);
1647 memcpy(info->RfCalDate, pdspinitmsg->RfCalDate,
1648 CALDATESZ);
1649 DEBUG("RFCalVer = 0x%2x 0x%2x\n",
1650 info->RfCalVer[0], info->RfCalVer[1]);
1651 }
1652 break;
1653 }
1654 case DSP_PROVISION:{
1655 DEBUG
1656 ("ft1000_proc_drvmsg:Command message type = DSP_PROVISION\n");
1657
1658 /* kick off dspprov routine to start provisioning
1659 * Send provisioning data to DSP
1660 */
1661 if (list_empty(&info->prov_list) == 0) {
1662 info->fProvComplete = 0;
1663 status = ft1000_dsp_prov(dev);
1664 if (status != STATUS_SUCCESS)
1665 goto out;
1666 } else {
1667 info->fProvComplete = 1;
1668 status =
1669 ft1000_write_register(dev, FT1000_DB_HB,
1670 FT1000_REG_DOORBELL);
1671 DEBUG
1672 ("FT1000:drivermsg:No more DSP provisioning data in dsp image\n");
1673 }
1674 DEBUG("ft1000_proc_drvmsg:DSP PROVISION is done\n");
1675 break;
1676 }
1677 case DSP_STORE_INFO:{
1678 DEBUG
1679 ("ft1000_proc_drvmsg:Command message type = DSP_STORE_INFO");
1680
1681 DEBUG("FT1000:drivermsg:Got DSP_STORE_INFO\n");
1682 tempword = ntohs(pdrvmsg->length);
1683 info->DSPInfoBlklen = tempword;
1684 if (tempword < (MAX_DSP_SESS_REC - 4)) {
1685 pmsg = (u16 *) &pdrvmsg->data[0];
1686 for (i = 0; i < ((tempword + 1) / 2); i++) {
1687 DEBUG
1688 ("FT1000:drivermsg:dsp info data = 0x%x\n",
1689 *pmsg);
1690 info->DSPInfoBlk[i + 10] = *pmsg++;
1691 }
1692 } else {
1693 info->DSPInfoBlklen = 0;
1694 }
1695 break;
1696 }
1697 case DSP_GET_INFO:{
1698 DEBUG("FT1000:drivermsg:Got DSP_GET_INFO\n");
1699 /* copy dsp info block to dsp */
1700 info->DrvMsgPend = 1;
1701 /* allow any outstanding ioctl to finish */
1702 mdelay(10);
1703 status =
1704 ft1000_read_register(dev, &tempword,
1705 FT1000_REG_DOORBELL);
1706 if (tempword & FT1000_DB_DPRAM_TX) {
1707 mdelay(10);
1708 status =
1709 ft1000_read_register(dev, &tempword,
1710 FT1000_REG_DOORBELL);
1711 if (tempword & FT1000_DB_DPRAM_TX) {
1712 mdelay(10);
1713 status =
1714 ft1000_read_register(dev, &tempword,
1715 FT1000_REG_DOORBELL);
1716 if (tempword & FT1000_DB_DPRAM_TX)
1717 break;
1718 }
1719 }
1720 /* Put message into Slow Queue
1721 * Form Pseudo header
1722 */
1723 pmsg = (u16 *) info->DSPInfoBlk;
1724 *pmsg++ = 0;
1725 *pmsg++ =
1726 htons(info->DSPInfoBlklen + 20 +
1727 info->DSPInfoBlklen);
1728 ppseudo_hdr =
1729 (struct pseudo_hdr *)(u16 *) &info->DSPInfoBlk[2];
1730 ppseudo_hdr->length =
1731 htons(info->DSPInfoBlklen + 4 +
1732 info->DSPInfoBlklen);
1733 ppseudo_hdr->source = 0x10;
1734 ppseudo_hdr->destination = 0x20;
1735 ppseudo_hdr->portdest = 0;
1736 ppseudo_hdr->portsrc = 0;
1737 ppseudo_hdr->sh_str_id = 0;
1738 ppseudo_hdr->control = 0;
1739 ppseudo_hdr->rsvd1 = 0;
1740 ppseudo_hdr->rsvd2 = 0;
1741 ppseudo_hdr->qos_class = 0;
1742 /* Insert slow queue sequence number */
1743 ppseudo_hdr->seq_num = info->squeseqnum++;
1744 /* Insert application id */
1745 ppseudo_hdr->portsrc = 0;
1746 /* Calculate new checksum */
1747 ppseudo_hdr->checksum = *pmsg++;
1748 for (i = 1; i < 7; i++)
1749 ppseudo_hdr->checksum ^= *pmsg++;
1649 1750
1650 // kick off dspprov routine to start provisioning 1751 info->DSPInfoBlk[10] = 0x7200;
1651 // Send provisioning data to DSP 1752 info->DSPInfoBlk[11] = htons(info->DSPInfoBlklen);
1652 if (list_empty(&info->prov_list) == 0) 1753 status =
1653 { 1754 ft1000_write_dpram32(dev, 0,
1654 info->fProvComplete = 0; 1755 (u8 *) &info->DSPInfoBlk[0],
1655 status = ft1000_dsp_prov(dev); 1756 (unsigned short)(info->
1656 if (status != STATUS_SUCCESS) 1757 DSPInfoBlklen
1657 goto out; 1758 + 22));
1658 } 1759 status =
1659 else { 1760 ft1000_write_register(dev, FT1000_DB_DPRAM_TX,
1660 info->fProvComplete = 1; 1761 FT1000_REG_DOORBELL);
1661 status = ft1000_write_register (dev, FT1000_DB_HB, FT1000_REG_DOORBELL); 1762 info->DrvMsgPend = 0;
1662 DEBUG("FT1000:drivermsg:No more DSP provisioning data in dsp image\n");
1663 }
1664 DEBUG("ft1000_proc_drvmsg:DSP PROVISION is done\n");
1665 break;
1666 }
1667 case DSP_STORE_INFO: {
1668 DEBUG("ft1000_proc_drvmsg:Command message type = DSP_STORE_INFO");
1669
1670 DEBUG("FT1000:drivermsg:Got DSP_STORE_INFO\n");
1671 tempword = ntohs(pdrvmsg->length);
1672 info->DSPInfoBlklen = tempword;
1673 if (tempword < (MAX_DSP_SESS_REC-4) ) {
1674 pmsg = (u16 *)&pdrvmsg->data[0];
1675 for (i=0; i<((tempword+1)/2); i++) {
1676 DEBUG("FT1000:drivermsg:dsp info data = 0x%x\n", *pmsg);
1677 info->DSPInfoBlk[i+10] = *pmsg++;
1678 }
1679 }
1680 else {
1681 info->DSPInfoBlklen = 0;
1682 }
1683 break;
1684 }
1685 case DSP_GET_INFO: {
1686 DEBUG("FT1000:drivermsg:Got DSP_GET_INFO\n");
1687 // copy dsp info block to dsp
1688 info->DrvMsgPend = 1;
1689 // allow any outstanding ioctl to finish
1690 mdelay(10);
1691 status = ft1000_read_register(dev, &tempword, FT1000_REG_DOORBELL);
1692 if (tempword & FT1000_DB_DPRAM_TX) {
1693 mdelay(10);
1694 status = ft1000_read_register(dev, &tempword, FT1000_REG_DOORBELL);
1695 if (tempword & FT1000_DB_DPRAM_TX) {
1696 mdelay(10);
1697 status = ft1000_read_register(dev, &tempword, FT1000_REG_DOORBELL);
1698 if (tempword & FT1000_DB_DPRAM_TX) {
1699 break;
1700 }
1701 }
1702 }
1703
1704 // Put message into Slow Queue
1705 // Form Pseudo header
1706 pmsg = (u16 *)info->DSPInfoBlk;
1707 *pmsg++ = 0;
1708 *pmsg++ = htons(info->DSPInfoBlklen+20+info->DSPInfoBlklen);
1709 ppseudo_hdr = (struct pseudo_hdr *)(u16 *)&info->DSPInfoBlk[2];
1710 ppseudo_hdr->length = htons(info->DSPInfoBlklen+4+info->DSPInfoBlklen);
1711 ppseudo_hdr->source = 0x10;
1712 ppseudo_hdr->destination = 0x20;
1713 ppseudo_hdr->portdest = 0;
1714 ppseudo_hdr->portsrc = 0;
1715 ppseudo_hdr->sh_str_id = 0;
1716 ppseudo_hdr->control = 0;
1717 ppseudo_hdr->rsvd1 = 0;
1718 ppseudo_hdr->rsvd2 = 0;
1719 ppseudo_hdr->qos_class = 0;
1720 // Insert slow queue sequence number
1721 ppseudo_hdr->seq_num = info->squeseqnum++;
1722 // Insert application id
1723 ppseudo_hdr->portsrc = 0;
1724 // Calculate new checksum
1725 ppseudo_hdr->checksum = *pmsg++;
1726 for (i=1; i<7; i++) {
1727 ppseudo_hdr->checksum ^= *pmsg++;
1728 }
1729 info->DSPInfoBlk[10] = 0x7200;
1730 info->DSPInfoBlk[11] = htons(info->DSPInfoBlklen);
1731 status = ft1000_write_dpram32 (dev, 0, (u8 *)&info->DSPInfoBlk[0], (unsigned short)(info->DSPInfoBlklen+22));
1732 status = ft1000_write_register (dev, FT1000_DB_DPRAM_TX, FT1000_REG_DOORBELL);
1733 info->DrvMsgPend = 0;
1734
1735 break;
1736 }
1737 1763
1738 case GET_DRV_ERR_RPT_MSG: { 1764 break;
1739 DEBUG("FT1000:drivermsg:Got GET_DRV_ERR_RPT_MSG\n"); 1765 }
1740 // copy driver error message to dsp 1766
1741 info->DrvMsgPend = 1; 1767 case GET_DRV_ERR_RPT_MSG:{
1742 // allow any outstanding ioctl to finish 1768 DEBUG("FT1000:drivermsg:Got GET_DRV_ERR_RPT_MSG\n");
1743 mdelay(10); 1769 /* copy driver error message to dsp */
1744 status = ft1000_read_register(dev, &tempword, FT1000_REG_DOORBELL); 1770 info->DrvMsgPend = 1;
1745 if (tempword & FT1000_DB_DPRAM_TX) { 1771 /* allow any outstanding ioctl to finish */
1746 mdelay(10); 1772 mdelay(10);
1747 status = ft1000_read_register(dev, &tempword, FT1000_REG_DOORBELL); 1773 status =
1748 if (tempword & FT1000_DB_DPRAM_TX) { 1774 ft1000_read_register(dev, &tempword,
1749 mdelay(10); 1775 FT1000_REG_DOORBELL);
1750 } 1776 if (tempword & FT1000_DB_DPRAM_TX) {
1751 } 1777 mdelay(10);
1752 1778 status =
1753 if ( (tempword & FT1000_DB_DPRAM_TX) == 0) { 1779 ft1000_read_register(dev, &tempword,
1754 // Put message into Slow Queue 1780 FT1000_REG_DOORBELL);
1755 // Form Pseudo header 1781 if (tempword & FT1000_DB_DPRAM_TX)
1756 pmsg = (u16 *)&tempbuffer[0]; 1782 mdelay(10);
1757 ppseudo_hdr = (struct pseudo_hdr *)pmsg; 1783 }
1758 ppseudo_hdr->length = htons(0x0012);
1759 ppseudo_hdr->source = 0x10;
1760 ppseudo_hdr->destination = 0x20;
1761 ppseudo_hdr->portdest = 0;
1762 ppseudo_hdr->portsrc = 0;
1763 ppseudo_hdr->sh_str_id = 0;
1764 ppseudo_hdr->control = 0;
1765 ppseudo_hdr->rsvd1 = 0;
1766 ppseudo_hdr->rsvd2 = 0;
1767 ppseudo_hdr->qos_class = 0;
1768 // Insert slow queue sequence number
1769 ppseudo_hdr->seq_num = info->squeseqnum++;
1770 // Insert application id
1771 ppseudo_hdr->portsrc = 0;
1772 // Calculate new checksum
1773 ppseudo_hdr->checksum = *pmsg++;
1774 for (i=1; i<7; i++) {
1775 ppseudo_hdr->checksum ^= *pmsg++;
1776 }
1777 pmsg = (u16 *)&tempbuffer[16];
1778 *pmsg++ = htons(RSP_DRV_ERR_RPT_MSG);
1779 *pmsg++ = htons(0x000e);
1780 *pmsg++ = htons(info->DSP_TIME[0]);
1781 *pmsg++ = htons(info->DSP_TIME[1]);
1782 *pmsg++ = htons(info->DSP_TIME[2]);
1783 *pmsg++ = htons(info->DSP_TIME[3]);
1784 convert.byte[0] = info->DspVer[0];
1785 convert.byte[1] = info->DspVer[1];
1786 *pmsg++ = convert.wrd;
1787 convert.byte[0] = info->DspVer[2];
1788 convert.byte[1] = info->DspVer[3];
1789 *pmsg++ = convert.wrd;
1790 *pmsg++ = htons(info->DrvErrNum);
1791
1792 card_send_command (dev, (unsigned char*)&tempbuffer[0], (u16)(0x0012 + PSEUDOSZ));
1793 info->DrvErrNum = 0;
1794 }
1795 info->DrvMsgPend = 0;
1796
1797 break;
1798 }
1799
1800 default:
1801 break;
1802 }
1803 1784
1785 if ((tempword & FT1000_DB_DPRAM_TX) == 0) {
1786 /* Put message into Slow Queue
1787 * Form Pseudo header
1788 */
1789 pmsg = (u16 *) &tempbuffer[0];
1790 ppseudo_hdr = (struct pseudo_hdr *)pmsg;
1791 ppseudo_hdr->length = htons(0x0012);
1792 ppseudo_hdr->source = 0x10;
1793 ppseudo_hdr->destination = 0x20;
1794 ppseudo_hdr->portdest = 0;
1795 ppseudo_hdr->portsrc = 0;
1796 ppseudo_hdr->sh_str_id = 0;
1797 ppseudo_hdr->control = 0;
1798 ppseudo_hdr->rsvd1 = 0;
1799 ppseudo_hdr->rsvd2 = 0;
1800 ppseudo_hdr->qos_class = 0;
1801 /* Insert slow queue sequence number */
1802 ppseudo_hdr->seq_num = info->squeseqnum++;
1803 /* Insert application id */
1804 ppseudo_hdr->portsrc = 0;
1805 /* Calculate new checksum */
1806 ppseudo_hdr->checksum = *pmsg++;
1807 for (i = 1; i < 7; i++)
1808 ppseudo_hdr->checksum ^= *pmsg++;
1809
1810 pmsg = (u16 *) &tempbuffer[16];
1811 *pmsg++ = htons(RSP_DRV_ERR_RPT_MSG);
1812 *pmsg++ = htons(0x000e);
1813 *pmsg++ = htons(info->DSP_TIME[0]);
1814 *pmsg++ = htons(info->DSP_TIME[1]);
1815 *pmsg++ = htons(info->DSP_TIME[2]);
1816 *pmsg++ = htons(info->DSP_TIME[3]);
1817 convert.byte[0] = info->DspVer[0];
1818 convert.byte[1] = info->DspVer[1];
1819 *pmsg++ = convert.wrd;
1820 convert.byte[0] = info->DspVer[2];
1821 convert.byte[1] = info->DspVer[3];
1822 *pmsg++ = convert.wrd;
1823 *pmsg++ = htons(info->DrvErrNum);
1824
1825 card_send_command(dev,
1826 (unsigned char *)&tempbuffer[0],
1827 (u16) (0x0012 + PSEUDOSZ));
1828 info->DrvErrNum = 0;
1829 }
1830 info->DrvMsgPend = 0;
1804 1831
1805 status = STATUS_SUCCESS; 1832 break;
1806out: 1833 }
1807 kfree(cmdbuffer);
1808 DEBUG("return from ft1000_proc_drvmsg\n");
1809 return status;
1810}
1811 1834
1835 default:
1836 break;
1837 }
1812 1838
1839 status = STATUS_SUCCESS;
1840out:
1841 kfree(cmdbuffer);
1842 DEBUG("return from ft1000_proc_drvmsg\n");
1843 return status;
1844}
1813 1845
1814int ft1000_poll(void* dev_id) { 1846int ft1000_poll(void* dev_id) {
1815 1847