On Thu, 18 Dec 2008 15:37:57 -0800
"Davis, Arlin R" <[email protected]> wrote:

> 
> Port of libibmad to windows. Dependencies on libibumad port and complib (in 
> lieu of libcommon). Removed dependency on libibcommon.
> 
> Intent is to allow common mad code base for Windows and Linux to simplify 
> maintainablity across OFED and WinOF. This patch set was built and tested on 
> Windows and built on Linux (not tested yet). 
> 
> Patches separated as follow:
> 
> 1/6 - mad.h 
> 2/6 - dump.c
> 3/6 - fields.c 
> 4/6 - gs.c, mad.c, portid.c, register.c, resolve.c
> 5/6 - rpc.c, sa.c, serv.c, smp.c, vendor.c
> 6/6 - new files for windows:  dirs, src/Sources, src/ibmad_export.def, 
> src/ibmad_exports.src,  ibmad_main.cpp
> 
> Signed-off by: Arlin Davis <[email protected]>
> 
> diff -aur libibmad-1.2.2/include/infiniband/mad.h 
> libibmad/include/infiniband/mad.h
> --- libibmad-1.2.2/include/infiniband/mad.h   2008-08-31 07:15:05.000000000 
> -0700
> +++ libibmad/include/infiniband/mad.h 2008-12-17 17:02:54.873046600 -0800
> @@ -33,8 +33,10 @@
>  #ifndef _MAD_H_
>  #define _MAD_H_
>  
> -#include <stdint.h>
> -#include <string.h>
> +/* use complib for portability */
> +#include <complib/cl_types.h>
> +#include <complib/cl_byteswap.h>
> +#include <complib/cl_debug.h>
>  
>  #ifdef __cplusplus
>  #  define BEGIN_C_DECLS extern "C" {
> @@ -46,8 +48,14 @@
>  
>  BEGIN_C_DECLS
>  
> +#if defined(_WIN32) || defined(_WIN64)
> +#define MAD_EXPORT   __declspec(dllexport)
> +#else
> +#define MAD_EXPORT   extern
> +#endif
> +

Could this be put in the cl_ headers somewhere and be called CL_EXPORT
or CL_EXTERN (my preference if this is going to cause functions on the
Linux side to be declared extern)?


