1 /* 2 * Copyright (c) 2013 Mellanox Technologies, Inc. 3 * All rights reserved. 4 * $COPYRIGHT$ 5 * 6 * Additional copyrights may follow 7 * 8 * $HEADER$ 9 */ 10 /** 11 * @file 12 */ 13 #ifndef MCA_SPML_BASE_GET_REQUEST_H 14 #define MCA_SPML_BASE_GET_REQUEST_H 15 16 #include "oshmem_config.h" 17 #include "oshmem/mca/spml/base/spml_base_request.h" 18 #include "ompi/peruse/peruse-internal.h" 19 20 BEGIN_C_DECLS 21 22 /** 23 * Base type for get requests. 24 */ 25 struct mca_spml_base_get_request_t { 26 mca_spml_base_request_t req_base; /**< base request */ 27 void *req_addr; /**< pointer to recv buffer on the local PE - not necessarily an application buffer */ 28 size_t req_bytes_packed; /**< size of message being read */ 29 }; 30 typedef struct mca_spml_base_get_request_t mca_spml_base_get_request_t; 31 OSHMEM_DECLSPEC OBJ_CLASS_DECLARATION(mca_spml_base_get_request_t); 32 33 /** 34 * Initialize a get request. 35 * 36 * @param request (IN) Pointer to the Get request. 37 * @param addr (IN) User buffer. 38 * @param count (IN) Number of bytes. 39 * @param peer (IN) rank w/in the communicator where the data is read from. 40 * @param mode (IN) Get Mode. 41 * @param persistent (IN) Is this a persistent request. 42 * @param convertor_flags(IN) 43 */ 44 #define MCA_SPML_BASE_GET_REQUEST_INIT( request, \ 45 addr, \ 46 count, \ 47 peer, \ 48 persistent) \ 49 { \ 50 OSHMEM_REQUEST_INIT(&(request)->req_base.req_oshmem, persistent); \ 51 (request)->req_addr = addr; \ 52 (request)->req_base.req_addr = addr; \ 53 (request)->req_base.req_count = count; \ 54 (request)->req_base.req_peer = (int32_t)peer; \ 55 (request)->req_base.req_spml_complete = OPAL_INT_TO_BOOL(persistent); \ 56 (request)->req_base.req_free_called = false; \ 57 (request)->req_base.req_oshmem.req_status._cancelled = 0; \ 58 (request)->req_bytes_packed = 0; \ 59 } 60 61 /** 62 * 63 * 64 */ 65 #define MCA_SPML_BASE_GET_START( request ) \ 66 do { \ 67 (request)->req_spml_complete = false; \ 68 \ 69 (request)->req_oshmem.req_status.SHMEM_SOURCE = SHMEM_ANY_SOURCE; \ 70 (request)->req_oshmem.req_status.SHMEM_ERROR = OSHMEM_SUCCESS; \ 71 (request)->req_oshmem.req_status._count = 0; \ 72 (request)->req_oshmem.req_status._cancelled = 0; \ 73 \ 74 (request)->req_oshmem.req_complete = false; \ 75 (request)->req_oshmem.req_state = OSHMEM_REQUEST_ACTIVE; \ 76 } while (0) 77 78 /** 79 * Return a Get request. Handle the release of the communicator and the 80 * attached datatype. 81 * 82 * @param request (IN) Get request. 83 */ 84 #define MCA_SPML_BASE_GET_REQUEST_FINI( request ) \ 85 do { \ 86 OSHMEM_REQUEST_FINI(&(request)->req_base.req_oshmem); \ 87 opal_convertor_cleanup( &((request)->req_base.req_convertor) ); \ 88 } while (0) 89 90 END_C_DECLS 91 92 #endif 93 94