
00001 /******************************************************** 00002 * Myricom VI-GM networking software and documentation * 00003 * Copyright (c) 2001 by Myricom, Inc. * 00004 * All rights reserved. * 00005 * See the file `COPYING' for copyright notice. * 00006 ********************************************************/ 00007 00008 #ifndef __VIPL_STRUCTS 00009 #define __VIPL_STRUCTS 00010 00019 typedef gm_up_t VIP_UINTPTR; 00020 00021 00028 typedef struct VIP_SEND_REQ 00029 { 00031 VIP_UCHAR type; 00033 VIP_UCHAR dest_port_id; 00035 VIP_UINT16 dest_gm_id; 00037 VIP_UINT32 length; 00039 VIP_PVOID64 target_ptr; 00043 VIP_PVOID ptr; 00045 struct VIP_GM *vip_gm_ptr; 00047 struct VIP_NIC *vip_nic_ptr; 00049 struct VIP_VI *vip_vi_ptr; 00051 VIP_DESCRIPTOR *vip_desc_ptr; 00053 struct VIP_SEND_REQ *next; 00054 } 00055 VIP_SEND_REQ; 00056 00057 00060 typedef struct VIP_HANDLE 00061 { 00063 VIP_UINT16 magic; 00065 VIP_UINT16 seq_num; 00068 VIP_UINT32 ref_count; 00070 struct VIP_HANDLE *prev; 00072 struct VIP_HANDLE *next; 00074 struct VIP_NIC *vip_nic_ptr; 00075 } 00076 VIP_HANDLE; 00077 00078 00080 typedef struct VIP_HANDLE_SET 00081 { 00084 struct gm_lookaside *lookaside; 00086 VIP_UINT16 set_magic; 00089 VIP_UINT16 cur_seq_num; 00091 VIP_UINT32 count; 00093 VIP_UINT32 max_count; 00095 VIP_HANDLE *head; 00097 VIP_HANDLE *tail; 00099 struct VIP_NIC *vip_nic_ptr; 00100 } 00101 VIP_HANDLE_SET; 00102 00103 00105 typedef struct VIP_GM 00106 { 00108 struct gm_port *gm_port; 00110 VIP_PVOID **recv_buffers; 00112 VIP_PVOID **send_buffers; 00114 VIP_PVOID *send_buffers_free; 00116 struct gm_lookaside *vip_send_req_lookaside; 00118 VIP_SEND_REQ *send_fifo_head; 00120 VIP_SEND_REQ *send_fifo_tail; 00122 VIP_UINTPTR memory_registered; 00124 VIP_UINT32 send_buf_free_cnt; 00126 VIP_UINT32 send_fifo_queued; 00128 VIP_UINT32 ref_count; 00130 VIP_UINT32 gm_id; 00132 VIP_UINT32 conn_mgr_gm_id; 00134 VIP_UINT32 magic; 00136 gm_alarm_t alive_alarm; 00138 VIP_PACKET_ALIVE *alive_buffer; 00140 struct VIP_CONN *head_waiting_conn_ptr; 00142 struct VIP_CONN *tail_waiting_conn_ptr; 00144 struct VIP_NIC *vip_nic_ptrs[VI_GM_MAX_NIC_HANDLES + 1]; 00146 struct gm_lookaside *notify_lookaside; 00148 struct gm_lookaside *regmem_avl_lookaside; 00150 VIP_AVL_TREE_T regmem_avl_tree; 00152 VIP_UINT16 gm_board_id; 00154 VIP_UINT16 gm_port_id; 00156 VIP_UINT16 recv_tokens; 00158 VIP_UINT16 max_recv_tokens; 00160 VIP_UINT16 send_tokens; 00162 VIP_UINT16 max_send_tokens; 00164 VIP_THREAD_T plumber_periodic; 00166 VIP_THREAD_T plumber_blocking; 00168 VIP_MUTEX_T lock; 00170 VIP_MUTEX_T recv_lock; 00173 VIP_SEMAPHORE_T blocking_plumber_tokens; 00175 VIP_BOOLEAN periodic_plumber_cancelled; 00177 VIP_BOOLEAN blocking_plumber_cancelled; 00179 VIP_UCHAR mac_address[VI_GM_MAC_ADDRESS_LEN]; 00180 } 00181 VIP_GM; 00182 00183 00185 typedef struct VIP_NIC 00186 { 00188 VIP_UINT16 magic; 00191 VIP_UINT16 index; 00194 VIP_UINT32 ptag_last_id; 00196 VIP_GM *vip_gm_ptr; 00198 VIP_HANDLE_SET vip_vi_set; 00200 VIP_HANDLE_SET vip_ptag_set; 00202 VIP_HANDLE_SET vip_mem_set; 00204 VIP_HANDLE_SET vip_cq_set; 00206 VIP_HANDLE_SET vip_conn_set; 00209 VIP_MEM_HANDLE vip_mem_handle_free; 00213 struct VIP_MEM *vip_mem_handle_ptrs[VI_GM_MAX_REGISTER_REGIONS + 1]; 00215 VIP_UINT16 vip_vi_index_free; 00219 struct VIP_VI *vip_vi_ptrs[VI_GM_MAX_VI + 1]; 00221 void (*error_callback) (VIP_PVOID, VIP_ERROR_DESCRIPTOR *); 00223 VIP_PVOID error_callback_context; 00225 VIP_MUTEX_T lock; 00227 VIP_BOOLEAN ns_initialized; 00228 } 00229 VIP_NIC; 00230 00231 00233 typedef struct VIP_CQ_ENTRY 00234 { 00237 struct VIP_VI *vip_vi_ptr; 00240 VIP_BOOLEAN recv_queue; 00243 VIP_BOOLEAN completed; 00244 } 00245 VIP_CQ_ENTRY; 00246 00247 00249 typedef struct VIP_CQ 00250 { 00252 VIP_HANDLE handle; 00254 VIP_CQ_ENTRY *queue; 00256 VIP_UINT32 count; 00259 VIP_UINT32 next_poll; 00261 VIP_UINT32 next_completion; 00263 VIP_UINT32 event_count; 00265 VIP_EVENT_T event; 00267 VIP_SEMAPHORE_T notify_tokens; 00269 VIP_BOOLEAN notify_initialized; 00271 VIP_BOOLEAN notify_cancelled; 00273 VIP_THREAD_T notify_thread; 00275 struct VIP_NOTIFY *first_notify_handler; 00277 struct VIP_NOTIFY *last_notify_handler; 00278 } 00279 VIP_CQ; 00280 00281 00283 typedef struct VIP_PTAG 00284 { 00286 VIP_HANDLE handle; 00288 VIP_UINT32 id; 00289 } 00290 VIP_PTAG; 00291 00292 00294 typedef struct VIP_MEM 00295 { 00297 VIP_HANDLE handle; 00299 VIP_BOOLEAN rdma_write; 00301 VIP_ULONG length; 00303 VIP_PVOID address; 00305 VIP_PTAG *vip_ptag_ptr; 00306 } 00307 VIP_MEM; 00308 00309 00310 00312 typedef struct VIP_VI_QUEUE 00313 { 00315 VIP_DESCRIPTOR *first; 00317 VIP_DESCRIPTOR *last; 00319 VIP_DESCRIPTOR *current_desc; 00321 VIP_MEM_HANDLE current_mem; 00323 VIP_UINT32 total_count; 00325 VIP_CQ *vip_cq_ptr; 00327 VIP_ULONG count_to_process; 00329 VIP_UINT32 event_count; 00331 VIP_EVENT_T event; 00333 VIP_SEMAPHORE_T notify_tokens; 00335 VIP_BOOLEAN notify_initialized; 00337 VIP_BOOLEAN notify_cancelled; 00339 VIP_THREAD_T notify_thread; 00341 struct VIP_NOTIFY *first_notify_handler; 00343 struct VIP_NOTIFY *last_notify_handler; 00344 } 00345 VIP_VI_QUEUE; 00346 00347 00349 typedef struct VIP_VI 00350 { 00352 VIP_HANDLE handle; 00354 VIP_VI_QUEUE send_queue; 00356 VIP_VI_QUEUE recv_queue; 00358 VIP_PTAG *vip_ptag_ptr; 00360 struct VIP_CONN *conn_ptr; 00362 VIP_NET_UINT16 net_remote_nic_index; 00364 VIP_NET_UINT16 net_remote_vi_index; 00366 VIP_UINT32 mtu; 00368 VIP_QOS qos; 00370 VIP_UINT16 index; 00372 VIP_UINT16 gm_dest_id; 00374 VIP_UCHAR gm_dest_port; 00376 VIP_BOOLEAN rdma_write; 00378 VIP_RELIABILITY_LEVEL reliability; 00380 VIP_UCHAR pending_callbacks; 00382 VIP_VI_STATE state; 00383 } 00384 VIP_VI; 00385 00386 00389 typedef struct VIP_CONN 00390 { 00392 VIP_HANDLE handle; 00394 VIP_NET_UINT16 net_remote_seq_num; 00396 VIP_NET_UINT64 net_remote_conn_ptr; 00398 VIP_VI *vip_vi_ptr; 00400 struct VIP_CONN *prev_waiting_conn_ptr; 00402 struct VIP_CONN *next_waiting_conn_ptr; 00405 gm_alarm_t peer_timeout_alarm; 00407 VIP_BOOLEAN waiting_list; 00411 VIP_NET_UINT32 net_srv_magic[VI_GM_MAX_PORTS]; 00413 VIP_VI_ATTRIBUTES remote_vi_attribs; 00415 VIP_UINT16 locale_disc_len; 00417 VIP_UCHAR locale_net_addr[VI_GM_MAC_ADDRESS_LEN 00418 + VI_GM_MAX_DISCRIMINATOR_LEN]; 00420 VIP_UINT16 remote_disc_len; 00422 VIP_UCHAR remote_net_addr[VI_GM_MAC_ADDRESS_LEN 00423 + VI_GM_MAX_DISCRIMINATOR_LEN]; 00425 VIP_UINT16 remote_gm_id; 00427 VIP_UCHAR remote_port_id; 00429 VIP_UCHAR type; 00431 VIP_RETURN status; 00433 VIP_EVENT_T event; 00434 } 00435 VIP_CONN; 00436 00437 00440 typedef struct VIP_CHKSUM 00441 { 00443 VIP_UINT64 sum; 00445 VIP_UINT64 len; 00446 } 00447 VIP_CHKSUM; 00448 00449 00451 typedef struct VIP_AVL_RANGE 00452 { 00454 VIP_UINTPTR addr; 00456 VIP_UINT32 length; 00458 VIP_UINT32 count; 00459 } 00460 VIP_AVL_RANGE; 00461 00462 00464 typedef struct VIP_NOTIFY 00465 { 00467 VIP_PVOID handler; 00469 VIP_PVOID context; 00471 struct VIP_NOTIFY *next; 00472 } 00473 VIP_NOTIFY; 00474 00475 #endif
1.4.4.