>  #define IB_SUBNET_PATH_HOPS_MAX      64
> -#define IB_DEFAULT_SUBN_PREFIX       0xfe80000000000000llu
> +#define IB_DEFAULT_SUBN_PREFIX       0xfe80000000000000ULL
>  #define IB_DEFAULT_QP1_QKEY  0x80010000
>  
>  #define IB_MAD_SIZE          256
> @@ -620,10 +628,10 @@
>  
> /******************************************************************************/
>  
>  /* portid.c */
> -char *       portid2str(ib_portid_t *portid);
> -int  portid2portnum(ib_portid_t *portid);
> -int  str2drpath(ib_dr_path_t *path, char *routepath, int drslid, int drdlid);
> -char *  drpath2str(ib_dr_path_t *path, char *dstr, size_t dstr_size);
> +MAD_EXPORT char * portid2str(ib_portid_t *portid);
> +MAD_EXPORT int portid2portnum(ib_portid_t *portid);
> +MAD_EXPORT int str2drpath(ib_dr_path_t *path, char *routepath, int drslid, 
> int drdlid);
> +MAD_EXPORT char * drpath2str(ib_dr_path_t *path, char *dstr, size_t 
> dstr_size);
>  
>  static inline int
>  ib_portid_set(ib_portid_t *portid, int lid, int qp, int qkey)
> @@ -639,77 +647,49 @@
>  /* fields.c */
>  extern ib_field_t ib_mad_f[];
>  
> -void _set_field(void *buf, int base_offs, ib_field_t *f, uint32_t val);
> +void _set_field(void *buf, int base_offs, ib_field_t *f, uint32_t val);
>  uint32_t _get_field(void *buf, int base_offs, ib_field_t *f);
> -void _set_array(void *buf, int base_offs, ib_field_t *f, void *val);
> -void _get_array(void *buf, int base_offs, ib_field_t *f, void *val);
> -void _set_field64(void *buf, int base_offs, ib_field_t *f, uint64_t val);
> +void _set_array(void *buf, int base_offs, ib_field_t *f, void *val);
> +void _get_array(void *buf, int base_offs, ib_field_t *f, void *val);
> +void _set_field64(void *buf, int base_offs, ib_field_t *f, uint64_t val);
>  uint64_t _get_field64(void *buf, int base_offs, ib_field_t *f);
>  
>  /* mad.c */
> -static inline uint32_t
> -mad_get_field(void *buf, int base_offs, int field)
> -{
> -     return _get_field(buf, base_offs, ib_mad_f + field);
> -}
> -
> -static inline void
> -mad_set_field(void *buf, int base_offs, int field, uint32_t val)
> -{
> -     _set_field(buf, base_offs, ib_mad_f + field, val);
> -}
> -
> +MAD_EXPORT uint32_t mad_get_field(void *buf, int base_offs, int field);
> +MAD_EXPORT void mad_set_field(void *buf, int base_offs, int field, uint32_t 
> val);
>  /* field must be byte aligned */
> -static inline uint64_t
> -mad_get_field64(void *buf, int base_offs, int field)
> -{
> -     return _get_field64(buf, base_offs, ib_mad_f + field);
> -}
> -
> -static inline void
> -mad_set_field64(void *buf, int base_offs, int field, uint64_t val)
> -{
> -     _set_field64(buf, base_offs, ib_mad_f + field, val);
> -}
> -
> -static inline void
> -mad_set_array(void *buf, int base_offs, int field, void *val)
> -{
> -     _set_array(buf, base_offs, ib_mad_f + field, val);
> -}
> -
> -static inline void
> -mad_get_array(void *buf, int base_offs, int field, void *val)
> -{
> -     _get_array(buf, base_offs, ib_mad_f + field, val);
> -}
> -
> -void mad_decode_field(uint8_t *buf, int field, void *val);
> -void mad_encode_field(uint8_t *buf, int field, void *val);
> -void *       mad_encode(void *buf, ib_rpc_t *rpc, ib_dr_path_t *drpath, void 
> *data);
> -uint64_t mad_trid(void);
> -int  mad_build_pkt(void *umad, ib_rpc_t *rpc, ib_portid_t *dport, 
> ib_rmpp_hdr_t *rmpp, void *data);
> +MAD_EXPORT uint64_t mad_get_field64(void *buf, int base_offs, int field);
> +MAD_EXPORT void mad_set_field64(void *buf, int base_offs, int field, 
> uint64_t val);
> +MAD_EXPORT void mad_set_array(void *buf, int base_offs, int field, void 
> *val);
> +MAD_EXPORT void mad_get_array(void *buf, int base_offs, int field, void 
> *val);
> +MAD_EXPORT void      mad_decode_field(uint8_t *buf, int field, void *val);
> +MAD_EXPORT void      mad_encode_field(uint8_t *buf, int field, void *val);
> +MAD_EXPORT void      *mad_encode(void *buf, ib_rpc_t *rpc, ib_dr_path_t 
> *drpath, void *data);
> +MAD_EXPORT uint64_t mad_trid(void);
> +MAD_EXPORT int       mad_build_pkt(void *umad, ib_rpc_t *rpc, ib_portid_t 
> *dport, 
> +                           ib_rmpp_hdr_t *rmpp, void *data);
>  
>  /* register.c */
> -int  mad_register_port_client(int port_id, int mgmt, uint8_t rmpp_version);
> -int  mad_register_client(int mgmt, uint8_t rmpp_version);
> -int  mad_register_server(int mgmt, uint8_t rmpp_version,
> -                         long method_mask[16/sizeof(long)],
> -                         uint32_t class_oui);
> -int  mad_class_agent(int mgmt);
> -int  mad_agent_class(int agent);
> +MAD_EXPORT int       mad_register_port_client(int port_id, int mgmt, 
> +                                      uint8_t rmpp_version);
> +MAD_EXPORT int       mad_register_client(int mgmt, uint8_t rmpp_version);
> +MAD_EXPORT int       mad_register_server(int mgmt, uint8_t rmpp_version,
> +                                 long method_mask[16/sizeof(long)],
> +                                 uint32_t class_oui);
> +MAD_EXPORT int       mad_class_agent(int mgmt);
> +MAD_EXPORT int       mad_agent_class(int agent);
>  
>  /* serv.c */
> -int  mad_send(ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> -              void *data);
> -void *       mad_receive(void *umad, int timeout);
> -int  mad_respond(void *umad, ib_portid_t *portid, uint32_t rstatus);
> -void *       mad_alloc(void);
> -void mad_free(void *umad);
> +MAD_EXPORT int       mad_send(ib_rpc_t *rpc, ib_portid_t *dport, 
> +                      ib_rmpp_hdr_t *rmpp, void *data);
> +MAD_EXPORT void * mad_receive(void *umad, int timeout);
> +MAD_EXPORT int mad_respond(void *umad, ib_portid_t *portid, uint32_t 
> rstatus);
> +MAD_EXPORT void * mad_alloc(void);
> +MAD_EXPORT void      mad_free(void *umad);
>  
>  /* vendor.c */
> -uint8_t *ib_vendor_call(void *data, ib_portid_t *portid,
> -                     ib_vendor_call_t *call);
> +MAD_EXPORT uint8_t *ib_vendor_call(void *data, ib_portid_t *portid,
> +                                ib_vendor_call_t *call);
>  
>  static inline int
>  mad_is_vendor_range1(int mgmt)
> @@ -718,38 +698,41 @@
>  }
>  
>  static inline int
> -mad_is_vendor_range2(int mgmt)
> +mad_is_vendor_range2(int mgmt) 
>  {
>       return mgmt >= 0x30 && mgmt <= 0x4f;
>  }
>  
>  /* rpc.c */
> -int  madrpc_portid(void);
> -int  madrpc_set_retries(int retries);
> -int  madrpc_set_timeout(int timeout);
> -void *       madrpc(ib_rpc_t *rpc, ib_portid_t *dport, void *payload, void 
> *rcvdata);
> -void *  madrpc_rmpp(ib_rpc_t *rpc, ib_portid_t *dport, ib_rmpp_hdr_t *rmpp,
> +MAD_EXPORT int madrpc_portid(void);
> +MAD_EXPORT int madrpc_set_retries(int retries);
> +MAD_EXPORT int madrpc_set_timeout(int timeout);
> +MAD_EXPORT void madrpc_init(char *dev_name, int dev_port, 
> +                         int *mgmt_classes, int num_classes);
> +MAD_EXPORT void      madrpc_show_errors(int set);
> +void * madrpc(ib_rpc_t *rpc, ib_portid_t *dport, 
> +           void *payload, void *rcvdata);
> +void * madrpc_rmpp(ib_rpc_t *rpc, ib_portid_t *dport, 
> +                ib_rmpp_hdr_t *rmpp, void *data);
> +
> +void madrpc_save_mad(void *madbuf, int len);
> +void madrpc_lock(void);
> +void madrpc_unlock(void);
> +void * mad_rpc_open_port(char *dev_name, int dev_port, 
> +                      int *mgmt_classes, int num_classes);
> +void mad_rpc_close_port(void *ibmad_port);
> +void * mad_rpc(const void *ibmad_port, ib_rpc_t *rpc, 
> +            ib_portid_t *dport, void *payload, 
> +            void *rcvdata);
> +void * mad_rpc_rmpp(const void *ibmad_port, ib_rpc_t *rpc, 
> +                 ib_portid_t *dport, ib_rmpp_hdr_t *rmpp, 
>                   void *data);
> -void madrpc_init(char *dev_name, int dev_port, int *mgmt_classes,
> -                 int num_classes);
> -void madrpc_save_mad(void *madbuf, int len);
> -void madrpc_lock(void);
> -void madrpc_unlock(void);
> -void madrpc_show_errors(int set);
> -
> -void *       mad_rpc_open_port(char *dev_name, int dev_port, int 
> *mgmt_classes,
> -                       int num_classes);
> -void mad_rpc_close_port(void *ibmad_port);
> -void *       mad_rpc(const void *ibmad_port, ib_rpc_t *rpc, ib_portid_t 
> *dport,
> -             void *payload, void *rcvdata);
> -void *  mad_rpc_rmpp(const void *ibmad_port, ib_rpc_t *rpc, ib_portid_t 
> *dport,
> -                  ib_rmpp_hdr_t *rmpp, void *data);
>  
>  /* smp.c */
> -uint8_t * smp_query(void *buf, ib_portid_t *id, unsigned attrid, unsigned 
> mod,
> -                 unsigned timeout);
> -uint8_t * smp_set(void *buf, ib_portid_t *id, unsigned attrid, unsigned mod,
> -               unsigned timeout);
> +MAD_EXPORT uint8_t * smp_query(void *buf, ib_portid_t *id, unsigned attrid, 
> +                            unsigned mod, unsigned timeout);
> +MAD_EXPORT uint8_t * smp_set(void *buf, ib_portid_t *id, unsigned attrid, 
> +                          unsigned mod, unsigned timeout);
>  uint8_t * smp_query_via(void *buf, ib_portid_t *id, unsigned attrid,
>                       unsigned mod, unsigned timeout, const void *srcport);
>  uint8_t * smp_set_via(void *buf, ib_portid_t *id, unsigned attrid, unsigned 
> mod,
> @@ -786,9 +769,9 @@
>                 unsigned timeout);
>  uint8_t * sa_rpc_call(const void *ibmad_port, void *rcvbuf, ib_portid_t 
> *portid,
>                        ib_sa_call_t *sa, unsigned timeout);
> -int  ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid, ib_portid_t 
> *sm_id,
> -                   void *buf);       /* returns lid */
> -int  ib_path_query_via(const void *srcport, ibmad_gid_t srcgid,
> +MAD_EXPORT int ib_path_query(ibmad_gid_t srcgid, ibmad_gid_t destgid, 
> +                          ib_portid_t *sm_id, void *buf); /* returns lid */
> +int ib_path_query_via(const void *srcport, ibmad_gid_t srcgid,
>                         ibmad_gid_t destgid, ib_portid_t *sm_id, void *buf);
>  
>  inline static uint8_t *
> @@ -805,38 +788,38 @@
>  }
>  
>  /* resolve.c */
> -int  ib_resolve_smlid(ib_portid_t *sm_id, int timeout);
> -int  ib_resolve_guid(ib_portid_t *portid, uint64_t *guid,
> -                     ib_portid_t *sm_id, int timeout);
> -int  ib_resolve_portid_str(ib_portid_t *portid, char *addr_str,
> -                           int dest_type, ib_portid_t *sm_id);
> -int  ib_resolve_self(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid);
> -
> -int  ib_resolve_smlid_via(ib_portid_t *sm_id, int timeout,
> -                          const void *srcport);
> -int  ib_resolve_guid_via(ib_portid_t *portid, uint64_t *guid,
> -                         ib_portid_t *sm_id, int timeout,
> -                         const void *srcport);
> -int  ib_resolve_portid_str_via(ib_portid_t *portid, char *addr_str,
> -                               int dest_type, ib_portid_t *sm_id,
> -                               const void *srcport);
> -int  ib_resolve_self_via(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid,
> -                         const void *srcport);
> +MAD_EXPORT int ib_resolve_smlid(ib_portid_t *sm_id, int timeout);
> +MAD_EXPORT int ib_resolve_guid(ib_portid_t *portid, uint64_t *guid,
> +                            ib_portid_t *sm_id, int timeout);
> +MAD_EXPORT int ib_resolve_portid_str(ib_portid_t *portid, char *addr_str,
> +                                  int dest_type, ib_portid_t *sm_id);
> +MAD_EXPORT int ib_resolve_self(ib_portid_t *portid, int *portnum, 
> +                            ibmad_gid_t *gid);
> +int ib_resolve_smlid_via(ib_portid_t *sm_id, int timeout,
> +                      const void *srcport);
> +int ib_resolve_guid_via(ib_portid_t *portid, uint64_t *guid,
> +                     ib_portid_t *sm_id, int timeout,
> +                     const void *srcport);
> +int ib_resolve_portid_str_via(ib_portid_t *portid, char *addr_str,
> +                           int dest_type, ib_portid_t *sm_id,
> +                           const void *srcport);
> +int ib_resolve_self_via(ib_portid_t *portid, int *portnum, ibmad_gid_t *gid,
> +                     const void *srcport);
>  
>  /* gs.c */
> -uint8_t *perf_classportinfo_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *perf_classportinfo_query(void *rcvbuf, ib_portid_t 
> *dest, int port,
>                                 unsigned timeout);
> -uint8_t *port_performance_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_performance_query(void *rcvbuf, ib_portid_t *dest, 
> int port,
>                               unsigned timeout);
> -uint8_t *port_performance_reset(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_performance_reset(void *rcvbuf, ib_portid_t *dest, 
> int port,
>                               unsigned mask, unsigned timeout);
> -uint8_t *port_performance_ext_query(void *rcvbuf, ib_portid_t *dest, int 
> port,
> +MAD_EXPORT uint8_t *port_performance_ext_query(void *rcvbuf, ib_portid_t 
> *dest, int port,
>                                   unsigned timeout);
> -uint8_t *port_performance_ext_reset(void *rcvbuf, ib_portid_t *dest, int 
> port,
> +MAD_EXPORT uint8_t *port_performance_ext_reset(void *rcvbuf, ib_portid_t 
> *dest, int port,
>                                   unsigned mask, unsigned timeout);
> -uint8_t *port_samples_control_query(void *rcvbuf, ib_portid_t *dest, int 
> port,
> +MAD_EXPORT uint8_t *port_samples_control_query(void *rcvbuf, ib_portid_t 
> *dest, int port,
>                                   unsigned timeout);
> -uint8_t *port_samples_result_query(void *rcvbuf, ib_portid_t *dest, int port,
> +MAD_EXPORT uint8_t *port_samples_result_query(void *rcvbuf, ib_portid_t 
> *dest, int port,
>                                  unsigned timeout);
>  
>  uint8_t *perf_classportinfo_query_via(void *rcvbuf, ib_portid_t *dest, int 
> port,
> @@ -855,7 +838,7 @@
>                                  unsigned timeout, const void *srcport);
>  /* dump.c */
>  ib_mad_dump_fn
> -     mad_dump_int, mad_dump_uint, mad_dump_hex, mad_dump_rhex,
> +     MAD_EXPORT mad_dump_int, mad_dump_uint, mad_dump_hex, mad_dump_rhex,
>       mad_dump_bitfield, mad_dump_array, mad_dump_string,
>       mad_dump_linkwidth, mad_dump_linkwidthsup, mad_dump_linkwidthen,
>       mad_dump_linkdowndefstate,

Is this a mistake?  Should it be:

MAD_EXPORT ib_mad_dump_fn
...

Ira


> @@ -900,6 +883,34 @@
>  
>  extern int ibdebug;
>  
> +/* remove libibcommon dependencies, use complib */
> +
> +/* dump.c */
> +MAD_EXPORT void xdump(FILE *file, char *msg, void *p, int size);
> +
> +/** printf style debugging MACRO's, map to cl_msg_out */
> +#if !defined(IBWARN) 
> +#define IBWARN(fmt, ...) cl_msg_out(fmt, ## __VA_ARGS__)
> +#endif 
> +#if !defined(IBPANIC)
> +#define IBPANIC(fmt, ...) \
> +{ \
> +        cl_msg_out(fmt, ## __VA_ARGS__); \
> +        CL_ASSERT(0); \
> +}
> +#endif 
> + 
> +/** align value \a l to \a size (ceil) */
> +#if !defined(ALIGN) 
> +#define ALIGN(l, size) (((l) + ((size) - 1)) / (size) * (size))
> +#endif 
> + 
> +/** align value \a l to \a sizeof 32 bit int (ceil) */
> +#if !defined(ALIGN32) 
> +#define ALIGN32(l) (ALIGN((l), sizeof(uint32))) 
> +#endif
> +
> +
>  END_C_DECLS
>  
>  #endif /* _MAD_H_ */
> 
> 
> _______________________________________________
> general mailing list
> [email protected]
> http:// lists.openfabrics.org/cgi-bin/mailman/listinfo/general
> 
> To unsubscribe, please visit http:// 
> openib.org/mailman/listinfo/openib-general
> 
_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to