Let bus drivers handle custom commands
This commit is contained in:
parent
67f9ed2698
commit
164fc9c5d5
|
@ -6,6 +6,7 @@
|
|||
#ifndef UKERNEL_DRIVERS_BUS_H
|
||||
# define UKERNEL_DRIVERS_BUS_H
|
||||
|
||||
# include <stdarg.h>
|
||||
# include <stdint.h>
|
||||
|
||||
|
||||
|
@ -30,10 +31,19 @@ struct _ukBus
|
|||
int (*write16)(ukBus * bus, ukBusAddress address, uint16_t value);
|
||||
int (*write32)(ukBus * bus, ukBusAddress address, uint32_t value);
|
||||
|
||||
int (*command)(ukBus * bus, uint32_t command, va_list ap);
|
||||
|
||||
ukBusData * data;
|
||||
};
|
||||
|
||||
|
||||
/* constants */
|
||||
typedef enum _ukBusCommand
|
||||
{
|
||||
BUS_COMMAND_WAIT
|
||||
} ukBusCommand;
|
||||
|
||||
|
||||
/* prototypes */
|
||||
ukBus * bus_init(ukBus * parent, char const * name);
|
||||
|
||||
|
|
|
@ -57,6 +57,7 @@ CMOSBus cmos_bus =
|
|||
_cmos_bus_write8,
|
||||
_cmos_bus_write16,
|
||||
_cmos_bus_write32,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@ static int _ioport_bus_write16(IOPortBus * bus, ukBusAddress address,
|
|||
uint16_t value);
|
||||
static int _ioport_bus_write32(IOPortBus * bus, ukBusAddress address,
|
||||
uint32_t value);
|
||||
static int _ioport_bus_command(IOPortBus * bus, uint32_t command, va_list ap);
|
||||
|
||||
|
||||
/* variables */
|
||||
|
@ -44,6 +45,7 @@ IOPortBus ioport_bus =
|
|||
_ioport_bus_write8,
|
||||
_ioport_bus_write16,
|
||||
_ioport_bus_write32,
|
||||
_ioport_bus_command,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -130,4 +132,18 @@ static int _ioport_bus_write32(IOPortBus * bus, ukBusAddress address,
|
|||
errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
/* ioport_bus_command */
|
||||
static int _ioport_bus_command(IOPortBus * bus, uint32_t command, va_list ap)
|
||||
{
|
||||
switch(command)
|
||||
{
|
||||
case BUS_COMMAND_WAIT:
|
||||
return iowait();
|
||||
default:
|
||||
errno = ENOTSUP;
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -47,6 +47,7 @@ TTYBus tty_bus =
|
|||
_tty_bus_write8,
|
||||
_tty_bus_write16,
|
||||
_tty_bus_write32,
|
||||
NULL,
|
||||
NULL
|
||||
};
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user