Lines Matching refs:ipa
17 #include "ipa.h"
151 ipa_table_valid_one(struct ipa *ipa, bool route, bool ipv6, bool hashed)
153 struct device *dev = &ipa->pdev->dev;
159 mem = hashed ? &ipa->mem[IPA_MEM_V6_ROUTE_HASHED]
160 : &ipa->mem[IPA_MEM_V6_ROUTE];
162 mem = hashed ? &ipa->mem[IPA_MEM_V4_ROUTE_HASHED]
163 : &ipa->mem[IPA_MEM_V4_ROUTE];
167 mem = hashed ? &ipa->mem[IPA_MEM_V6_FILTER_HASHED]
168 : &ipa->mem[IPA_MEM_V6_FILTER];
170 mem = hashed ? &ipa->mem[IPA_MEM_V4_FILTER_HASHED]
171 : &ipa->mem[IPA_MEM_V4_FILTER];
175 if (!ipa_cmd_table_valid(ipa, mem, route, ipv6, hashed))
194 bool ipa_table_valid(struct ipa *ipa)
198 valid = valid && ipa_table_valid_one(ipa, false, false, false);
199 valid = valid && ipa_table_valid_one(ipa, false, false, true);
200 valid = valid && ipa_table_valid_one(ipa, false, true, false);
201 valid = valid && ipa_table_valid_one(ipa, false, true, true);
202 valid = valid && ipa_table_valid_one(ipa, true, false, false);
203 valid = valid && ipa_table_valid_one(ipa, true, false, true);
204 valid = valid && ipa_table_valid_one(ipa, true, true, false);
205 valid = valid && ipa_table_valid_one(ipa, true, true, true);
210 bool ipa_filter_map_valid(struct ipa *ipa, u32 filter_map)
212 struct device *dev = &ipa->pdev->dev;
241 static dma_addr_t ipa_table_addr(struct ipa *ipa, bool filter_mask, u16 count)
253 return ipa->table_addr + skip * sizeof(*ipa->table_virt);
259 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi);
273 addr = ipa_table_addr(ipa, false, count);
283 ipa_filter_reset_table(struct ipa *ipa, const struct ipa_mem *mem, bool modem)
285 u32 ep_mask = ipa->filter_map;
293 trans = ipa_cmd_trans_alloc(ipa, count);
295 dev_err(&ipa->pdev->dev,
308 endpoint = &ipa->endpoint[endpoint_id];
324 static int ipa_filter_reset(struct ipa *ipa, bool modem)
328 ret = ipa_filter_reset_table(ipa, &ipa->mem[IPA_MEM_V4_FILTER], modem);
332 ret = ipa_filter_reset_table(ipa, &ipa->mem[IPA_MEM_V4_FILTER_HASHED],
337 ret = ipa_filter_reset_table(ipa, &ipa->mem[IPA_MEM_V6_FILTER], modem);
340 ret = ipa_filter_reset_table(ipa, &ipa->mem[IPA_MEM_V6_FILTER_HASHED],
350 static int ipa_route_reset(struct ipa *ipa, bool modem)
356 trans = ipa_cmd_trans_alloc(ipa, 4);
358 dev_err(&ipa->pdev->dev,
373 &ipa->mem[IPA_MEM_V4_ROUTE]);
375 &ipa->mem[IPA_MEM_V4_ROUTE_HASHED]);
378 &ipa->mem[IPA_MEM_V6_ROUTE]);
380 &ipa->mem[IPA_MEM_V6_ROUTE_HASHED]);
387 void ipa_table_reset(struct ipa *ipa, bool modem)
389 struct device *dev = &ipa->pdev->dev;
396 ret = ipa_filter_reset(ipa, modem);
401 ret = ipa_route_reset(ipa, modem);
407 int ipa_table_hash_flush(struct ipa *ipa)
409 u32 offset = ipa_reg_filt_rout_hash_flush_offset(ipa->version);
414 if (ipa->version == IPA_VERSION_4_2)
417 trans = ipa_cmd_trans_alloc(ipa, 1);
419 dev_err(&ipa->pdev->dev, "no transaction for hash flush\n");
438 struct ipa *ipa = container_of(trans->gsi, struct ipa, gsi);
453 count = 1 + hweight32(ipa->filter_map);
462 addr = ipa_table_addr(ipa, filter, count);
463 hash_addr = ipa_table_addr(ipa, filter, hash_count);
469 int ipa_table_setup(struct ipa *ipa)
473 trans = ipa_cmd_trans_alloc(ipa, 4);
475 dev_err(&ipa->pdev->dev, "no transaction for table setup\n");
480 &ipa->mem[IPA_MEM_V4_ROUTE],
481 &ipa->mem[IPA_MEM_V4_ROUTE_HASHED]);
484 &ipa->mem[IPA_MEM_V6_ROUTE],
485 &ipa->mem[IPA_MEM_V6_ROUTE_HASHED]);
488 &ipa->mem[IPA_MEM_V4_FILTER],
489 &ipa->mem[IPA_MEM_V4_FILTER_HASHED]);
492 &ipa->mem[IPA_MEM_V6_FILTER],
493 &ipa->mem[IPA_MEM_V6_FILTER_HASHED]);
500 void ipa_table_teardown(struct ipa *ipa)
520 val = ioread32(endpoint->ipa->reg_virt + offset);
525 iowrite32(val, endpoint->ipa->reg_virt + offset);
528 static void ipa_filter_config(struct ipa *ipa, bool modem)
531 u32 ep_mask = ipa->filter_map;
534 if (ipa->version == IPA_VERSION_4_2)
543 endpoint = &ipa->endpoint[endpoint_id];
549 static void ipa_filter_deconfig(struct ipa *ipa, bool modem)
562 * @ipa: IPA pointer
567 static void ipa_route_tuple_zero(struct ipa *ipa, u32 route_id)
572 val = ioread32(ipa->reg_virt + offset);
577 iowrite32(val, ipa->reg_virt + offset);
580 static void ipa_route_config(struct ipa *ipa, bool modem)
585 if (ipa->version == IPA_VERSION_4_2)
590 ipa_route_tuple_zero(ipa, route_id);
593 static void ipa_route_deconfig(struct ipa *ipa, bool modem)
598 void ipa_table_config(struct ipa *ipa)
600 ipa_filter_config(ipa, false);
601 ipa_filter_config(ipa, true);
602 ipa_route_config(ipa, false);
603 ipa_route_config(ipa, true);
606 void ipa_table_deconfig(struct ipa *ipa)
608 ipa_route_deconfig(ipa, true);
609 ipa_route_deconfig(ipa, false);
610 ipa_filter_deconfig(ipa, true);
611 ipa_filter_deconfig(ipa, false);
652 int ipa_table_init(struct ipa *ipa)
655 struct device *dev = &ipa->pdev->dev;
674 ipa->table_virt = virt;
675 ipa->table_addr = addr;
685 *virt++ = cpu_to_le64((u64)ipa->filter_map << 1);
695 void ipa_table_exit(struct ipa *ipa)
698 struct device *dev = &ipa->pdev->dev;
703 dma_free_coherent(dev, size, ipa->table_virt, ipa->table_addr);
704 ipa->table_addr = 0;
705 ipa->table_virt = NULL;