--- sys/pccard/pccard_beep.c.orig Mon Mar 13 23:09:40 2000 +++ sys/pccard/pccard_beep.c Sat May 6 00:45:57 2000 @@ -37,7 +37,27 @@ allow_beep = BEEP_ON; } -void pccard_insert_beep(void) +static void pccard_insert_beep_type0(void) +{ + /* dummy */ +} + +static void pccard_remove_beep_type0(void) +{ + /* dummy */ +} + +static void pccard_success_beep_type0(void) +{ + /* dummy */ +} + +static void pccard_failure_beep_type0(void) +{ + /* dummy */ +} + +static void pccard_insert_beep_type1(void) { if (allow_beep == BEEP_ON) { sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0); @@ -46,7 +66,7 @@ } } -void pccard_remove_beep(void) +static void pccard_remove_beep_type1(void) { if (allow_beep == BEEP_ON) { sysbeep(PCCARD_BEEP_PITCH0, PCCARD_BEEP_DURATION0); @@ -55,25 +75,158 @@ } } -void pccard_success_beep(void) +static void pccard_success_beep_type1(void) { if (allow_beep == BEEP_ON) { sysbeep(PCCARD_BEEP_PITCH1, PCCARD_BEEP_DURATION1); } } -void pccard_failure_beep(void) +static void pccard_failure_beep_type1(void) { if (allow_beep == BEEP_ON) { sysbeep(PCCARD_BEEP_PITCH2, PCCARD_BEEP_DURATION2); } } -int pccard_beep_select(enum beepstate state) +static void pccard_insert_beep0_type2(void *dummy) { - if (state == BEEP_ON || state == BEEP_OFF) { - allow_beep = state; - return 0; + untimeout(pccard_insert_beep0_type2, (void *)NULL, beeptimeout_ch); + sysbeepstop((void *)NULL); + sysbeep(1200, 5); + beeptimeout_ch = timeout(enable_beep, (void *)NULL, hz / 10); +} + +static void pccard_insert_beep_type2(void) +{ + if (allow_beep == BEEP_ON) { + sysbeep(1600, 20); + allow_beep = BEEP_OFF; + beeptimeout_ch = timeout(pccard_insert_beep0_type2, NULL, hz / 10); + } +} + +static void pccard_remove_beep0_type2(void *dummy) +{ + untimeout(pccard_remove_beep0_type2, (void *)NULL, beeptimeout_ch); + sysbeepstop((void *)NULL); + sysbeep(1600, 5); + beeptimeout_ch = timeout(enable_beep, NULL, hz / 10); +} + +static void pccard_remove_beep_type2(void) +{ + if (allow_beep == BEEP_ON) { + sysbeep(1200, 20); + allow_beep = BEEP_OFF; + beeptimeout_ch = timeout(pccard_remove_beep0_type2, NULL, hz / 10); } - return 1; +} + +static void pccard_success_beep1_type2(void *dummy) +{ + untimeout(pccard_success_beep1_type2, (void *)NULL, beeptimeout_ch); + sysbeepstop((void *)NULL); + sysbeep(800, 20); + beeptimeout_ch = timeout(enable_beep, NULL, hz / 15); +} + +static void pccard_success_beep0_type2(void *dummy) +{ + untimeout(pccard_success_beep0_type2, (void *)NULL, beeptimeout_ch); + sysbeepstop((void *)NULL); + sysbeep(1000, 20); + beeptimeout_ch = timeout(pccard_success_beep1_type2, NULL, hz / 15); +} + +static void pccard_success_beep_type2(void) +{ + if (allow_beep == BEEP_ON) { + sysbeep(1200, 20); + allow_beep = BEEP_OFF; + beeptimeout_ch = timeout(pccard_success_beep0_type2, NULL, hz / 15); + } +} + +static void pccard_failure_beep1_type2(void *dummy) +{ + untimeout(pccard_failure_beep1_type2, (void *)NULL, beeptimeout_ch); + sysbeepstop((void *)NULL); + sysbeep(2800, 20); + beeptimeout_ch = timeout(enable_beep, NULL, hz / 15); +} + +static void pccard_failure_beep0_type2(void *dummy) +{ + untimeout(pccard_failure_beep0_type2, (void *)NULL, beeptimeout_ch); + sysbeepstop((void *)NULL); + sysbeep(2400, 20); + beeptimeout_ch = timeout(pccard_failure_beep1_type2, NULL, hz / 15); +} +static void pccard_failure_beep_type2(void) +{ + if (allow_beep == BEEP_ON) { + sysbeep(2000, 20); + allow_beep = BEEP_OFF; + beeptimeout_ch = timeout(pccard_failure_beep0_type2, NULL, hz / 15); + } +} + +static void (*insert)(void) = pccard_insert_beep_type0; +static void (*remove)(void) = pccard_remove_beep_type0; +static void (*success)(void) = pccard_success_beep_type0; +static void (*failure)(void) = pccard_failure_beep_type0; + +int pccard_beep_select(int type) +{ + int errcode = 0; + + switch (type) { + case 0: + insert = pccard_insert_beep_type0; + remove = pccard_remove_beep_type0; + success = pccard_success_beep_type0; + failure = pccard_failure_beep_type0; + allow_beep = BEEP_OFF; + break; + case 1: + insert = pccard_insert_beep_type1; + remove = pccard_remove_beep_type1; + success = pccard_success_beep_type1; + failure = pccard_failure_beep_type1; + allow_beep = BEEP_ON; + break; + case 2: + insert = pccard_insert_beep_type2; + remove = pccard_remove_beep_type2; + success = pccard_success_beep_type2; + failure = pccard_failure_beep_type2; + allow_beep = BEEP_ON; + break; + default: + errcode = 1; + break; + } + return errcode; +} + +void pccard_insert_beep(void) +{ + insert(); +} + +void pccard_remove_beep(void) +{ + remove(); +} + + +void pccard_success_beep(void) +{ + success(); +} + +void pccard_failure_beep(void) +{ + failure(); } --- sys/pccard/driver.h.orig Mon Mar 13 23:09:40 2000 +++ sys/pccard/driver.h Fri May 5 23:51:00 2000 @@ -19,6 +19,6 @@ void pccard_remove_beep __P((void)); void pccard_success_beep __P((void)); void pccard_failure_beep __P((void)); -int pccard_beep_select __P((enum beepstate)); +int pccard_beep_select __P((int)); #endif /* !_PCCARD_DRIVER_H_ */ --- sys/i386/isa/clock.c.org Tue May 9 10:16:31 2000 +++ sys/i386/isa/clock.c Sat May 6 00:50:11 2000 @@ -510,7 +510,7 @@ #endif } -static void +void sysbeepstop(void *chan) { outb(IO_PPI, inb(IO_PPI)&0xFC); /* disable counter2 output to speaker */ --- sys/alpha/alpha/clock.c.org Fri Sep 15 18:05:23 2000 +++ sys/alpha/alpha/clock.c Fri Sep 15 18:05:52 2000 @@ -626,7 +626,7 @@ return (0); } -static void +void sysbeepstop(void *chan) { outb(IO_PPI, inb(IO_PPI)&0xFC); /* disable counter2 output to speaker */ --- sys/i386/include/clock.h.org Fri Sep 15 18:07:58 2000 +++ sys/i386/include/clock.h Fri Sep 15 18:09:19 2000 @@ -44,6 +44,7 @@ int release_timer1 __P((void)); #endif int sysbeep __P((int pitch, int period)); +void sysbeepstop __P((void *chan)); void i8254_restore __P((void)); #endif /* _KERNEL */ --- sys/alpha/include/clock.h.org Mon Sep 18 00:38:54 2000 +++ sys/alpha/include/clock.h Mon Sep 18 00:39:12 2000 @@ -17,6 +17,7 @@ void DELAY __P((int usec)); int sysbeep __P((int pitch, int period)); +void sysbeepstop __P((void *chan)); int acquire_timer2 __P((int mode)); int release_timer2 __P((void));