Lines Matching defs:nvm

38 	int (*read_version)(struct tb_nvm *nvm);
39 int (*validate)(struct tb_nvm *nvm);
40 int (*write_headers)(struct tb_nvm *nvm);
56 static int intel_switch_nvm_version(struct tb_nvm *nvm)
58 struct tb_switch *sw = tb_to_switch(nvm->dev);
82 nvm->major = (val >> 16) & 0xff;
83 nvm->minor = (val >> 8) & 0xff;
84 nvm->active_size = nvm_size;
89 static int intel_switch_nvm_validate(struct tb_nvm *nvm)
91 struct tb_switch *sw = tb_to_switch(nvm->dev);
94 u8 *buf = nvm->buf;
96 image_size = nvm->buf_data_size;
130 nvm->buf_data_start = buf + hdr_size;
131 nvm->buf_data_size = image_size - hdr_size;
136 static int intel_switch_nvm_write_headers(struct tb_nvm *nvm)
138 struct tb_switch *sw = tb_to_switch(nvm->dev);
145 DMA_PORT_CSS_ADDRESS, nvm->buf + INTEL_NVM_CSS,
160 static int asmedia_switch_nvm_version(struct tb_nvm *nvm)
162 struct tb_switch *sw = tb_to_switch(nvm->dev);
170 nvm->major = (val << 16) & 0xff0000;
171 nvm->major |= val & 0x00ff00;
172 nvm->major |= (val >> 16) & 0x0000ff;
178 nvm->minor = (val << 16) & 0xff0000;
179 nvm->minor |= val & 0x00ff00;
180 nvm->minor |= (val >> 16) & 0x0000ff;
183 nvm->active_size = SZ_512K;
199 static int intel_retimer_nvm_version(struct tb_nvm *nvm)
201 struct tb_retimer *rt = tb_to_retimer(nvm->dev);
209 nvm->major = (val >> 16) & 0xff;
210 nvm->minor = (val >> 8) & 0xff;
218 nvm->active_size = nvm_size;
223 static int intel_retimer_nvm_validate(struct tb_nvm *nvm)
225 struct tb_retimer *rt = tb_to_retimer(nvm->dev);
227 u8 *buf = nvm->buf;
230 image_size = nvm->buf_data_size;
261 nvm->buf_data_start = buf + hdr_size;
262 nvm->buf_data_size = image_size - hdr_size;
288 struct tb_nvm *nvm;
329 nvm = kzalloc(sizeof(*nvm), GFP_KERNEL);
330 if (!nvm)
335 kfree(nvm);
339 nvm->id = ret;
340 nvm->dev = dev;
341 nvm->vops = vops;
343 return nvm;
348 * @nvm: NVM structure
354 int tb_nvm_read_version(struct tb_nvm *nvm)
356 const struct tb_nvm_vendor_ops *vops = nvm->vops;
359 return vops->read_version(nvm);
366 * @nvm: NVM structure
369 * checks pass returns %0. As side effect updates @nvm->buf_data_start
370 * and @nvm->buf_data_size fields to match the actual data to be written
375 int tb_nvm_validate(struct tb_nvm *nvm)
377 const struct tb_nvm_vendor_ops *vops = nvm->vops;
379 u8 *buf = nvm->buf;
387 image_size = nvm->buf_data_size;
395 nvm->buf_data_start = buf;
397 return vops->validate ? vops->validate(nvm) : 0;
402 * @nvm: NVM structure
410 int tb_nvm_write_headers(struct tb_nvm *nvm)
412 const struct tb_nvm_vendor_ops *vops = nvm->vops;
414 return vops->write_headers ? vops->write_headers(nvm) : 0;
419 * @nvm: NVM structure
423 * Registers new active NVmem device for @nvm. The @reg_read is called
425 * needed. The first parameter passed to @reg_read is @nvm structure.
428 int tb_nvm_add_active(struct tb_nvm *nvm, nvmem_reg_read_t reg_read)
438 config.id = nvm->id;
441 config.size = nvm->active_size;
442 config.dev = nvm->dev;
444 config.priv = nvm;
450 nvm->active = nvmem;
455 * tb_nvm_write_buf() - Write data to @nvm buffer
456 * @nvm: NVM structure
462 * written to the flash. Copies @bytes from @val to @nvm->buf starting
465 int tb_nvm_write_buf(struct tb_nvm *nvm, unsigned int offset, void *val,
468 if (!nvm->buf) {
469 nvm->buf = vmalloc(NVM_MAX_SIZE);
470 if (!nvm->buf)
474 nvm->flushed = false;
475 nvm->buf_data_size = offset + bytes;
476 memcpy(nvm->buf + offset, val, bytes);
482 * @nvm: NVM structure
486 * Registers new non-active NVmem device for @nvm. The @reg_write is called
488 * needed. The first parameter passed to @reg_write is @nvm structure.
493 int tb_nvm_add_non_active(struct tb_nvm *nvm, nvmem_reg_write_t reg_write)
503 config.id = nvm->id;
507 config.dev = nvm->dev;
509 config.priv = nvm;
515 nvm->non_active = nvmem;
521 * @nvm: NVM structure to release
525 void tb_nvm_free(struct tb_nvm *nvm)
527 if (nvm) {
528 nvmem_unregister(nvm->non_active);
529 nvmem_unregister(nvm->active);
530 vfree(nvm->buf);
531 ida_free(&nvm_ida, nvm->id);
533 kfree(nvm);