Subversion Repositories HelenOS

Rev

Rev 4351 | Rev 4708 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 4351 Rev 4498
Line 349... Line 349...
349
    dep->de_client= mp->DL_PROC;
349
    dep->de_client= mp->DL_PROC;
350
*/
350
*/
351
    if (dep->de_mode == DEM_SINK)
351
    if (dep->de_mode == DEM_SINK)
352
    {
352
    {
353
        assert(!from_int);
353
        assert(!from_int);
354
        dep->de_flags |= DEF_PACK_SEND;
354
//      dep->de_flags |= DEF_PACK_SEND;
355
        reply(dep, OK, FALSE);
355
        reply(dep, OK, FALSE);
356
//      return;
356
//      return;
357
        return EOK;
357
        return EOK;
358
    }
358
    }
359
    assert(dep->de_mode == DEM_ENABLED);
359
    assert(dep->de_mode == DEM_ENABLED);
360
    assert(dep->de_flags & DEF_ENABLED);
360
    assert(dep->de_flags & DEF_ENABLED);
-
 
361
    if( dep->packet_queue && ( ! from_int )){
361
    if (dep->de_flags & DEF_SEND_AVAIL){
362
//  if (dep->de_flags & DEF_SEND_AVAIL){
362
//      panic("", "dp8390: send already in progress", NO_NUM);
363
//      panic("", "dp8390: send already in progress", NO_NUM);
363
        return queue_packet( dep, packet );
364
        return queue_packet( dep, packet );
364
    }
365
    }
365
 
366
 
366
    sendq_head= dep->de_sendq_head;
367
    sendq_head= dep->de_sendq_head;
367
    if (dep->de_sendq[sendq_head].sq_filled)
368
//  if (dep->de_sendq[sendq_head].sq_filled)
368
    {
369
//  {
369
        if (from_int)
370
//      if (from_int)
370
            panic("", "dp8390: should not be sending\n", NO_NUM);
371
//          panic("", "dp8390: should not be sending\n", NO_NUM);
371
//      dep->de_sendmsg= *mp;
372
//      dep->de_sendmsg= *mp;
372
        dep->de_flags |= DEF_SEND_AVAIL;
373
//      dep->de_flags |= DEF_SEND_AVAIL;
373
        reply(dep, OK, FALSE);
374
//      reply(dep, OK, FALSE);
374
//      return;
375
//      return;
375
        return queue_packet( dep, packet );
376
//      return queue_packet( dep, packet );
376
    }
377
//  }
377
    assert(!(dep->de_flags & DEF_PACK_SEND));
378
//  assert(!(dep->de_flags & DEF_PACK_SEND));
378
 
379
 
379
/*  if (vectored)
380
/*  if (vectored)
380
    {
381
    {
381
        get_userdata(mp->DL_PROC, (vir_bytes) mp->DL_ADDR,
382
        get_userdata(mp->DL_PROC, (vir_bytes) mp->DL_ADDR,
382
            (count > IOVEC_NR ? IOVEC_NR : count) *
383
            (count > IOVEC_NR ? IOVEC_NR : count) *
Line 428... Line 429...
428
    if (++sendq_head == dep->de_sendq_nr)
429
    if (++sendq_head == dep->de_sendq_nr)
429
        sendq_head= 0;
430
        sendq_head= 0;
430
    assert(sendq_head < SENDQ_NR);
431
    assert(sendq_head < SENDQ_NR);
431
    dep->de_sendq_head= sendq_head;
432
    dep->de_sendq_head= sendq_head;
432
 
433
 
433
    dep->de_flags |= DEF_PACK_SEND;
434
//  dep->de_flags |= DEF_PACK_SEND;
434
 
435
 
435
    /* If the interrupt handler called, don't send a reply. The reply
436
    /* If the interrupt handler called, don't send a reply. The reply
436
     * will be sent after all interrupts are handled.
437
     * will be sent after all interrupts are handled.
437
     */
438
     */
438
    if (from_int)
439
    if (from_int)
