mlxsw_pci 25 drivers/net/ethernet/mellanox/mlxsw/pci.c #define mlxsw_pci_write32(mlxsw_pci, reg, val) \ mlxsw_pci 26 drivers/net/ethernet/mellanox/mlxsw/pci.c iowrite32be(val, (mlxsw_pci)->hw_addr + (MLXSW_PCI_ ## reg)) mlxsw_pci 27 drivers/net/ethernet/mellanox/mlxsw/pci.c #define mlxsw_pci_read32(mlxsw_pci, reg) \ mlxsw_pci 28 drivers/net/ethernet/mellanox/mlxsw/pci.c ioread32be((mlxsw_pci)->hw_addr + (MLXSW_PCI_ ## reg)) mlxsw_pci 82 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *pci; mlxsw_pci 177 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_type_group_get(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 180 drivers/net/ethernet/mellanox/mlxsw/pci.c return &mlxsw_pci->queues[q_type]; mlxsw_pci 183 drivers/net/ethernet/mellanox/mlxsw/pci.c static u8 __mlxsw_pci_queue_count(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 188 drivers/net/ethernet/mellanox/mlxsw/pci.c queue_group = mlxsw_pci_queue_type_group_get(mlxsw_pci, q_type); mlxsw_pci 192 drivers/net/ethernet/mellanox/mlxsw/pci.c static u8 mlxsw_pci_sdq_count(struct mlxsw_pci *mlxsw_pci) mlxsw_pci 194 drivers/net/ethernet/mellanox/mlxsw/pci.c return __mlxsw_pci_queue_count(mlxsw_pci, MLXSW_PCI_QUEUE_TYPE_SDQ); mlxsw_pci 197 drivers/net/ethernet/mellanox/mlxsw/pci.c static u8 mlxsw_pci_cq_count(struct mlxsw_pci *mlxsw_pci) mlxsw_pci 199 drivers/net/ethernet/mellanox/mlxsw/pci.c return __mlxsw_pci_queue_count(mlxsw_pci, MLXSW_PCI_QUEUE_TYPE_CQ); mlxsw_pci 203 drivers/net/ethernet/mellanox/mlxsw/pci.c __mlxsw_pci_queue_get(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 206 drivers/net/ethernet/mellanox/mlxsw/pci.c return &mlxsw_pci->queues[q_type].q[q_num]; mlxsw_pci 209 drivers/net/ethernet/mellanox/mlxsw/pci.c static struct mlxsw_pci_queue *mlxsw_pci_sdq_get(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 212 drivers/net/ethernet/mellanox/mlxsw/pci.c return __mlxsw_pci_queue_get(mlxsw_pci, mlxsw_pci 216 drivers/net/ethernet/mellanox/mlxsw/pci.c static struct mlxsw_pci_queue *mlxsw_pci_rdq_get(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 219 drivers/net/ethernet/mellanox/mlxsw/pci.c return __mlxsw_pci_queue_get(mlxsw_pci, mlxsw_pci 223 drivers/net/ethernet/mellanox/mlxsw/pci.c static struct mlxsw_pci_queue *mlxsw_pci_cq_get(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 226 drivers/net/ethernet/mellanox/mlxsw/pci.c return __mlxsw_pci_queue_get(mlxsw_pci, MLXSW_PCI_QUEUE_TYPE_CQ, q_num); mlxsw_pci 229 drivers/net/ethernet/mellanox/mlxsw/pci.c static struct mlxsw_pci_queue *mlxsw_pci_eq_get(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 232 drivers/net/ethernet/mellanox/mlxsw/pci.c return __mlxsw_pci_queue_get(mlxsw_pci, MLXSW_PCI_QUEUE_TYPE_EQ, q_num); mlxsw_pci 235 drivers/net/ethernet/mellanox/mlxsw/pci.c static void __mlxsw_pci_queue_doorbell_set(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 239 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, mlxsw_pci 240 drivers/net/ethernet/mellanox/mlxsw/pci.c DOORBELL(mlxsw_pci->doorbell_offset, mlxsw_pci 245 drivers/net/ethernet/mellanox/mlxsw/pci.c static void __mlxsw_pci_queue_doorbell_arm_set(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 249 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, mlxsw_pci 250 drivers/net/ethernet/mellanox/mlxsw/pci.c DOORBELL(mlxsw_pci->doorbell_offset, mlxsw_pci 255 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_queue_doorbell_producer_ring(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 259 drivers/net/ethernet/mellanox/mlxsw/pci.c __mlxsw_pci_queue_doorbell_set(mlxsw_pci, q, q->producer_counter); mlxsw_pci 262 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_queue_doorbell_consumer_ring(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 266 drivers/net/ethernet/mellanox/mlxsw/pci.c __mlxsw_pci_queue_doorbell_set(mlxsw_pci, q, mlxsw_pci 271 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_arm_consumer_ring(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 275 drivers/net/ethernet/mellanox/mlxsw/pci.c __mlxsw_pci_queue_doorbell_arm_set(mlxsw_pci, q, q->consumer_counter); mlxsw_pci 284 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_sdq_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 303 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_sw2hw_sdq(mlxsw_pci->core, mbox, q->num); mlxsw_pci 306 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_producer_ring(mlxsw_pci, q); mlxsw_pci 310 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_sdq_fini(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 313 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_cmd_hw2sw_sdq(mlxsw_pci->core, q->num); mlxsw_pci 316 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_wqe_frag_map(struct mlxsw_pci *mlxsw_pci, char *wqe, mlxsw_pci 320 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 333 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_wqe_frag_unmap(struct mlxsw_pci *mlxsw_pci, char *wqe, mlxsw_pci 336 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 345 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_rdq_skb_alloc(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 360 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_wqe_frag_map(mlxsw_pci, wqe, 0, skb->data, mlxsw_pci 373 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_rdq_skb_free(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 382 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_wqe_frag_unmap(mlxsw_pci, wqe, 0, DMA_FROM_DEVICE); mlxsw_pci 386 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_rdq_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 390 drivers/net/ethernet/mellanox/mlxsw/pci.c u8 sdq_count = mlxsw_pci_sdq_count(mlxsw_pci); mlxsw_pci 408 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_sw2hw_rdq(mlxsw_pci->core, mbox, q->num); mlxsw_pci 412 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_producer_ring(mlxsw_pci, q); mlxsw_pci 417 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_rdq_skb_alloc(mlxsw_pci, elem_info); mlxsw_pci 422 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_producer_ring(mlxsw_pci, q); mlxsw_pci 430 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_rdq_skb_free(mlxsw_pci, elem_info); mlxsw_pci 432 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_cmd_hw2sw_rdq(mlxsw_pci->core, q->num); mlxsw_pci 437 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_rdq_fini(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 443 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_cmd_hw2sw_rdq(mlxsw_pci->core, q->num); mlxsw_pci 446 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_rdq_skb_free(mlxsw_pci, elem_info); mlxsw_pci 450 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_cq_pre_init(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 453 drivers/net/ethernet/mellanox/mlxsw/pci.c q->u.cq.v = mlxsw_pci->max_cqe_ver; mlxsw_pci 457 drivers/net/ethernet/mellanox/mlxsw/pci.c q->num < mlxsw_pci->num_sdq_cqs) mlxsw_pci 461 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_cq_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 490 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_sw2hw_cq(mlxsw_pci->core, mbox, q->num); mlxsw_pci 493 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_consumer_ring(mlxsw_pci, q); mlxsw_pci 494 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_arm_consumer_ring(mlxsw_pci, q); mlxsw_pci 498 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_cq_fini(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 501 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_cmd_hw2sw_cq(mlxsw_pci->core, q->num); mlxsw_pci 504 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_cqe_sdq_handle(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 509 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 522 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_wqe_frag_unmap(mlxsw_pci, wqe, i, DMA_TO_DEVICE); mlxsw_pci 526 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_core_ptp_transmitted(mlxsw_pci->core, skb, mlxsw_pci 540 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_cqe_rdq_handle(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 545 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 558 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_wqe_frag_unmap(mlxsw_pci, wqe, 0, DMA_FROM_DEVICE); mlxsw_pci 579 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_core_skb_receive(mlxsw_pci->core, skb, &rx_info); mlxsw_pci 582 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_rdq_skb_alloc(mlxsw_pci, elem_info); mlxsw_pci 587 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_producer_ring(mlxsw_pci, q); mlxsw_pci 610 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = q->pci; mlxsw_pci 622 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_consumer_ring(mlxsw_pci, q); mlxsw_pci 627 drivers/net/ethernet/mellanox/mlxsw/pci.c sdq = mlxsw_pci_sdq_get(mlxsw_pci, dqn); mlxsw_pci 628 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_cqe_sdq_handle(mlxsw_pci, sdq, mlxsw_pci 634 drivers/net/ethernet/mellanox/mlxsw/pci.c rdq = mlxsw_pci_rdq_get(mlxsw_pci, dqn); mlxsw_pci 635 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_cqe_rdq_handle(mlxsw_pci, rdq, mlxsw_pci 643 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_arm_consumer_ring(mlxsw_pci, q); mlxsw_pci 658 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_eq_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 680 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_sw2hw_eq(mlxsw_pci->core, mbox, q->num); mlxsw_pci 683 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_consumer_ring(mlxsw_pci, q); mlxsw_pci 684 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_arm_consumer_ring(mlxsw_pci, q); mlxsw_pci 688 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_eq_fini(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 691 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_cmd_hw2sw_eq(mlxsw_pci->core, q->num); mlxsw_pci 694 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_eq_cmd_event(struct mlxsw_pci *mlxsw_pci, char *eqe) mlxsw_pci 696 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->cmd.comp.status = mlxsw_pci_eqe_cmd_status_get(eqe); mlxsw_pci 697 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->cmd.comp.out_param = mlxsw_pci 700 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->cmd.wait_done = true; mlxsw_pci 701 drivers/net/ethernet/mellanox/mlxsw/pci.c wake_up(&mlxsw_pci->cmd.wait); mlxsw_pci 723 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = q->pci; mlxsw_pci 724 drivers/net/ethernet/mellanox/mlxsw/pci.c u8 cq_count = mlxsw_pci_cq_count(mlxsw_pci); mlxsw_pci 742 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_eq_cmd_event(mlxsw_pci, eqe); mlxsw_pci 758 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_consumer_ring(mlxsw_pci, q); mlxsw_pci 759 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_arm_consumer_ring(mlxsw_pci, q); mlxsw_pci 765 drivers/net/ethernet/mellanox/mlxsw/pci.c q = mlxsw_pci_cq_get(mlxsw_pci, cqn); mlxsw_pci 773 drivers/net/ethernet/mellanox/mlxsw/pci.c void (*pre_init)(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 775 drivers/net/ethernet/mellanox/mlxsw/pci.c int (*init)(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 777 drivers/net/ethernet/mellanox/mlxsw/pci.c void (*fini)(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 821 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_queue_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 831 drivers/net/ethernet/mellanox/mlxsw/pci.c q_ops->pre_init(mlxsw_pci, q); mlxsw_pci 839 drivers/net/ethernet/mellanox/mlxsw/pci.c q->pci = mlxsw_pci; mlxsw_pci 845 drivers/net/ethernet/mellanox/mlxsw/pci.c mem_item->buf = pci_alloc_consistent(mlxsw_pci->pdev, mlxsw_pci 869 drivers/net/ethernet/mellanox/mlxsw/pci.c err = q_ops->init(mlxsw_pci, mbox, q); mlxsw_pci 877 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_free_consistent(mlxsw_pci->pdev, mem_item->size, mlxsw_pci 882 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_queue_fini(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 888 drivers/net/ethernet/mellanox/mlxsw/pci.c q_ops->fini(mlxsw_pci, q); mlxsw_pci 890 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_free_consistent(mlxsw_pci->pdev, mem_item->size, mlxsw_pci 894 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_queue_group_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 902 drivers/net/ethernet/mellanox/mlxsw/pci.c queue_group = mlxsw_pci_queue_type_group_get(mlxsw_pci, q_ops->type); mlxsw_pci 908 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_queue_init(mlxsw_pci, mbox, q_ops, mlxsw_pci 919 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_fini(mlxsw_pci, q_ops, &queue_group->q[i]); mlxsw_pci 924 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_queue_group_fini(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 930 drivers/net/ethernet/mellanox/mlxsw/pci.c queue_group = mlxsw_pci_queue_type_group_get(mlxsw_pci, q_ops->type); mlxsw_pci 932 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_fini(mlxsw_pci, q_ops, &queue_group->q[i]); mlxsw_pci 936 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_aqs_init(struct mlxsw_pci *mlxsw_pci, char *mbox) mlxsw_pci 938 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 951 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_query_aq_cap(mlxsw_pci->core, mbox); mlxsw_pci 974 drivers/net/ethernet/mellanox/mlxsw/pci.c (mlxsw_pci->max_cqe_ver == MLXSW_PCI_CQE_V2 && mlxsw_pci 981 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->num_sdq_cqs = num_sdqs; mlxsw_pci 983 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_queue_group_init(mlxsw_pci, mbox, &mlxsw_pci_eq_ops, mlxsw_pci 990 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_queue_group_init(mlxsw_pci, mbox, &mlxsw_pci_cq_ops, mlxsw_pci 997 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_queue_group_init(mlxsw_pci, mbox, &mlxsw_pci_sdq_ops, mlxsw_pci 1004 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_queue_group_init(mlxsw_pci, mbox, &mlxsw_pci_rdq_ops, mlxsw_pci 1012 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->cmd.nopoll = true; mlxsw_pci 1016 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_sdq_ops); mlxsw_pci 1018 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_cq_ops); mlxsw_pci 1020 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_eq_ops); mlxsw_pci 1024 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_aqs_fini(struct mlxsw_pci *mlxsw_pci) mlxsw_pci 1026 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->cmd.nopoll = false; mlxsw_pci 1027 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_rdq_ops); mlxsw_pci 1028 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_sdq_ops); mlxsw_pci 1029 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_cq_ops); mlxsw_pci 1030 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_group_fini(mlxsw_pci, &mlxsw_pci_eq_ops); mlxsw_pci 1034 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_config_profile_swid_config(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1054 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_profile_get_kvd_sizes(const struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1061 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_core_kvd_sizes_get(mlxsw_pci->core, profile, mlxsw_pci 1074 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_config_profile(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 1166 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_profile_get_kvd_sizes(mlxsw_pci, profile, res); mlxsw_pci 1184 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_config_profile_swid_config(mlxsw_pci, mbox, i, mlxsw_pci 1187 drivers/net/ethernet/mellanox/mlxsw/pci.c if (mlxsw_pci->max_cqe_ver > MLXSW_PCI_CQE_V0) { mlxsw_pci 1192 drivers/net/ethernet/mellanox/mlxsw/pci.c return mlxsw_cmd_config_profile_set(mlxsw_pci->core, mbox); mlxsw_pci 1195 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_boardinfo(struct mlxsw_pci *mlxsw_pci, char *mbox) mlxsw_pci 1197 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_bus_info *bus_info = &mlxsw_pci->bus_info; mlxsw_pci 1201 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_boardinfo(mlxsw_pci->core, mbox); mlxsw_pci 1209 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_fw_area_init(struct mlxsw_pci *mlxsw_pci, char *mbox, mlxsw_pci 1217 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->fw_area.items = kcalloc(num_pages, sizeof(*mem_item), mlxsw_pci 1219 drivers/net/ethernet/mellanox/mlxsw/pci.c if (!mlxsw_pci->fw_area.items) mlxsw_pci 1221 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->fw_area.count = num_pages; mlxsw_pci 1225 drivers/net/ethernet/mellanox/mlxsw/pci.c mem_item = &mlxsw_pci->fw_area.items[i]; mlxsw_pci 1228 drivers/net/ethernet/mellanox/mlxsw/pci.c mem_item->buf = pci_alloc_consistent(mlxsw_pci->pdev, mlxsw_pci 1238 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_map_fa(mlxsw_pci->core, mbox, nent); mlxsw_pci 1247 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_cmd_map_fa(mlxsw_pci->core, mbox, nent); mlxsw_pci 1257 drivers/net/ethernet/mellanox/mlxsw/pci.c mem_item = &mlxsw_pci->fw_area.items[i]; mlxsw_pci 1259 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_free_consistent(mlxsw_pci->pdev, mem_item->size, mlxsw_pci 1262 drivers/net/ethernet/mellanox/mlxsw/pci.c kfree(mlxsw_pci->fw_area.items); mlxsw_pci 1266 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_fw_area_fini(struct mlxsw_pci *mlxsw_pci) mlxsw_pci 1271 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_cmd_unmap_fa(mlxsw_pci->core); mlxsw_pci 1273 drivers/net/ethernet/mellanox/mlxsw/pci.c for (i = 0; i < mlxsw_pci->fw_area.count; i++) { mlxsw_pci 1274 drivers/net/ethernet/mellanox/mlxsw/pci.c mem_item = &mlxsw_pci->fw_area.items[i]; mlxsw_pci 1276 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_free_consistent(mlxsw_pci->pdev, mem_item->size, mlxsw_pci 1279 drivers/net/ethernet/mellanox/mlxsw/pci.c kfree(mlxsw_pci->fw_area.items); mlxsw_pci 1284 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = dev_id; mlxsw_pci 1289 drivers/net/ethernet/mellanox/mlxsw/pci.c q = mlxsw_pci_eq_get(mlxsw_pci, i); mlxsw_pci 1295 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_mbox_alloc(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1298 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 1312 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_mbox_free(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1315 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 1321 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_sys_ready_wait(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1338 drivers/net/ethernet/mellanox/mlxsw/pci.c val = mlxsw_pci_read32(mlxsw_pci, FW_READY); mlxsw_pci 1349 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_sw_reset(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1352 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 1357 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_sys_ready_wait(mlxsw_pci, id, &sys_status); mlxsw_pci 1365 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_reg_write(mlxsw_pci->core, MLXSW_REG(mrsr), mrsr_pl); mlxsw_pci 1369 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_sys_ready_wait(mlxsw_pci, id, &sys_status); mlxsw_pci 1379 drivers/net/ethernet/mellanox/mlxsw/pci.c static int mlxsw_pci_alloc_irq_vectors(struct mlxsw_pci *mlxsw_pci) mlxsw_pci 1383 drivers/net/ethernet/mellanox/mlxsw/pci.c err = pci_alloc_irq_vectors(mlxsw_pci->pdev, 1, 1, PCI_IRQ_MSIX); mlxsw_pci 1385 drivers/net/ethernet/mellanox/mlxsw/pci.c dev_err(&mlxsw_pci->pdev->dev, "MSI-X init failed\n"); mlxsw_pci 1389 drivers/net/ethernet/mellanox/mlxsw/pci.c static void mlxsw_pci_free_irq_vectors(struct mlxsw_pci *mlxsw_pci) mlxsw_pci 1391 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_free_irq_vectors(mlxsw_pci->pdev); mlxsw_pci 1398 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1399 drivers/net/ethernet/mellanox/mlxsw/pci.c struct pci_dev *pdev = mlxsw_pci->pdev; mlxsw_pci 1404 drivers/net/ethernet/mellanox/mlxsw/pci.c mutex_init(&mlxsw_pci->cmd.lock); mlxsw_pci 1405 drivers/net/ethernet/mellanox/mlxsw/pci.c init_waitqueue_head(&mlxsw_pci->cmd.wait); mlxsw_pci 1407 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->core = mlxsw_core; mlxsw_pci 1413 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_mbox_alloc(mlxsw_pci, &mlxsw_pci->cmd.in_mbox); mlxsw_pci 1417 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_mbox_alloc(mlxsw_pci, &mlxsw_pci->cmd.out_mbox); mlxsw_pci 1421 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_sw_reset(mlxsw_pci, mlxsw_pci->id); mlxsw_pci 1425 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_alloc_irq_vectors(mlxsw_pci); mlxsw_pci 1435 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.fw_rev.major = mlxsw_pci 1437 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.fw_rev.minor = mlxsw_pci 1439 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.fw_rev.subminor = mlxsw_pci 1453 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->doorbell_offset = mlxsw_pci 1462 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->free_running_clock_offset = mlxsw_pci 1466 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_fw_area_init(mlxsw_pci, mbox, num_pages); mlxsw_pci 1470 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_boardinfo(mlxsw_pci, mbox); mlxsw_pci 1480 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->max_cqe_ver = MLXSW_PCI_CQE_V2; mlxsw_pci 1483 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->max_cqe_ver = MLXSW_PCI_CQE_V1; mlxsw_pci 1487 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->max_cqe_ver = MLXSW_PCI_CQE_V0; mlxsw_pci 1493 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_config_profile(mlxsw_pci, mbox, profile, res); mlxsw_pci 1497 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_aqs_init(mlxsw_pci, mbox); mlxsw_pci 1503 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.device_kind, mlxsw_pci); mlxsw_pci 1512 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_aqs_fini(mlxsw_pci); mlxsw_pci 1518 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_fw_area_fini(mlxsw_pci); mlxsw_pci 1524 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_free_irq_vectors(mlxsw_pci); mlxsw_pci 1527 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.out_mbox); mlxsw_pci 1529 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.in_mbox); mlxsw_pci 1537 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1539 drivers/net/ethernet/mellanox/mlxsw/pci.c free_irq(pci_irq_vector(mlxsw_pci->pdev, 0), mlxsw_pci); mlxsw_pci 1540 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_aqs_fini(mlxsw_pci); mlxsw_pci 1541 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_fw_area_fini(mlxsw_pci); mlxsw_pci 1542 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_free_irq_vectors(mlxsw_pci); mlxsw_pci 1543 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.out_mbox); mlxsw_pci 1544 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_mbox_free(mlxsw_pci, &mlxsw_pci->cmd.in_mbox); mlxsw_pci 1548 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_sdq_pick(struct mlxsw_pci *mlxsw_pci, mlxsw_pci 1551 drivers/net/ethernet/mellanox/mlxsw/pci.c u8 sdqn = tx_info->local_port % mlxsw_pci_sdq_count(mlxsw_pci); mlxsw_pci 1553 drivers/net/ethernet/mellanox/mlxsw/pci.c return mlxsw_pci_sdq_get(mlxsw_pci, sdqn); mlxsw_pci 1559 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1560 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci_queue *q = mlxsw_pci_sdq_pick(mlxsw_pci, tx_info); mlxsw_pci 1568 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1581 drivers/net/ethernet/mellanox/mlxsw/pci.c q = mlxsw_pci_sdq_pick(mlxsw_pci, tx_info); mlxsw_pci 1597 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_wqe_frag_map(mlxsw_pci, wqe, 0, skb->data, mlxsw_pci 1605 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_pci_wqe_frag_map(mlxsw_pci, wqe, i + 1, mlxsw_pci 1622 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_queue_doorbell_producer_ring(mlxsw_pci, q); mlxsw_pci 1628 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_wqe_frag_unmap(mlxsw_pci, wqe, i, DMA_TO_DEVICE); mlxsw_pci 1640 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1642 drivers/net/ethernet/mellanox/mlxsw/pci.c bool evreq = mlxsw_pci->cmd.nopoll; mlxsw_pci 1644 drivers/net/ethernet/mellanox/mlxsw/pci.c bool *p_wait_done = &mlxsw_pci->cmd.wait_done; mlxsw_pci 1649 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mutex_lock_interruptible(&mlxsw_pci->cmd.lock); mlxsw_pci 1654 drivers/net/ethernet/mellanox/mlxsw/pci.c memcpy(mlxsw_pci->cmd.in_mbox.buf, in_mbox, in_mbox_size); mlxsw_pci 1655 drivers/net/ethernet/mellanox/mlxsw/pci.c in_mapaddr = mlxsw_pci->cmd.in_mbox.mapaddr; mlxsw_pci 1657 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_IN_PARAM_HI, upper_32_bits(in_mapaddr)); mlxsw_pci 1658 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_IN_PARAM_LO, lower_32_bits(in_mapaddr)); mlxsw_pci 1661 drivers/net/ethernet/mellanox/mlxsw/pci.c out_mapaddr = mlxsw_pci->cmd.out_mbox.mapaddr; mlxsw_pci 1662 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_OUT_PARAM_HI, upper_32_bits(out_mapaddr)); mlxsw_pci 1663 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_OUT_PARAM_LO, lower_32_bits(out_mapaddr)); mlxsw_pci 1665 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_IN_MODIFIER, in_mod); mlxsw_pci 1666 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_TOKEN, 0); mlxsw_pci 1671 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci_write32(mlxsw_pci, CIR_CTRL, mlxsw_pci 1682 drivers/net/ethernet/mellanox/mlxsw/pci.c u32 ctrl = mlxsw_pci_read32(mlxsw_pci, CIR_CTRL); mlxsw_pci 1692 drivers/net/ethernet/mellanox/mlxsw/pci.c wait_event_timeout(mlxsw_pci->cmd.wait, *p_wait_done, timeout); mlxsw_pci 1693 drivers/net/ethernet/mellanox/mlxsw/pci.c *p_status = mlxsw_pci->cmd.comp.status; mlxsw_pci 1712 drivers/net/ethernet/mellanox/mlxsw/pci.c tmp = cpu_to_be32(mlxsw_pci_read32(mlxsw_pci, mlxsw_pci 1715 drivers/net/ethernet/mellanox/mlxsw/pci.c tmp = cpu_to_be32(mlxsw_pci_read32(mlxsw_pci, mlxsw_pci 1720 drivers/net/ethernet/mellanox/mlxsw/pci.c memcpy(out_mbox, mlxsw_pci->cmd.out_mbox.buf, out_mbox_size); mlxsw_pci 1723 drivers/net/ethernet/mellanox/mlxsw/pci.c mutex_unlock(&mlxsw_pci->cmd.lock); mlxsw_pci 1730 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1733 drivers/net/ethernet/mellanox/mlxsw/pci.c frc_offset = mlxsw_pci->free_running_clock_offset; mlxsw_pci 1734 drivers/net/ethernet/mellanox/mlxsw/pci.c return mlxsw_pci_read32(mlxsw_pci, FREE_RUNNING_CLOCK_H(frc_offset)); mlxsw_pci 1739 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = bus_priv; mlxsw_pci 1742 drivers/net/ethernet/mellanox/mlxsw/pci.c frc_offset = mlxsw_pci->free_running_clock_offset; mlxsw_pci 1743 drivers/net/ethernet/mellanox/mlxsw/pci.c return mlxsw_pci_read32(mlxsw_pci, FREE_RUNNING_CLOCK_L(frc_offset)); mlxsw_pci 1761 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci; mlxsw_pci 1764 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci = kzalloc(sizeof(*mlxsw_pci), GFP_KERNEL); mlxsw_pci 1765 drivers/net/ethernet/mellanox/mlxsw/pci.c if (!mlxsw_pci) mlxsw_pci 1801 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->hw_addr = ioremap(pci_resource_start(pdev, 0), mlxsw_pci 1803 drivers/net/ethernet/mellanox/mlxsw/pci.c if (!mlxsw_pci->hw_addr) { mlxsw_pci 1810 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->pdev = pdev; mlxsw_pci 1811 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_set_drvdata(pdev, mlxsw_pci); mlxsw_pci 1813 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.device_kind = driver_name; mlxsw_pci 1814 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.device_name = pci_name(mlxsw_pci->pdev); mlxsw_pci 1815 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.dev = &pdev->dev; mlxsw_pci 1816 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->bus_info.read_frc_capable = true; mlxsw_pci 1817 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_pci->id = id; mlxsw_pci 1819 drivers/net/ethernet/mellanox/mlxsw/pci.c err = mlxsw_core_bus_device_register(&mlxsw_pci->bus_info, mlxsw_pci 1820 drivers/net/ethernet/mellanox/mlxsw/pci.c &mlxsw_pci_bus, mlxsw_pci, false, mlxsw_pci 1830 drivers/net/ethernet/mellanox/mlxsw/pci.c iounmap(mlxsw_pci->hw_addr); mlxsw_pci 1838 drivers/net/ethernet/mellanox/mlxsw/pci.c kfree(mlxsw_pci); mlxsw_pci 1844 drivers/net/ethernet/mellanox/mlxsw/pci.c struct mlxsw_pci *mlxsw_pci = pci_get_drvdata(pdev); mlxsw_pci 1846 drivers/net/ethernet/mellanox/mlxsw/pci.c mlxsw_core_bus_device_unregister(mlxsw_pci->core, false); mlxsw_pci 1847 drivers/net/ethernet/mellanox/mlxsw/pci.c iounmap(mlxsw_pci->hw_addr); mlxsw_pci 1848 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_release_regions(mlxsw_pci->pdev); mlxsw_pci 1849 drivers/net/ethernet/mellanox/mlxsw/pci.c pci_disable_device(mlxsw_pci->pdev); mlxsw_pci 1850 drivers/net/ethernet/mellanox/mlxsw/pci.c kfree(mlxsw_pci);