Changeset ee06f2a in mainline for kernel/arch/ia32/src/drivers/i8254.c


Ignore:
Timestamp:
2009-02-15T15:28:00Z (15 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
2d96f4d
Parents:
e7f2ad68
Message:

Introduce a more platform-neutral name for programmed I/O.

The new API looks like pio_read_n() or pio_write_n(), where n is 8, 16 or 32.
The old API (i.e. inb(), inw(), inl(), outb() outw(), outl()) may have made
some people think that the interface is only to be used with the separate I/O
space. That's not the case. This API is to be implemented on all platforms
so that we can finally have really generic kernel device drivers.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/arch/ia32/src/drivers/i8254.c

    re7f2ad68 ree06f2a  
    9595void i8254_normal_operation(void)
    9696{
    97         outb(CLK_PORT4, 0x36);
     97        pio_write_8(CLK_PORT4, 0x36);
    9898        pic_disable_irqs(1 << IRQ_CLK);
    99         outb(CLK_PORT1, (CLK_CONST / HZ) & 0xf);
    100         outb(CLK_PORT1, (CLK_CONST / HZ) >> 8);
     99        pio_write_8(CLK_PORT1, (CLK_CONST / HZ) & 0xf);
     100        pio_write_8(CLK_PORT1, (CLK_CONST / HZ) >> 8);
    101101        pic_enable_irqs(1 << IRQ_CLK);
    102102}
     
    115115         * MAGIC_NUMBER is the magic value for 1ms.
    116116         */
    117         outb(CLK_PORT4, 0x30);
    118         outb(CLK_PORT1, 0xff);
    119         outb(CLK_PORT1, 0xff);
     117        pio_write_8(CLK_PORT4, 0x30);
     118        pio_write_8(CLK_PORT1, 0xff);
     119        pio_write_8(CLK_PORT1, 0xff);
    120120
    121121        do {
    122122                /* will read both status and count */
    123                 outb(CLK_PORT4, 0xc2);
    124                 not_ok = (uint8_t) ((inb(CLK_PORT1) >> 6) & 1);
    125                 t1 = inb(CLK_PORT1);
    126                 t1 |= inb(CLK_PORT1) << 8;
     123                pio_write_8(CLK_PORT4, 0xc2);
     124                not_ok = (uint8_t) ((pio_read_8(CLK_PORT1) >> 6) & 1);
     125                t1 = pio_read_8(CLK_PORT1);
     126                t1 |= pio_read_8(CLK_PORT1) << 8;
    127127        } while (not_ok);
    128128
    129129        asm_delay_loop(LOOPS);
    130130
    131         outb(CLK_PORT4, 0xd2);
    132         t2 = inb(CLK_PORT1);
    133         t2 |= inb(CLK_PORT1) << 8;
     131        pio_write_8(CLK_PORT4, 0xd2);
     132        t2 = pio_read_8(CLK_PORT1);
     133        t2 |= pio_read_8(CLK_PORT1) << 8;
    134134
    135135        /*
    136136         * We want to determine the overhead of the calibrating mechanism.
    137137         */
    138         outb(CLK_PORT4, 0xd2);
    139         o1 = inb(CLK_PORT1);
    140         o1 |= inb(CLK_PORT1) << 8;
     138        pio_write_8(CLK_PORT4, 0xd2);
     139        o1 = pio_read_8(CLK_PORT1);
     140        o1 |= pio_read_8(CLK_PORT1) << 8;
    141141
    142142        asm_fake_loop(LOOPS);
    143143
    144         outb(CLK_PORT4, 0xd2);
    145         o2 = inb(CLK_PORT1);
    146         o2 |= inb(CLK_PORT1) << 8;
     144        pio_write_8(CLK_PORT4, 0xd2);
     145        o2 = pio_read_8(CLK_PORT1);
     146        o2 |= pio_read_8(CLK_PORT1) << 8;
    147147
    148148        CPU->delay_loop_const =
Note: See TracChangeset for help on using the changeset viewer.