Lines Matching full:as

16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
79 struct acpi_sema *as; in AcpiOsCreateSemaphore() local
86 if ((as = malloc(sizeof(*as), M_ACPISEM, M_NOWAIT | M_ZERO)) == NULL) in AcpiOsCreateSemaphore()
89 snprintf(as->as_name, sizeof(as->as_name), "ACPI sema (%p)", as); in AcpiOsCreateSemaphore()
90 mtx_init(&as->as_lock, as->as_name, NULL, MTX_DEF); in AcpiOsCreateSemaphore()
91 cv_init(&as->as_cv, as->as_name); in AcpiOsCreateSemaphore()
92 as->as_maxunits = MaxUnits; in AcpiOsCreateSemaphore()
93 as->as_units = InitialUnits; in AcpiOsCreateSemaphore()
95 *OutHandle = (ACPI_SEMAPHORE)as; in AcpiOsCreateSemaphore()
98 as->as_name, MaxUnits, InitialUnits)); in AcpiOsCreateSemaphore()
106 struct acpi_sema *as = (struct acpi_sema *)Handle; in AcpiOsDeleteSemaphore() local
110 if (as == NULL) in AcpiOsDeleteSemaphore()
113 mtx_lock(&as->as_lock); in AcpiOsDeleteSemaphore()
115 ACPI_DEBUG_PRINT((ACPI_DB_MUTEX, "delete %s\n", as->as_name)); in AcpiOsDeleteSemaphore()
117 if (as->as_waiters > 0) { in AcpiOsDeleteSemaphore()
120 as->as_name, as->as_units, as->as_waiters)); in AcpiOsDeleteSemaphore()
121 as->as_reset = 1; in AcpiOsDeleteSemaphore()
122 cv_broadcast(&as->as_cv); in AcpiOsDeleteSemaphore()
123 while (as->as_waiters > 0) { in AcpiOsDeleteSemaphore()
124 if (mtx_sleep(&as->as_reset, &as->as_lock, in AcpiOsDeleteSemaphore()
128 as->as_name, as->as_waiters)); in AcpiOsDeleteSemaphore()
129 mtx_unlock(&as->as_lock); in AcpiOsDeleteSemaphore()
134 as->as_name, as->as_units, as->as_waiters)); in AcpiOsDeleteSemaphore()
138 mtx_unlock(&as->as_lock); in AcpiOsDeleteSemaphore()
140 mtx_destroy(&as->as_lock); in AcpiOsDeleteSemaphore()
141 cv_destroy(&as->as_cv); in AcpiOsDeleteSemaphore()
142 free(as, M_ACPISEM); in AcpiOsDeleteSemaphore()
152 struct acpi_sema *as = (struct acpi_sema *)Handle; in AcpiOsWaitSemaphore() local
158 if (as == NULL || Units == 0) in AcpiOsWaitSemaphore()
161 mtx_lock(&as->as_lock); in AcpiOsWaitSemaphore()
165 Units, as->as_name, as->as_units, as->as_waiters, Timeout)); in AcpiOsWaitSemaphore()
167 if (as->as_maxunits != ACPI_NO_UNIT_LIMIT && as->as_maxunits < Units) { in AcpiOsWaitSemaphore()
168 mtx_unlock(&as->as_lock); in AcpiOsWaitSemaphore()
174 if (!ACPISEM_AVAIL(as, Units)) in AcpiOsWaitSemaphore()
178 while (!ACPISEM_AVAIL(as, Units)) { in AcpiOsWaitSemaphore()
179 as->as_waiters++; in AcpiOsWaitSemaphore()
180 error = cv_wait_sig(&as->as_cv, &as->as_lock); in AcpiOsWaitSemaphore()
181 as->as_waiters--; in AcpiOsWaitSemaphore()
182 if (error == EINTR || as->as_reset) { in AcpiOsWaitSemaphore()
194 while (!ACPISEM_AVAIL(as, Units)) { in AcpiOsWaitSemaphore()
200 mtx_unlock(&as->as_lock); in AcpiOsWaitSemaphore()
202 mtx_lock(&as->as_lock); in AcpiOsWaitSemaphore()
207 while (!ACPISEM_AVAIL(as, Units)) { in AcpiOsWaitSemaphore()
209 as->as_waiters++; in AcpiOsWaitSemaphore()
210 error = cv_timedwait_sig(&as->as_cv, &as->as_lock, tmo); in AcpiOsWaitSemaphore()
211 as->as_waiters--; in AcpiOsWaitSemaphore()
212 if (error == EINTR || as->as_reset) { in AcpiOsWaitSemaphore()
216 if (ACPISEM_AVAIL(as, Units)) in AcpiOsWaitSemaphore()
227 as->as_units -= Units; in AcpiOsWaitSemaphore()
229 mtx_unlock(&as->as_lock); in AcpiOsWaitSemaphore()
237 struct acpi_sema *as = (struct acpi_sema *)Handle; in AcpiOsSignalSemaphore() local
242 if (as == NULL || Units == 0) in AcpiOsSignalSemaphore()
245 mtx_lock(&as->as_lock); in AcpiOsSignalSemaphore()
249 Units, as->as_name, as->as_units, as->as_waiters)); in AcpiOsSignalSemaphore()
251 if (as->as_maxunits != ACPI_NO_UNIT_LIMIT && in AcpiOsSignalSemaphore()
252 (as->as_maxunits < Units || in AcpiOsSignalSemaphore()
253 as->as_maxunits - Units < as->as_units)) { in AcpiOsSignalSemaphore()
255 "exceeded max units %u\n", as->as_maxunits)); in AcpiOsSignalSemaphore()
256 mtx_unlock(&as->as_lock); in AcpiOsSignalSemaphore()
260 as->as_units += Units; in AcpiOsSignalSemaphore()
261 if (as->as_waiters > 0 && ACPISEM_AVAIL(as, Units)) in AcpiOsSignalSemaphore()
263 cv_signal(&as->as_cv); in AcpiOsSignalSemaphore()
265 mtx_unlock(&as->as_lock); in AcpiOsSignalSemaphore()