mirror of
https://git.codelinaro.org/clo/qsdk/oss/boot/u-boot-2016.git
synced 2026-03-06 09:21:26 +01:00
Merge "drivers: net: ipq9574: Add src_mac drop acl"
This commit is contained in:
commit
3aa37aff5f
3 changed files with 43 additions and 20 deletions
|
|
@ -1873,6 +1873,8 @@ void get_phy_address(int offset)
|
|||
int ipq9574_edma_init(void *edma_board_cfg)
|
||||
{
|
||||
struct eth_device *dev[IPQ9574_EDMA_DEV];
|
||||
char octets[16];
|
||||
int field0, field1;
|
||||
struct ipq9574_edma_common_info *c_info[IPQ9574_EDMA_DEV];
|
||||
struct ipq9574_edma_hw *hw[IPQ9574_EDMA_DEV];
|
||||
uchar enet_addr[IPQ9574_EDMA_DEV * 6];
|
||||
|
|
@ -1976,6 +1978,17 @@ int ipq9574_edma_init(void *edma_board_cfg)
|
|||
dev[i]->enetaddr[4],
|
||||
dev[i]->enetaddr[5]);
|
||||
|
||||
snprintf(octets, sizeof(octets), "%x%x",
|
||||
dev[i]->enetaddr[0], dev[i]->enetaddr[1]);
|
||||
field0 = simple_strtoul(octets, NULL, 16);
|
||||
snprintf(octets, sizeof(octets), "%x%x%x%x",
|
||||
dev[i]->enetaddr[2], dev[i]->enetaddr[3],
|
||||
dev[i]->enetaddr[4], dev[i]->enetaddr[5]);
|
||||
field1 = simple_strtoul(octets, NULL, 16);
|
||||
|
||||
/* Drop packets with DUT's mac addr */
|
||||
ipq9574_ppe_acl_set(4, 0x1, field0, field1, 0xffffffff, 0x0, 0x1);
|
||||
|
||||
snprintf(dev[i]->name, sizeof(dev[i]->name), "eth%d", i);
|
||||
|
||||
ipq9574_edma_dev[i]->dev = dev[i];
|
||||
|
|
|
|||
|
|
@ -81,7 +81,7 @@ void ppe_ipo_action_set(union ipo_action_u *hw_act, int rule_id)
|
|||
}
|
||||
}
|
||||
|
||||
void ipq9574_ppe_acl_set(int rule_id, int rule_type, int pkt_type, int l4_port_no, int l4_port_mask, int permit, int deny)
|
||||
void ipq9574_ppe_acl_set(int rule_id, int rule_type, int field0, int field1, int mask, int permit, int deny)
|
||||
{
|
||||
union ipo_rule_reg_u hw_reg = {0};
|
||||
union ipo_mask_reg_u hw_mask = {0};
|
||||
|
|
@ -92,30 +92,37 @@ void ipq9574_ppe_acl_set(int rule_id, int rule_type, int pkt_type, int l4_port_n
|
|||
memset(&hw_act, 0, sizeof(hw_act));
|
||||
|
||||
if (rule_id < MAX_RULE) {
|
||||
hw_act.bf.dest_info_change_en = 1;
|
||||
hw_mask.bf.maskfield_0 = mask;
|
||||
hw_reg.bf.rule_type = rule_type;
|
||||
if (rule_type == ADPT_ACL_HPPE_IPV4_DIP_RULE) {
|
||||
hw_reg.bf.rule_type = ADPT_ACL_HPPE_IPV4_DIP_RULE;
|
||||
hw_reg.bf.rule_field_0 = l4_port_no;
|
||||
hw_reg.bf.rule_field_1 = pkt_type<<17;
|
||||
hw_mask.bf.maskfield_0 = l4_port_mask;
|
||||
hw_reg.bf.rule_field_0 = field1;
|
||||
hw_reg.bf.rule_field_1 = field0<<17;
|
||||
hw_mask.bf.maskfield_1 = 7<<17;
|
||||
if (permit == 0x0) {
|
||||
hw_act.bf.dest_info_change_en = 1;
|
||||
hw_act.bf.fwd_cmd = 0;/*forward*/
|
||||
hw_act.bf.fwd_cmd = 0;/* forward */
|
||||
hw_reg.bf.pri = 0x1;
|
||||
}
|
||||
|
||||
if (deny == 0x1) {
|
||||
hw_act.bf.dest_info_change_en = 1;
|
||||
hw_act.bf.fwd_cmd = 1;/*drop*/
|
||||
hw_act.bf.fwd_cmd = 1;/* drop */
|
||||
hw_reg.bf.pri = 0x0;
|
||||
|
||||
}
|
||||
hw_reg.bf.src_0 = 0x0;
|
||||
hw_reg.bf.src_1 = 0x3f;
|
||||
ppe_ipo_rule_reg_set(&hw_reg, rule_id);
|
||||
ppe_ipo_mask_reg_set(&hw_mask, rule_id);
|
||||
ppe_ipo_action_set(&hw_act, rule_id);
|
||||
} else if (rule_type == ADPT_ACL_HPPE_MAC_SA_RULE) {
|
||||
/* src mac AC rule */
|
||||
hw_reg.bf.rule_field_0 = field1;
|
||||
hw_reg.bf.rule_field_1 = field0;
|
||||
hw_mask.bf.maskfield_1 = 0xffff;
|
||||
hw_act.bf.fwd_cmd = 1;/* drop */
|
||||
hw_reg.bf.pri = 0x2;
|
||||
/* bypass fdb lean and fdb freash */
|
||||
hw_act.bf.bypass_bitmap_0 = 0x1800;
|
||||
}
|
||||
/* bind port1-port6 */
|
||||
hw_reg.bf.src_0 = 0x0;
|
||||
hw_reg.bf.src_1 = 0x3F;
|
||||
ppe_ipo_rule_reg_set(&hw_reg, rule_id);
|
||||
ppe_ipo_mask_reg_set(&hw_mask, rule_id);
|
||||
ppe_ipo_action_set(&hw_act, rule_id);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -68,8 +68,9 @@ enum {
|
|||
UDP_PKT,
|
||||
};
|
||||
|
||||
#define ADPT_ACL_HPPE_IPV4_DIP_RULE 4
|
||||
#define MAX_RULE 512
|
||||
#define ADPT_ACL_HPPE_IPV4_DIP_RULE 4
|
||||
#define ADPT_ACL_HPPE_MAC_SA_RULE 1
|
||||
#define MAX_RULE 512
|
||||
|
||||
struct ipo_rule_reg {
|
||||
uint32_t rule_field_0:32;
|
||||
|
|
@ -106,8 +107,10 @@ union ipo_mask_reg_u {
|
|||
struct ipo_action {
|
||||
uint32_t dest_info_change_en:1;
|
||||
uint32_t fwd_cmd:2;
|
||||
uint32_t _reserved0:29;
|
||||
uint32_t _reserved1:32;
|
||||
uint32_t _reserved0:15;
|
||||
uint32_t bypass_bitmap_0:14;
|
||||
uint32_t bypass_bitmap_1:18;
|
||||
uint32_t _reserved1:14;
|
||||
uint32_t _reserved2:32;
|
||||
uint32_t _reserved3:32;
|
||||
uint32_t _reserved4:32;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue