Lines Matching refs:chip

14 #include "chip.h"
19 static int mv88e6xxx_g1_vtu_fid_read(struct mv88e6xxx_chip *chip,
25 err = mv88e6xxx_g1_read(chip, MV88E6352_G1_VTU_FID, &val);
34 static int mv88e6xxx_g1_vtu_fid_write(struct mv88e6xxx_chip *chip,
39 return mv88e6xxx_g1_write(chip, MV88E6352_G1_VTU_FID, val);
44 static int mv88e6xxx_g1_vtu_sid_read(struct mv88e6xxx_chip *chip,
50 err = mv88e6xxx_g1_read(chip, MV88E6352_G1_VTU_SID, &val);
59 static int mv88e6xxx_g1_vtu_sid_write(struct mv88e6xxx_chip *chip,
64 return mv88e6xxx_g1_write(chip, MV88E6352_G1_VTU_SID, val);
69 static int mv88e6xxx_g1_vtu_op_wait(struct mv88e6xxx_chip *chip)
73 return mv88e6xxx_g1_wait_bit(chip, MV88E6XXX_G1_VTU_OP, bit, 0);
76 static int mv88e6xxx_g1_vtu_op(struct mv88e6xxx_chip *chip, u16 op)
80 err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_VTU_OP,
85 return mv88e6xxx_g1_vtu_op_wait(chip);
90 static int mv88e6xxx_g1_vtu_vid_read(struct mv88e6xxx_chip *chip,
96 err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_VID, &val);
110 static int mv88e6xxx_g1_vtu_vid_write(struct mv88e6xxx_chip *chip,
121 return mv88e6xxx_g1_write(chip, MV88E6XXX_G1_VTU_VID, val);
128 static int mv88e6185_g1_vtu_stu_data_read(struct mv88e6xxx_chip *chip,
138 err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_DATA1 + i, reg);
146 static int mv88e6185_g1_vtu_data_read(struct mv88e6xxx_chip *chip,
153 err = mv88e6185_g1_vtu_stu_data_read(chip, regs);
158 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
167 static int mv88e6185_g1_stu_data_read(struct mv88e6xxx_chip *chip,
174 err = mv88e6185_g1_vtu_stu_data_read(chip, regs);
179 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
188 static int mv88e6185_g1_vtu_data_write(struct mv88e6xxx_chip *chip,
195 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
208 err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_VTU_DATA1 + i, reg);
216 static int mv88e6390_g1_vtu_data_read(struct mv88e6xxx_chip *chip, u8 *data)
226 err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_DATA1 + i, reg);
232 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
241 static int mv88e6390_g1_vtu_data_write(struct mv88e6xxx_chip *chip, u8 *data)
247 for (i = 0; i < mv88e6xxx_num_ports(chip); ++i) {
258 err = mv88e6xxx_g1_write(chip, MV88E6XXX_G1_VTU_DATA1 + i, reg);
268 static int mv88e6xxx_g1_vtu_stu_getnext(struct mv88e6xxx_chip *chip,
273 err = mv88e6xxx_g1_vtu_sid_write(chip, entry);
277 err = mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_STU_GET_NEXT);
281 err = mv88e6xxx_g1_vtu_sid_read(chip, entry);
285 return mv88e6xxx_g1_vtu_vid_read(chip, entry);
288 static int mv88e6xxx_g1_vtu_stu_get(struct mv88e6xxx_chip *chip,
294 err = mv88e6xxx_g1_vtu_sid_read(chip, vtu);
300 err = mv88e6xxx_g1_vtu_stu_getnext(chip, &stu);
310 static int mv88e6xxx_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
315 err = mv88e6xxx_g1_vtu_op_wait(chip);
327 err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
332 err = mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_VTU_GET_NEXT);
336 return mv88e6xxx_g1_vtu_vid_read(chip, entry);
339 int mv88e6250_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
345 err = mv88e6xxx_g1_vtu_getnext(chip, entry);
350 err = mv88e6185_g1_vtu_data_read(chip, entry);
354 err = mv88e6185_g1_stu_data_read(chip, entry);
361 err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_OP, &val);
372 int mv88e6185_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
378 err = mv88e6xxx_g1_vtu_getnext(chip, entry);
383 err = mv88e6185_g1_vtu_data_read(chip, entry);
387 err = mv88e6185_g1_stu_data_read(chip, entry);
394 err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_OP, &val);
405 int mv88e6352_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
411 err = mv88e6xxx_g1_vtu_getnext(chip, entry);
416 err = mv88e6185_g1_vtu_data_read(chip, entry);
420 err = mv88e6xxx_g1_vtu_fid_read(chip, entry);
425 err = mv88e6xxx_g1_vtu_stu_get(chip, entry);
429 err = mv88e6185_g1_stu_data_read(chip, entry);
437 int mv88e6390_g1_vtu_getnext(struct mv88e6xxx_chip *chip,
443 err = mv88e6xxx_g1_vtu_getnext(chip, entry);
448 err = mv88e6390_g1_vtu_data_read(chip, entry->member);
453 err = mv88e6xxx_g1_vtu_stu_get(chip, entry);
457 err = mv88e6390_g1_vtu_data_read(chip, entry->state);
461 err = mv88e6xxx_g1_vtu_fid_read(chip, entry);
469 int mv88e6250_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
475 err = mv88e6xxx_g1_vtu_op_wait(chip);
479 err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
484 err = mv88e6185_g1_vtu_data_write(chip, entry);
495 return mv88e6xxx_g1_vtu_op(chip, op);
498 int mv88e6185_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
504 err = mv88e6xxx_g1_vtu_op_wait(chip);
508 err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
513 err = mv88e6185_g1_vtu_data_write(chip, entry);
524 return mv88e6xxx_g1_vtu_op(chip, op);
527 int mv88e6352_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
532 err = mv88e6xxx_g1_vtu_op_wait(chip);
536 err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
542 err = mv88e6185_g1_vtu_data_write(chip, entry);
546 err = mv88e6xxx_g1_vtu_sid_write(chip, entry);
551 err = mv88e6xxx_g1_vtu_op(chip,
556 err = mv88e6xxx_g1_vtu_fid_write(chip, entry);
562 return mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_VTU_LOAD_PURGE);
565 int mv88e6390_g1_vtu_loadpurge(struct mv88e6xxx_chip *chip,
570 err = mv88e6xxx_g1_vtu_op_wait(chip);
574 err = mv88e6xxx_g1_vtu_vid_write(chip, entry);
580 err = mv88e6390_g1_vtu_data_write(chip, entry->state);
584 err = mv88e6xxx_g1_vtu_sid_write(chip, entry);
589 err = mv88e6xxx_g1_vtu_op(chip,
595 err = mv88e6390_g1_vtu_data_write(chip, entry->member);
599 err = mv88e6xxx_g1_vtu_fid_write(chip, entry);
605 return mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_VTU_LOAD_PURGE);
608 int mv88e6xxx_g1_vtu_flush(struct mv88e6xxx_chip *chip)
612 err = mv88e6xxx_g1_vtu_op_wait(chip);
616 return mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_FLUSH_ALL);
621 struct mv88e6xxx_chip *chip = dev_id;
627 mv88e6xxx_reg_lock(chip);
629 err = mv88e6xxx_g1_vtu_op(chip, MV88E6XXX_G1_VTU_OP_GET_CLR_VIOLATION);
633 err = mv88e6xxx_g1_read(chip, MV88E6XXX_G1_VTU_OP, &val);
637 err = mv88e6xxx_g1_vtu_vid_read(chip, &entry);
644 dev_err_ratelimited(chip->dev, "VTU member violation for vid %d, source port %d\n",
646 chip->ports[spid].vtu_member_violation++;
650 dev_dbg_ratelimited(chip->dev, "VTU miss violation for vid %d, source port %d\n",
652 chip->ports[spid].vtu_miss_violation++;
655 mv88e6xxx_reg_unlock(chip);
660 mv88e6xxx_reg_unlock(chip);
662 dev_err(chip->dev, "VTU problem: error %d while handling interrupt\n",
668 int mv88e6xxx_g1_vtu_prob_irq_setup(struct mv88e6xxx_chip *chip)
672 chip->vtu_prob_irq = irq_find_mapping(chip->g1_irq.domain,
674 if (chip->vtu_prob_irq < 0)
675 return chip->vtu_prob_irq;
677 snprintf(chip->vtu_prob_irq_name, sizeof(chip->vtu_prob_irq_name),
678 "mv88e6xxx-%s-g1-vtu-prob", dev_name(chip->dev));
680 err = request_threaded_irq(chip->vtu_prob_irq, NULL,
682 IRQF_ONESHOT, chip->vtu_prob_irq_name,
683 chip);
685 irq_dispose_mapping(chip->vtu_prob_irq);
690 void mv88e6xxx_g1_vtu_prob_irq_free(struct mv88e6xxx_chip *chip)
692 free_irq(chip->vtu_prob_irq, chip);
693 irq_dispose_mapping(chip->vtu_prob_irq);