Loading drivers/net/qlge/qlge_mpi.c +29 −7 Original line number Diff line number Diff line #include "qlge.h" static int ql_read_mbox_reg(struct ql_adapter *qdev, u32 reg, u32 *data) int ql_read_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 *data) { int status; /* wait for reg to come ready */ Loading @@ -19,6 +19,32 @@ static int ql_read_mbox_reg(struct ql_adapter *qdev, u32 reg, u32 *data) return status; } int ql_write_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 data) { int status = 0; /* wait for reg to come ready */ status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); if (status) goto exit; /* write the data to the data reg */ ql_write32(qdev, PROC_DATA, data); /* trigger the write */ ql_write32(qdev, PROC_ADDR, reg); /* wait for reg to come ready */ status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); if (status) goto exit; exit: return status; } int ql_soft_reset_mpi_risc(struct ql_adapter *qdev) { int status; status = ql_write_mpi_reg(qdev, 0x00001010, 1); return status; } static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp) { int i, status; Loading @@ -28,7 +54,7 @@ static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp) return -EBUSY; for (i = 0; i < mbcp->out_count; i++) { status = ql_read_mbox_reg(qdev, qdev->mailbox_out + i, ql_read_mpi_reg(qdev, qdev->mailbox_out + i, &mbcp->mbox_out[i]); if (status) { QPRINTK(qdev, DRV, ERR, "Failed mailbox read.\n"); Loading Loading @@ -142,9 +168,5 @@ void ql_mpi_reset_work(struct work_struct *work) { struct ql_adapter *qdev = container_of(work, struct ql_adapter, mpi_reset_work.work); QPRINTK(qdev, DRV, ERR, "Enter, qdev = %p..\n", qdev); ql_write32(qdev, CSR, CSR_CMD_SET_RST); msleep(50); ql_write32(qdev, CSR, CSR_CMD_CLR_RST); ql_soft_reset_mpi_risc(qdev); } Loading
drivers/net/qlge/qlge_mpi.c +29 −7 Original line number Diff line number Diff line #include "qlge.h" static int ql_read_mbox_reg(struct ql_adapter *qdev, u32 reg, u32 *data) int ql_read_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 *data) { int status; /* wait for reg to come ready */ Loading @@ -19,6 +19,32 @@ static int ql_read_mbox_reg(struct ql_adapter *qdev, u32 reg, u32 *data) return status; } int ql_write_mpi_reg(struct ql_adapter *qdev, u32 reg, u32 data) { int status = 0; /* wait for reg to come ready */ status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); if (status) goto exit; /* write the data to the data reg */ ql_write32(qdev, PROC_DATA, data); /* trigger the write */ ql_write32(qdev, PROC_ADDR, reg); /* wait for reg to come ready */ status = ql_wait_reg_rdy(qdev, PROC_ADDR, PROC_ADDR_RDY, PROC_ADDR_ERR); if (status) goto exit; exit: return status; } int ql_soft_reset_mpi_risc(struct ql_adapter *qdev) { int status; status = ql_write_mpi_reg(qdev, 0x00001010, 1); return status; } static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp) { int i, status; Loading @@ -28,7 +54,7 @@ static int ql_get_mb_sts(struct ql_adapter *qdev, struct mbox_params *mbcp) return -EBUSY; for (i = 0; i < mbcp->out_count; i++) { status = ql_read_mbox_reg(qdev, qdev->mailbox_out + i, ql_read_mpi_reg(qdev, qdev->mailbox_out + i, &mbcp->mbox_out[i]); if (status) { QPRINTK(qdev, DRV, ERR, "Failed mailbox read.\n"); Loading Loading @@ -142,9 +168,5 @@ void ql_mpi_reset_work(struct work_struct *work) { struct ql_adapter *qdev = container_of(work, struct ql_adapter, mpi_reset_work.work); QPRINTK(qdev, DRV, ERR, "Enter, qdev = %p..\n", qdev); ql_write32(qdev, CSR, CSR_CMD_SET_RST); msleep(50); ql_write32(qdev, CSR, CSR_CMD_CLR_RST); ql_soft_reset_mpi_risc(qdev); }