Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/nvme/nvme.c
| Show All 28 Lines | |||||
| #include <sys/param.h> | #include <sys/param.h> | ||||
| #include <sys/bus.h> | #include <sys/bus.h> | ||||
| #include <sys/conf.h> | #include <sys/conf.h> | ||||
| #include <sys/module.h> | #include <sys/module.h> | ||||
| #include <vm/uma.h> | #include <vm/uma.h> | ||||
| #include "nvme_private.h" | #include "nvme_private.h" | ||||
| #include "nvmec_if.h" | |||||
| struct nvme_consumer { | struct nvme_consumer { | ||||
| uint32_t id; | uint32_t id; | ||||
| nvme_cons_ns_fn_t ns_fn; | nvme_cons_ns_fn_t ns_fn; | ||||
| nvme_cons_ctrlr_fn_t ctrlr_fn; | nvme_cons_ctrlr_fn_t ctrlr_fn; | ||||
| nvme_cons_async_fn_t async_fn; | nvme_cons_async_fn_t async_fn; | ||||
| nvme_cons_fail_fn_t fail_fn; | nvme_cons_fail_fn_t fail_fn; | ||||
| }; | }; | ||||
| ▲ Show 20 Lines • Show All 139 Lines • ▼ Show 20 Lines | for (dev_idx = 0; dev_idx < devcount; dev_idx++) { | ||||
| ctrlr = DEVICE2SOFTC(devlist[dev_idx]); | ctrlr = DEVICE2SOFTC(devlist[dev_idx]); | ||||
| nvme_notify(cons, ctrlr); | nvme_notify(cons, ctrlr); | ||||
| } | } | ||||
| free(devlist, M_TEMP); | free(devlist, M_TEMP); | ||||
| } | } | ||||
| void | void | ||||
| nvme_notify_async_consumers(struct nvme_controller *ctrlr, | nvme_notify_async(struct nvme_controller *ctrlr, | ||||
| const struct nvme_completion *async_cpl, | const struct nvme_completion *async_cpl, | ||||
| uint32_t log_page_id, void *log_page_buffer, | uint32_t log_page_id, void *log_page_buffer, uint32_t log_page_size) | ||||
| uint32_t log_page_size) | |||||
| { | { | ||||
| struct nvme_consumer *cons; | device_t *children; | ||||
| void *ctrlr_cookie; | int n_children; | ||||
| uint32_t i; | |||||
| for (i = 0; i < NVME_MAX_CONSUMERS; i++) { | if (device_get_children(ctrlr->dev, &children, &n_children) != 0) | ||||
| cons = &nvme_consumer[i]; | return; | ||||
| if (cons->id != INVALID_CONSUMER_ID && cons->async_fn != NULL && | |||||
| (ctrlr_cookie = ctrlr->cons_cookie[i]) != NULL) { | for (int i = 0; i < n_children; i++) | ||||
| (*cons->async_fn)(ctrlr_cookie, async_cpl, | NVMEC_ASYNC(children[i], async_cpl, log_page_id, | ||||
| log_page_id, log_page_buffer, log_page_size); | log_page_buffer, log_page_size); | ||||
| } | |||||
| } | free(children, M_TEMP); | ||||
| } | } | ||||
| void | void | ||||
| nvme_notify_fail_consumers(struct nvme_controller *ctrlr) | nvme_notify_fail_consumers(struct nvme_controller *ctrlr) | ||||
| { | { | ||||
| struct nvme_consumer *cons; | struct nvme_consumer *cons; | ||||
| void *ctrlr_cookie; | void *ctrlr_cookie; | ||||
| uint32_t i; | uint32_t i; | ||||
| ▲ Show 20 Lines • Show All 83 Lines • Show Last 20 Lines | |||||