Loading drivers/net/qlge/qlge.h +12 −0 Original line number Diff line number Diff line Loading @@ -816,6 +816,18 @@ enum { MB_CMD_GET_MGMNT_TFK_CTL = 0x00000161, /* Get Mgmnt Traffic Control */ MB_GET_MPI_TFK_STOPPED = (1 << 0), MB_GET_MPI_TFK_FIFO_EMPTY = (1 << 1), /* Sub-commands for IDC request. * This describes the reason for the * IDC request. */ MB_CMD_IOP_NONE = 0x0000, MB_CMD_IOP_PREP_UPDATE_MPI = 0x0001, MB_CMD_IOP_COMP_UPDATE_MPI = 0x0002, MB_CMD_IOP_PREP_LINK_DOWN = 0x0010, MB_CMD_IOP_DVR_START = 0x0100, MB_CMD_IOP_FLASH_ACC = 0x0101, MB_CMD_IOP_RESTART_MPI = 0x0102, MB_CMD_IOP_CORE_DUMP_MPI = 0x0103, /* Mailbox Command Status. */ MB_CMD_STS_GOOD = 0x00004000, /* Success. */ Loading drivers/net/qlge/qlge_mpi.c +49 −7 Original line number Diff line number Diff line Loading @@ -1038,8 +1038,11 @@ void ql_mpi_idc_work(struct work_struct *work) int status; struct mbox_params *mbcp = &qdev->idc_mbc; u32 aen; int timeout; rtnl_lock(); aen = mbcp->mbox_out[1] >> 16; timeout = (mbcp->mbox_out[1] >> 8) & 0xf; switch (aen) { default: Loading @@ -1047,22 +1050,61 @@ void ql_mpi_idc_work(struct work_struct *work) "Bug: Unhandled IDC action.\n"); break; case MB_CMD_PORT_RESET: case MB_CMD_SET_PORT_CFG: case MB_CMD_STOP_FW: ql_link_off(qdev); case MB_CMD_SET_PORT_CFG: /* Signal the resulting link up AEN * that the frame routing and mac addr * needs to be set. * */ set_bit(QL_CAM_RT_SET, &qdev->flags); rtnl_lock(); /* Do ACK if required */ if (timeout) { status = ql_mb_idc_ack(qdev); rtnl_unlock(); if (status) { if (status) QPRINTK(qdev, DRV, ERR, "Bug: No pending IDC!\n"); } else { QPRINTK(qdev, DRV, DEBUG, "IDC ACK not required\n"); status = 0; /* success */ } break; /* These sub-commands issued by another (FCoE) * function are requesting to do an operation * on the shared resource (MPI environment). * We currently don't issue these so we just * ACK the request. */ case MB_CMD_IOP_RESTART_MPI: case MB_CMD_IOP_PREP_LINK_DOWN: /* Drop the link, reload the routing * table when link comes up. */ ql_link_off(qdev); set_bit(QL_CAM_RT_SET, &qdev->flags); /* Fall through. */ case MB_CMD_IOP_DVR_START: case MB_CMD_IOP_FLASH_ACC: case MB_CMD_IOP_CORE_DUMP_MPI: case MB_CMD_IOP_PREP_UPDATE_MPI: case MB_CMD_IOP_COMP_UPDATE_MPI: case MB_CMD_IOP_NONE: /* an IDC without params */ /* Do ACK if required */ if (timeout) { status = ql_mb_idc_ack(qdev); if (status) QPRINTK(qdev, DRV, ERR, "Bug: No pending IDC!\n"); } else { QPRINTK(qdev, DRV, DEBUG, "IDC ACK not required\n"); status = 0; /* success */ } break; } rtnl_unlock(); } void ql_mpi_work(struct work_struct *work) Loading Loading
drivers/net/qlge/qlge.h +12 −0 Original line number Diff line number Diff line Loading @@ -816,6 +816,18 @@ enum { MB_CMD_GET_MGMNT_TFK_CTL = 0x00000161, /* Get Mgmnt Traffic Control */ MB_GET_MPI_TFK_STOPPED = (1 << 0), MB_GET_MPI_TFK_FIFO_EMPTY = (1 << 1), /* Sub-commands for IDC request. * This describes the reason for the * IDC request. */ MB_CMD_IOP_NONE = 0x0000, MB_CMD_IOP_PREP_UPDATE_MPI = 0x0001, MB_CMD_IOP_COMP_UPDATE_MPI = 0x0002, MB_CMD_IOP_PREP_LINK_DOWN = 0x0010, MB_CMD_IOP_DVR_START = 0x0100, MB_CMD_IOP_FLASH_ACC = 0x0101, MB_CMD_IOP_RESTART_MPI = 0x0102, MB_CMD_IOP_CORE_DUMP_MPI = 0x0103, /* Mailbox Command Status. */ MB_CMD_STS_GOOD = 0x00004000, /* Success. */ Loading
drivers/net/qlge/qlge_mpi.c +49 −7 Original line number Diff line number Diff line Loading @@ -1038,8 +1038,11 @@ void ql_mpi_idc_work(struct work_struct *work) int status; struct mbox_params *mbcp = &qdev->idc_mbc; u32 aen; int timeout; rtnl_lock(); aen = mbcp->mbox_out[1] >> 16; timeout = (mbcp->mbox_out[1] >> 8) & 0xf; switch (aen) { default: Loading @@ -1047,22 +1050,61 @@ void ql_mpi_idc_work(struct work_struct *work) "Bug: Unhandled IDC action.\n"); break; case MB_CMD_PORT_RESET: case MB_CMD_SET_PORT_CFG: case MB_CMD_STOP_FW: ql_link_off(qdev); case MB_CMD_SET_PORT_CFG: /* Signal the resulting link up AEN * that the frame routing and mac addr * needs to be set. * */ set_bit(QL_CAM_RT_SET, &qdev->flags); rtnl_lock(); /* Do ACK if required */ if (timeout) { status = ql_mb_idc_ack(qdev); rtnl_unlock(); if (status) { if (status) QPRINTK(qdev, DRV, ERR, "Bug: No pending IDC!\n"); } else { QPRINTK(qdev, DRV, DEBUG, "IDC ACK not required\n"); status = 0; /* success */ } break; /* These sub-commands issued by another (FCoE) * function are requesting to do an operation * on the shared resource (MPI environment). * We currently don't issue these so we just * ACK the request. */ case MB_CMD_IOP_RESTART_MPI: case MB_CMD_IOP_PREP_LINK_DOWN: /* Drop the link, reload the routing * table when link comes up. */ ql_link_off(qdev); set_bit(QL_CAM_RT_SET, &qdev->flags); /* Fall through. */ case MB_CMD_IOP_DVR_START: case MB_CMD_IOP_FLASH_ACC: case MB_CMD_IOP_CORE_DUMP_MPI: case MB_CMD_IOP_PREP_UPDATE_MPI: case MB_CMD_IOP_COMP_UPDATE_MPI: case MB_CMD_IOP_NONE: /* an IDC without params */ /* Do ACK if required */ if (timeout) { status = ql_mb_idc_ack(qdev); if (status) QPRINTK(qdev, DRV, ERR, "Bug: No pending IDC!\n"); } else { QPRINTK(qdev, DRV, DEBUG, "IDC ACK not required\n"); status = 0; /* success */ } break; } rtnl_unlock(); } void ql_mpi_work(struct work_struct *work) Loading