Import a framework to program PICs

This commit is contained in:
Pierre Pronchery 2018-07-15 01:21:54 +02:00
parent 3f044e4d09
commit 5f4514de4f
3 changed files with 95 additions and 0 deletions

52
src/drivers/pic.c Normal file
View File

@ -0,0 +1,52 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include "pic.h"
/* private */
/* variables */
static ukPIC * _pic = NULL;
/* functions */
/* pic_init */
ukPIC * pic_init(ukBus * bus, char const * name)
{
const ukPIC * drivers[] = {
};
size_t i;
ukPIC * pic = NULL;
for(i = 0; i < sizeof(drivers) / sizeof(*drivers); i++)
if(strncmp(drivers[i]->name, name,
strlen(drivers[i]->name)) == 0
&& drivers[i]->init != NULL)
{
fprintf(stderr, "%s PIC%s%s\n", name, (bus != NULL)
? " at " : "",
(bus != NULL) ? bus->name : "");
pic = drivers[i]->init(bus);
}
if(pic == NULL)
errno = ENODEV;
else if(_pic == NULL)
_pic = pic;
return pic;
}
/* accessors */
/* pic_get_default */
ukPIC * pic_get_default(void)
{
if(_pic == NULL)
errno = ENODEV;
return _pic;
}

38
src/drivers/pic.h Normal file
View File

@ -0,0 +1,38 @@
/* $Id$ */
/* Copyright (c) 2018 Pierre Pronchery <khorben@defora.org> */
/* This file is part of DeforaOS uKernel */
#ifndef UKERNEL_DRIVERS_PIC_H
# define UKERNEL_DRIVERS_PIC_H
# include <stdint.h>
# include "bus.h"
/* public */
/* types */
typedef struct _ukPIC ukPIC;
typedef struct _ukPICData ukPICData;
struct _ukPIC
{
char name[16];
ukPIC * (*init)(ukBus * bus);
void (*destroy)(ukPIC * pic);
ukPICData * data;
};
/* prototypes */
ukPIC * pic_init(ukBus * bus, char const * name);
void pic_destroy(ukPIC * pic);
/* accessors */
ukPIC * pic_get_default(void);
#endif /* !UKERNEL_DRIVERS_PIC_H */

View File

@ -0,0 +1,5 @@
cppflags_force=-nostdinc -isystem ../../../include -I../..
cflags_force=`../../../tools/platform.sh -V UKERNEL_CFLAGS -C "$$ARCH"`
cflags=-W -Wall -g -O2
ldflags_force=`../../../tools/platform.sh -V UKERNEL_LDFLAGS -C "$$ARCH"`
dist=Makefile