Add framebuffer devices to /dev and mmap() for them
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -7,4 +7,5 @@
|
||||
struct ioc_vmode {
|
||||
uint32_t width;
|
||||
uint32_t height;
|
||||
size_t pitch, bpp;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user