@@ -514,318 +514,18 @@ class vx_device {
514514 return 0 ;
515515 }
516516
517- opae_drv_api_t api_;
518- fpga_handle fpga_;
519- MemoryAllocator global_mem_;
520- DeviceConfig dcrs_;
521- uint64_t dev_caps_;
522- uint64_t isa_caps_;
523- uint64_t global_mem_size_;
524- uint64_t staging_wsid_;
525- uint64_t staging_ioaddr_;
526- uint8_t * staging_ptr_;
527- uint64_t staging_size_;
528- std::unordered_map<uint32_t , std::array<uint64_t , 32 >> mpm_cache_;
529- int profiling_id_;
517+ opae_drv_api_t api_;
518+ fpga_handle fpga_;
519+ MemoryAllocator global_mem_;
520+ DeviceConfig dcrs_;
521+ uint64_t dev_caps_;
522+ uint64_t isa_caps_;
523+ uint64_t global_mem_size_;
524+ uint64_t staging_wsid_;
525+ uint64_t staging_ioaddr_;
526+ uint8_t *staging_ptr_;
527+ uint64_t staging_size_;
528+ std::unordered_map<uint32_t , std::array<uint64_t , 32 >> mpm_cache_;
530529};
531530
532- struct vx_buffer {
533- vx_device* device;
534- uint64_t addr;
535- uint64_t size;
536- };
537-
538- // /////////////////////////////////////////////////////////////////////////////
539-
540- extern int vx_dev_open (vx_device_h* hdevice) {
541- if (nullptr == hdevice)
542- return -1 ;
543-
544- opae_drv_api_t api;
545- memset (&api, 0 , sizeof (opae_drv_api_t ));
546- if (drv_init (&api) !=0 ) {
547- return -1 ;
548- }
549-
550- // allocate device object
551- auto device = new vx_device (api);
552- if (nullptr == device) {
553- return -1 ;
554- }
555-
556- // initialize device
557- CHECK_ERR (device->init (), {
558- return err;
559- });
560-
561- DBGPRINT (" DEV_OPEN: hdevice=%p\n " , (void *)device);
562-
563- *hdevice = device;
564-
565- return 0 ;
566- }
567-
568- extern int vx_dev_close (vx_device_h hdevice) {
569- if (nullptr == hdevice)
570- return -1 ;
571-
572- DBGPRINT (" DEV_CLOSE: hdevice=%p\n " , hdevice);
573-
574- auto device = ((vx_device*)hdevice);
575-
576- #ifdef SCOPE
577- vx_scope_stop (hdevice);
578- #endif
579-
580- delete device;
581-
582- drv_close ();
583-
584- return 0 ;
585- }
586-
587- extern int vx_dev_caps (vx_device_h hdevice, uint32_t caps_id, uint64_t *value) {
588- if (nullptr == hdevice)
589- return -1 ;
590-
591- vx_device *device = ((vx_device*)hdevice);
592-
593- uint64_t _value;
594-
595- CHECK_ERR (device->get_caps (caps_id, &_value), {
596- return err;
597- });
598-
599- DBGPRINT (" DEV_CAPS: hdevice=%p, caps_id=%d, value=%ld\n " , hdevice, caps_id, _value);
600-
601- *value = _value;
602-
603- return 0 ;
604- }
605-
606- extern int vx_mem_alloc (vx_device_h hdevice, uint64_t size, int flags, vx_buffer_h* hbuffer) {
607- if (nullptr == hdevice
608- || nullptr == hbuffer
609- || 0 == size)
610- return -1 ;
611-
612- DBGPRINT (" MEM_ALLOC: size=%ld, flags=0x%d\n " , size, flags);
613-
614- auto device = ((vx_device*)hdevice);
615-
616- uint64_t dev_addr;
617- CHECK_ERR (device->mem_alloc (size, flags, &dev_addr), {
618- return err;
619- });
620-
621- auto buffer = new vx_buffer{device, dev_addr, size};
622- if (nullptr == buffer) {
623- device->mem_free (dev_addr);
624- return -1 ;
625- }
626-
627- DBGPRINT (" MEM_ALLOC: hdevice=%p, size=%ld, flags=0x%d, hbuffer=%p\n " , hdevice, size, flags, (void *)buffer);
628-
629- *hbuffer = buffer;
630-
631- return 0 ;
632- }
633-
634- extern int vx_mem_reserve (vx_device_h hdevice, uint64_t address, uint64_t size, int flags, vx_buffer_h* hbuffer) {
635- if (nullptr == hdevice
636- || nullptr == hbuffer
637- || 0 == size)
638- return -1 ;
639-
640- auto device = ((vx_device*)hdevice);
641-
642- CHECK_ERR (device->mem_reserve (address, size, flags), {
643- return err;
644- });
645-
646- auto buffer = new vx_buffer{device, address, size};
647- if (nullptr == buffer) {
648- device->mem_free (address);
649- return -1 ;
650- }
651-
652- DBGPRINT (" MEM_RESERVE: hdevice=%p, address=0x%lx, size=%ld, flags=0x%d, hbuffer=%p\n " , hdevice, address, size, flags, (void *)buffer);
653-
654- *hbuffer = buffer;
655-
656- return 0 ;
657- }
658-
659- extern int vx_mem_free (vx_buffer_h hbuffer) {
660- if (nullptr == hbuffer)
661- return 0 ;
662-
663- DBGPRINT (" MEM_FREE: hbuffer=%p\n " , hbuffer);
664-
665- auto buffer = ((vx_buffer*)hbuffer);
666- auto device = ((vx_device*)buffer->device );
667-
668- vx_mem_access (hbuffer, 0 , buffer->size , 0 );
669-
670- int err = device->mem_free (buffer->addr );
671-
672- delete buffer;
673-
674- return err;
675- }
676-
677- extern int vx_mem_access (vx_buffer_h hbuffer, uint64_t offset, uint64_t size, int flags) {
678- if (nullptr == hbuffer)
679- return -1 ;
680-
681- auto buffer = ((vx_buffer*)hbuffer);
682- auto device = ((vx_device*)buffer->device );
683-
684- if ((offset + size) > buffer->size )
685- return -1 ;
686-
687- DBGPRINT (" MEM_ACCESS: hbuffer=%p, offset=%ld, size=%ld, flags=%d\n " , hbuffer, offset, size, flags);
688-
689- return device->mem_access (buffer->addr + offset, size, flags);
690- }
691-
692- extern int vx_mem_address (vx_buffer_h hbuffer, uint64_t * address) {
693- if (nullptr == hbuffer)
694- return -1 ;
695-
696- auto buffer = ((vx_buffer*)hbuffer);
697-
698- DBGPRINT (" MEM_ADDRESS: hbuffer=%p, address=0x%lx\n " , hbuffer, buffer->addr );
699-
700- *address = buffer->addr ;
701-
702- return 0 ;
703- }
704-
705- extern int vx_mem_info (vx_device_h hdevice, uint64_t * mem_free, uint64_t * mem_used) {
706- if (nullptr == hdevice)
707- return -1 ;
708-
709- auto device = ((vx_device*)hdevice);
710-
711- uint64_t _mem_free, _mem_used;
712-
713- CHECK_ERR (device->mem_info (&_mem_free, &_mem_used), {
714- return err;
715- });
716-
717- DBGPRINT (" MEM_INFO: hdevice=%p, mem_free=%ld, mem_used=%ld\n " , hdevice, _mem_free, _mem_used);
718-
719- if (mem_free) {
720- *mem_free = _mem_free;
721- }
722-
723- if (mem_used) {
724- *mem_used = _mem_used;
725- }
726-
727- return 0 ;
728- }
729-
730- extern int vx_copy_to_dev (vx_buffer_h hbuffer, const void * host_ptr, uint64_t dst_offset, uint64_t size) {
731- if (nullptr == hbuffer || nullptr == host_ptr)
732- return -1 ;
733-
734- auto buffer = ((vx_buffer*)hbuffer);
735- auto device = ((vx_device*)buffer->device );
736-
737- if ((dst_offset + size) > buffer->size )
738- return -1 ;
739-
740- DBGPRINT (" COPY_TO_DEV: hbuffer=%p, host_addr=%p, dst_offset=%ld, size=%ld\n " , hbuffer, host_ptr, dst_offset, size);
741-
742- return device->upload (buffer->addr + dst_offset, host_ptr, size);
743- }
744-
745- extern int vx_copy_from_dev (void * host_ptr, vx_buffer_h hbuffer, uint64_t src_offset, uint64_t size) {
746- if (nullptr == hbuffer || nullptr == host_ptr)
747- return -1 ;
748-
749- auto buffer = ((vx_buffer*)hbuffer);
750- auto device = ((vx_device*)buffer->device );
751-
752- if ((src_offset + size) > buffer->size )
753- return -1 ;
754-
755- DBGPRINT (" COPY_FROM_DEV: hbuffer=%p, host_addr=%p, src_offset=%ld, size=%ld\n " , hbuffer, host_ptr, src_offset, size);
756-
757- return device->download (host_ptr, buffer->addr + src_offset, size);
758- }
759-
760- extern int vx_start (vx_device_h hdevice, vx_buffer_h hkernel, vx_buffer_h harguments) {
761- if (nullptr == hdevice || nullptr == hkernel || nullptr == harguments)
762- return -1 ;
763-
764- DBGPRINT (" START: hdevice=%p, hkernel=%p, harguments=%p\n " , hdevice, hkernel, harguments);
765-
766- auto device = ((vx_device*)hdevice);
767- auto kernel = ((vx_buffer*)hkernel);
768- auto arguments = ((vx_buffer*)harguments);
769-
770- return device->start (kernel->addr , arguments->addr );
771- }
772-
773- extern int vx_ready_wait (vx_device_h hdevice, uint64_t timeout) {
774- if (nullptr == hdevice)
775- return -1 ;
776-
777- DBGPRINT (" READY_WAIT: hdevice=%p, timeout=%ld\n " , hdevice, timeout);
778-
779- auto device = ((vx_device*)hdevice);
780-
781- return device->ready_wait (timeout);
782- }
783-
784- extern int vx_dcr_read (vx_device_h hdevice, uint32_t addr, uint32_t * value) {
785- if (nullptr == hdevice)
786- return -1 ;
787-
788- auto device = (vx_device*)hdevice;
789-
790- uint32_t _value;
791-
792- CHECK_ERR (device->dcr_read (addr, &_value), {
793- return err;
794- });
795-
796- DBGPRINT (" DCR_READ: hdevice=%p, addr=0x%x, value=0x%x\n " , hdevice, addr, _value);
797-
798- *value = _value;
799-
800- return 0 ;
801- }
802-
803- extern int vx_dcr_write (vx_device_h hdevice, uint32_t addr, uint32_t value) {
804- if (nullptr == hdevice)
805- return -1 ;
806-
807- DBGPRINT (" DCR_WRITE: hdevice=%p, addr=0x%x, value=0x%x\n " , hdevice, addr, value);
808-
809- auto device = ((vx_device*)hdevice);
810-
811- return device->dcr_write (addr, value);
812- }
813-
814- extern int vx_mpm_query (vx_device_h hdevice, uint32_t addr, uint32_t core_id, uint64_t * value) {
815- if (nullptr == hdevice)
816- return -1 ;
817-
818- auto device = ((vx_device*)hdevice);
819-
820- uint64_t _value;
821-
822- CHECK_ERR (device->mpm_query (addr, core_id, &_value), {
823- return err;
824- });
825-
826- DBGPRINT (" MPM_QUERY: hdevice=%p, addr=0x%x, core_id=%d, value=0x%lx\n " , hdevice, addr, core_id, _value);
827-
828- *value = _value;
829-
830- return 0 ;
831- }
531+ #include < callbacks.inc>
0 commit comments