Implement common command buffer for the shell and os
This commit is contained in:
11
makefile
11
makefile
@@ -57,7 +57,7 @@ test: umka_shell
|
|||||||
|
|
||||||
umka_shell: umka_shell.o umka.o shell.o trace.o trace_lbr.o vdisk.o \
|
umka_shell: umka_shell.o umka.o shell.o trace.o trace_lbr.o vdisk.o \
|
||||||
vdisk/raw.o vdisk/qcow2.o vdisk/miniz/miniz.a vnet.o lodepng.o \
|
vdisk/raw.o vdisk/qcow2.o vdisk/miniz/miniz.a vnet.o lodepng.o \
|
||||||
$(HOST)/pci.o $(HOST)/thread.o io.o $(HOST)/io_async.o util.o \
|
$(HOST)/pci.o $(HOST)/thread.o io.o $(HOST)/io_async.o umkart.o \
|
||||||
optparse32.o bestline32.o
|
optparse32.o bestline32.o
|
||||||
$(CC) $(LDFLAGS_32) $^ -o $@ -T umka.ld
|
$(CC) $(LDFLAGS_32) $^ -o $@ -T umka.ld
|
||||||
|
|
||||||
@@ -68,11 +68,12 @@ umka_fuse: umka_fuse.o umka.o trace.o trace_lbr.o vdisk.o vdisk/raw.o \
|
|||||||
|
|
||||||
umka_os: umka_os.o umka.o shell.o lodepng.o vdisk.o vdisk/raw.o vdisk/qcow2.o \
|
umka_os: umka_os.o umka.o shell.o lodepng.o vdisk.o vdisk/raw.o vdisk/qcow2.o \
|
||||||
vdisk/miniz/miniz.a vnet.o trace.o trace_lbr.o $(HOST)/pci.o \
|
vdisk/miniz/miniz.a vnet.o trace.o trace_lbr.o $(HOST)/pci.o \
|
||||||
$(HOST)/thread.o io.o $(HOST)/io_async.o util.o bestline32.o optparse32.o
|
$(HOST)/thread.o io.o $(HOST)/io_async.o umkart.o bestline32.o \
|
||||||
|
optparse32.o
|
||||||
$(CC) $(LDFLAGS_32) `sdl2-config --libs` $^ -o $@ -T umka.ld
|
$(CC) $(LDFLAGS_32) `sdl2-config --libs` $^ -o $@ -T umka.ld
|
||||||
|
|
||||||
umka_gen_devices_dat: umka_gen_devices_dat.o umka.o $(HOST)/pci.o \
|
umka_gen_devices_dat: umka_gen_devices_dat.o umka.o $(HOST)/pci.o \
|
||||||
$(HOST)/thread.o util.o
|
$(HOST)/thread.o umkart.o
|
||||||
$(CC) $(LDFLAGS_32) $^ -o $@ -T umka.ld
|
$(CC) $(LDFLAGS_32) $^ -o $@ -T umka.ld
|
||||||
|
|
||||||
umka.o umka.fas: umka.asm
|
umka.o umka.fas: umka.asm
|
||||||
@@ -108,7 +109,7 @@ optparse32.o: optparse.c optparse.h
|
|||||||
optparse.o: optparse.c optparse.h
|
optparse.o: optparse.c optparse.h
|
||||||
$(CC) $(CFLAGS) -c $< -o $@
|
$(CC) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
util.o: util.c util.h umka.h
|
umkart.o: umkart.c umkart.h umka.h
|
||||||
$(CC) $(CFLAGS_32) -c $<
|
$(CC) $(CFLAGS_32) -c $<
|
||||||
|
|
||||||
default.skn: $(KOLIBRIOS)/skins/Leency/Shkvorka/default.asm colors.dtp
|
default.skn: $(KOLIBRIOS)/skins/Leency/Shkvorka/default.asm colors.dtp
|
||||||
@@ -168,7 +169,7 @@ umka_shell.o: umka_shell.c umka.h trace.h
|
|||||||
umka_fuse.o: umka_fuse.c umka.h
|
umka_fuse.o: umka_fuse.c umka.h
|
||||||
$(CC) $(CFLAGS_32) `pkg-config fuse3 --cflags` -c $<
|
$(CC) $(CFLAGS_32) `pkg-config fuse3 --cflags` -c $<
|
||||||
|
|
||||||
umka_os.o: umka_os.c umka.h umka_os.h
|
umka_os.o: umka_os.c umka.h
|
||||||
$(CC) $(CFLAGS_32) `sdl2-config --cflags` -c $<
|
$(CC) $(CFLAGS_32) `sdl2-config --cflags` -c $<
|
||||||
|
|
||||||
umka_gen_devices_dat.o: umka_gen_devices_dat.c umka.h
|
umka_gen_devices_dat.o: umka_gen_devices_dat.c umka.h
|
||||||
|
10
shell.h
10
shell.h
@@ -11,6 +11,7 @@
|
|||||||
#define SHELL_H_INCLUDED
|
#define SHELL_H_INCLUDED
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <threads.h>
|
||||||
#include "umka.h"
|
#include "umka.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
|
|
||||||
@@ -40,11 +41,15 @@ struct shell_ctx {
|
|||||||
struct shell_var *var;
|
struct shell_var *var;
|
||||||
FILE *fin;
|
FILE *fin;
|
||||||
FILE *fout;
|
FILE *fout;
|
||||||
|
const int *running;
|
||||||
|
cnd_t cmd_done;
|
||||||
|
mtx_t cmd_mutex;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct shell_ctx *
|
struct shell_ctx *
|
||||||
shell_init(int reproducible, const char *hist_file, struct umka_ctx *umka,
|
shell_init(int reproducible, const char *hist_file, struct umka_ctx *umka,
|
||||||
struct umka_io *io, FILE *fin, FILE *fout);
|
struct umka_io *io, FILE *fin, FILE *fout, const int *running);
|
||||||
|
|
||||||
void
|
void
|
||||||
shell_close(struct shell_ctx *shell);
|
shell_close(struct shell_ctx *shell);
|
||||||
@@ -52,4 +57,7 @@ shell_close(struct shell_ctx *shell);
|
|||||||
void *
|
void *
|
||||||
run_test(struct shell_ctx *ctx);
|
run_test(struct shell_ctx *ctx);
|
||||||
|
|
||||||
|
void
|
||||||
|
umka_run_cmd_sync(struct shell_ctx *ctx);
|
||||||
|
|
||||||
#endif // SHELL_H_INCLUDED
|
#endif // SHELL_H_INCLUDED
|
||||||
|
@@ -1,3 +1,4 @@
|
|||||||
|
; /usr/include/asm/unistd_32.h
|
||||||
SYS_EXIT = 1
|
SYS_EXIT = 1
|
||||||
SYS_READ = 3
|
SYS_READ = 3
|
||||||
SYS_WRITE = 4
|
SYS_WRITE = 4
|
||||||
@@ -5,6 +6,7 @@ SYS_OPEN = 5
|
|||||||
SYS_CLOSE = 6
|
SYS_CLOSE = 6
|
||||||
SYS_PAUSE = 29
|
SYS_PAUSE = 29
|
||||||
SYS_LLSEEK = 140
|
SYS_LLSEEK = 140
|
||||||
|
SYS_FUTEX = 240
|
||||||
|
|
||||||
SEEK_SET = 0
|
SEEK_SET = 0
|
||||||
SEEK_CUR = 1
|
SEEK_CUR = 1
|
||||||
|
51
umka.h
51
umka.h
@@ -588,14 +588,6 @@ STDCALL void
|
|||||||
kos_set_mouse_data(uint32_t btn_state, int32_t xmoving, int32_t ymoving,
|
kos_set_mouse_data(uint32_t btn_state, int32_t xmoving, int32_t ymoving,
|
||||||
int32_t vscroll, int32_t hscroll);
|
int32_t vscroll, int32_t hscroll);
|
||||||
|
|
||||||
static inline void
|
|
||||||
umka_mouse_move(int lbheld, int mbheld, int rbheld, int xabs, int32_t xmoving,
|
|
||||||
int yabs, int32_t ymoving, int32_t hscroll, int32_t vscroll) {
|
|
||||||
uint32_t btn_state = lbheld + (rbheld << 1) + (mbheld << 2) +
|
|
||||||
(yabs << 30) + (xabs << 31);
|
|
||||||
kos_set_mouse_data(btn_state, xmoving, ymoving, vscroll, hscroll);
|
|
||||||
}
|
|
||||||
|
|
||||||
STDCALL net_buff_t *
|
STDCALL net_buff_t *
|
||||||
kos_net_buff_alloc(size_t size);
|
kos_net_buff_alloc(size_t size);
|
||||||
|
|
||||||
@@ -2414,4 +2406,47 @@ umka_set_keyboard_data(uint32_t scancode) {
|
|||||||
: "eax", "edx", "memory", "cc");
|
: "eax", "edx", "memory", "cc");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define CMD_BUF_LEN 0x10
|
||||||
|
|
||||||
|
enum {
|
||||||
|
UMKA_CMD_NONE,
|
||||||
|
UMKA_CMD_SET_MOUSE_DATA,
|
||||||
|
UMKA_CMD_SYS_PROCESS_INFO,
|
||||||
|
UMKA_CMD_SYS_GET_MOUSE_POS_SCREEN,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
UMKA_CMD_STATUS_EMPTY,
|
||||||
|
UMKA_CMD_STATUS_READY,
|
||||||
|
UMKA_CMD_STATUS_DONE,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmd_set_mouse_data {
|
||||||
|
uint32_t btn_state;
|
||||||
|
int32_t xmoving;
|
||||||
|
int32_t ymoving;
|
||||||
|
int32_t vscroll;
|
||||||
|
int32_t hscroll;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmd_sys_process_info {
|
||||||
|
int32_t pid;
|
||||||
|
void *param;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct cmd_ret_sys_get_mouse_pos_screen {
|
||||||
|
struct point16s pos;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct umka_cmd {
|
||||||
|
uint32_t status;
|
||||||
|
uint32_t type;
|
||||||
|
union {
|
||||||
|
struct cmd_set_mouse_data set_mouse_data;
|
||||||
|
} arg;
|
||||||
|
union {
|
||||||
|
struct cmd_ret_sys_get_mouse_pos_screen sys_get_mouse_pos_screen;
|
||||||
|
} ret;
|
||||||
|
};
|
||||||
|
|
||||||
#endif // UMKA_H_INCLUDED
|
#endif // UMKA_H_INCLUDED
|
||||||
|
@@ -24,7 +24,6 @@
|
|||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "vdisk.h"
|
#include "vdisk.h"
|
||||||
#include "umka.h"
|
|
||||||
|
|
||||||
#define DIRENTS_TO_READ 100
|
#define DIRENTS_TO_READ 100
|
||||||
|
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "umka.h"
|
#include "umka.h"
|
||||||
#include "util.h"
|
#include "umkart.h"
|
||||||
#include <pci.h>
|
#include <pci.h>
|
||||||
|
|
||||||
#define UMKA_DEFAULT_DISPLAY_WIDTH 400
|
#define UMKA_DEFAULT_DISPLAY_WIDTH 400
|
||||||
|
56
umka_os.c
56
umka_os.c
@@ -8,13 +8,13 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <arpa/inet.h>
|
#include <arpa/inet.h>
|
||||||
#include <stdlib.h>
|
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#define __USE_GNU
|
#define __USE_GNU
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include <stdatomic.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
@@ -30,8 +30,7 @@
|
|||||||
#include <threads.h>
|
#include <threads.h>
|
||||||
#include <SDL2/SDL.h>
|
#include <SDL2/SDL.h>
|
||||||
#include "umka.h"
|
#include "umka.h"
|
||||||
#include "util.h"
|
#include "umkart.h"
|
||||||
#include "umka_os.h"
|
|
||||||
#include "bestline.h"
|
#include "bestline.h"
|
||||||
#include "optparse.h"
|
#include "optparse.h"
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
@@ -42,8 +41,6 @@
|
|||||||
|
|
||||||
#define THREAD_STACK_SIZE 0x100000
|
#define THREAD_STACK_SIZE 0x100000
|
||||||
|
|
||||||
#define CMD_BUF_LEN 0x10000
|
|
||||||
|
|
||||||
struct umka_os_ctx {
|
struct umka_os_ctx {
|
||||||
struct umka_ctx *umka;
|
struct umka_ctx *umka;
|
||||||
struct umka_io *io;
|
struct umka_io *io;
|
||||||
@@ -53,8 +50,6 @@ struct umka_os_ctx {
|
|||||||
|
|
||||||
struct umka_os_ctx *os;
|
struct umka_os_ctx *os;
|
||||||
|
|
||||||
uint8_t cmd_buf[CMD_BUF_LEN];
|
|
||||||
|
|
||||||
char history_filename[PATH_MAX];
|
char history_filename[PATH_MAX];
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -89,7 +84,7 @@ umka_os_init(FILE *fin, FILE *fout, FILE *fboardlog) {
|
|||||||
ctx->umka = umka_init();
|
ctx->umka = umka_init();
|
||||||
ctx->io = io_init(&ctx->umka->running);
|
ctx->io = io_init(&ctx->umka->running);
|
||||||
ctx->shell = shell_init(SHELL_LOG_NONREPRODUCIBLE, history_filename,
|
ctx->shell = shell_init(SHELL_LOG_NONREPRODUCIBLE, history_filename,
|
||||||
ctx->umka, ctx->io, fin, fout);
|
ctx->umka, ctx->io, fin, fout, &ctx->umka->running);
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -101,15 +96,6 @@ void build_history_filename() {
|
|||||||
sprintf(history_filename, "%s/%s", dir_name, HIST_FILE_BASENAME);
|
sprintf(history_filename, "%s/%s", dir_name, HIST_FILE_BASENAME);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
static void
|
|
||||||
monitor(void) {
|
|
||||||
umka_sti();
|
|
||||||
fprintf(stderr, "Start monitor thread\n");
|
|
||||||
__asm__ __inline__ __volatile__ ("jmp $");
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
void umka_thread_net_drv(void);
|
void umka_thread_net_drv(void);
|
||||||
|
|
||||||
struct itimerval timeout = {.it_value = {.tv_sec = 0, .tv_usec = 10000},
|
struct itimerval timeout = {.it_value = {.tv_sec = 0, .tv_usec = 10000},
|
||||||
@@ -251,16 +237,29 @@ sdlthr(void *arg) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
uint32_t
|
||||||
|
umka_run_cmd_wait_test(/* void *wait_param in ebx */) {
|
||||||
|
appdata_t *app;
|
||||||
|
__asm__ __volatile__ __inline__ ("":"=b"(app)::);
|
||||||
|
struct umka_cmd *cmd = (struct umka_cmd*)app->wait_param;
|
||||||
|
return (uint32_t)(atomic_load_explicit(&cmd->status, memory_order_acquire) == UMKA_CMD_STATUS_READY);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
umka_thread_cmd_runner() {
|
||||||
|
umka_sti();
|
||||||
|
while (1) {
|
||||||
|
kos_wait_events(umka_run_cmd_wait_test, umka_cmd_buf);
|
||||||
|
umka_run_cmd_sync(os->shell);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
umka_monitor(void *arg) {
|
umka_monitor(void *arg) {
|
||||||
(void)arg;
|
(void)arg;
|
||||||
union sigval sval = (union sigval){.sival_int = 14};
|
os->shell->fin = stdin;
|
||||||
|
os->shell->fout = stdout;
|
||||||
pid_t mypid = getpid();
|
run_test(os->shell);
|
||||||
char *line;
|
|
||||||
while((line = bestline(">"))) {
|
|
||||||
sigqueue(mypid, SIGUSR2, sval);
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -445,16 +444,13 @@ main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
kos_attach_int_handler(14, hw_int_mouse, NULL);
|
kos_attach_int_handler(14, hw_int_mouse, NULL);
|
||||||
|
|
||||||
// thread_start(0, monitor, THREAD_STACK_SIZE);
|
|
||||||
thread_start(1, umka_thread_board, THREAD_STACK_SIZE);
|
thread_start(1, umka_thread_board, THREAD_STACK_SIZE);
|
||||||
|
thread_start(1, umka_thread_cmd_runner, THREAD_STACK_SIZE);
|
||||||
kos_thread_t start = (kos_thread_t)(KOS_APP_BASE + app->menuet.start);
|
kos_thread_t start = (kos_thread_t)(KOS_APP_BASE + app->menuet.start);
|
||||||
thread_start(0, start, THREAD_STACK_SIZE);
|
thread_start(0, start, THREAD_STACK_SIZE);
|
||||||
|
|
||||||
dump_procs();
|
dump_procs();
|
||||||
|
|
||||||
fflush(stdin);
|
|
||||||
fflush(stdout);
|
|
||||||
fflush(stderr);
|
|
||||||
thrd_t thrd_monitor;
|
thrd_t thrd_monitor;
|
||||||
thrd_create(&thrd_monitor, umka_monitor, NULL);
|
thrd_create(&thrd_monitor, umka_monitor, NULL);
|
||||||
|
|
||||||
@@ -463,7 +459,7 @@ main(int argc, char *argv[]) {
|
|||||||
|
|
||||||
setitimer(ITIMER_REAL, &timeout, NULL);
|
setitimer(ITIMER_REAL, &timeout, NULL);
|
||||||
|
|
||||||
os->umka->running = 1;
|
atomic_store_explicit(&os->umka->running, 1, memory_order_release);
|
||||||
umka_osloop(); // doesn't return
|
umka_osloop(); // doesn't return
|
||||||
|
|
||||||
if (coverage)
|
if (coverage)
|
||||||
|
51
umka_os.h
51
umka_os.h
@@ -1,51 +0,0 @@
|
|||||||
/*
|
|
||||||
SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
|
|
||||||
UMKa - User-Mode KolibriOS developer tools
|
|
||||||
umka_os - kind of KolibriOS anykernel
|
|
||||||
|
|
||||||
Copyright (C) 2023 Ivan Baravy <dunkaist@gmail.com>
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "umka.h"
|
|
||||||
|
|
||||||
enum {
|
|
||||||
UMKA_CMD_NONE,
|
|
||||||
UMKA_CMD_SET_MOUSE_DATA,
|
|
||||||
UMKA_CMD_SYS_PROCESS_INFO,
|
|
||||||
UMKA_CMD_SYS_GET_MOUSE_POS_SCREEN,
|
|
||||||
};
|
|
||||||
|
|
||||||
enum {
|
|
||||||
UMKA_CMD_STATUS_EMPTY,
|
|
||||||
UMKA_CMD_STATUS_READY,
|
|
||||||
UMKA_CMD_STATUS_DONE,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct cmd_set_mouse_data {
|
|
||||||
uint32_t btn_state;
|
|
||||||
int32_t xmoving;
|
|
||||||
int32_t ymoving;
|
|
||||||
int32_t vscroll;
|
|
||||||
int32_t hscroll;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct cmd_sys_process_info {
|
|
||||||
int32_t pid;
|
|
||||||
void *param;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct cmd_ret_sys_get_mouse_pos_screen {
|
|
||||||
struct point16s pos;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct umka_cmd {
|
|
||||||
uint32_t status;
|
|
||||||
uint32_t type;
|
|
||||||
union {
|
|
||||||
struct cmd_set_mouse_data set_mouse_data;
|
|
||||||
} arg;
|
|
||||||
union {
|
|
||||||
struct cmd_ret_sys_get_mouse_pos_screen sys_get_mouse_pos_screen;
|
|
||||||
} ret;
|
|
||||||
};
|
|
@@ -19,7 +19,6 @@
|
|||||||
#include "optparse.h"
|
#include "optparse.h"
|
||||||
#include "shell.h"
|
#include "shell.h"
|
||||||
#include "io.h"
|
#include "io.h"
|
||||||
#include "umka.h"
|
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
#define HIST_FILE_BASENAME ".umka_shell.history"
|
#define HIST_FILE_BASENAME ".umka_shell.history"
|
||||||
@@ -38,7 +37,7 @@ umka_shell_init(int reproducible, FILE *fin, FILE *fout) {
|
|||||||
ctx->umka = umka_init();
|
ctx->umka = umka_init();
|
||||||
ctx->io = io_init(&ctx->umka->running);
|
ctx->io = io_init(&ctx->umka->running);
|
||||||
ctx->shell = shell_init(reproducible, history_filename, ctx->umka, ctx->io,
|
ctx->shell = shell_init(reproducible, history_filename, ctx->umka, ctx->io,
|
||||||
fin, fout);
|
fin, fout, &ctx->umka->running);
|
||||||
return ctx;
|
return ctx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,8 +6,11 @@
|
|||||||
Copyright (C) 2021, 2023 Ivan Baravy <dunkaist@gmail.com>
|
Copyright (C) 2021, 2023 Ivan Baravy <dunkaist@gmail.com>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdatomic.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <threads.h>
|
||||||
#include "umka.h"
|
#include "umka.h"
|
||||||
|
#include "shell.h"
|
||||||
|
|
||||||
struct devices_dat_entry {
|
struct devices_dat_entry {
|
||||||
uint8_t fun:3;
|
uint8_t fun:3;
|
||||||
@@ -20,7 +23,9 @@ struct devices_dat_entry {
|
|||||||
uint32_t pad2;
|
uint32_t pad2;
|
||||||
};
|
};
|
||||||
|
|
||||||
STDCALL void*
|
struct umka_cmd umka_cmd_buf[CMD_BUF_LEN];
|
||||||
|
|
||||||
|
static STDCALL void*
|
||||||
dump_devices_dat_iter(struct pci_dev *node, void *arg) {
|
dump_devices_dat_iter(struct pci_dev *node, void *arg) {
|
||||||
FILE *f = arg;
|
FILE *f = arg;
|
||||||
if (node->gsi) {
|
if (node->gsi) {
|
||||||
@@ -73,7 +78,7 @@ copy_display_bpp24_to_rgb888(void *to) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
static void
|
||||||
copy_display_bpp32_to_rgb888(void *to) {
|
copy_display_bpp32_to_rgb888(void *to) {
|
||||||
memcpy(to, kos_lfb_base, kos_display.width*kos_display.height*4);
|
memcpy(to, kos_lfb_base, kos_display.width*kos_display.height*4);
|
||||||
}
|
}
|
@@ -9,6 +9,11 @@
|
|||||||
#ifndef UTIL_H_INCLUDED
|
#ifndef UTIL_H_INCLUDED
|
||||||
#define UTIL_H_INCLUDED
|
#define UTIL_H_INCLUDED
|
||||||
|
|
||||||
|
#include "umka.h"
|
||||||
|
#include "shell.h"
|
||||||
|
|
||||||
|
extern struct umka_cmd umka_cmd_buf[CMD_BUF_LEN];
|
||||||
|
|
||||||
void
|
void
|
||||||
dump_devices_dat(const char *filename);
|
dump_devices_dat(const char *filename);
|
||||||
|
|
Reference in New Issue
Block a user