blob: 0d263ee5de5280ebcfc133c220dcd5b326ceaf37 [file] [log] [blame]
/*
* Copyright 2017 The Chromium OS Authors. All rights reserved.
* Use of this source code is governed by a BSD-style license that can be
* found in the LICENSE file.
*/
#include "common/camera_buffer_manager_internal.h"
#include <xf86drm.h>
#include "cros-camera/common.h"
namespace {
const int32_t kDrmNumNodes = 64;
const int32_t kMinNodeNumber = 128;
} // namespace
namespace cros {
namespace internal {
struct gbm_device* CreateGbmDevice() {
int fd;
int32_t min_node = kMinNodeNumber;
int32_t max_node = kMinNodeNumber + kDrmNumNodes;
struct gbm_device* gbm = nullptr;
for (int i = min_node; i < max_node; i++) {
fd = drmOpenRender(i);
if (fd < 0) {
continue;
}
drmVersionPtr version = drmGetVersion(fd);
if (!strcmp("vgem", version->name)) {
drmFreeVersion(version);
close(fd);
continue;
}
gbm = gbm_create_device(fd);
if (!gbm) {
drmFreeVersion(version);
close(fd);
continue;
}
VLOGF(1) << "Opened gbm device on render node " << version->name;
drmFreeVersion(version);
return gbm;
}
return nullptr;
}
} // namespace internal
} // namespace cros