//#define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC0 (6144 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC0 (24576 * SZ_1K) //#define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC1 (9900 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC1 (24576 * SZ_1K) //#define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC2 (6144 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC2 (24576 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_MFC0 (36864 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_MFC1 (36864 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMD (S5PV210_LCD_WIDTH * \ S5PV210_LCD_HEIGHT * 4 * \ CONFIG_FB_S3C_NR_BUFFERS) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG (40960 * SZ_1K)/* 1920 * 1080 * 4 (RGBA) * - framesize == 1080p : 1920 * 1080 * 2(16bpp) * 2(double buffer) = 8MB * - framesize < 1080p : 1080 * 720 * 4(32bpp) * 2(double buffer) = under 8MB **/ #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_G2D (8192 * SZ_1K) #define S5PV210_VIDEO_SAMSUNG_MEMSIZE_TEXSTREAM (3000 * SZ_1K) //#define S5PV210_ANDROID_PMEM_MEMSIZE_PMEM_GPU1 (3300 * SZ_1K) #define S5PV210_ANDROID_PMEM_MEMSIZE_PMEM_GPU1 (4096 * SZ_1K)static struct s5p_media_device smdkc110_media_devs[] = { [0] = { .id = S5P_MDEV_MFC, .name = "mfc", .bank = 0, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_MFC0, .paddr = 0, }, [1] = { .id = S5P_MDEV_MFC, .name = "mfc", .bank = 1, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_MFC1, .paddr = 0, }, [2] = { .id = S5P_MDEV_FIMC0, .name = "fimc0", .bank = 1, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC0, .paddr = 0, }, [3] = { .id = S5P_MDEV_FIMC1, .name = "fimc1", .bank = 1, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC1, .paddr = 0, }, [4] = { .id = S5P_MDEV_FIMC2, .name = "fimc2", .bank = 1, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMC2, .paddr = 0, }, [5] = { .id = S5P_MDEV_JPEG, .name = "jpeg", .bank = 0, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_JPEG, .paddr = 0, }, [6] = { .id = S5P_MDEV_FIMD, .name = "fimd", .bank = 1, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_FIMD, .paddr = 0, }, [7] = { .id = S5P_MDEV_TEXSTREAM, .name = "texstream", .bank = 1, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_TEXSTREAM, .paddr = 0, }, [8] = { .id = S5P_MDEV_PMEM_GPU1, .name = "pmem_gpu1", .bank = 0, /* OneDRAM */ .memsize = S5PV210_ANDROID_PMEM_MEMSIZE_PMEM_GPU1, .paddr = 0, }, [9] = { .id = S5P_MDEV_G2D, .name = "g2d", .bank = 0, .memsize = S5PV210_VIDEO_SAMSUNG_MEMSIZE_G2D, .paddr = 0, }, };arch/arm/plat-s5p/bootmem.c:void s5p_reserve_bootmem(struct s5p_media_device *mdevs, int nr_mdevs)void s5p_reserve_bootmem(struct s5p_media_device *mdevs, int nr_mdevs) { struct s5p_media_device *mdev; void *virt_mem; int i; media_devs = mdevs; nr_media_devs = nr_mdevs; for (i = 0; i < nr_media_devs; i++) { mdev = &media_devs[i]; if (mdev->memsize <= 0) continue; if (mdev->paddr) virt_mem = __alloc_bootmem(mdev->memsize, PAGE_SIZE, mdev->paddr); else virt_mem = __alloc_bootmem(mdev->memsize, PAGE_SIZE, meminfo.bank[mdev->bank].start); if (virt_mem != NULL) { mdev->paddr = virt_to_phys(virt_mem); } else { mdev->paddr = (dma_addr_t)NULL; printk(KERN_INFO "s5p: Failed to reserve system memory\n"); } }在mach-smdkc110.c 里面初始化的时候,就预留DMA,这样其他的程序就不能用这部分内存了。
这个和wince不同,wince,一般用config.bib 来划分DMA,属于静态分配,linux和android 下类似动态分配的方法了,不过还是一直没有释放这部分DMA,也属于静态分配的类型。
继续往下看。