#ifndef GRUB_SPEAKER_HEADER #define GRUB_SPEAKER_HEADER 1 #include #include /* The frequency of the PIT clock. */ #define GRUB_SPEAKER_PIT_FREQUENCY 0x1234dd static inline void grub_speaker_beep_off (void) { unsigned char status; status = grub_inb (GRUB_PIT_SPEAKER_PORT); grub_outb (status & ~(GRUB_PIT_SPK_TMR2 | GRUB_PIT_SPK_DATA), GRUB_PIT_SPEAKER_PORT); } static inline void grub_speaker_beep_on (grub_uint16_t pitch) { unsigned char status; unsigned int counter; if (pitch < 20) pitch = 20; else if (pitch > 20000) pitch = 20000; counter = GRUB_SPEAKER_PIT_FREQUENCY / pitch; /* Program timer 2. */ grub_outb (GRUB_PIT_CTRL_SELECT_2 | GRUB_PIT_CTRL_READLOAD_WORD | GRUB_PIT_CTRL_SQUAREWAVE_GEN | GRUB_PIT_CTRL_COUNT_BINARY, GRUB_PIT_CTRL); grub_outb (counter & 0xff, GRUB_PIT_COUNTER_2); /* LSB */ grub_outb ((counter >> 8) & 0xff, GRUB_PIT_COUNTER_2); /* MSB */ /* Start speaker. */ status = grub_inb (GRUB_PIT_SPEAKER_PORT); grub_outb (status | GRUB_PIT_SPK_TMR2 | GRUB_PIT_SPK_DATA, GRUB_PIT_SPEAKER_PORT); } #endif