Changeset 40589
- Timestamp:
- 07/03/17 19:03:33 (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
titan/titan/fb.h
r40580 r40589 1 1 #ifndef FB_H 2 2 #define FB_H 3 4 +#ifdef CONFIG_ION 5 + int m_accel_fd; 6 +#endif 3 7 4 8 struct fb* getfb(char *name) … … 206 210 if (fd < 0) 207 211 { 208 perror(fbdev);212 err(fbdev); 209 213 goto nolfb; 210 214 } … … 244 248 unsigned long data_phys = 0; 245 249 #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"); 312 err_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 246 333 lfb = (unsigned char*)mmap(0, fix_screeninfo.smem_len, PROT_WRITE|PROT_READ, MAP_SHARED, fd, 0); 247 334 if (!lfb) 248 335 { 249 perror("mmap");336 err("mmap"); 250 337 goto nolfb; 251 338 } … … 258 345 } 259 346 data_phys = fix_screeninfo.smem_start; 260 #endif 261 262 347 #endif 348 #ifndef CONFIG_ION 263 349 if(devnr == 0) 264 350 node = addfb(FB, devnr, var_screeninfo.xres, var_screeninfo.yres, var_screeninfo.bits_per_pixel / 8, fd, mmapfb, fix_screeninfo.smem_len, data_phys); 265 351 if(devnr == 1) 266 352 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 268 355 269 356 #else
Note: See TracChangeset
for help on using the changeset viewer.