Files
mkrtos-real/mkrtos_knl/knl/log.c

75 lines
1.7 KiB
C
Raw Normal View History

2023-08-20 20:52:23 +08:00
/*
* @Author: zhangzheng 1358745329@qq.com
* @Date: 2023-08-14 09:47:54
* @LastEditors: zhangzheng 1358745329@qq.com
* @LastEditTime: 2023-08-14 13:10:35
* @FilePath: /mkrtos-real/mkrtos_knl/knl/log.c
* @Description: 使
*/
#include "log.h"
#include "factory.h"
#include "kobject.h"
#include "globals.h"
2023-08-22 00:26:34 +08:00
#include "init.h"
2023-08-20 20:52:23 +08:00
#include "printk.h"
2023-09-03 15:55:06 +08:00
#include "types.h"
#include "util.h"
2023-08-20 20:52:23 +08:00
static log_t log;
enum log_op
{
WRITE_DATA,
READ_DATA,
SET_FLAGS
};
2023-09-03 15:55:06 +08:00
static void log_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f);
2023-08-20 20:52:23 +08:00
2023-08-22 00:26:34 +08:00
static void log_reg(void)
2023-08-20 20:52:23 +08:00
{
kobject_init(&log.kobj);
log.kobj.invoke_func = log_syscall;
global_reg_kobj(&log.kobj, LOG_PROT);
}
2023-08-22 00:26:34 +08:00
INIT_KOBJ(log_reg);
2023-08-20 20:52:23 +08:00
static msg_tag_t log_write_data(log_t *log, const char *data, int len)
{
for (int i = 0; i < len; i++)
{
putc(data[i]);
}
return msg_tag_init(0);
}
2023-09-03 15:55:06 +08:00
static void
log_syscall(kobject_t *kobj, syscall_prot_t sys_p, msg_tag_t in_tag, entry_frame_t *f)
2023-08-20 20:52:23 +08:00
{
2023-09-03 15:55:06 +08:00
msg_tag_t tag = msg_tag_init3(0, 0, -EINVAL);
if (sys_p.prot != LOG_PROT)
2023-08-20 20:52:23 +08:00
{
2023-09-03 15:55:06 +08:00
f->r[0] = msg_tag_init3(0, 0, -EPROTO).raw;
return;
2023-08-20 20:52:23 +08:00
}
2023-09-03 15:55:06 +08:00
switch (sys_p.op)
2023-08-20 20:52:23 +08:00
{
case WRITE_DATA:
2023-09-03 15:55:06 +08:00
tag = log_write_data(
(log_t *)kobj, (const char *)(&f->r[1]),
MIN(ipc_type_create(in_tag.type2).msg_buf_len, WORD_BYTES * 5));
2023-08-20 20:52:23 +08:00
break;
case READ_DATA:
printk("don't support read data.\n");
break;
case SET_FLAGS:
printk("don't support set flags.\n");
break;
default:
tag = msg_tag_init3(0, 0, -ENOSYS);
break;
}
2023-09-03 15:55:06 +08:00
f->r[0] = tag.raw;
return;
2023-08-22 00:26:34 +08:00
}
void log_dump(void)
{
2023-08-20 20:52:23 +08:00
}