Lines Matching full:bin
23 static void *bin_alloc(struct bin_container *bin, size_t len) in bin_alloc() argument
29 if (bin->end - bin->now < len) in bin_alloc()
32 ptr = bin->now; in bin_alloc()
33 bin->now += len; in bin_alloc()
38 static void bin_reserve(struct bin_container *bin, size_t len) in bin_reserve() argument
40 bin->size += ALIGN(len, 8); in bin_reserve()
43 static int bin_backing_alloc(struct bin_container *bin) in bin_backing_alloc() argument
45 bin->base = bin->now = kvzalloc(bin->size, GFP_KERNEL); in bin_backing_alloc()
46 if (!bin->base) in bin_backing_alloc()
49 bin->end = bin->base + bin->size; in bin_backing_alloc()
131 static int ccs_data_parse_version(struct bin_container *bin, in ccs_data_parse_version() argument
141 if (!bin->base) { in ccs_data_parse_version()
142 bin_reserve(bin, sizeof(*ccsdata->version)); in ccs_data_parse_version()
146 ccsdata->version = bin_alloc(bin, sizeof(*ccsdata->version)); in ccs_data_parse_version()
212 static int ccs_data_parse_regs(struct bin_container *bin, in ccs_data_parse_regs() argument
221 if (bin->base && __regs) { in ccs_data_parse_regs()
222 regs = regs_base = bin_alloc(bin, sizeof(*regs) * *__num_regs); in ccs_data_parse_regs()
285 if (!bin->base) { in ccs_data_parse_regs()
286 bin_reserve(bin, len); in ccs_data_parse_regs()
293 regs->value = bin_alloc(bin, len); in ccs_data_parse_regs()
305 if (!bin->base) in ccs_data_parse_regs()
306 bin_reserve(bin, sizeof(*regs) * num_regs); in ccs_data_parse_regs()
311 if (bin->base && __regs) { in ccs_data_parse_regs()
321 static int ccs_data_parse_reg_rules(struct bin_container *bin, in ccs_data_parse_reg_rules() argument
329 if (!bin->base) in ccs_data_parse_reg_rules()
330 return ccs_data_parse_regs(bin, NULL, NULL, payload, endp, dev); in ccs_data_parse_reg_rules()
332 rval = ccs_data_parse_regs(bin, NULL, __num_regs, payload, endp, dev); in ccs_data_parse_reg_rules()
336 return ccs_data_parse_regs(bin, __regs, __num_regs, payload, endp, in ccs_data_parse_reg_rules()
347 static int ccs_data_parse_ffd(struct bin_container *bin, in ccs_data_parse_ffd() argument
365 if (!bin->base) { in ccs_data_parse_ffd()
366 bin_reserve(bin, sizeof(**ffd)); in ccs_data_parse_ffd()
367 bin_reserve(bin, __ffd->num_column_descs * in ccs_data_parse_ffd()
369 bin_reserve(bin, __ffd->num_row_descs * in ccs_data_parse_ffd()
375 *ffd = bin_alloc(bin, sizeof(**ffd)); in ccs_data_parse_ffd()
383 (*ffd)->column_descs = bin_alloc(bin, __ffd->num_column_descs * in ccs_data_parse_ffd()
391 (*ffd)->row_descs = bin_alloc(bin, __ffd->num_row_descs * in ccs_data_parse_ffd()
405 static int ccs_data_parse_pdaf_readout(struct bin_container *bin, in ccs_data_parse_pdaf_readout() argument
415 if (!bin->base) { in ccs_data_parse_pdaf_readout()
416 bin_reserve(bin, sizeof(**pdaf_readout)); in ccs_data_parse_pdaf_readout()
418 *pdaf_readout = bin_alloc(bin, sizeof(**pdaf_readout)); in ccs_data_parse_pdaf_readout()
426 return ccs_data_parse_ffd(bin, !bin->base ? NULL : &(*pdaf_readout)->ffd, in ccs_data_parse_pdaf_readout()
430 static int ccs_data_parse_rules(struct bin_container *bin, in ccs_data_parse_rules() argument
440 if (bin->base) { in ccs_data_parse_rules()
442 bin_alloc(bin, sizeof(*rules) * *__num_rules); in ccs_data_parse_rules()
484 if (!bin->base) { in ccs_data_parse_rules()
485 bin_reserve(bin, in ccs_data_parse_rules()
498 if_rule = bin_alloc(bin, in ccs_data_parse_rules()
518 if (bin->base && !rules) in ccs_data_parse_rules()
523 rval = ccs_data_parse_reg_rules(bin, in ccs_data_parse_rules()
535 rval = ccs_data_parse_ffd(bin, rules ? in ccs_data_parse_rules()
544 rval = ccs_data_parse_reg_rules(bin, in ccs_data_parse_rules()
556 rval = ccs_data_parse_pdaf_readout(bin, in ccs_data_parse_rules()
575 if (!bin->base) { in ccs_data_parse_rules()
576 bin_reserve(bin, sizeof(*rules) * num_rules); in ccs_data_parse_rules()
588 static int ccs_data_parse_pdaf(struct bin_container *bin, struct ccs_pdaf_pix_loc **pdaf, in ccs_data_parse_pdaf() argument
603 if (bin->base) { in ccs_data_parse_pdaf()
604 *pdaf = bin_alloc(bin, sizeof(**pdaf)); in ccs_data_parse_pdaf()
608 bin_reserve(bin, sizeof(**pdaf)); in ccs_data_parse_pdaf()
615 if (bin->base) { in ccs_data_parse_pdaf()
630 if (bin->base) { in ccs_data_parse_pdaf()
632 bin_alloc(bin, in ccs_data_parse_pdaf()
638 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_block_desc_group) * in ccs_data_parse_pdaf()
654 if (bin->base) { in ccs_data_parse_pdaf()
663 if (bin->base) { in ccs_data_parse_pdaf()
665 bin_alloc(bin, in ccs_data_parse_pdaf()
671 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_block_desc) * in ccs_data_parse_pdaf()
684 if (!bin->base) in ccs_data_parse_pdaf()
703 if (bin->base) { in ccs_data_parse_pdaf()
705 bin_alloc(bin, in ccs_data_parse_pdaf()
712 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_pixel_desc_group) * in ccs_data_parse_pdaf()
723 if (bin->base) { in ccs_data_parse_pdaf()
726 bin_alloc(bin, in ccs_data_parse_pdaf()
733 bin_reserve(bin, sizeof(struct ccs_pdaf_pix_loc_pixel_desc) * in ccs_data_parse_pdaf()
745 if (!bin->base) in ccs_data_parse_pdaf()
763 static int ccs_data_parse_license(struct bin_container *bin, in ccs_data_parse_license() argument
771 if (!bin->base) { in ccs_data_parse_license()
772 bin_reserve(bin, size); in ccs_data_parse_license()
776 license = bin_alloc(bin, size); in ccs_data_parse_license()
804 static int __ccs_data_parse(struct bin_container *bin, in __ccs_data_parse() argument
824 if (!bin->base) in __ccs_data_parse()
835 bin->base ? false : verbose); in __ccs_data_parse()
844 rval = ccs_data_parse_version(bin, ccsdata, payload, in __ccs_data_parse()
851 bin, &ccsdata->sensor_read_only_regs, in __ccs_data_parse()
859 bin, &ccsdata->sensor_manufacturer_regs, in __ccs_data_parse()
867 bin, &ccsdata->module_read_only_regs, in __ccs_data_parse()
875 bin, &ccsdata->module_manufacturer_regs, in __ccs_data_parse()
882 rval = ccs_data_parse_pdaf(bin, &ccsdata->sensor_pdaf, in __ccs_data_parse()
888 rval = ccs_data_parse_pdaf(bin, &ccsdata->module_pdaf, in __ccs_data_parse()
895 bin, &ccsdata->sensor_rules, in __ccs_data_parse()
903 bin, &ccsdata->module_rules, in __ccs_data_parse()
910 rval = ccs_data_parse_license(bin, &ccsdata->license, in __ccs_data_parse()
946 struct bin_container bin = { 0 }; in ccs_data_parse() local
949 rval = __ccs_data_parse(&bin, ccsdata, data, len, dev, verbose); in ccs_data_parse()
953 rval = bin_backing_alloc(&bin); in ccs_data_parse()
957 rval = __ccs_data_parse(&bin, ccsdata, data, len, dev, false); in ccs_data_parse()
964 if (bin.now != bin.end) { in ccs_data_parse()
967 bin.base, bin.now, bin.end); in ccs_data_parse()
971 ccsdata->backing = bin.base; in ccs_data_parse()
976 kvfree(bin.base); in ccs_data_parse()