From: Joshua Wise Date: Mon, 6 Oct 2008 02:42:26 +0000 (-0400) Subject: Open up TSEG so we can blast more packets out. Be a little less verbose. X-Git-Url: http://git.joshuawise.com/netwatch.git/commitdiff_plain/c25f3f39d2a544a91a8a96ea90bda1dc1d77b76a?ds=inline Open up TSEG so we can blast more packets out. Be a little less verbose. --- diff --git a/net/3c90x.c b/net/3c90x.c index ae8a771..336e2a7 100644 --- a/net/3c90x.c +++ b/net/3c90x.c @@ -51,7 +51,7 @@ ** this is the number of times to retry the transmission -- this should ** be plenty **/ -#define XMIT_RETRIES 1 +#define XMIT_RETRIES 5 /*** Register definitions for the 3c905 ***/ enum Registers @@ -492,8 +492,6 @@ a3c90x_transmit(const char *dest_addr, unsigned int proto, if (retries != 0) outputf("3c90x: retrying packet send (%d)", retries); - /** Stall the download engine **/ - outputf("3c90x: stalling transmit engine"); _issue_command(INF_3C90X.IOAddr, cmdStallCtl, 2 /* Stall download */); hdr.type = htons(proto); @@ -503,29 +501,22 @@ a3c90x_transmit(const char *dest_addr, unsigned int proto, /** Setup the DPD (download descriptor) **/ INF_3C90X.TransmitDPD.DnNextPtr = 0; /** set notification for transmission completion (bit 15) **/ - INF_3C90X.TransmitDPD.FrameStartHeader = (size + sizeof(hdr)) /*| 0x8000*/; + INF_3C90X.TransmitDPD.FrameStartHeader = (size + sizeof(hdr)) | 0x8000; INF_3C90X.TransmitDPD.HdrAddr = virt_to_bus(&hdr); INF_3C90X.TransmitDPD.HdrLength = sizeof(hdr); INF_3C90X.TransmitDPD.DataAddr = virt_to_bus(pkt); INF_3C90X.TransmitDPD.DataLength = size + (1<<31); /** Send the packet **/ - outputf("3c90x: pointing card at %08x", virt_to_bus(&(INF_3C90X.TransmitDPD))); outl(INF_3C90X.IOAddr + regDnListPtr_l, virt_to_bus(&(INF_3C90X.TransmitDPD))); - - outputf("3c90x: unstalling transmit engine"); _issue_command(INF_3C90X.IOAddr, cmdStallCtl, 3 /* Unstall download */); - outputf("3c90x: waiting for download pointer"); oneshot_start_ms(100); while((inl(INF_3C90X.IOAddr + regDnListPtr_l) != 0) && oneshot_running()) ; if (!oneshot_running()) - { outputf("3c90x: Download engine pointer timeout"); - } - outputf("3c90x: waiting for TXCOMPLETE"); oneshot_start_ms(10); /* Give it 10 ms */ while (!(inw(INF_3C90X.IOAddr + regCommandIntStatus_w) & INT_TXCOMPLETE) && oneshot_running()) ; diff --git a/net/net.c b/net/net.c index 04eaff5..01b4521 100644 --- a/net/net.c +++ b/net/net.c @@ -33,9 +33,7 @@ void eth_poll() case 4: test[i] = 'L'; break; } } - outputf("eth_poll: Attempting to tx"); _nic->transmit("\x00\x03\x93\x87\x84\x8C", 0x1337, 1024, test); - outputf("eth_poll: tx complete"); } int eth_register(struct nic *nic) @@ -48,6 +46,7 @@ int eth_register(struct nic *nic) void eth_init() { - if (pci_probe_driver(a3c90x_driver)) - outputf("found 3c90x, hopefully!"); + /* Required for DMA to work. :( */ + smram_tseg_set_state(SMRAM_TSEG_OPEN); + pci_probe_driver(a3c90x_driver); }