Lines Matching defs:as

81 	struct acpi_sema	*as;
88 if ((as = malloc(sizeof(*as), M_ACPISEM, M_NOWAIT | M_ZERO)) == NULL)
91 snprintf(as->as_name, sizeof(as->as_name), "ACPI sema (%p)", as);
92 mtx_init(&as->as_lock, as->as_name, NULL, MTX_DEF);
93 cv_init(&as->as_cv, as->as_name);
94 as->as_maxunits = MaxUnits;
95 as->as_units = InitialUnits;
97 *OutHandle = (ACPI_SEMAPHORE)as;
100 as->as_name, MaxUnits, InitialUnits));
108 struct acpi_sema *as = (struct acpi_sema *)Handle;
112 if (as == NULL)
115 mtx_lock(&as->as_lock);
117 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "delete %s\n", as->as_name));
119 if (as->as_waiters > 0) {
122 as->as_name, as->as_units, as->as_waiters));
123 as->as_reset = 1;
124 cv_broadcast(&as->as_cv);
125 while (as->as_waiters > 0) {
126 if (mtx_sleep(&as->as_reset, &as->as_lock,
130 as->as_name, as->as_waiters));
131 mtx_unlock(&as->as_lock);
136 as->as_name, as->as_units, as->as_waiters));
140 mtx_unlock(&as->as_lock);
142 mtx_destroy(&as->as_lock);
143 cv_destroy(&as->as_cv);
144 free(as, M_ACPISEM);
154 struct acpi_sema *as = (struct acpi_sema *)Handle;
160 if (as == NULL || Units == 0)
163 mtx_lock(&as->as_lock);
167 Units, as->as_name, as->as_units, as->as_waiters, Timeout));
169 if (as->as_maxunits != ACPI_NO_UNIT_LIMIT && as->as_maxunits < Units) {
170 mtx_unlock(&as->as_lock);
176 if (!ACPISEM_AVAIL(as, Units))
180 while (!ACPISEM_AVAIL(as, Units)) {
181 as->as_waiters++;
182 error = cv_wait_sig(&as->as_cv, &as->as_lock);
183 as->as_waiters--;
184 if (error == EINTR || as->as_reset) {
192 while (!ACPISEM_AVAIL(as, Units)) {
194 as->as_waiters++;
195 error = cv_timedwait_sig(&as->as_cv, &as->as_lock, tmo);
196 as->as_waiters--;
197 if (error == EINTR || as->as_reset) {
201 if (ACPISEM_AVAIL(as, Units))
212 as->as_units -= Units;
214 mtx_unlock(&as->as_lock);
222 struct acpi_sema *as = (struct acpi_sema *)Handle;
227 if (as == NULL || Units == 0)
230 mtx_lock(&as->as_lock);
234 Units, as->as_name, as->as_units, as->as_waiters));
236 if (as->as_maxunits != ACPI_NO_UNIT_LIMIT &&
237 (as->as_maxunits < Units ||
238 as->as_maxunits - Units < as->as_units)) {
240 "exceeded max units %u\n", as->as_maxunits));
241 mtx_unlock(&as->as_lock);
245 as->as_units += Units;
246 if (as->as_waiters > 0 && ACPISEM_AVAIL(as, Units))
248 cv_signal(&as->as_cv);
250 mtx_unlock(&as->as_lock);