Line 718... Line 719...
718
                    dep->de_sendq[sendq_tail].sq_sendpage);
719
                    dep->de_sendq[sendq_tail].sq_sendpage);
719
                outb_reg0(dep, DP_TBCR1, size >> 8);
720
                outb_reg0(dep, DP_TBCR1, size >> 8);
720
                outb_reg0(dep, DP_TBCR0, size & 0xff);
721
                outb_reg0(dep, DP_TBCR0, size & 0xff);
721
                outb_reg0(dep, DP_CR, CR_TXP | CR_EXTRA);
722
                outb_reg0(dep, DP_CR, CR_TXP | CR_EXTRA);
722
            }
723
            }
723
            if (dep->de_flags & DEF_SEND_AVAIL)
724
//          if (dep->de_flags & DEF_SEND_AVAIL)
724
                dp_send(dep);
725
                dp_send(dep);
725
        }
726
        }
726
 
727
 
727
        if (isr & ISR_PRX)
728
        if (isr & ISR_PRX)
728
        {
729
        {
Line 881... Line 882...
881
static void dp_send(dep)
882
static void dp_send(dep)
882
dpeth_t *dep;
883
dpeth_t *dep;
883
{
884
{
884
    packet_t packet;
885
    packet_t packet;
885
 
886
 
886
    if (!(dep->de_flags & DEF_SEND_AVAIL))
887
//  if (!(dep->de_flags & DEF_SEND_AVAIL))
887
        return;
888
//      return;
888
 
889
 
889
    dep->de_flags &= ~DEF_SEND_AVAIL;
-
 
890
    while( dep->packet_queue ){
890
    if( dep->packet_queue ){
891
        packet = dep->packet_queue;
891
        packet = dep->packet_queue;
892
        dep->packet_queue = pq_detach( packet );
892
        dep->packet_queue = pq_detach( packet );
893
        do_pwrite( dep, packet, TRUE );
893
        do_pwrite( dep, packet, TRUE );
894
        netif_pq_release( packet_get_id( packet ));
894
        netif_pq_release( packet_get_id( packet ));
895
        -- dep->packet_count;
895
        -- dep->packet_count;
896
    }
896
    }
-
 
897
//  if( ! dep->packet_queue ){
-
 
898
//      dep->de_flags &= ~DEF_SEND_AVAIL;
-
 
899
//  }
897
/*  switch(dep->de_sendmsg.m_type)
900
/*  switch(dep->de_sendmsg.m_type)
898
    {
901
    {
899
    case DL_WRITE:  do_vwrite(&dep->de_sendmsg, TRUE, FALSE);   break;
902
    case DL_WRITE:  do_vwrite(&dep->de_sendmsg, TRUE, FALSE);   break;
900
    case DL_WRITEV: do_vwrite(&dep->de_sendmsg, TRUE, TRUE);    break;
903
    case DL_WRITEV: do_vwrite(&dep->de_sendmsg, TRUE, TRUE);    break;
901
    case DL_WRITEV_S: do_vwrite_s(&dep->de_sendmsg, TRUE);  break;
904
    case DL_WRITEV_S: do_vwrite_s(&dep->de_sendmsg, TRUE);  break;
Line 1555... Line 1558...
1555
 
1558
 
1556
    if (r < 0)
1559
    if (r < 0)
1557
        panic("", "dp8390: send failed:", r);
1560
        panic("", "dp8390: send failed:", r);
1558
   
1561
   
1559
*/  dep->de_read_s = 0;
1562
*/  dep->de_read_s = 0;
1560
    dep->de_flags &= ~(DEF_PACK_SEND | DEF_PACK_RECV);
1563
//  dep->de_flags &= ~(DEF_PACK_SEND | DEF_PACK_RECV);
1561
}
1564
}
1562
 
1565
 
1563
/*===========================================================================*
1566
/*===========================================================================*
1564
 *              get_userdata                     *
1567
 *              get_userdata                     *
1565
 *===========================================================================*/
1568
 *===========================================================================*/