Beispiel #1
0
int agp_generic_create_gatt_table()
{
    count_t pages;

    pages = bridge->current_size->pages_count;

    if( bridge->gatt_dma = AllocPages(pages))
    {
        if(bridge->gatt_table =
           (u32_t*)MapIoMem((void*)bridge->gatt_dma,
                            pages<<12, PG_SW+PG_NOCACHE))
        {
            dbgprintf("gatt map %x at %x %d pages\n",bridge->gatt_dma ,
                       bridge->gatt_table, pages);

	/* AK: bogus, should encode addresses > 4GB */

            u32_t volatile *table = bridge->gatt_table;

            count_t count = bridge->current_size->num_entries;

            while(count--) {            /* FIXME memset */
                addr_t tmp;

                *table = 0;
                table++;
            }
            return 1;
        };
    };
    dbgprintf("unable to get memory for "
              "graphics translation table.\n");
	return 0;
}
void*
pci_alloc_consistent( void* pci_dev, size_t size, dma_addr_t* dma_handle )
{
  void* res;

//  res = pci_alloc_dmamem( pci_dev, size );
  res = (void*) AllocPages( size, MEMF_PUBLIC );
  *dma_handle = (dma_addr_t) pci_virt_to_bus( pci_dev, res );
  return res;
}
void*
pci_alloc_consistent( void* pci_dev, size_t size, dma_addr_t* dma_handle )
{
  void* res;

//  res = pci_alloc_dmamem( pci_dev, size );
  res = (void*) AllocPages( size, MEMF_PUBLIC | MEMF_CLEAR );

  *dma_handle = (dma_addr_t) ahi_pci_logic_to_physic_addr( res, pci_dev );
  
  return res;
}
static struct sg_table *
i915_pages_create_for_fb(struct drm_device *dev,
                 u32 offset, u32 size)
{
    struct drm_i915_private *dev_priv = dev->dev_private;
    struct sg_table *st;
    struct scatterlist *sg;
    addr_t fb_pages;

    DRM_DEBUG_DRIVER("offset=0x%x, size=%d\n", offset, size);
//    BUG_ON(offset > dev_priv->gtt.stolen_size - size);

    /* We hide that we have no struct page backing our stolen object
     * by wrapping the contiguous physical allocation with a fake
     * dma mapping in a single scatterlist.
     */

    st = kmalloc(sizeof(*st), GFP_KERNEL);
    if (st == NULL)
        return NULL;

    if (sg_alloc_table(st, 1, GFP_KERNEL)) {
        kfree(st);
        return NULL;
    }

    fb_pages = AllocPages(size/PAGE_SIZE);
    if(fb_pages == 0)
    {
        kfree(st);
        return NULL;
    };

    sg = st->sgl;
    sg->offset = offset;
    sg->length = size;

    sg_dma_address(sg) = (dma_addr_t)fb_pages;
    sg_dma_len(sg) = size;

    return st;
}
unsigned long
__get_free_page( unsigned int gfp_mask )
{
  return (unsigned long) AllocPages( PAGE_SIZE, MEMF_PUBLIC );
}