OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [rtems/] [c/] [src/] [lib/] [libbsp/] [shmdr/] [send.c] - Blame information for rev 602

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 30 unneback
/*  Shm_Send_packet
2
 *
3
 *  This routine is the shared memory driver locked queue write
4
 *  MPCI driver routine.  This routine sends the specified packet
5
 *  to the destination specified by "node".  A "node" value of
6
 *  zero designates that this packet is to be broadcasted.
7
 *
8
 *  Input parameters:
9
 *    node          - destination of this packet (0 = broadcast)
10
 *    packet        - address of packet
11
 *
12
 *  Output parameters: NONE
13
 *
14
 *  COPYRIGHT (c) 1989-1999.
15
 *  On-Line Applications Research Corporation (OAR).
16
 *
17
 *  The license and distribution terms for this file may be
18
 *  found in the file LICENSE in this distribution or at
19
 *  http://www.OARcorp.com/rtems/license.html.
20
 *
21
 *  $Id: send.c,v 1.2 2001-09-27 12:01:13 chris Exp $
22
 */
23
 
24
#include <rtems.h>
25
#include "shm_driver.h"
26
 
27
struct pkt_cpy {
28
  rtems_unsigned32 packet[MAX_PACKET_SIZE/4];
29
};
30
 
31
rtems_mpci_entry Shm_Send_packet(
32
  rtems_unsigned32 node,
33
  rtems_packet_prefix *packet
34
)
35
{
36
  Shm_Envelope_control *ecb, *tmp_ecb;
37
  rtems_unsigned32 nnum;
38
 
39
  ecb = Shm_Packet_prefix_to_envelope_control_pointer( packet );
40
  if ( node ) {
41
    Shm_Build_preamble( ecb, node );
42
    Shm_Build_postamble( ecb );
43
    Shm_Append_to_receive_queue( node, ecb );
44
    (*Shm_Configuration->cause_intr)( node );
45
  }
46
  else {
47
    for( nnum = SHM_FIRST_NODE ; nnum <= Shm_Maximum_nodes ; nnum++ )
48
      if ( Shm_Local_node != nnum ) {
49
        tmp_ecb = Shm_Allocate_envelope();
50
        if ( !tmp_ecb )
51
          rtems_fatal_error_occurred( SHM_NO_FREE_PKTS );
52
        Shm_Build_preamble( tmp_ecb, nnum );
53
        *((struct pkt_cpy *)tmp_ecb->packet) = *((struct pkt_cpy *)packet);
54
        Shm_Build_postamble( tmp_ecb );
55
        Shm_Append_to_receive_queue( nnum, tmp_ecb );
56
        (*Shm_Configuration->cause_intr)( nnum );
57
      }
58
    Shm_Free_envelope( ecb );
59
  }
60
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.