Applied, thanks! Damien Zammit, le dim. 27 oct. 2024 09:28:41 +0000, a ecrit: > --- > i386/Makefrag.am | 2 ++ > i386/i386at/conf.c | 8 +++++++ > i386/i386at/mbinfo.c | 49 +++++++++++++++++++++++++++++++++++++++++ > i386/i386at/mbinfo.h | 33 +++++++++++++++++++++++++++ > i386/i386at/model_dep.c | 3 +++ > 5 files changed, 95 insertions(+) > create mode 100644 i386/i386at/mbinfo.c > create mode 100644 i386/i386at/mbinfo.h > > diff --git a/i386/Makefrag.am b/i386/Makefrag.am > index 7a339417..906ccc2d 100644 > --- a/i386/Makefrag.am > +++ b/i386/Makefrag.am > @@ -69,6 +69,8 @@ libkernel_a_SOURCES += \ > i386/i386at/kd_mouse.h \ > i386/i386at/kdasm.S \ > i386/i386at/kdsoft.h \ > + i386/i386at/mbinfo.c \ > + i386/i386at/mbinfo.h \ > i386/i386at/mem.c \ > i386/i386at/mem.h \ > i386/i386at/rtc.c \ > diff --git a/i386/i386at/conf.c b/i386/i386at/conf.c > index ecbf1e45..ba056ea1 100644 > --- a/i386/i386at/conf.c > +++ b/i386/i386at/conf.c > @@ -71,6 +71,9 @@ > #include <device/intr.h> > #define irqname "irq" > > +#include <i386at/mbinfo.h> > +#define mbinfoname "mbinfo" > + > /* > * List of devices - console must be at slot 0 > */ > @@ -157,6 +160,11 @@ struct dev_ops dev_name_list[] = > nodev_async_in, nulldev_reset, nulldev_portdeath,0, > nodev_info }, > > + { mbinfoname, nulldev_open, nulldev_close, mbinforead, > + nulldev_write,nulldev_getstat,nulldev_setstat,nomap, > + nodev_async_in, nulldev_reset, nulldev_portdeath,0, > + nodev_info }, > + > }; > int dev_name_count = sizeof(dev_name_list)/sizeof(dev_name_list[0]); > > diff --git a/i386/i386at/mbinfo.c b/i386/i386at/mbinfo.c > new file mode 100644 > index 00000000..54486acb > --- /dev/null > +++ b/i386/i386at/mbinfo.c > @@ -0,0 +1,49 @@ > +/* > + * Copyright (c) 2024 Free Software Foundation, Inc. > + * > + * This program is free software: you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation, either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#include <string.h> > +#include <i386at/mbinfo.h> > +#include <mach/vm_param.h> > +#include <vm/pmap.h> > +#include <device/ds_routines.h> > + > +struct multiboot_raw_info mb_info; > + > +void > +mbinfo_register_boot_data(const struct multiboot_raw_info *mbi) > +{ > + mb_info = *mbi; > +} > + > +io_return_t > +mbinforead(dev_t dev, io_req_t ior) > +{ > + int err; > + > + /* Check if IO_COUNT is valid */ > + if (ior->io_count > sizeof(struct multiboot_raw_info)) > + return D_INVALID_SIZE; > + > + err = device_read_alloc(ior, (vm_size_t)ior->io_count); > + if (err != KERN_SUCCESS) > + return (err); > + > + memcpy ((uint8_t *)ior->io_data, (uint8_t *)&mb_info, ior->io_count); > + > + ior->io_residual = 0; > + return (D_SUCCESS); > +} > diff --git a/i386/i386at/mbinfo.h b/i386/i386at/mbinfo.h > new file mode 100644 > index 00000000..120996f2 > --- /dev/null > +++ b/i386/i386at/mbinfo.h > @@ -0,0 +1,33 @@ > +/* > + * Copyright (c) 2024 Free Software Foundation, Inc. > + * > + * This program is free software: you can redistribute it and/or modify > + * it under the terms of the GNU General Public License as published by > + * the Free Software Foundation, either version 2 of the License, or > + * (at your option) any later version. > + * > + * This program is distributed in the hope that it will be useful, > + * but WITHOUT ANY WARRANTY; without even the implied warranty of > + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > + * GNU General Public License for more details. > + * > + * You should have received a copy of the GNU General Public License > + * along with this program. If not, see <http://www.gnu.org/licenses/>. > + */ > + > +#ifndef _I386AT_MBINFO_H_ > +#define _I386AT_MBINFO_H_ 1 > + > +#include <sys/types.h> > + > +#include <vm/vm_types.h> > +#include <mach/vm_prot.h> > +#include <device/device_types.h> > +#include <device/io_req.h> > +#include <mach/machine/multiboot.h> > + > +void mbinfo_register_boot_data(const struct multiboot_raw_info *mbi); > + > +io_return_t mbinforead(dev_t dev, io_req_t ior); > + > +#endif /* !_I386AT_MBINFO_H_ */ > diff --git a/i386/i386at/model_dep.c b/i386/i386at/model_dep.c > index a3e9b630..01489353 100644 > --- a/i386/i386at/model_dep.c > +++ b/i386/i386at/model_dep.c > @@ -75,6 +75,7 @@ > #include <i386at/int_init.h> > #include <i386at/kd.h> > #include <i386at/rtc.h> > +#include <i386at/mbinfo.h> > #include <i386at/model_dep.h> > #include <machine/irq.h> > > @@ -354,6 +355,8 @@ register_boot_data(const struct multiboot_raw_info *mbi) > biosmem_register_boot_data(shdr->addr, > shdr->addr + shdr->size, FALSE); > } > } > + > + mbinfo_register_boot_data(mbi); > } > > #endif /* MACH_HYP */ > -- > 2.45.2 > > >
-- Samuel N: beep beep Miam miam? y: ++ a: kill -MIAM -1 -+- #runtime < /dev/miam -+-