mirror of
https://github.com/ipxe/ipxe
synced 2025-12-16 01:21:10 +03:00
post_recv() now works, and we can pass data on the IPoIB queue pair
using entirely our own code.
This commit is contained in:
@@ -25,6 +25,7 @@ struct MLX_DECLARE_STRUCT ( arbelprm_completion_queue_entry );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_completion_with_error );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_cq_ci_db_record );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_qp_db_record );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_recv_wqe_segment_next );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_send_doorbell );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_ud_address_vector );
|
||||
struct MLX_DECLARE_STRUCT ( arbelprm_wqe_segment_ctrl_send );
|
||||
@@ -37,13 +38,28 @@ struct MLX_DECLARE_STRUCT ( arbelprm_wqe_segment_ud );
|
||||
*
|
||||
*/
|
||||
|
||||
#define ARBELPRM_MAX_GATHER 1
|
||||
#define ARBEL_MAX_GATHER 1
|
||||
|
||||
struct arbelprm_ud_send_wqe {
|
||||
struct arbelprm_wqe_segment_next next;
|
||||
struct arbelprm_wqe_segment_ctrl_send ctrl;
|
||||
struct arbelprm_wqe_segment_ud ud;
|
||||
struct arbelprm_wqe_segment_data_ptr data[ARBELPRM_MAX_GATHER];
|
||||
struct arbelprm_wqe_segment_data_ptr data[ARBEL_MAX_GATHER];
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
#define ARBEL_MAX_SCATTER 1
|
||||
|
||||
struct arbelprm_recv_wqe {
|
||||
/* The autogenerated header is inconsistent between send and
|
||||
* receive WQEs. The "ctrl" structure for receive WQEs is
|
||||
* defined to include the "next" structure. Since the "ctrl"
|
||||
* part of the "ctrl" structure contains only "reserved, must
|
||||
* be zero" bits, we ignore its definition and provide
|
||||
* something more usable.
|
||||
*/
|
||||
struct arbelprm_recv_wqe_segment_next next;
|
||||
uint32_t ctrl[2]; /* All "reserved, must be zero" */
|
||||
struct arbelprm_wqe_segment_data_ptr data[ARBEL_MAX_SCATTER];
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
union arbelprm_completion_entry {
|
||||
@@ -88,6 +104,7 @@ struct arbel_send_work_queue {
|
||||
|
||||
/** An Arbel receive work queue entry */
|
||||
union arbel_recv_wqe {
|
||||
struct arbelprm_recv_wqe recv;
|
||||
uint8_t force_align[ARBEL_RECV_WQE_ALIGN];
|
||||
} __attribute__ (( packed ));
|
||||
|
||||
@@ -113,6 +130,12 @@ struct arbel {
|
||||
void *uar;
|
||||
/** Doorbell records */
|
||||
union arbelprm_doorbell_record *db_rec;
|
||||
/** Reserved LKey
|
||||
*
|
||||
* Used to get unrestricted memory access.
|
||||
*/
|
||||
unsigned long reserved_lkey;
|
||||
|
||||
};
|
||||
|
||||
#endif /* _ARBEL_H */
|
||||
|
||||
Reference in New Issue
Block a user