drm: move legacy::Error into common module
This commit is contained in:
parent
df27224372
commit
ed257e8991
|
@ -0,0 +1,68 @@
|
||||||
|
//!
|
||||||
|
//! Module for common/shared types of the various [`Device`](::backend::drm::Device)
|
||||||
|
//! and [`Surface`](::backend::drm::Surface) implementations of the `backend::drm` module.
|
||||||
|
//!
|
||||||
|
|
||||||
|
use drm::control::{connector, crtc, Mode, RawResourceHandle};
|
||||||
|
|
||||||
|
use std::path::PathBuf;
|
||||||
|
|
||||||
|
/// Errors thrown by the [`LegacyDrmDevice`](::backend::drm::legacy::LegacyDrmDevice),
|
||||||
|
/// [`AtomicDrmDevice`](::backend::drm::atomic::AtomicDrmDevice)
|
||||||
|
/// and their surfaces: [`LegacyDrmSurface`](::backend::drm::legacy::LegacyDrmSurface)
|
||||||
|
/// and [`AtomicDrmSurface`](::backend::drm::atomic::AtomicDrmSurface).
|
||||||
|
#[derive(thiserror::Error, Debug)]
|
||||||
|
pub enum Error {
|
||||||
|
/// Unable to acquire DRM master
|
||||||
|
#[error("Failed to aquire DRM master")]
|
||||||
|
DrmMasterFailed,
|
||||||
|
/// The `DrmDevice` encountered an access error
|
||||||
|
#[error("DRM access error: {errmsg} on device `{dev:?}`")]
|
||||||
|
Access {
|
||||||
|
/// Error message associated to the access error
|
||||||
|
errmsg: &'static str,
|
||||||
|
/// Device on which the error was generated
|
||||||
|
dev: Option<PathBuf>,
|
||||||
|
/// Underlying device error
|
||||||
|
source: failure::Compat<drm::SystemError>,
|
||||||
|
},
|
||||||
|
/// Unable to determine device id of drm device
|
||||||
|
#[error("Unable to determine device id of drm device")]
|
||||||
|
UnableToGetDeviceId(#[source] nix::Error),
|
||||||
|
/// Device is currently paused
|
||||||
|
#[error("Device is currently paused, operation rejected")]
|
||||||
|
DeviceInactive,
|
||||||
|
/// Mode is not compatible with all given connectors
|
||||||
|
#[error("Mode `{0:?}` is not compatible with all given connectors")]
|
||||||
|
ModeNotSuitable(Mode),
|
||||||
|
/// The given crtc is already in use by another backend
|
||||||
|
#[error("Crtc `{0:?}` is already in use by another backend")]
|
||||||
|
CrtcAlreadyInUse(crtc::Handle),
|
||||||
|
/// No encoder was found for a given connector on the set crtc
|
||||||
|
#[error("No encoder found for the given connector '{connector:?}' on crtc `{crtc:?}`")]
|
||||||
|
NoSuitableEncoder {
|
||||||
|
/// Connector
|
||||||
|
connector: connector::Handle,
|
||||||
|
/// CRTC
|
||||||
|
crtc: crtc::Handle,
|
||||||
|
},
|
||||||
|
/// No matching primary and cursor plane could be found for the given crtc
|
||||||
|
#[error("No matching primary and cursor plane could be found for crtc {crtc:?} on {dev:?}")]
|
||||||
|
NoSuitablePlanes {
|
||||||
|
/// CRTC
|
||||||
|
crtc: crtc::Handle,
|
||||||
|
/// Device on which the error was generated
|
||||||
|
dev: Option<PathBuf>,
|
||||||
|
},
|
||||||
|
/// The DrmDevice is missing a required property
|
||||||
|
#[error("The DrmDevice is missing a required property '{name}' for handle ({handle:?})")]
|
||||||
|
UnknownProperty {
|
||||||
|
/// Property handle
|
||||||
|
handle: RawResourceHandle,
|
||||||
|
/// Property name
|
||||||
|
name: &'static str,
|
||||||
|
},
|
||||||
|
/// Atomic Test failed for new properties
|
||||||
|
#[error("Atomic Test failed for new properties on crtc ({0:?})")]
|
||||||
|
TestFailed(crtc::Handle),
|
||||||
|
}
|
|
@ -5,13 +5,13 @@
|
||||||
//! Usually this implementation will be wrapped into a [`GbmDevice`](::backend::drm::gbm::GbmDevice).
|
//! Usually this implementation will be wrapped into a [`GbmDevice`](::backend::drm::gbm::GbmDevice).
|
||||||
//! Take a look at `anvil`s source code for an example of this.
|
//! Take a look at `anvil`s source code for an example of this.
|
||||||
//!
|
//!
|
||||||
//! For an example how to use this standalone, take a look at the `raw_drm` example.
|
//! For an example how to use this standalone, take a look at the `raw_legacy_drm` example.
|
||||||
//!
|
//!
|
||||||
|
|
||||||
use super::{DevPath, Device, DeviceHandler, RawDevice};
|
use super::{common::Error, DevPath, Device, DeviceHandler, RawDevice};
|
||||||
|
|
||||||
use drm::control::{
|
use drm::control::{
|
||||||
connector, crtc, encoder, framebuffer, plane, Device as ControlDevice, Event, Mode, ResourceHandles,
|
connector, crtc, encoder, framebuffer, plane, Device as ControlDevice, Event, ResourceHandles,
|
||||||
};
|
};
|
||||||
use drm::{Device as BasicDevice, SystemError as DrmError};
|
use drm::{Device as BasicDevice, SystemError as DrmError};
|
||||||
use nix::libc::dev_t;
|
use nix::libc::dev_t;
|
||||||
|
@ -20,7 +20,6 @@ use nix::sys::stat::fstat;
|
||||||
use std::cell::RefCell;
|
use std::cell::RefCell;
|
||||||
use std::collections::{HashMap, HashSet};
|
use std::collections::{HashMap, HashSet};
|
||||||
use std::os::unix::io::{AsRawFd, RawFd};
|
use std::os::unix::io::{AsRawFd, RawFd};
|
||||||
use std::path::PathBuf;
|
|
||||||
use std::rc::{Rc, Weak};
|
use std::rc::{Rc, Weak};
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::{Arc, RwLock};
|
use std::sync::{Arc, RwLock};
|
||||||
|
@ -34,45 +33,6 @@ use self::surface::{LegacyDrmSurfaceInternal, State};
|
||||||
#[cfg(feature = "backend_session")]
|
#[cfg(feature = "backend_session")]
|
||||||
pub mod session;
|
pub mod session;
|
||||||
|
|
||||||
/// Errors thrown by the [`LegacyDrmDevice`](::backend::drm::legacy::LegacyDrmDevice)
|
|
||||||
/// and [`LegacyDrmSurface`](::backend::drm::legacy::LegacyDrmSurface).
|
|
||||||
#[derive(thiserror::Error, Debug)]
|
|
||||||
pub enum Error {
|
|
||||||
/// Unable to acquire DRM master
|
|
||||||
#[error("Failed to aquire DRM master")]
|
|
||||||
DrmMasterFailed,
|
|
||||||
/// The `DrmDevice` encountered an access error
|
|
||||||
#[error("DRM access error: {errmsg} on device `{dev:?}`")]
|
|
||||||
Access {
|
|
||||||
/// Error message associated to the access error
|
|
||||||
errmsg: &'static str,
|
|
||||||
/// Device on which the error was generated
|
|
||||||
dev: Option<PathBuf>,
|
|
||||||
/// Underlying device error
|
|
||||||
source: failure::Compat<drm::SystemError>,
|
|
||||||
},
|
|
||||||
/// Unable to determine device id of drm device
|
|
||||||
#[error("Unable to determine device id of drm device")]
|
|
||||||
UnableToGetDeviceId(#[source] nix::Error),
|
|
||||||
/// Device is currently paused
|
|
||||||
#[error("Device is currently paused, operation rejected")]
|
|
||||||
DeviceInactive,
|
|
||||||
/// Mode is not compatible with all given connectors
|
|
||||||
#[error("Mode `{0:?}` is not compatible with all given connectors")]
|
|
||||||
ModeNotSuitable(Mode),
|
|
||||||
/// The given crtc is already in use by another backend
|
|
||||||
#[error("Crtc `{0:?}` is already in use by another backend")]
|
|
||||||
CrtcAlreadyInUse(crtc::Handle),
|
|
||||||
/// No encoder was found for a given connector on the set crtc
|
|
||||||
#[error("No encoder found for the given connector '{connector:?}' on crtc `{crtc:?}`")]
|
|
||||||
NoSuitableEncoder {
|
|
||||||
/// Connector
|
|
||||||
connector: connector::Handle,
|
|
||||||
/// CRTC
|
|
||||||
crtc: crtc::Handle,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Open raw drm device utilizing legacy mode-setting
|
/// Open raw drm device utilizing legacy mode-setting
|
||||||
pub struct LegacyDrmDevice<A: AsRawFd + 'static> {
|
pub struct LegacyDrmDevice<A: AsRawFd + 'static> {
|
||||||
dev: Rc<Dev<A>>,
|
dev: Rc<Dev<A>>,
|
||||||
|
|
|
@ -10,13 +10,13 @@ use std::os::unix::io::{AsRawFd, RawFd};
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
use std::sync::RwLock;
|
use std::sync::RwLock;
|
||||||
|
|
||||||
use crate::backend::drm::{DevPath, RawSurface, Surface};
|
use crate::backend::drm::{common::Error, DevPath, RawSurface, Surface};
|
||||||
use crate::backend::graphics::CursorBackend;
|
use crate::backend::graphics::CursorBackend;
|
||||||
use crate::backend::graphics::SwapBuffersError;
|
use crate::backend::graphics::SwapBuffersError;
|
||||||
|
|
||||||
use super::{Dev, Error};
|
use super::Dev;
|
||||||
|
|
||||||
use failure::ResultExt;
|
use failure::{Fail, ResultExt};
|
||||||
|
|
||||||
#[derive(Debug, PartialEq, Eq, Clone)]
|
#[derive(Debug, PartialEq, Eq, Clone)]
|
||||||
pub struct State {
|
pub struct State {
|
||||||
|
|
|
@ -53,6 +53,8 @@ use calloop::{LoopHandle, Source};
|
||||||
|
|
||||||
use super::graphics::SwapBuffersError;
|
use super::graphics::SwapBuffersError;
|
||||||
|
|
||||||
|
#[cfg(feature = "backend_drm")]
|
||||||
|
pub mod common;
|
||||||
#[cfg(feature = "backend_drm_egl")]
|
#[cfg(feature = "backend_drm_egl")]
|
||||||
pub mod egl;
|
pub mod egl;
|
||||||
#[cfg(feature = "backend_drm_gbm")]
|
#[cfg(feature = "backend_drm_gbm")]
|
||||||
|
|
Loading…
Reference in New Issue