Lines Matching +full:state +full:- +full:labels

1 /*-
76 handle = nvdimm_root_get_acpi_handle(nv->nv_dev); in read_label_area_size()
88 if (result_buffer->Type == ACPI_TYPE_BUFFER && in read_label_area_size()
89 result_buffer->Buffer.Length >= 12) { in read_label_area_size()
90 out = (uint32_t *)result_buffer->Buffer.Pointer; in read_label_area_size()
91 nv->label_area_size = out[1]; in read_label_area_size()
92 nv->max_label_xfer = out[2]; in read_label_area_size()
114 handle = nvdimm_root_get_acpi_handle(nv->nv_dev); in read_label_area()
116 offset + length > nv->label_area_size || in read_label_area()
126 to_read = MIN(length, nv->max_label_xfer); in read_label_area()
141 if (result_buf->Type != ACPI_TYPE_BUFFER || in read_label_area()
142 result_buf->Buffer.Pointer == NULL || in read_label_area()
143 result_buf->Buffer.Length != 4 + to_read || in read_label_area()
144 ((uint16_t *)result_buf->Buffer.Pointer)[0] != 0) { in read_label_area()
148 bcopy(result_buf->Buffer.Pointer + 4, dest, to_read); in read_label_area()
151 length -= to_read; in read_label_area()
187 if (strcmp(index->signature, NVDIMM_INDEX_BLOCK_SIGNATURE) != 0) in label_index_is_valid()
189 checksum = index->checksum; in label_index_is_valid()
190 index->checksum = 0; in label_index_is_valid()
192 index->this_offset != size * offset || index->this_size != size || in label_index_is_valid()
193 index->other_offset != size * (offset == 0 ? 1 : 0) || in label_index_is_valid()
194 index->seq == 0 || index->seq > 3 || index->slot_cnt > max_labels || in label_index_is_valid()
195 index->label_size != 1) in label_index_is_valid()
208 offset = nv->label_index->label_offset + in read_label()
209 num * (128 << nv->label_index->label_size); in read_label()
211 error = read_label_area(nv, (uint8_t *)&entry->label, offset, in read_label()
217 checksum = entry->label.checksum; in read_label()
218 entry->label.checksum = 0; in read_label()
219 if (checksum != fletcher64(&entry->label, sizeof(entry->label)) || in read_label()
220 entry->label.slot != num) { in read_label()
226 if (SLIST_EMPTY(&nv->labels) || in read_label()
227 entry->label.dimm_phys_addr <= in read_label()
228 SLIST_FIRST(&nv->labels)->label.dimm_phys_addr) { in read_label()
229 SLIST_INSERT_HEAD(&nv->labels, entry, link); in read_label()
232 SLIST_FOREACH_SAFE(i, &nv->labels, link, next) { in read_label()
234 entry->label.dimm_phys_addr <= next->label.dimm_phys_addr) { in read_label()
251 num_labels = 8 * (index_size - in read_labels()
254 nv->label_area_size) in read_labels()
257 num_labels = (nv->label_area_size - index_size) / in read_labels()
275 if (((int)indices->seq - (int)index1->seq + 3) % 3 == 1) { in read_labels()
288 nv->label_index = malloc(index_size, M_NVDIMM, M_WAITOK); in read_labels()
289 bcopy(index_0_valid ? indices : index1, nv->label_index, index_size); in read_labels()
291 bit_ffc_at((bitstr_t *)nv->label_index->free, 0, in read_labels()
292 nv->label_index->slot_cnt, &n); in read_labels()
295 bit_ffc_at((bitstr_t *)nv->label_index->free, n + 1, in read_labels()
296 nv->label_index->slot_cnt, &n); in read_labels()
327 nv->nv_dev = dev; in nvdimm_attach()
328 nv->nv_handle = nvdimm_root_get_device_handle(dev); in nvdimm_attach()
336 acpi_nfit_get_flush_addrs(nfitbl, nv->nv_handle, &nv->nv_flush_addr, in nvdimm_attach()
337 &nv->nv_flush_addr_cnt); in nvdimm_attach()
344 acpi_nfit_get_memory_maps_by_dimm(nfitbl, nv->nv_handle, &maps, in nvdimm_attach()
347 free(nv->nv_flush_addr, M_NVDIMM); in nvdimm_attach()
354 flags |= maps[i]->Flags; in nvdimm_attach()
372 free(nv->nv_flush_addr, M_NVDIMM); in nvdimm_attach()
377 nv->nv_flags_str = strdup(sbuf_data(sb), M_NVDIMM); in nvdimm_attach()
380 CTLFLAG_RD | CTLFLAG_MPSAFE, nv->nv_flags_str, 0, in nvdimm_attach()
381 "NVDIMM State Flags"); in nvdimm_attach()
387 device_printf(dev, "flags: %s\n", nv->nv_flags_str); in nvdimm_attach()
389 AcpiPutTable(&nfitbl->Header); in nvdimm_attach()
393 * Ignoring errors reading labels. Not all NVDIMMs in nvdimm_attach()
394 * support labels and namespaces. in nvdimm_attach()
408 free(nv->nv_flags_str, M_NVDIMM); in nvdimm_detach()
409 free(nv->nv_flush_addr, M_NVDIMM); in nvdimm_detach()
410 free(nv->label_index, M_NVDIMM); in nvdimm_detach()
411 SLIST_FOREACH_SAFE(label, &nv->labels, link, next) { in nvdimm_detach()
412 SLIST_REMOVE_HEAD(&nv->labels, link); in nvdimm_detach()