Skip to content

Commit

Permalink
Cleaning up PIIX4 ISA driver
Browse files Browse the repository at this point in the history
  • Loading branch information
rafalcieslak committed May 8, 2017
1 parent d6e1faa commit 553837e
Showing 1 changed file with 53 additions and 24 deletions.
77 changes: 53 additions & 24 deletions sys/drv_piix4isa.c
Original file line number Diff line number Diff line change
Expand Up @@ -3,51 +3,80 @@
#include <isa.h>
#include <stdc.h>

#define PIIX4ISA_VENDOR_ID 0x8086
#define PIIX4ISA_DEVICE_ID 0x7110
#define PIIX4_ISA_VENDOR_ID 0x8086
#define PIIX4_ISA_DEVICE_ID 0x7110

typedef struct piix4isa_state {
typedef struct piix4_isa_state {
resource_t *ioports;
/* This resource represents the ISA bus behind this PCI-ISA bridge. The
resource is owned by the device. */
resource_t isa;
} piix4isa_state_t;
} piix4_isa_state_t;

static uint8_t piix4_isa_read1(resource_t *handle, unsigned offset) {
static uint8_t piix4_isa_read_1(resource_t *handle, unsigned offset) {
device_t *isa_bus = handle->r_owner;
piix4isa_state_t *bus_state = isa_bus->state;
piix4_isa_state_t *bus_state = isa_bus->state;
return bus_space_read_1(bus_state->ioports, offset);
}
static void piix4_isa_write1(resource_t *handle, unsigned offset, uint8_t val) {
static void piix4_isa_write_1(resource_t *handle, unsigned offset,
uint8_t val) {
device_t *isa_bus = handle->r_owner;
piix4isa_state_t *bus_state = isa_bus->state;
piix4_isa_state_t *bus_state = isa_bus->state;
bus_space_write_1(bus_state->ioports, offset, val);
}
static uint16_t piix4_isa_read_2(resource_t *handle, unsigned offset) {
device_t *isa_bus = handle->r_owner;
piix4_isa_state_t *bus_state = isa_bus->state;
return bus_space_read_2(bus_state->ioports, offset);
}
static void piix4_isa_write_2(resource_t *handle, unsigned offset,
uint16_t val) {
device_t *isa_bus = handle->r_owner;
piix4_isa_state_t *bus_state = isa_bus->state;
bus_space_write_2(bus_state->ioports, offset, val);
}
/* NOTE: Region access to ISA bus is highly unusual. */
static void piix4_isa_read_region_1(resource_t *handle, unsigned offset,
uint8_t *dst, size_t count) {
device_t *isa_bus = handle->r_owner;
piix4_isa_state_t *bus_state = isa_bus->state;
bus_space_read_region_1(bus_state->ioports, offset, dst, count);
}
static void piix4_isa_write_region_1(resource_t *handle, unsigned offset,
const uint8_t *src, size_t count) {
device_t *isa_bus = handle->r_owner;
piix4_isa_state_t *bus_state = isa_bus->state;
bus_space_write_region_1(bus_state->ioports, offset, src, count);
}
static bus_space_t piix4_isa_bus_space = {
.read_1 = piix4_isa_read_1,
.write_1 = piix4_isa_write_1,
.read_2 = piix4_isa_read_2,
.write_2 = piix4_isa_write_2,
.read_region_1 = piix4_isa_read_region_1,
.write_region_1 = piix4_isa_write_region_1};

static bus_space_t piix4_isa_bus_space = {.read_1 = piix4_isa_read1,
.write_1 = piix4_isa_write1};

static int piix4isa_probe(device_t *dev) {
static int piix4_isa_probe(device_t *dev) {
pci_device_t *pcid = pci_device_of(dev);
if (!pcid)
return 0;

if (pcid->vendor_id != PIIX4ISA_VENDOR_ID ||
pcid->device_id != PIIX4ISA_DEVICE_ID)
if (pcid->vendor_id != PIIX4_ISA_VENDOR_ID ||
pcid->device_id != PIIX4_ISA_DEVICE_ID)
return 0;

return 1;
}

static int piix4isa_attach(device_t *dev) {
static int piix4_isa_attach(device_t *dev) {
assert(dev->bus == DEV_BUS_PCI);
pci_bus_state_t *pci_bus_data = dev->parent->state;

piix4isa_state_t *piix4isa_bus = dev->state;
piix4_isa_state_t *piix4_isa_bus = dev->state;
/* TODO: bus_allocate_resource */
piix4isa_bus->ioports = pci_bus_data->lowio_space;
piix4_isa_bus->ioports = pci_bus_data->lowio_space;

piix4isa_bus->isa = (resource_t){
piix4_isa_bus->isa = (resource_t){
.r_owner = dev,
.r_bus_space = &piix4_isa_bus_space,
.r_type = RT_IOPORTS,
Expand All @@ -67,7 +96,7 @@ static int piix4isa_attach(device_t *dev) {

/* TODO: bus_allocate_resource */
/* Allocate entire ioports space for the child device. */
isa_dev->isa_bus = &piix4isa_bus->isa;
isa_dev->isa_bus = &piix4_isa_bus->isa;

chdev->instance = isa_dev;
chdev->driver = drv;
Expand All @@ -82,10 +111,10 @@ static int piix4isa_attach(device_t *dev) {
return 0;
}

static driver_t piix4isa = {
static driver_t piix4_isa = {
.desc = "PIIX4 PCI-ISA bridge driver",
.size = sizeof(piix4isa_state_t),
.probe = piix4isa_probe,
.attach = piix4isa_attach,
.size = sizeof(piix4_isa_state_t),
.probe = piix4_isa_probe,
.attach = piix4_isa_attach,
};
DRIVER_ADD(piix4isa);
DRIVER_ADD(piix4_isa);

0 comments on commit 553837e

Please sign in to comment.