接前一篇文章:KWin、libdrm、DRM从上到下全过程 —— drmModeAddFBxxx(7)
上一回讲到了drm_internal_framebuffer_create函数中的framebuffer_check函数中的drm_get_format_info函数,讲解了该函数的第一部分暨前一部分,本文讲解后一部分。为了便于理解以及理清脉络和当前所处位置,再次贴出framebuffer_check函数源码以及drm_get_format_info函数源码。
framebuffer_check函数在drivers/gpu/drm/drm_framebuffer.c中,代码如下:
- static int framebuffer_check(struct drm_device *dev,
- const struct drm_mode_fb_cmd2 *r)
- {
- const struct drm_format_info *info;
- int i;
-
- /* check if the format is supported at all */
- if (!__drm_format_info(r->pixel_format)) {
- drm_dbg_kms(dev, "bad framebuffer format %p4cc\n",
- &r->pixel_format);
- return -EINVAL;
- }
-
- if (r->width == 0) {
- drm_dbg_kms(dev, "bad framebuffer width %u\n", r-&g