Lines Matching refs:dscptr

182  * @param void(*f)(dscptr) the function to be invoked for every descriptor
187 static struct cvmx_shmem_dscptr *__smdr_iterator(struct cvmx_shmem_dscptr *(*f)(struct cvmx_shmem_dscptr *dscptr, void *p), void *param )
189 struct cvmx_shmem_dscptr *d, *dscptr = NULL;
197 if ((dscptr = (*f)(d, param)) != NULL)
201 return dscptr;
209 * @param dscptr descriptor passed in by the iterator
215 static struct cvmx_shmem_dscptr *__cvmx_shmem_smdr_match_name(struct cvmx_shmem_dscptr *dscptr, void *name)
220 if (dscptr->owner == CVMX_SHMEM_OWNER_NONE)
223 if (strcmp(dscptr->name, name_to_match) == 0)
224 ret = dscptr;
247 * @param dscptr descriptor passed in by the iterator
253 static struct cvmx_shmem_dscptr *__cvmx_shmem_smdr_is_free(struct cvmx_shmem_dscptr* dscptr, void *nouse)
255 if (dscptr->owner == CVMX_SHMEM_OWNER_NONE)
256 return dscptr;
277 * @param dscptr descriptor to be freed
279 static void __cvmx_shmem_smdr_free(struct cvmx_shmem_dscptr *dscptr)
281 dscptr->owner = CVMX_SHMEM_OWNER_NONE;
298 * @return dscptr descriptor of the opened named block
303 struct cvmx_shmem_dscptr *dscptr = NULL;
345 dscptr = __cvmx_shmem_smdr_find_by_name(name);
346 if (dscptr)
355 if ((size != dscptr->size) || (size != dscptr -> alignment))
361 dscptr = __cvmx_shmem_smdr_find_free_dscptr();
362 if (dscptr)
372 if (dscptr != NULL)
373 dscptr->use_count += 1;
376 return dscptr;
383 if (dscptr)
384 __cvmx_shmem_smdr_free(dscptr);
394 cvmx_dprintf("cvmx-shmem-dbg: init SMDR descriptor %p \n", dscptr);
407 dscptr->vaddr = vaddr;
410 dscptr->owner = cvmx_get_core_num();
411 dscptr->is_named_block = 1;
412 dscptr->use_count = 1;
413 dscptr->name =shmem_nblk->name ;
414 dscptr->paddr = shmem_nblk->base_addr;
415 dscptr->size = size;
416 dscptr->alignment = size;
420 dscptr->p_wronly = 1;
422 dscptr->p_rdwr = 1;
425 return dscptr;
435 * @param dscptr shared memory descriptor
441 void *__cvmx_shmem_map_standalone(struct cvmx_shmem_dscptr *dscptr, int pflag)
457 free_index, dscptr->vaddr, dscptr->paddr, dscptr->size );
460 cvmx_tlb_write_runtime_entry(free_index, CAST64(dscptr->vaddr),
461 dscptr->paddr, dscptr->size,
464 return dscptr -> vaddr;
475 * @param dscptr shared memory descriptor
481 static inline void *__cvmx_shmem_map_linux(struct cvmx_shmem_dscptr *dscptr, int pflag)
495 vaddr = mmap(dscptr->vaddr, dscptr->size, PROT_READ|PROT_WRITE,
501 if ((vaddr!=NULL) && (vaddr != dscptr->vaddr))
503 munmap(vaddr, dscptr->size);
515 * @param dscptr shared memory descriptor
520 void *cvmx_shmem_map(struct cvmx_shmem_dscptr *dscptr, int pflag)
524 vaddr = __cvmx_shmem_map_linux(dscptr, pflag);
526 vaddr = __cvmx_shmem_map_standalone(dscptr, pflag);
539 * @param dscptr shared memory descriptor
543 static inline void __cvmx_shmem_unmap_linux(struct cvmx_shmem_dscptr* dscptr)
545 if (__cvmx_shmem_devmemfd && dscptr)
546 munmap(dscptr->vaddr, dscptr->size);
558 * @param dscptr shared memory descriptor
563 __cvmx_shmem_unmap_standalone(struct cvmx_shmem_dscptr *dscptr)
567 index = cvmx_tlb_lookup(CAST64(dscptr->vaddr));
580 * @param dscptr shared memory descriptor
583 void cvmx_shmem_unmap(struct cvmx_shmem_dscptr *dscptr)
586 __cvmx_shmem_unmap_linux(dscptr);
588 __cvmx_shmem_unmap_standalone(dscptr);
597 * @param dscptr shared memory descriptor
605 static inline int __cvmx_shmem_close_dscptr(struct cvmx_shmem_dscptr *dscptr, int remove)
607 cvmx_spinlock_lock(&dscptr->lock);
609 if (dscptr->use_count >0)
610 dscptr->use_count-= 1;
612 if ((dscptr->use_count == 0) && remove)
615 __cvmx_shmem_smdr_free(dscptr);
619 if (dscptr->is_named_block)
622 cvmx_dprintf("cvmx-shmem-dbg: remove named block %s \n", dscptr->name);
624 cvmx_bootmem_phy_named_block_free(dscptr->name, 0);
627 cvmx_spinlock_unlock(&dscptr->lock);
639 * @param dscptr shared memory descriptor
648 static inline int __cvmx_shmem_close_standalone(struct cvmx_shmem_dscptr *dscptr, int remove)
650 return __cvmx_shmem_close_dscptr(dscptr, remove);
661 * @param dscptr shared memory descriptor
670 int __cvmx_shmem_close_linux(struct cvmx_shmem_dscptr *dscptr, int remove)
673 ret = __cvmx_shmem_close_dscptr(dscptr, remove);
690 * @param dscptr shared memory descriptor
698 int cvmx_shmem_close(struct cvmx_shmem_dscptr *dscptr, int remove)
702 ret = __cvmx_shmem_close_linux(dscptr, remove);
704 ret = __cvmx_shmem_close_standalone(dscptr, remove);
714 * @param dscptr descriptor passed in by the iterator
718 static struct cvmx_shmem_dscptr *__cvmx_shmem_smdr_display_dscptr(struct cvmx_shmem_dscptr *dscptr, void *nouse)
720 if ((dscptr != NULL ) && (dscptr -> owner != CVMX_SHMEM_OWNER_NONE))
723 dscptr->name, dscptr-> paddr,
724 dscptr->size, dscptr-> alignment,
725 dscptr->vaddr, dscptr->use_count);