Changeset 21718


Ignore:
Timestamp:
2010-06-08T22:18:38+02:00 (7 years ago)
Author:
juhosg
Message:

ip17xx: Add VLAN tag field

Since IP175D uses tag-based VLANs, we need an ability to set VLAN tag
of every VLAN.

Signed-off-by: Martin Mares <mj@…>
Signed-off-by: Patrick Horn <patrick.horn@…>

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/generic-2.6/files/drivers/net/phy/ip175c.c

    r21717 r21718  
    279279        struct vlan_state { 
    280280                unsigned int ports; 
     281                unsigned int tag;       // VLAN tag (IP175D only) 
    281282        } vlans[MAX_VLANS]; 
    282283        const struct register_mappings *regs; 
     
    744745        state->remove_tag = (state->vlan_enabled ? ((1<<state->regs->NUM_PORTS)-1) : 0x0000); 
    745746        state->add_tag = 0x0000; 
    746         for (i = 0; i < MAX_VLANS; i++) 
     747        for (i = 0; i < MAX_VLANS; i++) { 
    747748                state->vlans[i].ports = 0x0000; 
     749                state->vlans[i].tag = (i ? i : 16); 
     750        } 
    748751        for (i = 0; i < MAX_PORTS; i++) 
    749752                state->ports[i].pvid = 0; 
     
    10111014        val->value.s = state->regs->NAME; // Just a const pointer, won't be freed by swconfig. 
    10121015        return 0; 
     1016} 
     1017 
     1018static int ip175c_get_tag(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) 
     1019{ 
     1020        struct ip175c_state *state = dev->priv; 
     1021        int vlan = val->port_vlan; 
     1022 
     1023        if (vlan < 0 || vlan >= MAX_VLANS) 
     1024                return -EINVAL; 
     1025 
     1026        val->value.i = state->vlans[vlan].tag; 
     1027        return 0; 
     1028} 
     1029 
     1030static int ip175c_set_tag(struct switch_dev *dev, const struct switch_attr *attr, struct switch_val *val) 
     1031{ 
     1032        struct ip175c_state *state = dev->priv; 
     1033        int vlan = val->port_vlan; 
     1034        int tag = val->value.i; 
     1035 
     1036        if (vlan < 0 || vlan >= MAX_VLANS) 
     1037                return -EINVAL; 
     1038 
     1039        if (tag < 0 || tag > 4095) 
     1040                return -EINVAL; 
     1041 
     1042        state->vlans[vlan].tag = tag; 
     1043        return state->regs->update_state(state); 
    10131044} 
    10141045 
     
    11611192        IP175C_REGISTER_VALUE, 
    11621193        IP175C_REGISTER_ERRNO, 
     1194}; 
     1195 
     1196enum Vlans { 
     1197        IP175C_VLAN_TAG, 
    11631198}; 
    11641199 
     
    12081243 
    12091244static const struct switch_attr ip175c_vlan[] = { 
     1245        [IP175C_VLAN_TAG] = { 
     1246                .id = IP175C_VLAN_TAG, 
     1247                .type = SWITCH_TYPE_INT, 
     1248                .description = "VLAN tag (0-4095) [IP175D only]", 
     1249                .name = "tag", 
     1250                .get = ip175c_get_tag, 
     1251                .set = ip175c_set_tag, 
     1252        } 
    12101253}; 
    12111254 
Note: See TracChangeset for help on using the changeset viewer.