Lines Matching refs:rocker
198 struct rocker;
218 struct rocker *rocker; member
233 struct rocker { struct
458 static u32 rocker_msix_vector(const struct rocker *rocker, unsigned int vector) in rocker_msix_vector() argument
460 return rocker->msix_entries[vector].vector; in rocker_msix_vector()
465 return rocker_msix_vector(rocker_port->rocker, in rocker_msix_tx_vector()
471 return rocker_msix_vector(rocker_port->rocker, in rocker_msix_rx_vector()
475 #define rocker_write32(rocker, reg, val) \ argument
476 writel((val), (rocker)->hw_addr + (ROCKER_ ## reg))
477 #define rocker_read32(rocker, reg) \ argument
478 readl((rocker)->hw_addr + (ROCKER_ ## reg))
479 #define rocker_write64(rocker, reg, val) \ argument
480 writeq((val), (rocker)->hw_addr + (ROCKER_ ## reg))
481 #define rocker_read64(rocker, reg) \ argument
482 readq((rocker)->hw_addr + (ROCKER_ ## reg))
488 static int rocker_reg_test(const struct rocker *rocker) in rocker_reg_test() argument
490 const struct pci_dev *pdev = rocker->pdev; in rocker_reg_test()
496 rocker_write32(rocker, TEST_REG, rnd); in rocker_reg_test()
497 test_reg = rocker_read32(rocker, TEST_REG); in rocker_reg_test()
507 rocker_write64(rocker, TEST_REG64, rnd); in rocker_reg_test()
508 test_reg = rocker_read64(rocker, TEST_REG64); in rocker_reg_test()
518 static int rocker_dma_test_one(const struct rocker *rocker, in rocker_dma_test_one() argument
523 const struct pci_dev *pdev = rocker->pdev; in rocker_dma_test_one()
527 rocker_write32(rocker, TEST_DMA_CTRL, test_type); in rocker_dma_test_one()
547 static int rocker_dma_test_offset(const struct rocker *rocker, in rocker_dma_test_offset() argument
550 struct pci_dev *pdev = rocker->pdev; in rocker_dma_test_offset()
572 rocker_write64(rocker, TEST_DMA_ADDR, dma_handle); in rocker_dma_test_offset()
573 rocker_write32(rocker, TEST_DMA_SIZE, ROCKER_TEST_DMA_BUF_SIZE); in rocker_dma_test_offset()
576 err = rocker_dma_test_one(rocker, wait, ROCKER_TEST_DMA_CTRL_FILL, in rocker_dma_test_offset()
583 err = rocker_dma_test_one(rocker, wait, ROCKER_TEST_DMA_CTRL_CLEAR, in rocker_dma_test_offset()
592 err = rocker_dma_test_one(rocker, wait, ROCKER_TEST_DMA_CTRL_INVERT, in rocker_dma_test_offset()
607 static int rocker_dma_test(const struct rocker *rocker, in rocker_dma_test() argument
614 err = rocker_dma_test_offset(rocker, wait, i); in rocker_dma_test()
630 static int rocker_basic_hw_test(const struct rocker *rocker) in rocker_basic_hw_test() argument
632 const struct pci_dev *pdev = rocker->pdev; in rocker_basic_hw_test()
636 err = rocker_reg_test(rocker); in rocker_basic_hw_test()
642 err = request_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_TEST), in rocker_basic_hw_test()
651 rocker_write32(rocker, TEST_IRQ, ROCKER_MSIX_VEC_TEST); in rocker_basic_hw_test()
659 err = rocker_dma_test(rocker, &wait); in rocker_basic_hw_test()
664 free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_TEST), &wait); in rocker_basic_hw_test()
959 static void rocker_desc_head_set(const struct rocker *rocker, in rocker_desc_head_set() argument
968 rocker_write32(rocker, DMA_DESC_HEAD(info->type), head); in rocker_desc_head_set()
986 static void rocker_dma_ring_credits_set(const struct rocker *rocker, in rocker_dma_ring_credits_set() argument
991 rocker_write32(rocker, DMA_DESC_CREDITS(info->type), credits); in rocker_dma_ring_credits_set()
1000 static int rocker_dma_ring_create(const struct rocker *rocker, in rocker_dma_ring_create() argument
1017 info->desc = pci_alloc_consistent(rocker->pdev, in rocker_dma_ring_create()
1028 rocker_write32(rocker, DMA_DESC_CTRL(info->type), in rocker_dma_ring_create()
1030 rocker_write64(rocker, DMA_DESC_ADDR(info->type), info->mapaddr); in rocker_dma_ring_create()
1031 rocker_write32(rocker, DMA_DESC_SIZE(info->type), info->size); in rocker_dma_ring_create()
1036 static void rocker_dma_ring_destroy(const struct rocker *rocker, in rocker_dma_ring_destroy() argument
1039 rocker_write64(rocker, DMA_DESC_ADDR(info->type), 0); in rocker_dma_ring_destroy()
1041 pci_free_consistent(rocker->pdev, in rocker_dma_ring_destroy()
1047 static void rocker_dma_ring_pass_to_producer(const struct rocker *rocker, in rocker_dma_ring_pass_to_producer() argument
1058 rocker_desc_head_set(rocker, info, &info->desc_info[i]); in rocker_dma_ring_pass_to_producer()
1062 static int rocker_dma_ring_bufs_alloc(const struct rocker *rocker, in rocker_dma_ring_bufs_alloc() argument
1066 struct pci_dev *pdev = rocker->pdev; in rocker_dma_ring_bufs_alloc()
1109 static void rocker_dma_ring_bufs_free(const struct rocker *rocker, in rocker_dma_ring_bufs_free() argument
1113 struct pci_dev *pdev = rocker->pdev; in rocker_dma_ring_bufs_free()
1128 static int rocker_dma_rings_init(struct rocker *rocker) in rocker_dma_rings_init() argument
1130 const struct pci_dev *pdev = rocker->pdev; in rocker_dma_rings_init()
1133 err = rocker_dma_ring_create(rocker, ROCKER_DMA_CMD, in rocker_dma_rings_init()
1135 &rocker->cmd_ring); in rocker_dma_rings_init()
1141 spin_lock_init(&rocker->cmd_ring_lock); in rocker_dma_rings_init()
1143 err = rocker_dma_ring_bufs_alloc(rocker, &rocker->cmd_ring, in rocker_dma_rings_init()
1150 err = rocker_dma_ring_create(rocker, ROCKER_DMA_EVENT, in rocker_dma_rings_init()
1152 &rocker->event_ring); in rocker_dma_rings_init()
1158 err = rocker_dma_ring_bufs_alloc(rocker, &rocker->event_ring, in rocker_dma_rings_init()
1164 rocker_dma_ring_pass_to_producer(rocker, &rocker->event_ring); in rocker_dma_rings_init()
1168 rocker_dma_ring_destroy(rocker, &rocker->event_ring); in rocker_dma_rings_init()
1170 rocker_dma_ring_bufs_free(rocker, &rocker->cmd_ring, in rocker_dma_rings_init()
1173 rocker_dma_ring_destroy(rocker, &rocker->cmd_ring); in rocker_dma_rings_init()
1177 static void rocker_dma_rings_fini(struct rocker *rocker) in rocker_dma_rings_fini() argument
1179 rocker_dma_ring_bufs_free(rocker, &rocker->event_ring, in rocker_dma_rings_fini()
1181 rocker_dma_ring_destroy(rocker, &rocker->event_ring); in rocker_dma_rings_fini()
1182 rocker_dma_ring_bufs_free(rocker, &rocker->cmd_ring, in rocker_dma_rings_fini()
1184 rocker_dma_ring_destroy(rocker, &rocker->cmd_ring); in rocker_dma_rings_fini()
1191 const struct rocker *rocker = rocker_port->rocker; in rocker_dma_rx_ring_skb_map() local
1192 struct pci_dev *pdev = rocker->pdev; in rocker_dma_rx_ring_skb_map()
1242 static void rocker_dma_rx_ring_skb_unmap(const struct rocker *rocker, in rocker_dma_rx_ring_skb_unmap() argument
1245 struct pci_dev *pdev = rocker->pdev; in rocker_dma_rx_ring_skb_unmap()
1257 static void rocker_dma_rx_ring_skb_free(const struct rocker *rocker, in rocker_dma_rx_ring_skb_free() argument
1266 rocker_dma_rx_ring_skb_unmap(rocker, attrs); in rocker_dma_rx_ring_skb_free()
1273 const struct rocker *rocker = rocker_port->rocker; in rocker_dma_rx_ring_skbs_alloc() local
1287 rocker_dma_rx_ring_skb_free(rocker, &rx_ring->desc_info[i]); in rocker_dma_rx_ring_skbs_alloc()
1294 const struct rocker *rocker = rocker_port->rocker; in rocker_dma_rx_ring_skbs_free() local
1298 rocker_dma_rx_ring_skb_free(rocker, &rx_ring->desc_info[i]); in rocker_dma_rx_ring_skbs_free()
1303 struct rocker *rocker = rocker_port->rocker; in rocker_port_dma_rings_init() local
1306 err = rocker_dma_ring_create(rocker, in rocker_port_dma_rings_init()
1315 err = rocker_dma_ring_bufs_alloc(rocker, &rocker_port->tx_ring, in rocker_port_dma_rings_init()
1323 err = rocker_dma_ring_create(rocker, in rocker_port_dma_rings_init()
1332 err = rocker_dma_ring_bufs_alloc(rocker, &rocker_port->rx_ring, in rocker_port_dma_rings_init()
1345 rocker_dma_ring_pass_to_producer(rocker, &rocker_port->rx_ring); in rocker_port_dma_rings_init()
1350 rocker_dma_ring_bufs_free(rocker, &rocker_port->rx_ring, in rocker_port_dma_rings_init()
1353 rocker_dma_ring_destroy(rocker, &rocker_port->rx_ring); in rocker_port_dma_rings_init()
1355 rocker_dma_ring_bufs_free(rocker, &rocker_port->tx_ring, in rocker_port_dma_rings_init()
1358 rocker_dma_ring_destroy(rocker, &rocker_port->tx_ring); in rocker_port_dma_rings_init()
1364 struct rocker *rocker = rocker_port->rocker; in rocker_port_dma_rings_fini() local
1367 rocker_dma_ring_bufs_free(rocker, &rocker_port->rx_ring, in rocker_port_dma_rings_fini()
1369 rocker_dma_ring_destroy(rocker, &rocker_port->rx_ring); in rocker_port_dma_rings_fini()
1370 rocker_dma_ring_bufs_free(rocker, &rocker_port->tx_ring, in rocker_port_dma_rings_fini()
1372 rocker_dma_ring_destroy(rocker, &rocker_port->tx_ring); in rocker_port_dma_rings_fini()
1378 u64 val = rocker_read64(rocker_port->rocker, PORT_PHYS_ENABLE); in rocker_port_set_enable()
1384 rocker_write64(rocker_port->rocker, PORT_PHYS_ENABLE, val); in rocker_port_set_enable()
1393 struct rocker *rocker = dev_id; in rocker_cmd_irq_handler() local
1398 spin_lock(&rocker->cmd_ring_lock); in rocker_cmd_irq_handler()
1399 while ((desc_info = rocker_desc_tail_get(&rocker->cmd_ring))) { in rocker_cmd_irq_handler()
1409 spin_unlock(&rocker->cmd_ring_lock); in rocker_cmd_irq_handler()
1410 rocker_dma_ring_credits_set(rocker, &rocker->cmd_ring, credits); in rocker_cmd_irq_handler()
1427 static int rocker_event_link_change(const struct rocker *rocker, in rocker_event_link_change() argument
1443 if (port_number >= rocker->port_count) in rocker_event_link_change()
1446 rocker_port = rocker->ports[port_number]; in rocker_event_link_change()
1462 static int rocker_event_mac_vlan_seen(const struct rocker *rocker, in rocker_event_mac_vlan_seen() argument
1482 if (port_number >= rocker->port_count) in rocker_event_mac_vlan_seen()
1485 rocker_port = rocker->ports[port_number]; in rocker_event_mac_vlan_seen()
1494 static int rocker_event_process(const struct rocker *rocker, in rocker_event_process() argument
1511 return rocker_event_link_change(rocker, info); in rocker_event_process()
1513 return rocker_event_mac_vlan_seen(rocker, info); in rocker_event_process()
1521 struct rocker *rocker = dev_id; in rocker_event_irq_handler() local
1522 const struct pci_dev *pdev = rocker->pdev; in rocker_event_irq_handler()
1527 while ((desc_info = rocker_desc_tail_get(&rocker->event_ring))) { in rocker_event_irq_handler()
1533 err = rocker_event_process(rocker, desc_info); in rocker_event_irq_handler()
1539 rocker_desc_head_set(rocker, &rocker->event_ring, desc_info); in rocker_event_irq_handler()
1542 rocker_dma_ring_credits_set(rocker, &rocker->event_ring, credits); in rocker_event_irq_handler()
1580 struct rocker *rocker = rocker_port->rocker; in rocker_cmd_exec() local
1592 spin_lock_irqsave(&rocker->cmd_ring_lock, lock_flags); in rocker_cmd_exec()
1594 desc_info = rocker_desc_head_get(&rocker->cmd_ring); in rocker_cmd_exec()
1596 spin_unlock_irqrestore(&rocker->cmd_ring_lock, lock_flags); in rocker_cmd_exec()
1603 spin_unlock_irqrestore(&rocker->cmd_ring_lock, lock_flags); in rocker_cmd_exec()
1610 rocker_desc_head_set(rocker, &rocker->cmd_ring, desc_info); in rocker_cmd_exec()
1612 spin_unlock_irqrestore(&rocker->cmd_ring_lock, lock_flags); in rocker_cmd_exec()
2352 static int rocker_init_tbls(struct rocker *rocker) in rocker_init_tbls() argument
2354 hash_init(rocker->flow_tbl); in rocker_init_tbls()
2355 spin_lock_init(&rocker->flow_tbl_lock); in rocker_init_tbls()
2357 hash_init(rocker->group_tbl); in rocker_init_tbls()
2358 spin_lock_init(&rocker->group_tbl_lock); in rocker_init_tbls()
2360 hash_init(rocker->fdb_tbl); in rocker_init_tbls()
2361 spin_lock_init(&rocker->fdb_tbl_lock); in rocker_init_tbls()
2363 hash_init(rocker->internal_vlan_tbl); in rocker_init_tbls()
2364 spin_lock_init(&rocker->internal_vlan_tbl_lock); in rocker_init_tbls()
2366 hash_init(rocker->neigh_tbl); in rocker_init_tbls()
2367 spin_lock_init(&rocker->neigh_tbl_lock); in rocker_init_tbls()
2372 static void rocker_free_tbls(struct rocker *rocker) in rocker_free_tbls() argument
2383 spin_lock_irqsave(&rocker->flow_tbl_lock, flags); in rocker_free_tbls()
2384 hash_for_each_safe(rocker->flow_tbl, bkt, tmp, flow_entry, entry) in rocker_free_tbls()
2386 spin_unlock_irqrestore(&rocker->flow_tbl_lock, flags); in rocker_free_tbls()
2388 spin_lock_irqsave(&rocker->group_tbl_lock, flags); in rocker_free_tbls()
2389 hash_for_each_safe(rocker->group_tbl, bkt, tmp, group_entry, entry) in rocker_free_tbls()
2391 spin_unlock_irqrestore(&rocker->group_tbl_lock, flags); in rocker_free_tbls()
2393 spin_lock_irqsave(&rocker->fdb_tbl_lock, flags); in rocker_free_tbls()
2394 hash_for_each_safe(rocker->fdb_tbl, bkt, tmp, fdb_entry, entry) in rocker_free_tbls()
2396 spin_unlock_irqrestore(&rocker->fdb_tbl_lock, flags); in rocker_free_tbls()
2398 spin_lock_irqsave(&rocker->internal_vlan_tbl_lock, flags); in rocker_free_tbls()
2399 hash_for_each_safe(rocker->internal_vlan_tbl, bkt, in rocker_free_tbls()
2402 spin_unlock_irqrestore(&rocker->internal_vlan_tbl_lock, flags); in rocker_free_tbls()
2404 spin_lock_irqsave(&rocker->neigh_tbl_lock, flags); in rocker_free_tbls()
2405 hash_for_each_safe(rocker->neigh_tbl, bkt, tmp, neigh_entry, entry) in rocker_free_tbls()
2407 spin_unlock_irqrestore(&rocker->neigh_tbl_lock, flags); in rocker_free_tbls()
2411 rocker_flow_tbl_find(const struct rocker *rocker, in rocker_flow_tbl_find() argument
2417 hash_for_each_possible(rocker->flow_tbl, found, in rocker_flow_tbl_find()
2430 struct rocker *rocker = rocker_port->rocker; in rocker_flow_tbl_add() local
2437 spin_lock_irqsave(&rocker->flow_tbl_lock, lock_flags); in rocker_flow_tbl_add()
2439 found = rocker_flow_tbl_find(rocker, match); in rocker_flow_tbl_add()
2450 found->cookie = rocker->flow_tbl_next_cookie++; in rocker_flow_tbl_add()
2455 hash_add(rocker->flow_tbl, &found->entry, found->key_crc32); in rocker_flow_tbl_add()
2457 spin_unlock_irqrestore(&rocker->flow_tbl_lock, lock_flags); in rocker_flow_tbl_add()
2467 struct rocker *rocker = rocker_port->rocker; in rocker_flow_tbl_del() local
2475 spin_lock_irqsave(&rocker->flow_tbl_lock, lock_flags); in rocker_flow_tbl_del()
2477 found = rocker_flow_tbl_find(rocker, match); in rocker_flow_tbl_del()
2485 spin_unlock_irqrestore(&rocker->flow_tbl_lock, lock_flags); in rocker_flow_tbl_del()
2724 rocker_group_tbl_find(const struct rocker *rocker, in rocker_group_tbl_find() argument
2729 hash_for_each_possible(rocker->group_tbl, found, in rocker_group_tbl_find()
2756 struct rocker *rocker = rocker_port->rocker; in rocker_group_tbl_add() local
2760 spin_lock_irqsave(&rocker->group_tbl_lock, lock_flags); in rocker_group_tbl_add()
2762 found = rocker_group_tbl_find(rocker, match); in rocker_group_tbl_add()
2776 hash_add(rocker->group_tbl, &found->entry, found->group_id); in rocker_group_tbl_add()
2778 spin_unlock_irqrestore(&rocker->group_tbl_lock, lock_flags); in rocker_group_tbl_add()
2788 struct rocker *rocker = rocker_port->rocker; in rocker_group_tbl_del() local
2793 spin_lock_irqsave(&rocker->group_tbl_lock, lock_flags); in rocker_group_tbl_del()
2795 found = rocker_group_tbl_find(rocker, match); in rocker_group_tbl_del()
2803 spin_unlock_irqrestore(&rocker->group_tbl_lock, lock_flags); in rocker_group_tbl_del()
2903 rocker_neigh_tbl_find(const struct rocker *rocker, __be32 ip_addr) in rocker_neigh_tbl_find() argument
2907 hash_for_each_possible(rocker->neigh_tbl, found, in rocker_neigh_tbl_find()
2915 static void _rocker_neigh_add(struct rocker *rocker, in _rocker_neigh_add() argument
2920 entry->index = rocker->neigh_tbl_next_index++; in _rocker_neigh_add()
2924 hash_add(rocker->neigh_tbl, &entry->entry, in _rocker_neigh_add()
2955 struct rocker *rocker = rocker_port->rocker; in rocker_port_ipv4_neigh() local
2973 spin_lock_irqsave(&rocker->neigh_tbl_lock, lock_flags); in rocker_port_ipv4_neigh()
2975 found = rocker_neigh_tbl_find(rocker, ip_addr); in rocker_port_ipv4_neigh()
2986 _rocker_neigh_add(rocker, trans, entry); in rocker_port_ipv4_neigh()
2997 spin_unlock_irqrestore(&rocker->neigh_tbl_lock, lock_flags); in rocker_port_ipv4_neigh()
3076 struct rocker *rocker = rocker_port->rocker; in rocker_port_ipv4_nh() local
3090 spin_lock_irqsave(&rocker->neigh_tbl_lock, lock_flags); in rocker_port_ipv4_nh()
3092 found = rocker_neigh_tbl_find(rocker, ip_addr); in rocker_port_ipv4_nh()
3103 _rocker_neigh_add(rocker, trans, entry); in rocker_port_ipv4_nh()
3115 spin_unlock_irqrestore(&rocker->neigh_tbl_lock, lock_flags); in rocker_port_ipv4_nh()
3136 const struct rocker *rocker = rocker_port->rocker; in rocker_port_vlan_flood_group() local
3144 rocker->port_count, sizeof(u32)); in rocker_port_vlan_flood_group()
3153 for (i = 0; i < rocker->port_count; i++) { in rocker_port_vlan_flood_group()
3154 p = rocker->ports[i]; in rocker_port_vlan_flood_group()
3184 const struct rocker *rocker = rocker_port->rocker; in rocker_port_vlan_l2_groups() local
3214 for (i = 0; i < rocker->port_count; i++) { in rocker_port_vlan_l2_groups()
3215 p = rocker->ports[i]; in rocker_port_vlan_l2_groups()
3599 rocker_fdb_tbl_find(const struct rocker *rocker, in rocker_fdb_tbl_find() argument
3604 hash_for_each_possible(rocker->fdb_tbl, found, entry, match->key_crc32) in rocker_fdb_tbl_find()
3616 struct rocker *rocker = rocker_port->rocker; in rocker_port_fdb() local
3633 spin_lock_irqsave(&rocker->fdb_tbl_lock, lock_flags); in rocker_port_fdb()
3635 found = rocker_fdb_tbl_find(rocker, fdb); in rocker_port_fdb()
3646 hash_add(rocker->fdb_tbl, &fdb->entry, in rocker_port_fdb()
3650 spin_unlock_irqrestore(&rocker->fdb_tbl_lock, lock_flags); in rocker_port_fdb()
3667 struct rocker *rocker = rocker_port->rocker; in rocker_port_fdb_flush() local
3680 spin_lock_irqsave(&rocker->fdb_tbl_lock, lock_flags); in rocker_port_fdb_flush()
3682 hash_for_each_safe(rocker->fdb_tbl, bkt, tmp, found, entry) { in rocker_port_fdb_flush()
3697 spin_unlock_irqrestore(&rocker->fdb_tbl_lock, lock_flags); in rocker_port_fdb_flush()
3704 struct rocker *rocker = (struct rocker *)data; in rocker_fdb_cleanup() local
3708 unsigned long next_timer = jiffies + rocker->ageing_time; in rocker_fdb_cleanup()
3715 spin_lock_irqsave(&rocker->fdb_tbl_lock, lock_flags); in rocker_fdb_cleanup()
3717 hash_for_each_safe(rocker->fdb_tbl, bkt, tmp, entry, entry) { in rocker_fdb_cleanup()
3732 spin_unlock_irqrestore(&rocker->fdb_tbl_lock, lock_flags); in rocker_fdb_cleanup()
3734 mod_timer(&rocker->fdb_cleanup_timer, round_jiffies_up(next_timer)); in rocker_fdb_cleanup()
3904 rocker_internal_vlan_tbl_find(const struct rocker *rocker, int ifindex) in rocker_internal_vlan_tbl_find() argument
3908 hash_for_each_possible(rocker->internal_vlan_tbl, found, in rocker_internal_vlan_tbl_find()
3920 struct rocker *rocker = rocker_port->rocker; in rocker_port_internal_vlan_id_get() local
3932 spin_lock_irqsave(&rocker->internal_vlan_tbl_lock, lock_flags); in rocker_port_internal_vlan_id_get()
3934 found = rocker_internal_vlan_tbl_find(rocker, ifindex); in rocker_port_internal_vlan_id_get()
3941 hash_add(rocker->internal_vlan_tbl, &found->entry, found->ifindex); in rocker_port_internal_vlan_id_get()
3944 if (test_and_set_bit(i, rocker->internal_vlan_bitmap)) in rocker_port_internal_vlan_id_get()
3954 spin_unlock_irqrestore(&rocker->internal_vlan_tbl_lock, lock_flags); in rocker_port_internal_vlan_id_get()
3963 struct rocker *rocker = rocker_port->rocker; in rocker_port_internal_vlan_id_put() local
3968 spin_lock_irqsave(&rocker->internal_vlan_tbl_lock, lock_flags); in rocker_port_internal_vlan_id_put()
3970 found = rocker_internal_vlan_tbl_find(rocker, ifindex); in rocker_port_internal_vlan_id_put()
3980 clear_bit(bit, rocker->internal_vlan_bitmap); in rocker_port_internal_vlan_id_put()
3986 spin_unlock_irqrestore(&rocker->internal_vlan_tbl_lock, lock_flags); in rocker_port_internal_vlan_id_put()
4104 const struct rocker *rocker = rocker_port->rocker; in rocker_tx_desc_frags_unmap() local
4105 struct pci_dev *pdev = rocker->pdev; in rocker_tx_desc_frags_unmap()
4135 const struct rocker *rocker = rocker_port->rocker; in rocker_tx_desc_frag_map_put() local
4136 struct pci_dev *pdev = rocker->pdev; in rocker_tx_desc_frag_map_put()
4168 struct rocker *rocker = rocker_port->rocker; in rocker_port_xmit() local
4208 rocker_desc_head_set(rocker, &rocker_port->tx_ring, desc_info); in rocker_port_xmit()
4332 const struct rocker *rocker = rocker_port->rocker; in rocker_port_attr_get() local
4336 attr->u.ppid.id_len = sizeof(rocker->hw.id); in rocker_port_attr_get()
4337 memcpy(&attr->u.ppid.id, &rocker->hw.id, attr->u.ppid.id_len); in rocker_port_attr_get()
4371 struct rocker *rocker = rocker_port->rocker; in rocker_port_bridge_ageing_time() local
4375 if (rocker_port->ageing_time < rocker->ageing_time) in rocker_port_bridge_ageing_time()
4376 rocker->ageing_time = rocker_port->ageing_time; in rocker_port_bridge_ageing_time()
4377 mod_timer(&rocker_port->rocker->fdb_cleanup_timer, jiffies); in rocker_port_bridge_ageing_time()
4569 struct rocker *rocker = rocker_port->rocker; in rocker_port_fdb_dump() local
4576 spin_lock_irqsave(&rocker->fdb_tbl_lock, lock_flags); in rocker_port_fdb_dump()
4577 hash_for_each_safe(rocker->fdb_tbl, bkt, tmp, found, entry) { in rocker_port_fdb_dump()
4588 spin_unlock_irqrestore(&rocker->fdb_tbl_lock, lock_flags); in rocker_port_fdb_dump()
4823 const struct rocker *rocker = rocker_port->rocker; in rocker_port_poll_tx() local
4854 rocker_dma_ring_credits_set(rocker, &rocker_port->tx_ring, credits); in rocker_port_poll_tx()
4859 static int rocker_port_rx_proc(const struct rocker *rocker, in rocker_port_rx_proc() argument
4877 rocker_dma_rx_ring_skb_unmap(rocker, attrs); in rocker_port_rx_proc()
4902 const struct rocker *rocker = rocker_port->rocker; in rocker_port_poll_rx() local
4916 err = rocker_port_rx_proc(rocker, rocker_port, in rocker_port_poll_rx()
4926 rocker_desc_head_set(rocker, &rocker_port->rx_ring, desc_info); in rocker_port_poll_rx()
4933 rocker_dma_ring_credits_set(rocker, &rocker_port->rx_ring, credits); in rocker_port_poll_rx()
4944 const struct rocker *rocker = rocker_port->rocker; in rocker_carrier_init() local
4945 u64 link_status = rocker_read64(rocker, PORT_PHYS_LINK_STATUS); in rocker_carrier_init()
4955 static void rocker_remove_ports(const struct rocker *rocker) in rocker_remove_ports() argument
4960 for (i = 0; i < rocker->port_count; i++) { in rocker_remove_ports()
4961 rocker_port = rocker->ports[i]; in rocker_remove_ports()
4968 kfree(rocker->ports); in rocker_remove_ports()
4973 const struct rocker *rocker = rocker_port->rocker; in rocker_port_dev_addr_init() local
4974 const struct pci_dev *pdev = rocker->pdev; in rocker_port_dev_addr_init()
4985 static int rocker_probe_port(struct rocker *rocker, unsigned int port_number) in rocker_probe_port() argument
4987 const struct pci_dev *pdev = rocker->pdev; in rocker_probe_port()
4998 rocker_port->rocker = rocker; in rocker_probe_port()
5021 rocker->ports[port_number] = rocker_port; in rocker_probe_port()
5047 rocker->ports[port_number] = NULL; in rocker_probe_port()
5054 static int rocker_probe_ports(struct rocker *rocker) in rocker_probe_ports() argument
5060 alloc_size = sizeof(struct rocker_port *) * rocker->port_count; in rocker_probe_ports()
5061 rocker->ports = kzalloc(alloc_size, GFP_KERNEL); in rocker_probe_ports()
5062 if (!rocker->ports) in rocker_probe_ports()
5064 for (i = 0; i < rocker->port_count; i++) { in rocker_probe_ports()
5065 err = rocker_probe_port(rocker, i); in rocker_probe_ports()
5072 rocker_remove_ports(rocker); in rocker_probe_ports()
5076 static int rocker_msix_init(struct rocker *rocker) in rocker_msix_init() argument
5078 struct pci_dev *pdev = rocker->pdev; in rocker_msix_init()
5087 if (msix_entries != ROCKER_MSIX_VEC_COUNT(rocker->port_count)) in rocker_msix_init()
5090 rocker->msix_entries = kmalloc_array(msix_entries, in rocker_msix_init()
5093 if (!rocker->msix_entries) in rocker_msix_init()
5097 rocker->msix_entries[i].entry = i; in rocker_msix_init()
5099 err = pci_enable_msix_exact(pdev, rocker->msix_entries, msix_entries); in rocker_msix_init()
5106 kfree(rocker->msix_entries); in rocker_msix_init()
5110 static void rocker_msix_fini(const struct rocker *rocker) in rocker_msix_fini() argument
5112 pci_disable_msix(rocker->pdev); in rocker_msix_fini()
5113 kfree(rocker->msix_entries); in rocker_msix_fini()
5118 struct rocker *rocker; in rocker_probe() local
5121 rocker = kzalloc(sizeof(*rocker), GFP_KERNEL); in rocker_probe()
5122 if (!rocker) in rocker_probe()
5158 rocker->hw_addr = ioremap(pci_resource_start(pdev, 0), in rocker_probe()
5160 if (!rocker->hw_addr) { in rocker_probe()
5167 rocker->pdev = pdev; in rocker_probe()
5168 pci_set_drvdata(pdev, rocker); in rocker_probe()
5170 rocker->port_count = rocker_read32(rocker, PORT_PHYS_COUNT); in rocker_probe()
5172 err = rocker_msix_init(rocker); in rocker_probe()
5178 err = rocker_basic_hw_test(rocker); in rocker_probe()
5184 rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET); in rocker_probe()
5186 err = rocker_dma_rings_init(rocker); in rocker_probe()
5190 err = request_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_CMD), in rocker_probe()
5192 rocker_driver_name, rocker); in rocker_probe()
5198 err = request_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), in rocker_probe()
5200 rocker_driver_name, rocker); in rocker_probe()
5206 rocker->hw.id = rocker_read64(rocker, SWITCH_ID); in rocker_probe()
5208 err = rocker_init_tbls(rocker); in rocker_probe()
5214 rocker->ageing_time = BR_DEFAULT_AGEING_TIME; in rocker_probe()
5215 setup_timer(&rocker->fdb_cleanup_timer, rocker_fdb_cleanup, in rocker_probe()
5216 (unsigned long) rocker); in rocker_probe()
5217 mod_timer(&rocker->fdb_cleanup_timer, jiffies); in rocker_probe()
5219 rocker->ageing_time = BR_DEFAULT_AGEING_TIME; in rocker_probe()
5221 err = rocker_probe_ports(rocker); in rocker_probe()
5228 (int)sizeof(rocker->hw.id), &rocker->hw.id); in rocker_probe()
5233 del_timer_sync(&rocker->fdb_cleanup_timer); in rocker_probe()
5234 rocker_free_tbls(rocker); in rocker_probe()
5236 free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker); in rocker_probe()
5238 free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_CMD), rocker); in rocker_probe()
5240 rocker_dma_rings_fini(rocker); in rocker_probe()
5243 rocker_msix_fini(rocker); in rocker_probe()
5245 iounmap(rocker->hw_addr); in rocker_probe()
5253 kfree(rocker); in rocker_probe()
5259 struct rocker *rocker = pci_get_drvdata(pdev); in rocker_remove() local
5261 del_timer_sync(&rocker->fdb_cleanup_timer); in rocker_remove()
5262 rocker_free_tbls(rocker); in rocker_remove()
5263 rocker_write32(rocker, CONTROL, ROCKER_CONTROL_RESET); in rocker_remove()
5264 rocker_remove_ports(rocker); in rocker_remove()
5265 free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_EVENT), rocker); in rocker_remove()
5266 free_irq(rocker_msix_vector(rocker, ROCKER_MSIX_VEC_CMD), rocker); in rocker_remove()
5267 rocker_dma_rings_fini(rocker); in rocker_remove()
5268 rocker_msix_fini(rocker); in rocker_remove()
5269 iounmap(rocker->hw_addr); in rocker_remove()
5270 pci_release_regions(rocker->pdev); in rocker_remove()
5271 pci_disable_device(rocker->pdev); in rocker_remove()
5272 kfree(rocker); in rocker_remove()