| 
									
										
										
										
											2018-02-09 15:15:00 +02:00
										 |  |  | /*
 | 
					
						
							|  |  |  |  * RDMA device: Debug utilities | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Copyright (C) 2018 Oracle | 
					
						
							|  |  |  |  * Copyright (C) 2018 Red Hat Inc | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * Authors: | 
					
						
							|  |  |  |  *     Yuval Shaia <yuval.shaia@oracle.com> | 
					
						
							|  |  |  |  *     Marcel Apfelbaum <marcel@redhat.com> | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * This work is licensed under the terms of the GNU GPL, version 2 or later. | 
					
						
							|  |  |  |  * See the COPYING file in the top-level directory. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef RDMA_UTILS_H
 | 
					
						
							|  |  |  | #define RDMA_UTILS_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 03:29:05 -07:00
										 |  |  | #include "qemu/error-report.h"
 | 
					
						
							| 
									
										
										
										
											2018-03-21 17:22:07 +02:00
										 |  |  | #include "sysemu/dma.h"
 | 
					
						
							| 
									
										
										
										
											2018-02-09 15:15:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 03:29:05 -07:00
										 |  |  | #define rdma_error_report(fmt, ...) \
 | 
					
						
							|  |  |  |     error_report("%s: " fmt, "rdma", ## __VA_ARGS__) | 
					
						
							|  |  |  | #define rdma_warn_report(fmt, ...) \
 | 
					
						
							|  |  |  |     warn_report("%s: " fmt, "rdma", ## __VA_ARGS__) | 
					
						
							|  |  |  | #define rdma_info_report(fmt, ...) \
 | 
					
						
							|  |  |  |     info_report("%s: " fmt, "rdma", ## __VA_ARGS__) | 
					
						
							| 
									
										
										
										
											2018-02-09 15:15:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-12-11 18:11:39 +01:00
										 |  |  | typedef struct RdmaProtectedGQueue { | 
					
						
							| 
									
										
										
										
											2019-03-11 03:29:06 -07:00
										 |  |  |     QemuMutex lock; | 
					
						
							| 
									
										
										
										
											2020-12-11 18:11:39 +01:00
										 |  |  |     GQueue *list; | 
					
						
							|  |  |  | } RdmaProtectedGQueue; | 
					
						
							| 
									
										
										
										
											2019-03-11 03:29:06 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-03-11 03:29:11 -07:00
										 |  |  | typedef struct RdmaProtectedGSList { | 
					
						
							|  |  |  |     QemuMutex lock; | 
					
						
							|  |  |  |     GSList *list; | 
					
						
							|  |  |  | } RdmaProtectedGSList; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-12-31 11:19:08 +01:00
										 |  |  | void *rdma_pci_dma_map(PCIDevice *dev, dma_addr_t addr, dma_addr_t len); | 
					
						
							| 
									
										
										
										
											2018-02-09 15:15:00 +02:00
										 |  |  | void rdma_pci_dma_unmap(PCIDevice *dev, void *buffer, dma_addr_t len); | 
					
						
							| 
									
										
										
										
											2020-12-11 18:11:39 +01:00
										 |  |  | void rdma_protected_gqueue_init(RdmaProtectedGQueue *list); | 
					
						
							|  |  |  | void rdma_protected_gqueue_destroy(RdmaProtectedGQueue *list); | 
					
						
							|  |  |  | void rdma_protected_gqueue_append_int64(RdmaProtectedGQueue *list, | 
					
						
							|  |  |  |                                         int64_t value); | 
					
						
							|  |  |  | int64_t rdma_protected_gqueue_pop_int64(RdmaProtectedGQueue *list); | 
					
						
							| 
									
										
										
										
											2019-03-11 03:29:11 -07:00
										 |  |  | void rdma_protected_gslist_init(RdmaProtectedGSList *list); | 
					
						
							|  |  |  | void rdma_protected_gslist_destroy(RdmaProtectedGSList *list); | 
					
						
							|  |  |  | void rdma_protected_gslist_append_int32(RdmaProtectedGSList *list, | 
					
						
							|  |  |  |                                         int32_t value); | 
					
						
							|  |  |  | void rdma_protected_gslist_remove_int32(RdmaProtectedGSList *list, | 
					
						
							|  |  |  |                                         int32_t value); | 
					
						
							| 
									
										
										
										
											2018-02-09 15:15:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-12-21 16:40:28 +02:00
										 |  |  | static inline void addrconf_addr_eui48(uint8_t *eui, const char *addr) | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     memcpy(eui, addr, 3); | 
					
						
							|  |  |  |     eui[3] = 0xFF; | 
					
						
							|  |  |  |     eui[4] = 0xFE; | 
					
						
							|  |  |  |     memcpy(eui + 5, addr + 3, 3); | 
					
						
							|  |  |  |     eui[0] ^= 2; | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-09 15:15:00 +02:00
										 |  |  | #endif
 |