introducing libacpi
Change-Id: I0808545fefaefc9a8fc8d1101bd85b676467fea0
This commit is contained in:
parent
e154914956
commit
fee60e45e6
@ -55,6 +55,8 @@
|
|||||||
./service/virtio_blk minix-base
|
./service/virtio_blk minix-base
|
||||||
./service/virtio_net minix-base
|
./service/virtio_net minix-base
|
||||||
./service/vt6105 minix-base
|
./service/vt6105 minix-base
|
||||||
|
./usr/lib/libacpi.a minix-base
|
||||||
|
./usr/lib/libacpi_pic.a minix-base
|
||||||
./usr/lib/libhgfs.a minix-base
|
./usr/lib/libhgfs.a minix-base
|
||||||
./usr/lib/libhgfs_pic.a minix-base
|
./usr/lib/libhgfs_pic.a minix-base
|
||||||
./usr/lib/libm387.a minix-base
|
./usr/lib/libm387.a minix-base
|
||||||
|
@ -1867,6 +1867,7 @@
|
|||||||
./usr/include/zlib.h minix-comp
|
./usr/include/zlib.h minix-comp
|
||||||
./usr/lib minix-comp
|
./usr/lib minix-comp
|
||||||
./usr/lib/bc minix-comp
|
./usr/lib/bc minix-comp
|
||||||
|
./usr/lib/bc/libacpi.a minix-comp bitcode
|
||||||
./usr/lib/bc/libarchive.a minix-comp bitcode
|
./usr/lib/bc/libarchive.a minix-comp bitcode
|
||||||
./usr/lib/bc/libasyn.a minix-comp bitcode
|
./usr/lib/bc/libasyn.a minix-comp bitcode
|
||||||
./usr/lib/bc/libaudiodriver.a minix-comp bitcode
|
./usr/lib/bc/libaudiodriver.a minix-comp bitcode
|
||||||
|
@ -50,7 +50,8 @@ SUBDIR+= ../minix/lib/liblwip \
|
|||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if (${MACHINE_ARCH} == "i386")
|
.if (${MACHINE_ARCH} == "i386")
|
||||||
SUBDIR+= ../minix/lib/libhgfs \
|
SUBDIR+= ../minix/lib/libacpi \
|
||||||
|
../minix/lib/libhgfs \
|
||||||
../minix/lib/libvassert \
|
../minix/lib/libvassert \
|
||||||
../minix/lib/libvboxfs \
|
../minix/lib/libvboxfs \
|
||||||
../minix/lib/libvirtio
|
../minix/lib/libvirtio
|
||||||
|
@ -18,6 +18,9 @@ CWARNFLAGS.clang=-Wno-unused
|
|||||||
DPADD+= ${LIBCHARDRIVER}
|
DPADD+= ${LIBCHARDRIVER}
|
||||||
LDADD+= -lchardriver
|
LDADD+= -lchardriver
|
||||||
|
|
||||||
|
DPADD+= ${LIBACPI}
|
||||||
|
LDADD+= -lacpi
|
||||||
|
|
||||||
WARNS= 3
|
WARNS= 3
|
||||||
|
|
||||||
.include <minix.service.mk>
|
.include <minix.service.mk>
|
||||||
|
@ -8,7 +8,6 @@ Created: Jan 2000 by Philip Homburg <philip@cs.vu.nl>
|
|||||||
#include <minix/acpi.h>
|
#include <minix/acpi.h>
|
||||||
#include <minix/chardriver.h>
|
#include <minix/chardriver.h>
|
||||||
#include <minix/driver.h>
|
#include <minix/driver.h>
|
||||||
#include <minix/ds.h>
|
|
||||||
#include <minix/param.h>
|
#include <minix/param.h>
|
||||||
#include <minix/rs.h>
|
#include <minix/rs.h>
|
||||||
|
|
||||||
@ -94,7 +93,6 @@ static struct pcidev
|
|||||||
static int nr_pcidev= 0;
|
static int nr_pcidev= 0;
|
||||||
|
|
||||||
static struct machine machine;
|
static struct machine machine;
|
||||||
static endpoint_t acpi_ep;
|
|
||||||
|
|
||||||
/*===========================================================================*
|
/*===========================================================================*
|
||||||
* helper functions for I/O *
|
* helper functions for I/O *
|
||||||
@ -890,26 +888,6 @@ do_isabridge(int busind)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*===========================================================================*
|
|
||||||
* IRQ handling *
|
|
||||||
*===========================================================================*/
|
|
||||||
static int
|
|
||||||
acpi_get_irq(unsigned bus, unsigned dev, unsigned pin)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
message m;
|
|
||||||
|
|
||||||
((struct acpi_get_irq_req *)&m)->hdr.request = ACPI_REQ_GET_IRQ;
|
|
||||||
((struct acpi_get_irq_req *)&m)->bus = bus;
|
|
||||||
((struct acpi_get_irq_req *)&m)->dev = dev;
|
|
||||||
((struct acpi_get_irq_req *)&m)->pin = pin;
|
|
||||||
|
|
||||||
if ((err = ipc_sendrec(acpi_ep, &m)) != OK)
|
|
||||||
panic("PCI: error %d while receiveing from ACPI\n", err);
|
|
||||||
|
|
||||||
return ((struct acpi_get_irq_resp *)&m)->irq;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
derive_irq(struct pcidev * dev, int pin)
|
derive_irq(struct pcidev * dev, int pin)
|
||||||
{
|
{
|
||||||
@ -1801,30 +1779,6 @@ complete_bridges(void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* tells acpi which two busses are connected by this bridge. The primary bus
|
|
||||||
* (pbnr) must be already known to acpi and it must map dev as the connection to
|
|
||||||
* the secondary (sbnr) bus
|
|
||||||
*/
|
|
||||||
static void
|
|
||||||
acpi_map_bridge(unsigned int pbnr, unsigned int dev, unsigned int sbnr)
|
|
||||||
{
|
|
||||||
int err;
|
|
||||||
message m;
|
|
||||||
|
|
||||||
((struct acpi_map_bridge_req *)&m)->hdr.request = ACPI_REQ_MAP_BRIDGE;
|
|
||||||
((struct acpi_map_bridge_req *)&m)->primary_bus = pbnr;
|
|
||||||
((struct acpi_map_bridge_req *)&m)->secondary_bus = sbnr;
|
|
||||||
((struct acpi_map_bridge_req *)&m)->device = dev;
|
|
||||||
|
|
||||||
if ((err = ipc_sendrec(acpi_ep, &m)) != OK)
|
|
||||||
panic("PCI: error %d while receiveing from ACPI\n", err);
|
|
||||||
|
|
||||||
if (((struct acpi_map_bridge_resp *)&m)->err != OK)
|
|
||||||
printf("PCI: acpi failed to map pci (%d) to pci (%d) bridge\n",
|
|
||||||
pbnr, sbnr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_pcibridge(int busind)
|
do_pcibridge(int busind)
|
||||||
{
|
{
|
||||||
@ -2148,7 +2102,7 @@ sef_cb_init(int type, sef_init_info_t *info)
|
|||||||
return ENODEV;
|
return ENODEV;
|
||||||
}
|
}
|
||||||
if (machine.apic_enabled &&
|
if (machine.apic_enabled &&
|
||||||
ds_retrieve_label_endpt("acpi", &acpi_ep) != OK) {
|
acpi_init() != OK) {
|
||||||
panic("PCI: Cannot use APIC mode without ACPI!\n");
|
panic("PCI: Cannot use APIC mode without ACPI!\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <minix/ipc.h>
|
#include <minix/ipc.h>
|
||||||
|
|
||||||
#define ACPI_REQ_GET_IRQ 1
|
#define ACPI_REQ_GET_IRQ 1
|
||||||
#define ACPI_REQ_MAP_BRIDGE 2
|
#define ACPI_REQ_MAP_BRIDGE 2
|
||||||
|
|
||||||
struct acpi_request_hdr {
|
struct acpi_request_hdr {
|
||||||
endpoint_t m_source; /* message header */
|
endpoint_t m_source; /* message header */
|
||||||
@ -42,3 +42,7 @@ struct acpi_map_bridge_resp {
|
|||||||
int err;
|
int err;
|
||||||
u32_t __padding[7];
|
u32_t __padding[7];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
int acpi_init(void);
|
||||||
|
int acpi_get_irq(unsigned bus, unsigned dev, unsigned pin);
|
||||||
|
void acpi_map_bridge(unsigned int pbnr, unsigned int dev, unsigned int sbnr);
|
||||||
|
@ -32,6 +32,7 @@ SUBDIR+= libnetsock
|
|||||||
.endif
|
.endif
|
||||||
|
|
||||||
.if (${MACHINE_ARCH} == "i386")
|
.if (${MACHINE_ARCH} == "i386")
|
||||||
|
SUBDIR+= libacpi
|
||||||
SUBDIR+= libhgfs
|
SUBDIR+= libhgfs
|
||||||
SUBDIR+= libvassert
|
SUBDIR+= libvassert
|
||||||
SUBDIR+= libvboxfs
|
SUBDIR+= libvboxfs
|
||||||
|
9
minix/lib/libacpi/Makefile
Normal file
9
minix/lib/libacpi/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Makefile for libacpi
|
||||||
|
|
||||||
|
CPPFLAGS+= -D_MINIX_SYSTEM
|
||||||
|
|
||||||
|
LIB = acpi
|
||||||
|
|
||||||
|
SRCS = acpi.c
|
||||||
|
|
||||||
|
.include <bsd.lib.mk>
|
85
minix/lib/libacpi/acpi.c
Normal file
85
minix/lib/libacpi/acpi.c
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
#define _SYSTEM
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include <minix/acpi.h>
|
||||||
|
#include <minix/com.h>
|
||||||
|
#include <minix/ds.h>
|
||||||
|
#include <minix/ipc.h>
|
||||||
|
#include <minix/log.h>
|
||||||
|
#include <minix/sysutil.h>
|
||||||
|
|
||||||
|
static struct log log =
|
||||||
|
{ .name = "libacpi", .log_level = LEVEL_TRACE, .log_func = default_log };
|
||||||
|
|
||||||
|
static endpoint_t acpi_ep = NONE;
|
||||||
|
|
||||||
|
int
|
||||||
|
acpi_init(void)
|
||||||
|
{
|
||||||
|
int res;
|
||||||
|
res = ds_retrieve_label_endpt("acpi", &acpi_ep);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*===========================================================================*
|
||||||
|
* IRQ handling *
|
||||||
|
*===========================================================================*/
|
||||||
|
int
|
||||||
|
acpi_get_irq(unsigned bus, unsigned dev, unsigned pin)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
message m;
|
||||||
|
|
||||||
|
if (acpi_ep == NONE) {
|
||||||
|
err = acpi_init();
|
||||||
|
if (OK != err) {
|
||||||
|
panic("libacpi: ds_retrieve_label_endpt failed for 'acpi': %d", err);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
log_info(&log, "resolved acpi to endpoint: %d\n", acpi_ep);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((struct acpi_get_irq_req *)&m)->hdr.request = ACPI_REQ_GET_IRQ;
|
||||||
|
((struct acpi_get_irq_req *)&m)->bus = bus;
|
||||||
|
((struct acpi_get_irq_req *)&m)->dev = dev;
|
||||||
|
((struct acpi_get_irq_req *)&m)->pin = pin;
|
||||||
|
|
||||||
|
if ((err = ipc_sendrec(acpi_ep, &m)) != OK)
|
||||||
|
panic("libacpi: error %d while receiving from ACPI\n", err);
|
||||||
|
|
||||||
|
return ((struct acpi_get_irq_resp *)&m)->irq;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* tells acpi which two busses are connected by this bridge. The primary bus
|
||||||
|
* (pbnr) must be already known to acpi and it must map dev as the connection to
|
||||||
|
* the secondary (sbnr) bus
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
acpi_map_bridge(unsigned int pbnr, unsigned int dev, unsigned int sbnr)
|
||||||
|
{
|
||||||
|
int err;
|
||||||
|
message m;
|
||||||
|
|
||||||
|
if (acpi_ep == NONE) {
|
||||||
|
err = acpi_init();
|
||||||
|
if (OK != err) {
|
||||||
|
panic("libacpi: ds_retrieve_label_endpt failed for 'acpi': %d", err);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
((struct acpi_map_bridge_req *)&m)->hdr.request = ACPI_REQ_MAP_BRIDGE;
|
||||||
|
((struct acpi_map_bridge_req *)&m)->primary_bus = pbnr;
|
||||||
|
((struct acpi_map_bridge_req *)&m)->secondary_bus = sbnr;
|
||||||
|
((struct acpi_map_bridge_req *)&m)->device = dev;
|
||||||
|
|
||||||
|
if ((err = ipc_sendrec(acpi_ep, &m)) != OK)
|
||||||
|
panic("libacpi: error %d while receiving from ACPI\n", err);
|
||||||
|
|
||||||
|
if (((struct acpi_map_bridge_resp *)&m)->err != OK)
|
||||||
|
printf("libacpi: acpi failed to map pci (%d) to pci (%d) bridge\n",
|
||||||
|
pbnr, sbnr);
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user