Add framebuffer devices to /dev and mmap() for them

This commit is contained in:
Mark
2020-08-05 01:54:13 +03:00
parent 25f0a0987f
commit 415fd613a2
7 changed files with 151 additions and 45 deletions
+3 -2
View File
@@ -18,7 +18,8 @@ struct blkdev {
ssize_t (*read) (struct blkdev *blk, void *buf, size_t off, size_t count);
ssize_t (*write) (struct blkdev *blk, const void *buf, size_t off, size_t count);
int (*ioctl) (struct blkdev *blk, unsigned long req, void *ptr);
void *(*mmap) (struct blkdev *blk, struct ofile *fd, void *hint, size_t length, int flags);
int (*mmap)(struct blkdev *blk, uintptr_t base, size_t page_count, int prot, int flags);
void (*destroy) (struct blkdev *blk);
};
@@ -29,7 +30,7 @@ void blk_sync(struct blkdev *blk);
int blk_page_sync(struct blkdev *blk, uintptr_t address, uintptr_t page);
void blk_sync_all(void);
void *blk_mmap(struct blkdev *blk, struct ofile *fd, void *hint, size_t length, int flags);
int blk_mmap(struct blkdev *blk, uintptr_t base, size_t page_count, int prot, int flags);
ssize_t blk_read(struct blkdev *blk, void *buf, size_t off, size_t count);
ssize_t blk_write(struct blkdev *blk, const void *buf, size_t off, size_t count);
int blk_ioctl(struct blkdev *blk, unsigned long req, void *ptr);
+6
View File
@@ -1,4 +1,5 @@
#pragma once
#include "sys/block/blk.h"
#include "sys/types.h"
#include "sys/list.h"
@@ -6,6 +7,7 @@
#define DISP_GRAPHIC (1 << 0)
// Has a linear framebuffer
#define DISP_LFB (1 << 1)
#define DISP_LOCK (1 << 2)
struct display {
// Text modes: set character at y, x
@@ -24,6 +26,9 @@ struct display {
// Private data
void *data;
// If DISP_LFB
struct blkdev blk;
struct list_head list;
};
@@ -31,6 +36,7 @@ extern int g_display_blink_state;
void display_add(struct display *d);
struct display *display_create(void);
void display_postinit(void);
void display_setc(struct display *disp, uint16_t y, uint16_t x, uint16_t ch);
+1
View File
@@ -7,4 +7,5 @@
struct ioc_vmode {
uint32_t width;
uint32_t height;
size_t pitch, bpp;
};