/* * GRUB -- GRand Unified Bootloader * Copyright (C) 2008 Free Software Foundation, Inc. * * GRUB is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * GRUB is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with GRUB. If not, see . */ #ifndef KERNEL_CPU_PIT_HEADER #define KERNEL_CPU_PIT_HEADER 1 #include #include enum { /* The PIT channel value ports. You can write to and read from them. Do not mess with timer 0 or 1. */ GRUB_PIT_COUNTER_0 = 0x40, GRUB_PIT_COUNTER_1 = 0x41, GRUB_PIT_COUNTER_2 = 0x42, /* The PIT control port. You can only write to it. Do not mess with timer 0 or 1. */ GRUB_PIT_CTRL = 0x43, /* The speaker port. */ GRUB_PIT_SPEAKER_PORT = 0x61, }; /* The speaker port. */ enum { /* If 0, follow state of SPEAKER_DATA bit, otherwise enable output from timer 2. */ GRUB_PIT_SPK_TMR2 = 0x01, /* If SPEAKER_TMR2 is not set, this provides direct input into the speaker. Otherwise, this enables or disables the output from the timer. */ GRUB_PIT_SPK_DATA = 0x02, GRUB_PIT_SPK_TMR2_LATCH = 0x20 }; /* The PIT control port. You can only write to it. Do not mess with timer 0 or 1. */ enum { GRUB_PIT_CTRL_SELECT_MASK = 0xc0, GRUB_PIT_CTRL_SELECT_0 = 0x00, GRUB_PIT_CTRL_SELECT_1 = 0x40, GRUB_PIT_CTRL_SELECT_2 = 0x80, /* Read and load control. */ GRUB_PIT_CTRL_READLOAD_MASK= 0x30, GRUB_PIT_CTRL_COUNTER_LATCH = 0x00, /* Hold timer value until read. */ GRUB_PIT_CTRL_READLOAD_LSB = 0x10, /* Read/load the LSB. */ GRUB_PIT_CTRL_READLOAD_MSB = 0x20, /* Read/load the MSB. */ GRUB_PIT_CTRL_READLOAD_WORD = 0x30, /* Read/load the LSB then the MSB. */ /* Mode control. */ GRUB_PIT_CTRL_MODE_MASK = 0x0e, /* Interrupt on terminal count. Setting the mode sets output to low. When counter is set and terminated, output is set to high. */ GRUB_PIT_CTRL_INTR_ON_TERM = 0x00, /* Programmable one-shot. When loading counter, output is set to high. When counter terminated, output is set to low. Can be triggered again from that point on by setting the gate pin to high. */ GRUB_PIT_CTRL_PROGR_ONE_SHOT = 0x02, /* Rate generator. Output is low for one period of the counter, and high for the other. */ GRUB_PIT_CTRL_RATE_GEN = 0x04, /* Square wave generator. Output is low for one half of the period, and high for the other half. */ GRUB_PIT_CTRL_SQUAREWAVE_GEN = 0x06, /* Software triggered strobe. Setting the mode sets output to high. When counter is set and terminated, output is set to low. */ GRUB_PIT_CTRL_SOFTSTROBE = 0x08, /* Hardware triggered strobe. Like software triggered strobe, but only starts the counter when the gate pin is set to high. */ GRUB_PIT_CTRL_HARDSTROBE = 0x0a, /* Count mode. */ GRUB_PIT_CTRL_COUNT_MASK = 0x01, GRUB_PIT_CTRL_COUNT_BINARY = 0x00, /* 16-bit binary counter. */ GRUB_PIT_CTRL_COUNT_BCD = 0x01 /* 4-decade BCD counter. */ }; #endif /* ! KERNEL_CPU_PIT_HEADER */