Lines Matching refs:async
471 struct efx_mcdi_async_param *async;
476 async = list_first_entry_or_null(
478 if (async) {
480 efx_mcdi_send_request(efx, async->cmd,
481 (const efx_dword_t *)(async + 1),
482 async->inlen);
488 if (async)
504 struct efx_mcdi_async_param *async;
540 async = list_first_entry(&mcdi->async_list,
542 list_del(&async->list);
545 outbuf = (efx_dword_t *)(async + 1);
547 min(async->outlen, data_len));
548 if (!timeout && rc && !async->quiet) {
552 efx_siena_mcdi_display_error(efx, async->cmd, async->inlen,
556 if (async->complete)
557 async->complete(efx, async->cookie, rc, outbuf,
558 min(async->outlen, data_len));
559 kfree(async);
982 struct efx_mcdi_async_param *async;
992 async = kmalloc(sizeof(*async) + ALIGN(max(inlen, outlen), 4),
994 if (!async)
997 async->cmd = cmd;
998 async->inlen = inlen;
999 async->outlen = outlen;
1000 async->quiet = quiet;
1001 async->complete = complete;
1002 async->cookie = cookie;
1003 memcpy(async + 1, inbuf, inlen);
1008 list_add_tail(&async->list, &mcdi->async_list);
1013 if (mcdi->async_list.next == &async->list &&
1020 kfree(async);
1137 struct efx_mcdi_async_param *async, *next;
1159 /* Nothing else will access the async list now, so it is safe
1164 list_for_each_entry_safe(async, next, &mcdi->async_list, list) {
1165 if (async->complete)
1166 async->complete(efx, async->cookie, -ENETDOWN, NULL, 0);
1167 list_del(&async->list);
1168 kfree(async);