static int mv88e6xxx_g2_device_mapping_write(struct mv88e6xxx_chip *chip, int target, int port) { u16 val = (target << 8) | (port & 0xf); return mv88e6xxx_g2_update(chip, GLOBAL2_DEVICE_MAPPING, val); }
static int mv88e6xxx_g2_pot_write(struct mv88e6xxx_chip *chip, int pointer, u8 data) { u16 val = (pointer << 8) | (data & 0x7); return mv88e6xxx_g2_update(chip, GLOBAL2_PRIO_OVERRIDE, val); }
static int mv88e6xxx_g2_switch_mac_write(struct mv88e6xxx_chip *chip, unsigned int pointer, u8 data) { u16 val = (pointer << 8) | data; return mv88e6xxx_g2_update(chip, GLOBAL2_SWITCH_MAC, val); }
static int mv88e6xxx_g2_trunk_mapping_write(struct mv88e6xxx_chip *chip, int id, u16 map) { const u16 port_mask = BIT(mv88e6xxx_num_ports(chip)) - 1; u16 val = (id << 11) | (map & port_mask); return mv88e6xxx_g2_update(chip, GLOBAL2_TRUNK_MAPPING, val); }
static int mv88e6xxx_g2_trunk_mask_write(struct mv88e6xxx_chip *chip, int num, bool hash, u16 mask) { u16 val = (num << 12) | (mask & mv88e6xxx_port_mask(chip)); if (hash) val |= MV88E6XXX_G2_TRUNK_MASK_HASH; return mv88e6xxx_g2_update(chip, MV88E6XXX_G2_TRUNK_MASK, val); }
static int mv88e6xxx_g2_trunk_mask_write(struct mv88e6xxx_chip *chip, int num, bool hask, u16 mask) { const u16 port_mask = BIT(mv88e6xxx_num_ports(chip)) - 1; u16 val = (num << 12) | (mask & port_mask); if (hask) val |= GLOBAL2_TRUNK_MASK_HASK; return mv88e6xxx_g2_update(chip, GLOBAL2_TRUNK_MASK, val); }
/* mv88e6xxx_g2_avb_write -- Write one 16-bit word. */ static int mv88e6xxx_g2_avb_write(struct mv88e6xxx_chip *chip, u16 writeop, u16 data) { int err; err = mv88e6xxx_g2_write(chip, MV88E6352_G2_AVB_DATA, data); if (err) return err; return mv88e6xxx_g2_update(chip, MV88E6352_G2_AVB_CMD, writeop); }
/* mv88e6xxx_g2_avb_read -- Read one or multiple 16-bit words. * The hardware supports snapshotting up to four contiguous registers. */ static int mv88e6xxx_g2_avb_read(struct mv88e6xxx_chip *chip, u16 readop, u16 *data, int len) { int err; int i; /* Hardware can only snapshot four words. */ if (len > 4) return -E2BIG; err = mv88e6xxx_g2_update(chip, MV88E6352_G2_AVB_CMD, readop); if (err) return err; for (i = 0; i < len; ++i) { err = mv88e6xxx_g2_read(chip, MV88E6352_G2_AVB_DATA, &data[i]); if (err) return err; } return 0; }