| 299 | } |
| 300 | |
| 301 | static int |
| 302 | ionic_dev_cmd_wait(struct ionic_dev *idev, unsigned long max_wait) |
| 303 | { |
| 304 | unsigned long step_usec = IONIC_DEVCMD_CHECK_PERIOD_US; |
| 305 | unsigned long max_wait_usec = max_wait * 1000000L; |
| 306 | unsigned long elapsed_usec = 0; |
| 307 | int done; |
| 308 | |
| 309 | /* Wait for dev cmd to complete.. but no more than max_wait sec */ |
| 310 | |
| 311 | do { |
| 312 | done = ionic_dev_cmd_done(idev); |
| 313 | if (done) { |
| 314 | IONIC_PRINT(DEBUG, "DEVCMD %d done took %ld usecs", |
| 315 | ioread8(&idev->dev_cmd->cmd.cmd.opcode), |
| 316 | elapsed_usec); |
| 317 | return 0; |
| 318 | } |
| 319 | |
| 320 | rte_delay_us_block(step_usec); |
| 321 | |
| 322 | elapsed_usec += step_usec; |
| 323 | } while (elapsed_usec < max_wait_usec); |
| 324 | |
| 325 | IONIC_PRINT(ERR, "DEVCMD %d timeout after %ld usecs", |
| 326 | ioread8(&idev->dev_cmd->cmd.cmd.opcode), |
| 327 | elapsed_usec); |
| 328 | |
| 329 | return -ETIMEDOUT; |
| 330 | } |
| 331 | |
| 332 | static int |
| 333 | ionic_dev_cmd_check_error(struct ionic_dev *idev) |
no test coverage detected