Trned the LPT ports into device_t's.
This commit is contained in:
@@ -54,6 +54,7 @@ typedef struct pc87307_t {
|
||||
void *kbc;
|
||||
fdc_t *fdc;
|
||||
serial_t *uart[2];
|
||||
lpt_t *lpt;
|
||||
} pc87307_t;
|
||||
|
||||
enum {
|
||||
@@ -72,7 +73,7 @@ enum {
|
||||
#define LD_MAX LD_PM
|
||||
|
||||
static void fdc_handler(pc87307_t *dev);
|
||||
static void lpt1_handler(pc87307_t *dev);
|
||||
static void lpt_handler(pc87307_t *dev);
|
||||
static void serial_handler(pc87307_t *dev, int uart);
|
||||
static void kbc_handler(pc87307_t *dev);
|
||||
static void pc87307_write(uint16_t port, uint8_t val, void *priv);
|
||||
@@ -187,7 +188,7 @@ pc87307_pm_write(uint16_t port, uint8_t val, void *priv)
|
||||
switch (dev->pm_idx) {
|
||||
case 0x00:
|
||||
fdc_handler(dev);
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
serial_handler(dev, 1);
|
||||
serial_handler(dev, 0);
|
||||
break;
|
||||
@@ -277,7 +278,7 @@ fdc_handler(pc87307_t *dev)
|
||||
}
|
||||
|
||||
static void
|
||||
lpt1_handler(pc87307_t *dev)
|
||||
lpt_handler(pc87307_t *dev)
|
||||
{
|
||||
uint8_t active = (dev->ld_regs[LD_LPT][0x00] & 0x01) &&
|
||||
(dev->pm[0x00] & 0x10);
|
||||
@@ -287,11 +288,11 @@ lpt1_handler(pc87307_t *dev)
|
||||
|
||||
if (active && (addr <= 0xfffc)) {
|
||||
pc87307_log("Enabling LPT1 on %04X...\n", addr);
|
||||
lpt1_setup(addr);
|
||||
lpt_port_setup(dev->lpt, addr);
|
||||
} else
|
||||
lpt1_setup(0xffff);
|
||||
lpt_port_setup(dev->lpt, 0xffff);
|
||||
|
||||
lpt1_irq(irq);
|
||||
lpt_port_irq(dev->lpt, irq);
|
||||
}
|
||||
|
||||
static void
|
||||
@@ -439,7 +440,7 @@ pc87307_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case LD_LPT:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
break;
|
||||
case LD_UART2:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
@@ -488,7 +489,7 @@ pc87307_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case LD_LPT:
|
||||
dev->ld_regs[ld][reg] = (old & 0xfc) | (val & 0x03);
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
break;
|
||||
case LD_UART2:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
@@ -526,7 +527,7 @@ pc87307_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case LD_LPT:
|
||||
dev->ld_regs[ld][reg] = (old & 0x03) | (val & 0xfc);
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
break;
|
||||
case LD_UART2:
|
||||
dev->ld_regs[ld][reg] = (old & 0x07) | (val & 0xf8);
|
||||
@@ -594,7 +595,7 @@ pc87307_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case LD_LPT:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
break;
|
||||
case LD_UART2:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
@@ -630,7 +631,7 @@ pc87307_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case LD_LPT:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
break;
|
||||
case LD_UART2:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
@@ -662,7 +663,7 @@ pc87307_write(uint16_t port, uint8_t val, void *priv)
|
||||
break;
|
||||
case LD_LPT:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
break;
|
||||
case LD_UART2: case LD_UART1:
|
||||
dev->ld_regs[ld][reg] = val;
|
||||
@@ -822,7 +823,7 @@ pc87307_reset(void *priv)
|
||||
|
||||
kbc_handler(dev);
|
||||
fdc_handler(dev);
|
||||
lpt1_handler(dev);
|
||||
lpt_handler(dev);
|
||||
serial_handler(dev, 0);
|
||||
serial_handler(dev, 1);
|
||||
gpio_handler(dev);
|
||||
@@ -850,6 +851,8 @@ pc87307_init(const device_t *info)
|
||||
dev->uart[0] = device_add_inst(&ns16550_device, 1);
|
||||
dev->uart[1] = device_add_inst(&ns16550_device, 2);
|
||||
|
||||
dev->lpt = device_add_inst(&lpt_port_device, 1);
|
||||
|
||||
switch (info->local & PCX730X_KBC) {
|
||||
default:
|
||||
case PCX730X_AMI:
|
||||
|
||||
Reference in New Issue
Block a user