Lines Matching +full:data +full:- +full:size

1 // SPDX-License-Identifier: GPL-2.0+
37 ((((1 << gfo) - 1) - ((int)source_length * 8)) < 0); in calculate_galois_field_order()
42 return -1; in calculate_galois_field_order()
47 static int verify_bch(int ecc_bits, unsigned int prim_poly, u8 *data, in verify_bch() argument
53 return -1; in verify_bch()
58 return -1; in verify_bch()
60 if (bch->ecc_bytes != ecc_length) { in verify_bch()
62 return -1; in verify_bch()
67 int errors = decode_bch(bch, data, data_length, ecc, NULL, NULL, in verify_bch()
73 return -1; in verify_bch()
80 * n-th error located in ecc (no need for data in verify_bch()
84 /* n-th error located in data */ in verify_bch()
85 data[errloc[n] / 8] ^= 1 << (errloc[n] % 8); in verify_bch()
109 static int vpd_reader(size_t size, u8 *data, struct vpd_cache *userdata, in vpd_reader() argument
111 size_t size, u8 const *data)) in vpd_reader() argument
113 if (size < HEADER_BLOCK_LEN || !data || !fn) in vpd_reader()
114 return -EINVAL; in vpd_reader()
117 * +--------------------+----------------+--//--+--------------------+ in vpd_reader()
118 * | header block | data block | ... | ecc block | in vpd_reader()
119 * +--------------------+----------------+--//--+--------------------+ in vpd_reader()
121 * +------+-------+-----+ +------+-------------+ in vpd_reader()
123 * | len | off | | +------+-------------+ in vpd_reader()
124 * | ver | size | | : in vpd_reader()
126 * +------+-------+-----+ : in vpd_reader()
128 * <----- [1] ----> <--------- [2] ---------> in vpd_reader()
135 bch_configuration.prim_poly, data, in vpd_reader()
137 &data[HEADER_BLOCK_ECC_OFF], HEADER_BLOCK_ECC_LEN); in vpd_reader()
142 if (data[ID] != HEADER_BLOCK_ID || data[LEN] != HEADER_BLOCK_LEN || in vpd_reader()
143 data[VER] != 0 || data[TYP] != 0 || in vpd_reader()
144 ntohl(*(u32 *)(&data[4])) != HEADER_BLOCK_MAGIC) in vpd_reader()
145 return -EINVAL; in vpd_reader()
147 u32 offset = ntohl(*(u32 *)(&data[8])); in vpd_reader()
148 u16 size_bits = ntohs(*(u16 *)(&data[12])); in vpd_reader()
151 if (offset + 3 >= size) in vpd_reader()
152 return -EINVAL; in vpd_reader()
155 u8 *ecc = &data[offset]; in vpd_reader()
158 ecc[LEN] + offset > size || in vpd_reader()
159 ecc[LEN] - BLOCK_SIZE != size_bits / 8 || ecc[VER] != 1 || in vpd_reader()
161 return -EINVAL; in vpd_reader()
164 * Use the header block to locate the ECC block and verify the data in vpd_reader()
168 bch_configuration.prim_poly, &data[data[LEN]], in vpd_reader()
169 offset - data[LEN], &data[offset + BLOCK_SIZE], in vpd_reader()
170 ecc[LEN] - BLOCK_SIZE); in vpd_reader()
175 size = offset; in vpd_reader()
179 size -= data[LEN]; in vpd_reader()
180 data += data[LEN]; in vpd_reader()
182 if (size == 0) { in vpd_reader()
187 if (size < BLOCK_SIZE || data[LEN] < BLOCK_SIZE) { in vpd_reader()
188 /* Not enough data for a header, or short header. */ in vpd_reader()
189 return -EINVAL; in vpd_reader()
192 ret = fn(userdata, data[ID], data[VER], data[TYP], in vpd_reader()
193 data[LEN] - BLOCK_SIZE, &data[BLOCK_SIZE]); in vpd_reader()
201 u8 type, size_t size, u8 const *data)) in read_vpd() argument
203 static const size_t size = CONFIG_SYS_VPD_EEPROM_SIZE; in read_vpd() local
206 u8 *data; in read_vpd() local
213 data = malloc(size); in read_vpd()
214 if (!data) in read_vpd()
215 return -ENOMEM; in read_vpd()
219 data, size); in read_vpd()
221 res = vpd_reader(size, data, cache, process_block); in read_vpd()
223 free(data); in read_vpd()