mirror of
https://github.com/RGBCube/serenity
synced 2025-07-25 20:27:45 +00:00
Kernel: Support userspace TTY graphics modesetting
This is a copy of linux's KDSETMODE/KDGETMODE console ioctl(2) interface.
This commit is contained in:
parent
bc4a0baa8f
commit
4b0be17c71
4 changed files with 28 additions and 2 deletions
|
@ -562,6 +562,19 @@ ErrorOr<void> TTY::ioctl(OpenFileDescription&, unsigned request, Userspace<void*
|
|||
case TIOCNOTTY:
|
||||
current_process.set_tty(nullptr);
|
||||
return {};
|
||||
case KDSETMODE: {
|
||||
auto mode = static_cast<unsigned int>(arg.ptr());
|
||||
if (mode != KD_TEXT && mode != KD_GRAPHICS)
|
||||
return EINVAL;
|
||||
|
||||
set_graphical(mode == KD_GRAPHICS);
|
||||
return {};
|
||||
}
|
||||
case KDGETMODE: {
|
||||
auto mode_ptr = static_ptr_cast<int*>(arg);
|
||||
int mode = (is_graphical()) ? KD_GRAPHICS : KD_TEXT;
|
||||
return copy_to_user(mode_ptr, &mode);
|
||||
}
|
||||
}
|
||||
return EINVAL;
|
||||
}
|
||||
|
|
|
@ -48,6 +48,9 @@ public:
|
|||
|
||||
virtual ErrorOr<NonnullOwnPtr<KString>> pseudo_name() const = 0;
|
||||
|
||||
virtual bool is_graphical() const { return false; }
|
||||
virtual void set_graphical(bool) { }
|
||||
|
||||
protected:
|
||||
virtual ErrorOr<size_t> on_tty_write(UserOrKernelBuffer const&, size_t) = 0;
|
||||
void set_size(unsigned short columns, unsigned short rows);
|
||||
|
|
|
@ -78,8 +78,9 @@ public:
|
|||
|
||||
void refresh_after_resolution_change();
|
||||
|
||||
bool is_graphical() { return m_graphical; }
|
||||
void set_graphical(bool graphical);
|
||||
// ^TTY
|
||||
virtual bool is_graphical() const override { return m_graphical; }
|
||||
virtual void set_graphical(bool graphical) override;
|
||||
|
||||
void emit_char(char);
|
||||
|
||||
|
|
|
@ -74,6 +74,11 @@ struct FBFlushRects {
|
|||
struct FBRect const* rects;
|
||||
};
|
||||
|
||||
enum ConsoleModes {
|
||||
KD_TEXT = 0x00,
|
||||
KD_GRAPHICS = 0x01,
|
||||
};
|
||||
|
||||
__END_DECLS
|
||||
|
||||
enum IOCtlNumber {
|
||||
|
@ -132,6 +137,8 @@ enum IOCtlNumber {
|
|||
VIRGL_IOCTL_CREATE_RESOURCE,
|
||||
VIRGL_IOCTL_SUBMIT_CMD,
|
||||
VIRGL_IOCTL_TRANSFER_DATA,
|
||||
KDSETMODE,
|
||||
KDGETMODE,
|
||||
};
|
||||
|
||||
#define TIOCGPGRP TIOCGPGRP
|
||||
|
@ -184,3 +191,5 @@ enum IOCtlNumber {
|
|||
#define VIRGL_IOCTL_CREATE_RESOURCE VIRGL_IOCTL_CREATE_RESOURCE
|
||||
#define VIRGL_IOCTL_SUBMIT_CMD VIRGL_IOCTL_SUBMIT_CMD
|
||||
#define VIRGL_IOCTL_TRANSFER_DATA VIRGL_IOCTL_TRANSFER_DATA
|
||||
#define KDSETMODE KDSETMODE
|
||||
#define KDGETMODE KDGETMODE
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue