00001 //--------------------------------------------------------------- 00002 // Go4 Release Package v2.10-5 (build 21005) 00003 // 03-Nov-2005 00004 //--------------------------------------------------------------- 00005 // The GSI Online Offline Object Oriented (Go4) Project 00006 // Experiment Data Processing at DVEE department, GSI 00007 //--------------------------------------------------------------- 00008 // 00009 //Copyright (C) 2000- Gesellschaft f. Schwerionenforschung, GSI 00010 // Planckstr. 1, 64291 Darmstadt, Germany 00011 //Contact: http://go4.gsi.de 00012 //---------------------------------------------------------------- 00013 //This software can be used under the license agreements as stated 00014 //in Go4License.txt file which is part of the distribution. 00015 //---------------------------------------------------------------- 00016 /* 00017 * N.Kurz 8-Jun-1998 00018 * 00019 * within this structure the setup information for a n # m 00020 * (multiple output/collector) mbs system is specified 00021 */ 00022 00023 #include "typedefs.h" 00024 #include "mo_def.h" 00025 00026 typedef struct 00027 { 00028 INTU4 l_endian; /* must be 1 */ 00029 INTU4 l_version; /* structure version */ 00030 INTU4 l_set_mo_lw; /* length of structure */ 00031 INTU4 l_swap_lw; /* longwords to be swapped */ 00032 INTU4 l_max_nodes; /* set to MO__N_NODE */ 00033 INTU4 l_no_senders; /* actual number of senders */ 00034 INTU4 l_no_receivers; /* actual number of receivers */ 00035 INTU4 bl_dr_active[MO__N_NODE]; /* active receivers */ 00036 00037 INTU4 l_rd_pipe_base_addr [MO__N_NODE] [MO__N_NODE]; 00038 /* base addresses of all pipes residing on the ds nodes seen remote */ 00039 /* from dr nodes l_rd_pipe_base_addr[dr_node_id][ds_node_id]. */ 00040 /* this setup parametes are only necessary for an address mapped */ 00041 /* transfer mode (l_trans_mode = 0). */ 00042 INTU4 l_rd_pipe_seg_len [MO__N_NODE]; 00043 /* size of pipe segments on ds nodes. index is ds id. this information */ 00044 /* is only necessary if transfer type 0 (single shot data transfer) */ 00045 /* from any of the ds nodes. !!!! WARNING !!!! this information is */ 00046 /* redundant. the size is also specified in the setup.usf or */ 00047 /* set_ml.usf of the ds node and must match. */ 00048 INTU4 l_rd_pipe_trans_mode [MO__N_NODE] [MO__N_NODE]; 00049 /* data transfer mode from ds nodes to dr nodes */ 00050 /* l_rd_pipe_base_addr[dr_node_id][ds_node_id]. */ 00051 /* transfer mode: 0xxx = address mapped, dr reads data */ 00052 /* 1xxx = message oriented mode ( tcp ), ds sends data */ 00053 /* 01xx = address mapped DMA modes (various) */ 00054 /* */ 00055 /* 0x 0 = standard singe cycle address mapped */ 00056 /* 0x 101 = VME DMA E7 */ 00057 /* 0x 102 = VME DMA RIO2 <- RIO2 */ 00058 /* 0x 103 = VSB DMA RIO2 <- "any" VSB slave device */ 00059 /* 0x 104 = PVIC DMA RIO2 */ 00060 /* 0x 105 = VME DMA RIO2 <- E7 / VME memory */ 00061 /* 0x1001 = TCP sockets */ 00062 INTU4 l_form_mode; 00063 /* two format modes have been forseen, whereas only mode 1 is imple- */ 00064 /* mented yet. */ 00065 /* mode 1: ds node sends data, or dr node reads data (depending on */ 00066 /* transfer type) to an intermediate event buffer of size */ 00067 /* l_max_evt_size. formatting, and possible byte swapping is */ 00068 /* done afterwards from the intermediate event buffer into the */ 00069 /* streams. */ 00070 /* mode 2: ds node sends data, or dr node reads data and formats */ 00071 /* immediately into the streams. not yet implemented */ 00072 INTU4 l_base_addr_evt_buf[MO__N_NODE]; 00073 /* if l_form_mode = 1: (intermediate formatting) */ 00074 /* for transfer types where address mapped writing from ds node or dma */ 00075 /* data transfer is done a shared segement is needed and created with */ 00076 /* physical base address l_base_addr_evt_buf and size l_max_evt_size. */ 00077 /* if l_form_mode = 2: (direct formatting) */ 00078 /* a shared segment for this buffer must also be created for */ 00079 /* direct formatting into streams if the ds node writes address mapped */ 00080 /* or dma is done. this buffer will be used to hold an event if the */ 00081 /* actual stream has less space than l_max_evt_size since in this mode */ 00082 /* the actual event size is not known before the transfer of the last */ 00083 /* fraction. */ 00084 /* */ 00085 /* if l_base_addr_evt_buf != 0 an smem_create segment will be created */ 00086 /* if l_base_addr_evt_buf = 0 ( or not specified) a buffer of size */ 00087 /* l_max_evt_size will be created with malloc and is therefore not */ 00088 /* contigious in the address space. */ 00089 /* MO__N_NODE runs over dr node ids. */ 00090 INTU4 l_max_evt_size; 00091 /* TOTAL maximum event size, which could occur within this setup. */ 00092 /* in bytes. */ 00093 INTU4 l_n_frag; 00094 /* many subevents/fragments can be send/read in one transfer (i.e. */ 00095 /* tcp, vme block transfer) from m_ds to m_dr if the data is conscu- */ 00096 /* tive. l_n_frag specifies the number fragments sent in such a packet */ 00097 INTU4 l_ev_buf_len [MO__N_NODE]; 00098 INTU4 l_n_ev_buf [MO__N_NODE]; 00099 INTU4 l_n_stream [MO__N_NODE]; 00100 INTU4 l_base_addr_stream_seg [MO__N_NODE]; 00101 /* only nedded if l_form mode = 2. see explanation above */ 00102 INTU4 l_out_mode [MO__N_NODE]; 00103 CHARS c_ds_hostname [MO__N_NODE][16]; 00104 /* name of ds nodes */ 00105 CHARS c_dr_hostname [MO__N_NODE][16]; 00106 /* name of dr nodes */ 00107 00108 } s_set_mo; 00109 00110 //----------------------------END OF GO4 SOURCE FILE ---------------------