1 /* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
2 * vim:expandtab:shiftwidth=8:tabstop=8:
5 * User-level wrappers that dispatch across the protection boundaries
7 * Copyright (c) 2001-2003 Cluster File Systems, Inc.
9 * This file is part of Lustre, http://www.sf.net/projects/lustre/
11 * Lustre is free software; you can redistribute it and/or
12 * modify it under the terms of version 2 of the GNU General Public
13 * License as published by the Free Software Foundation.
15 * Lustre is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with Lustre; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #define DEBUG_SUBSYSTEM S_PORTALS
26 #include <portals/api-support.h>
28 void PtlSnprintHandle(char *str, int len, ptl_handle_any_t h)
30 snprintf(str, len, "0x%lx."LPX64, h.nal_idx, h.cookie);
33 int PtlNIHandle(ptl_handle_any_t handle_in, ptl_handle_ni_t *ni_out)
38 if (ptl_hndl2nal(&handle_in) == NULL)
39 return PTL_HANDLE_INVALID;
45 int PtlGetId(ptl_handle_ni_t ni_handle, ptl_process_id_t *id)
52 nal = ptl_hndl2nal(&ni_handle);
54 return PTL_NI_INVALID;
56 return nal->nal_get_id(nal, id);
59 int PtlGetUid(ptl_handle_ni_t ni_handle, ptl_uid_t *uid)
66 nal = ptl_hndl2nal(&ni_handle);
68 return PTL_NI_INVALID;
70 /* We don't support different uids yet */
75 int PtlFailNid (ptl_handle_ni_t interface, ptl_nid_t nid, unsigned int threshold)
82 nal = ptl_hndl2nal(&interface);
84 return PTL_NI_INVALID;
86 return nal->nal_fail_nid(nal, nid, threshold);
89 int PtlLoopback (ptl_handle_ni_t interface, int set, int *enabled)
96 nal = ptl_hndl2nal(&interface);
98 return PTL_NI_INVALID;
100 return nal->nal_loopback(nal, set, enabled);
103 int PtlNIStatus(ptl_handle_ni_t interface_in, ptl_sr_index_t register_in,
104 ptl_sr_value_t *status_out)
111 nal = ptl_hndl2nal(&interface_in);
113 return PTL_NI_INVALID;
115 return nal->nal_ni_status(nal, register_in, status_out);
118 int PtlNIDist(ptl_handle_ni_t interface_in, ptl_process_id_t process_in,
119 unsigned long *distance_out)
126 nal = ptl_hndl2nal(&interface_in);
128 return PTL_NI_INVALID;
130 return nal->nal_ni_dist(nal, &process_in, distance_out);
133 int PtlMEAttach(ptl_handle_ni_t interface_in, ptl_pt_index_t index_in,
134 ptl_process_id_t match_id_in, ptl_match_bits_t match_bits_in,
135 ptl_match_bits_t ignore_bits_in, ptl_unlink_t unlink_in,
136 ptl_ins_pos_t pos_in, ptl_handle_me_t *handle_out)
143 nal = ptl_hndl2nal(&interface_in);
145 return PTL_NI_INVALID;
147 return nal->nal_me_attach(nal, index_in, match_id_in,
148 match_bits_in, ignore_bits_in,
149 unlink_in, pos_in, handle_out);
152 int PtlMEInsert(ptl_handle_me_t current_in, ptl_process_id_t match_id_in,
153 ptl_match_bits_t match_bits_in, ptl_match_bits_t ignore_bits_in,
154 ptl_unlink_t unlink_in, ptl_ins_pos_t position_in,
155 ptl_handle_me_t * handle_out)
162 nal = ptl_hndl2nal(¤t_in);
164 return PTL_ME_INVALID;
166 return nal->nal_me_insert(nal, ¤t_in, match_id_in,
167 match_bits_in, ignore_bits_in,
168 unlink_in, position_in, handle_out);
171 int PtlMEUnlink(ptl_handle_me_t current_in)
178 nal = ptl_hndl2nal(¤t_in);
180 return PTL_ME_INVALID;
182 return nal->nal_me_unlink(nal, ¤t_in);
185 int PtlMDAttach(ptl_handle_me_t me_in, ptl_md_t md_in,
186 ptl_unlink_t unlink_in, ptl_handle_md_t * handle_out)
193 nal = ptl_hndl2nal(&me_in);
195 return PTL_ME_INVALID;
197 if (!PtlHandleIsEqual(md_in.eq_handle, PTL_EQ_NONE) &&
198 ptl_hndl2nal(&md_in.eq_handle) != nal)
199 return PTL_MD_ILLEGAL;
201 return (nal->nal_md_attach)(nal, &me_in, &md_in,
202 unlink_in, handle_out);
205 int PtlMDBind(ptl_handle_ni_t ni_in, ptl_md_t md_in,
206 ptl_unlink_t unlink_in, ptl_handle_md_t *handle_out)
213 nal = ptl_hndl2nal(&ni_in);
215 return PTL_NI_INVALID;
217 if (!PtlHandleIsEqual(md_in.eq_handle, PTL_EQ_NONE) &&
218 ptl_hndl2nal(&md_in.eq_handle) != nal)
219 return PTL_MD_ILLEGAL;
221 return (nal->nal_md_bind)(nal, &md_in, unlink_in, handle_out);
224 int PtlMDUpdate(ptl_handle_md_t md_in, ptl_md_t *old_inout,
225 ptl_md_t *new_inout, ptl_handle_eq_t testq_in)
232 nal = ptl_hndl2nal(&md_in);
234 return PTL_MD_INVALID;
236 if (!PtlHandleIsEqual(testq_in, PTL_EQ_NONE) &&
237 ptl_hndl2nal(&testq_in) != nal)
238 return PTL_EQ_INVALID;
240 return (nal->nal_md_update)(nal, &md_in,
241 old_inout, new_inout, &testq_in);
244 int PtlMDUnlink(ptl_handle_md_t md_in)
251 nal = ptl_hndl2nal(&md_in);
253 return PTL_MD_INVALID;
255 return (nal->nal_md_unlink)(nal, &md_in);
258 int PtlEQAlloc(ptl_handle_ni_t interface, ptl_size_t count,
259 ptl_eq_handler_t callback,
260 ptl_handle_eq_t *handle_out)
267 nal = ptl_hndl2nal(&interface);
269 return PTL_NI_INVALID;
271 return (nal->nal_eq_alloc)(nal, count, callback, handle_out);
274 int PtlEQFree(ptl_handle_eq_t eventq)
281 nal = ptl_hndl2nal(&eventq);
283 return PTL_EQ_INVALID;
285 return (nal->nal_eq_free)(nal, &eventq);
288 int PtlEQGet(ptl_handle_eq_t eventq, ptl_event_t *ev)
292 return (PtlEQPoll (&eventq, 1, 0, ev, &which));
295 int PtlEQWait(ptl_handle_eq_t eventq_in, ptl_event_t *event_out)
299 return (PtlEQPoll (&eventq_in, 1, PTL_TIME_FOREVER,
303 int PtlEQPoll(ptl_handle_eq_t *eventqs_in, int neq_in, int timeout,
304 ptl_event_t *event_out, int *which_out)
313 return PTL_EQ_INVALID;
315 nal = ptl_hndl2nal(&eventqs_in[0]);
317 return PTL_EQ_INVALID;
319 for (i = 1; i < neq_in; i++)
320 if (ptl_hndl2nal(&eventqs_in[i]) != nal)
321 return PTL_EQ_INVALID;
323 return (nal->nal_eq_poll)(nal, eventqs_in, neq_in, timeout,
324 event_out, which_out);
328 int PtlACEntry(ptl_handle_ni_t ni_in, ptl_ac_index_t index_in,
329 ptl_process_id_t match_id_in, ptl_pt_index_t portal_in)
336 nal = ptl_hndl2nal(&ni_in);
338 return PTL_NI_INVALID;
340 return (nal->nal_ace_entry)(nal, index_in, match_id_in, portal_in);
343 int PtlPut(ptl_handle_md_t md_in, ptl_ack_req_t ack_req_in,
344 ptl_process_id_t target_in, ptl_pt_index_t portal_in,
345 ptl_ac_index_t ac_in, ptl_match_bits_t match_bits_in,
346 ptl_size_t offset_in, ptl_hdr_data_t hdr_data_in)
353 nal = ptl_hndl2nal(&md_in);
355 return PTL_MD_INVALID;
357 return (nal->nal_put)(nal, &md_in, ack_req_in,
358 &target_in, portal_in, ac_in,
359 match_bits_in, offset_in, hdr_data_in);
362 int PtlGet(ptl_handle_md_t md_in, ptl_process_id_t target_in,
363 ptl_pt_index_t portal_in, ptl_ac_index_t ac_in,
364 ptl_match_bits_t match_bits_in, ptl_size_t offset_in)
371 nal = ptl_hndl2nal(&md_in);
373 return PTL_MD_INVALID;
375 return (nal->nal_get)(nal, &md_in,
376 &target_in, portal_in, ac_in,
377 match_bits_in, offset_in);