Lines Matching refs:alarm

35  *			alarm clock services. This file and the ipc
65 * Actual clock alarm structure. Used for user clock_sleep() and
66 * clock_alarm() calls. Alarms are allocated from the alarm free
67 * list and entered in time priority order into the active alarm
70 struct alarm {
71 struct alarm *al_next; /* next alarm in chain */
72 struct alarm *al_prev; /* previous alarm in chain */
73 int al_status; /* alarm status */
74 mach_timespec_t al_time; /* alarm time */
75 struct { /* message alarm data */
76 int type; /* alarm type */
77 ipc_port_t port; /* alarm port */
79 port_type; /* alarm port type */
80 struct clock *clock; /* alarm clock */
81 void *data; /* alarm data */
88 long al_seqno; /* alarm sequence number */
90 typedef struct alarm alarm_data_t;
92 /* alarm status */
93 #define ALARM_FREE 0 /* alarm is on free list */
96 #define ALARM_DONE 4 /* alarm has expired */
99 decl_simple_lock_data(static,alarm_lock) /* alarm synchronization */
101 static struct alarm *alrmfree; /* alarm free list pointer */
102 static struct alarm *alrmdone; /* alarm done list pointer */
103 static struct alarm *alrmlist;
112 alarm_t alarm);
195 /* start alarm sequence numbers at 0 */
239 i = sizeof(struct alarm);
354 case CLOCK_ALARM_CURRES: /* =0 no alarm */
382 case CLOCK_ALARM_CURRES: /* =0 no alarm */
409 * Set the clock alarm resolution.
424 * Setup a clock alarm.
434 alarm_t alarm;
448 * Check alarm parameters. If parameters are invalid,
449 * send alarm message immediately.
461 * Get alarm and add to clock alarm list.
465 if ((alarm = alrmfree) == 0) {
467 alarm = (alarm_t) zalloc(alarm_zone);
468 if (alarm == 0)
473 alrmfree = alarm->al_next;
475 alarm->al_status = ALARM_CLOCK;
476 alarm->al_time = alarm_time;
477 alarm->al_type = alarm_type;
478 alarm->al_port = alarm_port;
479 alarm->al_port_type = alarm_port_type;
480 alarm->al_clock = clock;
481 alarm->al_seqno = alrm_seqno++;
482 post_alarm(alarm);
538 alarm_t alarm;
552 * return an error, otherwise post alarm request.
564 * Get alarm and add to clock alarm list.
568 if ((alarm = alrmfree) == 0) {
570 alarm = (alarm_t) zalloc(alarm_zone);
571 if (alarm == 0)
576 alrmfree = alarm->al_next;
579 * Wait for alarm to occur.
581 wait_result = assert_wait((event_t)alarm, THREAD_ABORTSAFE);
583 alarm->al_time = *sleep_time;
584 alarm->al_status = ALARM_SLEEP;
585 post_alarm(alarm);
591 * Note if alarm expired normally or whether it
592 * was aborted. If aborted, delete alarm from
593 * clock alarm list. Return alarm to free list.
596 if (alarm->al_status != ALARM_DONE) {
598 if (((alarm->al_prev)->al_next = alarm->al_next) != NULL)
599 (alarm->al_next)->al_prev = alarm->al_prev;
602 *sleep_time = alarm->al_time;
603 alarm->al_status = ALARM_FREE;
606 assert(alarm->al_status == ALARM_FREE);
609 alarm->al_next = alrmfree;
610 alrmfree = alarm;
620 * Service clock alarm expirations.
636 * Update clock alarm list. Alarms that are due are moved
648 * clock alarm list.
654 * If a clock_sleep() alarm, wakeup the thread
665 * If a clock_alarm() alarm, place the alarm on
666 * the alarm done list and schedule the alarm
683 * Setup to expire for the next pending alarm.
724 * Post an alarm on the active alarm list.
730 alarm_t alarm)
737 * Traverse alarm list until queue time is greater
738 * than alarm time, then insert alarm.
740 alarm_time = &alarm->al_time;
748 alrm1->al_next = alarm;
749 alarm->al_next = alrm2;
750 alarm->al_prev = alrm1;
752 alrm2->al_prev = alarm;
755 * If the inserted alarm is the 'earliest' alarm,
756 * reset the device layer alarm time accordingly.
758 if (alrmlist == alarm)