• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/linux/linux-2.6.36/drivers/ieee1394/

Lines Matching defs:kv

90 static void free_keyval(struct csr1212_keyval *kv)
92 if ((kv->key.type == CSR1212_KV_TYPE_LEAF) &&
93 (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM))
94 CSR1212_FREE(kv->value.leaf.data);
96 CSR1212_FREE(kv);
139 csr1212_find_keyval(struct csr1212_keyval *dir, struct csr1212_keyval *kv)
145 if (pos->kv == kv)
153 struct csr1212_keyval *kv;
155 for (kv = kv_list->next; kv && (kv != kv_list); kv = kv->next)
156 if (kv->offset == offset)
157 return kv;
213 struct csr1212_keyval *kv;
218 kv = CSR1212_MALLOC(sizeof(*kv));
219 if (!kv)
222 atomic_set(&kv->refcnt, 1);
223 kv->key.type = type;
224 kv->key.id = key;
225 kv->associate = NULL;
226 kv->next = NULL;
227 kv->prev = NULL;
228 kv->offset = 0;
229 kv->valid = 0;
230 return kv;
235 struct csr1212_keyval *kv;
237 kv = csr1212_new_keyval(CSR1212_KV_TYPE_IMMEDIATE, key);
238 if (!kv)
241 kv->value.immediate = value;
242 kv->valid = 1;
243 return kv;
249 struct csr1212_keyval *kv;
251 kv = csr1212_new_keyval(CSR1212_KV_TYPE_LEAF, key);
252 if (!kv)
256 kv->value.leaf.data = CSR1212_MALLOC(data_len);
257 if (!kv->value.leaf.data) {
258 CSR1212_FREE(kv);
263 memcpy(kv->value.leaf.data, data, data_len);
265 kv->value.leaf.data = NULL;
268 kv->value.leaf.len = bytes_to_quads(data_len);
269 kv->offset = 0;
270 kv->valid = 1;
272 return kv;
278 struct csr1212_keyval *kv;
280 kv = csr1212_new_keyval(CSR1212_KV_TYPE_CSR_OFFSET, key);
281 if (!kv)
284 kv->value.csr_offset = csr_offset;
286 kv->offset = 0;
287 kv->valid = 1;
288 return kv;
293 struct csr1212_keyval *kv;
295 kv = csr1212_new_keyval(CSR1212_KV_TYPE_DIRECTORY, key);
296 if (!kv)
299 kv->value.directory.len = 0;
300 kv->offset = 0;
301 kv->value.directory.dentries_head = NULL;
302 kv->value.directory.dentries_tail = NULL;
303 kv->valid = 1;
304 return kv;
307 void csr1212_associate_keyval(struct csr1212_keyval *kv,
310 BUG_ON(!kv || !associate || kv->key.id == CSR1212_KV_ID_DESCRIPTOR ||
316 (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID &&
318 (kv->key.id == CSR1212_KV_ID_EXTENDED_KEY &&
321 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY_SPECIFIER_ID) ||
323 kv->key.id != CSR1212_KV_ID_EXTENDED_KEY));
325 if (kv->associate)
326 csr1212_release_keyval(kv->associate);
329 kv->associate = associate;
333 struct csr1212_keyval *kv,
338 BUG_ON(!kv || !dir || dir->key.type != CSR1212_KV_TYPE_DIRECTORY);
345 csr1212_keep_keyval(kv);
346 dentry->kv = kv;
362 struct csr1212_keyval *kv)
364 return __csr1212_attach_keyval_to_directory(dir, kv, true);
367 #define CSR1212_DESCRIPTOR_LEAF_DATA(kv) \
368 (&((kv)->value.leaf.data[1]))
370 #define CSR1212_DESCRIPTOR_LEAF_SET_TYPE(kv, type) \
371 ((kv)->value.leaf.data[0] = \
372 cpu_to_be32(CSR1212_DESCRIPTOR_LEAF_SPECIFIER_ID(kv) | \
374 #define CSR1212_DESCRIPTOR_LEAF_SET_SPECIFIER_ID(kv, spec_id) \
375 ((kv)->value.leaf.data[0] = \
376 cpu_to_be32((CSR1212_DESCRIPTOR_LEAF_TYPE(kv) << \
384 struct csr1212_keyval *kv;
386 kv = csr1212_new_leaf(CSR1212_KV_ID_DESCRIPTOR, NULL,
388 if (!kv)
391 kmemcheck_annotate_variable(kv->value.leaf.data[0]);
392 CSR1212_DESCRIPTOR_LEAF_SET_TYPE(kv, dtype);
393 CSR1212_DESCRIPTOR_LEAF_SET_SPECIFIER_ID(kv, specifier_id);
396 memcpy(CSR1212_DESCRIPTOR_LEAF_DATA(kv), data, data_len);
398 return kv;
439 struct csr1212_keyval *kv;
448 kv = csr1212_new_descriptor_leaf(0, 0, NULL, quads_to_bytes(quads) +
450 if (!kv)
453 kv->value.leaf.data[1] = 0; /* width, character_set, language */
454 text = CSR1212_TEXTUAL_DESCRIPTOR_LEAF_DATA(kv);
458 return kv;
465 struct csr1212_keyval *kv)
469 if (!kv || !dir || dir->key.type != CSR1212_KV_TYPE_DIRECTORY)
472 dentry = csr1212_find_keyval(dir, kv);
488 csr1212_release_keyval(kv);
496 void csr1212_release_keyval(struct csr1212_keyval *kv)
502 if (!atomic_dec_and_test(&kv->refcnt))
505 dentry.kv = kv;
513 k = head->kv;
516 /* must not dec_and_test kv->refcnt again */
517 if (k != kv && !atomic_dec_and_test(&k->refcnt))
662 for (dkv = dentry->kv; dkv; dkv = dkv->associate) {
722 static size_t csr1212_generate_layout_order(struct csr1212_keyval *kv)
724 struct csr1212_keyval *ltail = kv;
727 while (kv) {
728 switch (kv->key.type) {
731 agg_size += kv->value.leaf.len + 1;
735 kv->value.directory.len =
736 csr1212_generate_layout_subdir(kv, &ltail);
738 agg_size += kv->value.directory.len + 1;
741 kv = kv->next;
750 struct csr1212_keyval *kv = start_kv;
755 cache->layout_head = kv;
757 while (kv && pos < cache->size) {
759 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
760 kv->offset = cache->offset + pos;
762 switch (kv->key.type) {
764 kv_len = kv->value.leaf.len;
768 kv_len = kv->value.directory.len;
780 okv = kv;
782 kv = kv->next;
789 return kv;
810 for (a = dentry->kv; a; a = a->associate) {
879 struct csr1212_keyval *kv, *nkv;
882 for (kv = cache->layout_head;
883 kv != cache->layout_tail->next;
884 kv = nkv) {
886 bytes_to_quads(kv->offset - cache->offset));
887 switch (kv->key.type) {
898 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
899 memcpy(kvi->data, kv->value.leaf.data,
900 quads_to_bytes(kv->value.leaf.len));
902 kvi->length = cpu_to_be16(kv->value.leaf.len);
903 kvi->crc = csr1212_crc16(kvi->data, kv->value.leaf.len);
907 csr1212_generate_tree_subdir(kv, kvi->data);
909 kvi->length = cpu_to_be16(kv->value.directory.len);
911 kv->value.directory.len);
915 nkv = kv->next;
916 if (kv->prev)
917 kv->prev->next = NULL;
918 if (kv->next)
919 kv->next->prev = NULL;
920 kv->prev = NULL;
921 kv->next = NULL;
933 struct csr1212_keyval *kv;
955 for (kv = csr->root_kv, cache = csr->cache_head;
956 kv;
975 kv = csr->root_kv;
979 kv = csr1212_generate_positions(cache, kv, init_offset);
1208 int csr1212_parse_keyval(struct csr1212_keyval *kv,
1217 &cache->data[bytes_to_quads(kv->offset - cache->offset)];
1223 switch (kv->key.type) {
1233 ret = csr1212_parse_dir_entry(kv, ki,
1234 kv->offset + quads_to_bytes(i + 1));
1236 kv->value.directory.len = kvi_len;
1240 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM) {
1243 kv->value.leaf.data = CSR1212_MALLOC(size);
1244 if (!kv->value.leaf.data) {
1249 kv->value.leaf.len = kvi_len;
1250 memcpy(kv->value.leaf.data, kvi->data, size);
1255 kv->valid = 1;
1261 csr1212_read_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1271 BUG_ON(!csr || !kv || csr->max_rom < 1);
1276 if (kv->offset >= cache->offset &&
1277 kv->offset < (cache->offset + cache->size))
1284 if (kv->key.id != CSR1212_KV_ID_EXTENDED_ROM)
1288 CSR1212_REGISTER_SPACE_BASE + kv->offset,
1292 kv->value.leaf.len = be32_to_cpu(q) >> 16;
1294 cache_size = (quads_to_bytes(kv->value.leaf.len + 1) +
1297 cache = csr1212_rom_cache_malloc(kv->offset, cache_size);
1301 kv->value.leaf.data = &cache->data[1];
1320 return csr1212_parse_keyval(kv, cache);
1323 cache_index = kv->offset - cache->offset;
1384 if ((kv_len + (kv->offset - cache->offset)) > cache->size) {
1408 return csr1212_parse_keyval(kv, cache);
1412 csr1212_get_keyval(struct csr1212_csr *csr, struct csr1212_keyval *kv)
1414 if (!kv)
1416 if (!kv->valid)
1417 if (csr1212_read_keyval(csr, kv) != CSR1212_SUCCESS)
1419 return kv;
1458 if (dentry->kv->key.id == CSR1212_KV_ID_EXTENDED_ROM &&
1459 !dentry->kv->valid) {
1460 ret = csr1212_read_keyval(csr, dentry->kv);