Changeset 40589


Ignore:
Timestamp:
07/03/17 19:03:33 (6 years ago)
Author:
gost
Message:

[titan] new fb test

File:
1 edited

Legend:

Unmodified
Added
Removed
  • titan/titan/fb.h

    r40580 r40589  
    11#ifndef FB_H
    22#define FB_H
     3
     4+#ifdef CONFIG_ION
     5+       int m_accel_fd;
     6+#endif
    37
    48struct fb* getfb(char *name)
     
    206210        if (fd < 0)
    207211        {
    208                         perror(fbdev);
     212                        err(fbdev);
    209213                        goto nolfb;
    210214                }
     
    244248        unsigned long data_phys = 0;
    245249#ifdef MIPSEL
     250#ifdef CONFIG_ION
     251        /* allocate accel memory here... its independent from the framebuffer */
     252        ion = open("/dev/ion", O_RDWR | O_CLOEXEC);
     253        if (ion >= 0)
     254        {
     255                struct ion_allocation_data alloc_data;
     256                struct ion_fd_data share_data;
     257                struct ion_handle_data free_data;
     258                struct ion_phys_data phys_data;
     259                int ret;
     260                unsigned char *lfb;
     261
     262                debug(444,"Using ION allocator");
     263
     264                memset(&alloc_data, 0, sizeof(alloc_data));
     265                alloc_data.len = ACCEL_MEM_SIZE;
     266                alloc_data.align = 4096; // 4k aligned
     267                alloc_data.heap_id_mask = ION_HEAP_ID_MASK;
     268                ret = ioctl(ion, ION_IOC_ALLOC, &alloc_data);
     269                if (ret < 0)
     270                {
     271                        err("ION_IOC_ALLOC failed");
     272                        err("failed to allocate accel memory!!!");
     273                        return;
     274                }
     275
     276                memset(&phys_data, 0, sizeof(phys_data));
     277                phys_data.handle = alloc_data.handle;
     278                ret = ioctl(ion, ION_IOC_PHYS, &phys_data);
     279                if (ret < 0)
     280                {
     281                        err("ION_IOC_PHYS failed");
     282                        goto err_ioc_free;
     283                }
     284
     285                memset(&share_data, 0, sizeof(share_data));
     286                share_data.handle = alloc_data.handle;
     287                ret = ioctl(ion, ION_IOC_SHARE, &share_data);
     288                if (ret < 0)
     289                {
     290                        err("ION_IOC_SHARE failed");
     291                        goto err_ioc_free;
     292                }
     293
     294                memset(&free_data, 0, sizeof(free_data));
     295                free_data.handle = alloc_data.handle;
     296                if (ioctl(ion, ION_IOC_FREE, &free_data) < 0)
     297                        err("ION_IOC_FREE failed");
     298
     299                m_accel_fd = share_data.fd;
     300                lfb=(unsigned char*)mmap(0, ACCEL_MEM_SIZE, PROT_WRITE|PROT_READ, MAP_SHARED, share_data.fd, 0);
     301
     302                if (lfb)
     303                {
     304                        debug(444,"%dkB available for acceleration surfaces (via ION).", ACCEL_MEM_SIZE);
     305                        //gAccel::getInstance()->setAccelMemorySpace(lfb, phys_data.addr, ACCEL_MEM_SIZE);
     306                        node = addfb(FB, devnr, var_screeninfo.xres, var_screeninfo.yres, var_screeninfo.bits_per_pixel / 8, share_data.fd, lfb, ACCEL_MEM_SIZE, phys_data.addr);       
     307                }
     308                else
     309                {
     310                        close(m_accel_fd);
     311                        eDebug("mmap lfb failed");
     312err_ioc_free:
     313                        err("failed to allocate accel memory via ION!!!");
     314                        m_accel_fd = -1;
     315                        memset(&free_data, 0, sizeof(free_data));
     316                        free_data.handle = alloc_data.handle;
     317                        if (ioctl(ion, ION_IOC_FREE, &free_data) < 0)
     318                                err("ION_IOC_FREE");
     319                }
     320                close(ion);
     321        }
     322        else
     323        {
     324                err("failed to open ION device node! no allocate accel memory available !!");
     325                m_accel_fd = -1;
     326        }
     327        if (!lfb)
     328        {
     329                err("mmap");
     330                goto nolfb;
     331        }
     332#else
    246333        lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0);
    247334        if (!lfb)
    248335        {
    249                 perror("mmap");
     336                err("mmap");
    250337                goto nolfb;
    251338        }
     
    258345        }
    259346        data_phys = fix_screeninfo.smem_start;
    260 #endif
    261 
    262 
     347#endif 
     348#ifndef CONFIG_ION
    263349        if(devnr == 0)
    264350                node = addfb(FB, devnr, var_screeninfo.xres, var_screeninfo.yres, var_screeninfo.bits_per_pixel / 8, fd, mmapfb, fix_screeninfo.smem_len, data_phys);
    265351        if(devnr == 1)
    266352                node = addfb(FB1, devnr, var_screeninfo.xres, var_screeninfo.yres, var_screeninfo.bits_per_pixel / 8, fd, mmapfb, fix_screeninfo.smem_len, data_phys);
    267                        
     353#endif
     354#endif         
    268355
    269356#else
Note: See TracChangeset for help on using the changeset viewer.