Lines Matching full:bin
24 static void *bin_alloc(struct bin_container *bin, size_t len) in bin_alloc() argument
30 if (bin->end - bin->now < len) in bin_alloc()
33 ptr = bin->now; in bin_alloc()
34 bin->now += len; in bin_alloc()
39 static void bin_reserve(struct bin_container *bin, size_t len) in bin_reserve() argument
41 bin->size += ALIGN(len, 8); in bin_reserve()
44 static int bin_backing_alloc(struct bin_container *bin) in bin_backing_alloc() argument
46 bin->base = bin->now = kvzalloc(bin->size, GFP_KERNEL); in bin_backing_alloc()
47 if (!bin->base) in bin_backing_alloc()
50 bin->end = bin->base + bin->size; in bin_backing_alloc()
132 static int ccs_data_parse_version(struct bin_container *bin, in ccs_data_parse_version() argument
142 if (!bin->base) { in ccs_data_parse_version()
143 bin_reserve(bin, sizeof(*ccsdata->version)); in ccs_data_parse_version()
147 ccsdata->version = bin_alloc(bin, sizeof(*ccsdata->version)); in ccs_data_parse_version()
213 static int ccs_data_parse_regs(struct bin_container *bin, in ccs_data_parse_regs() argument
222 if (bin->base && __regs) { in ccs_data_parse_regs()
223 regs = regs_base = bin_alloc(bin, sizeof(*regs) * *__num_regs); in ccs_data_parse_regs()
286 if (!bin->base) { in ccs_data_parse_regs()
287 bin_reserve(bin, len); in ccs_data_parse_regs()
294 regs->value = bin_alloc(bin, len); in ccs_data_parse_regs()
306 if (!bin->base) in ccs_data_parse_regs()
307 bin_reserve(bin, sizeof(*regs) * num_regs); in ccs_data_parse_regs()
312 if (bin->base && __regs) { in ccs_data_parse_regs()
322 static int ccs_data_parse_reg_rules(struct bin_container *bin, in ccs_data_parse_reg_rules() argument
330 if (!bin->base) in ccs_data_parse_reg_rules()
331 return ccs_data_parse_regs(bin, NULL, NULL, payload, endp, dev); in ccs_data_parse_reg_rules()
333 rval = ccs_data_parse_regs(bin, NULL, __num_regs, payload, endp, dev); in ccs_data_parse_reg_rules()
337 return ccs_data_parse_regs(bin, __regs, __num_regs, payload, endp, in ccs_data_parse_reg_rules()
348 static int ccs_data_parse_ffd(struct bin_container *bin, in ccs_data_parse_ffd() argument
366 if (!bin->base) { in ccs_data_parse_ffd()
367 bin_reserve(bin, sizeof(**ffd)); in ccs_data_parse_ffd()
368 bin_reserve(bin, __ffd->num_column_descs * in ccs_data_parse_ffd()
370 bin_reserve(bin, __ffd->num_row_descs * in ccs_data_parse_ffd()
376 *ffd = bin_alloc(bin, sizeof(**ffd)); in ccs_data_parse_ffd()
384 (*ffd)->column_descs = bin_alloc(bin, __ffd->num_column_descs * in ccs_data_parse_ffd()
392 (*ffd)->row_descs = bin_alloc(bin, __ffd->num_row_descs * in ccs_data_parse_ffd()
406 static int ccs_data_parse_pdaf_readout(struct bin_container *bin, in ccs_data_parse_pdaf_readout() argument
416 if (!bin->base) { in ccs_data_parse_pdaf_readout()
417 bin_reserve(bin, sizeof(**pdaf_readout)); in ccs_data_parse_pdaf_readout()
419 *pdaf_readout = bin_alloc(bin, sizeof(**pdaf_readout)); in ccs_data_parse_pdaf_readout()
427 return ccs_data_parse_ffd(bin, !bin->base ? NULL : &(*pdaf_readout)->ffd, in ccs_data_parse_pdaf_readout()
431 static int ccs_data_parse_rules(struct bin_container *bin, in ccs_data_parse_rules() argument
441 if (bin->base) { in ccs_data_parse_rules()
443 bin_alloc(bin, sizeof(*rules) * *__num_rules); in ccs_data_parse_rules()
485 if (!bin->base) { in ccs_data_parse_rules()
486 bin_reserve(bin, in ccs_data_parse_rules()
499 if_rule = bin_alloc(bin, in ccs_data_parse_rules()
519 if (bin->base && !rules) in ccs_data_parse_rules()
524 rval = ccs_data_parse_reg_rules(bin, in ccs_data_parse_rules()
536 rval = ccs_data_parse_ffd(bin, rules ? in ccs_data_parse_rules()
545 rval = ccs_data_parse_reg_rules(bin, in ccs_data_parse_rules()
557 rval = ccs_data_parse_pdaf_readout(bin, in ccs_data_parse_rules()
576 if (!bin->base) { in ccs_data_parse_rules()
577 bin_reserve(bin, sizeof(*rules) * num_rules); in ccs_data_parse_rules()
589 static int ccs_data_parse_pdaf(struct bin_container *bin, struct ccs_pdaf_pix_loc **pdaf, in ccs_data_parse_pdaf() argument
604 if (bin->base) { in ccs_data_parse_pdaf()
605 *pdaf = bin_alloc(bin, sizeof(**pdaf)); in ccs_data_parse_pdaf()
609 bin_reserve(bin, sizeof(**pdaf)); in ccs_data_parse_pdaf()
616 if (bin->base) { in ccs_data_parse_pdaf()
631 if (bin->base) { in ccs_data_parse_pdaf()
633 bin_alloc(bin, in ccs_data_parse_pdaf()
639 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_block_desc_group) * in ccs_data_parse_pdaf()
655 if (bin->base) { in ccs_data_parse_pdaf()
664 if (bin->base) { in ccs_data_parse_pdaf()
666 bin_alloc(bin, in ccs_data_parse_pdaf()
672 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_block_desc) * in ccs_data_parse_pdaf()
685 if (!bin->base) in ccs_data_parse_pdaf()
704 if (bin->base) { in ccs_data_parse_pdaf()
706 bin_alloc(bin, in ccs_data_parse_pdaf()
713 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_pixel_desc_group) * in ccs_data_parse_pdaf()
724 if (bin->base) { in ccs_data_parse_pdaf()
727 bin_alloc(bin, in ccs_data_parse_pdaf()
734 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_pixel_desc) * in ccs_data_parse_pdaf()
746 if (!bin->base) in ccs_data_parse_pdaf()
764 static int ccs_data_parse_license(struct bin_container *bin, in ccs_data_parse_license() argument
772 if (!bin->base) { in ccs_data_parse_license()
773 bin_reserve(bin, size); in ccs_data_parse_license()
777 license = bin_alloc(bin, size); in ccs_data_parse_license()
805 static int __ccs_data_parse(struct bin_container *bin, in __ccs_data_parse() argument
825 if (!bin->base) in __ccs_data_parse()
836 bin->base ? false : verbose); in __ccs_data_parse()
845 rval = ccs_data_parse_version(bin, ccsdata, payload, in __ccs_data_parse()
852 bin, &ccsdata->sensor_read_only_regs, in __ccs_data_parse()
860 bin, &ccsdata->sensor_manufacturer_regs, in __ccs_data_parse()
868 bin, &ccsdata->module_read_only_regs, in __ccs_data_parse()
876 bin, &ccsdata->module_manufacturer_regs, in __ccs_data_parse()
883 rval = ccs_data_parse_pdaf(bin, &ccsdata->sensor_pdaf, in __ccs_data_parse()
889 rval = ccs_data_parse_pdaf(bin, &ccsdata->module_pdaf, in __ccs_data_parse()
896 bin, &ccsdata->sensor_rules, in __ccs_data_parse()
904 bin, &ccsdata->module_rules, in __ccs_data_parse()
911 rval = ccs_data_parse_license(bin, &ccsdata->license, in __ccs_data_parse()
947 struct bin_container bin = { 0 }; in ccs_data_parse() local
950 rval = __ccs_data_parse(&bin, ccsdata, data, len, dev, verbose); in ccs_data_parse()
954 rval = bin_backing_alloc(&bin); in ccs_data_parse()
958 rval = __ccs_data_parse(&bin, ccsdata, data, len, dev, false); in ccs_data_parse()
965 if (bin.now != bin.end) { in ccs_data_parse()
968 bin.base, bin.now, bin.end); in ccs_data_parse()
972 ccsdata->backing = bin.base; in ccs_data_parse()
977 kvfree(bin.base); in ccs_data_parse()