Esempio n. 1
0
int cvmx_bootmem_phy_named_block_free(char *name, uint32_t flags)
{
	struct cvmx_bootmem_named_block_desc *named_block_ptr;

	if (cvmx_bootmem_desc->major_version != 3) {
		cvmx_dprintf("ERROR: Incompatible bootmem descriptor version: "
			     "%d.%d at addr: %p\n",
			     (int)cvmx_bootmem_desc->major_version,
			     (int)cvmx_bootmem_desc->minor_version,
			     cvmx_bootmem_desc);
		return 0;
	}
#ifdef DEBUG
	cvmx_dprintf("cvmx_bootmem_phy_named_block_free: %s\n", name);
#endif

	/*
	 * Take lock here, as name lookup/block free/name free need to
	 * be atomic.
	 */
	cvmx_bootmem_lock();

	named_block_ptr =
	    cvmx_bootmem_phy_named_block_find(name,
					      CVMX_BOOTMEM_FLAG_NO_LOCKING);
	if (named_block_ptr) {
#ifdef DEBUG
		cvmx_dprintf("cvmx_bootmem_phy_named_block_free: "
			     "%s, base: 0x%llx, size: 0x%llx\n",
			     name,
			     (unsigned long long)named_block_ptr->base_addr,
			     (unsigned long long)named_block_ptr->size);
#endif
		__cvmx_bootmem_phy_free(named_block_ptr->base_addr,
					named_block_ptr->size,
					CVMX_BOOTMEM_FLAG_NO_LOCKING);
		named_block_ptr->size = 0;
		/* Set size to zero to indicate block not used. */
	}

	cvmx_bootmem_unlock();
	return named_block_ptr != NULL;	/* 0 on failure, 1 on success */
}
int cvmx_bootmem_phy_named_block_free(char *name, uint32_t flags)
{
    struct cvmx_bootmem_named_block_desc *named_block_ptr;

    if (cvmx_bootmem_desc->major_version != 3) {
        cvmx_dprintf("ERROR: Incompatible bootmem descriptor version: "
                     "%d.%d at addr: %p\n",
                     (int)cvmx_bootmem_desc->major_version,
                     (int)cvmx_bootmem_desc->minor_version,
                     cvmx_bootmem_desc);
        return 0;
    }
#ifdef DEBUG
    cvmx_dprintf("cvmx_bootmem_phy_named_block_free: %s\n", name);
#endif

    cvmx_bootmem_lock();

    named_block_ptr =
        cvmx_bootmem_phy_named_block_find(name,
                                          CVMX_BOOTMEM_FLAG_NO_LOCKING);
    if (named_block_ptr) {
#ifdef DEBUG
        cvmx_dprintf("cvmx_bootmem_phy_named_block_free: "
                     "%s, base: 0x%llx, size: 0x%llx\n",
                     name,
                     (unsigned long long)named_block_ptr->base_addr,
                     (unsigned long long)named_block_ptr->size);
#endif
        __cvmx_bootmem_phy_free(named_block_ptr->base_addr,
                                named_block_ptr->size,
                                CVMX_BOOTMEM_FLAG_NO_LOCKING);
        named_block_ptr->size = 0;

    }

    cvmx_bootmem_unlock();
    return named_block_ptr != NULL;
}
Esempio n. 3
0
int  hfa_bootmem_free (void *ptr, uint64_t size)
{	
	uint64_t address;
	address = cvmx_ptr_to_phys (ptr);
	return __cvmx_bootmem_phy_free (address, size, 0);
}