Lines Matching full:command

37  * command.  This very generic callback simply stores
38 * the command's return value in command->arg and wake's
39 * up anyone waiting on the command.
41 static void ips_wakeup_callback(ips_command_t *command) in ips_wakeup_callback() argument
43 bus_dmamap_sync(command->sc->command_dmatag, command->command_dmamap, in ips_wakeup_callback()
45 sema_post(&command->sc->cmd_sema); in ips_wakeup_callback()
51 static void ips_io_request_finish(ips_command_t *command) in ips_io_request_finish() argument
54 struct bio *iobuf = command->arg; in ips_io_request_finish()
56 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_io_request_finish()
59 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_io_request_finish()
62 bus_dmamap_unload(command->data_dmatag, command->data_dmamap); in ips_io_request_finish()
63 if(COMMAND_ERROR(command)){ in ips_io_request_finish()
66 printf("ips: io error, status= 0x%x\n", command->status.value); in ips_io_request_finish()
68 ips_insert_free_cmd(command->sc, command); in ips_io_request_finish()
75 ips_command_t *command = cmdptr; in ips_io_request_callback() local
78 struct bio *iobuf = command->arg; in ips_io_request_callback()
82 sc = command->sc; in ips_io_request_callback()
85 bus_dmamap_unload(command->data_dmatag, command->data_dmamap); in ips_io_request_callback()
88 ips_insert_free_cmd(sc, command); in ips_io_request_callback()
92 command_struct = (ips_io_cmd *)command->command_buffer; in ips_io_request_callback()
93 command_struct->id = command->id; in ips_io_request_callback()
102 command->command_buffer + IPS_COMMAND_LEN); in ips_io_request_callback()
109 (u_int32_t)command->command_phys_addr + IPS_COMMAND_LEN; in ips_io_request_callback()
118 command_struct->command = cmdtype; in ips_io_request_callback()
122 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_io_request_callback()
125 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_io_request_callback()
128 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_io_request_callback()
131 PRINTF(10, "ips test: command id: %d segments: %d " in ips_io_request_callback()
132 "pblkno: %lld length: %d, ds_len: %d\n", command->id, segnum, in ips_io_request_callback()
136 sc->ips_issue_cmd(command); in ips_io_request_callback()
140 static int ips_send_io_request(ips_command_t *command, struct bio *iobuf) in ips_send_io_request() argument
142 command->callback = ips_io_request_finish; in ips_send_io_request()
143 command->arg = iobuf; in ips_send_io_request()
145 bus_dmamap_load(command->data_dmatag, command->data_dmamap, in ips_send_io_request()
147 ips_io_request_callback, command, 0); in ips_send_io_request()
154 ips_command_t *command; in ips_start_io_request() local
160 if (ips_get_free_cmd(sc, &command, 0)) in ips_start_io_request()
164 ips_send_io_request(command, iobuf); in ips_start_io_request()
175 ips_command_t *command = cmdptr; in ips_adapter_info_callback() local
177 sc = command->sc; in ips_adapter_info_callback()
179 ips_set_error(command, error); in ips_adapter_info_callback()
183 command_struct = (ips_adapter_info_cmd *)command->command_buffer; in ips_adapter_info_callback()
184 command_struct->command = IPS_ADAPTER_INFO_CMD; in ips_adapter_info_callback()
185 command_struct->id = command->id; in ips_adapter_info_callback()
188 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_adapter_info_callback()
190 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_adapter_info_callback()
192 sc->ips_issue_cmd(command); in ips_adapter_info_callback()
194 ips_set_error(command, ETIMEDOUT); in ips_adapter_info_callback()
198 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_adapter_info_callback()
200 memcpy(&(sc->adapter_info), command->data_buffer, IPS_ADAPTER_INFO_LEN); in ips_adapter_info_callback()
205 static int ips_send_adapter_info_cmd(ips_command_t *command) in ips_send_adapter_info_cmd() argument
208 ips_softc_t *sc = command->sc; in ips_send_adapter_info_cmd()
223 &command->data_dmatag) != 0) { in ips_send_adapter_info_cmd()
228 if(bus_dmamem_alloc(command->data_dmatag, &command->data_buffer, in ips_send_adapter_info_cmd()
229 BUS_DMA_NOWAIT, &command->data_dmamap)){ in ips_send_adapter_info_cmd()
233 command->callback = ips_wakeup_callback; in ips_send_adapter_info_cmd()
234 error = bus_dmamap_load(command->data_dmatag, command->data_dmamap, in ips_send_adapter_info_cmd()
235 command->data_buffer,IPS_ADAPTER_INFO_LEN, in ips_send_adapter_info_cmd()
236 ips_adapter_info_callback, command, in ips_send_adapter_info_cmd()
240 bus_dmamap_unload(command->data_dmatag, command->data_dmamap); in ips_send_adapter_info_cmd()
244 bus_dmamem_free(command->data_dmatag, command->data_buffer, in ips_send_adapter_info_cmd()
245 command->data_dmamap); in ips_send_adapter_info_cmd()
246 bus_dma_tag_destroy(command->data_dmatag); in ips_send_adapter_info_cmd()
247 ips_insert_free_cmd(sc, command); in ips_send_adapter_info_cmd()
253 ips_command_t *command; in ips_get_adapter_info() local
256 if (ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG) > 0){ in ips_get_adapter_info()
260 ips_send_adapter_info_cmd(command); in ips_get_adapter_info()
261 if (COMMAND_ERROR(command)){ in ips_get_adapter_info()
274 ips_command_t *command = cmdptr; in ips_drive_info_callback() local
278 sc = command->sc; in ips_drive_info_callback()
280 ips_set_error(command, error); in ips_drive_info_callback()
284 command_struct = (ips_drive_cmd *)command->command_buffer; in ips_drive_info_callback()
285 command_struct->command = IPS_DRIVE_INFO_CMD; in ips_drive_info_callback()
286 command_struct->id = command->id; in ips_drive_info_callback()
289 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_drive_info_callback()
291 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_drive_info_callback()
293 sc->ips_issue_cmd(command); in ips_drive_info_callback()
295 ips_set_error(command, ETIMEDOUT); in ips_drive_info_callback()
299 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_drive_info_callback()
301 driveinfo = command->data_buffer; in ips_drive_info_callback()
307 static int ips_send_drive_info_cmd(ips_command_t *command) in ips_send_drive_info_cmd() argument
310 ips_softc_t *sc = command->sc; in ips_send_drive_info_cmd()
325 &command->data_dmatag) != 0) { in ips_send_drive_info_cmd()
330 if(bus_dmamem_alloc(command->data_dmatag, &command->data_buffer, in ips_send_drive_info_cmd()
331 BUS_DMA_NOWAIT, &command->data_dmamap)){ in ips_send_drive_info_cmd()
335 command->callback = ips_wakeup_callback; in ips_send_drive_info_cmd()
336 error = bus_dmamap_load(command->data_dmatag, command->data_dmamap, in ips_send_drive_info_cmd()
337 command->data_buffer,IPS_DRIVE_INFO_LEN, in ips_send_drive_info_cmd()
338 ips_drive_info_callback, command, in ips_send_drive_info_cmd()
341 bus_dmamap_unload(command->data_dmatag, command->data_dmamap); in ips_send_drive_info_cmd()
345 bus_dmamem_free(command->data_dmatag, command->data_buffer, in ips_send_drive_info_cmd()
346 command->data_dmamap); in ips_send_drive_info_cmd()
347 bus_dma_tag_destroy(command->data_dmatag); in ips_send_drive_info_cmd()
348 ips_insert_free_cmd(sc, command); in ips_send_drive_info_cmd()
355 ips_command_t *command; in ips_get_drive_info() local
357 if (ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG) > 0){ in ips_get_drive_info()
361 ips_send_drive_info_cmd(command); in ips_get_drive_info()
362 if(COMMAND_ERROR(command)){ in ips_get_drive_info()
370 static int ips_send_flush_cache_cmd(ips_command_t *command) in ips_send_flush_cache_cmd() argument
372 ips_softc_t *sc = command->sc; in ips_send_flush_cache_cmd()
375 PRINTF(10,"ips test: got a command, building flush command\n"); in ips_send_flush_cache_cmd()
376 command->callback = ips_wakeup_callback; in ips_send_flush_cache_cmd()
377 command_struct = (ips_generic_cmd *)command->command_buffer; in ips_send_flush_cache_cmd()
378 command_struct->command = IPS_CACHE_FLUSH_CMD; in ips_send_flush_cache_cmd()
379 command_struct->id = command->id; in ips_send_flush_cache_cmd()
380 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_send_flush_cache_cmd()
382 sc->ips_issue_cmd(command); in ips_send_flush_cache_cmd()
383 if (COMMAND_ERROR(command) == 0) in ips_send_flush_cache_cmd()
385 ips_insert_free_cmd(sc, command); in ips_send_flush_cache_cmd()
391 ips_command_t *command; in ips_flush_cache() local
394 if (ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG)){ in ips_flush_cache()
395 device_printf(sc->dev, "ERROR: unable to get a command! can't flush cache!\n"); in ips_flush_cache()
397 ips_send_flush_cache_cmd(command); in ips_flush_cache()
398 if(COMMAND_ERROR(command)){ in ips_flush_cache()
399 device_printf(sc->dev, "ERROR: cache flush command failed!\n"); in ips_flush_cache()
407 void static ips_ffdc_settime(ips_adapter_ffdc_cmd *command, time_t sctime) in ips_ffdc_settime() argument
420 command->hour = rem / IPS_SECSPERHOUR; in ips_ffdc_settime()
423 command->minute = rem / IPS_SECSPERMIN; in ips_ffdc_settime()
424 command->second = rem % IPS_SECSPERMIN; in ips_ffdc_settime()
438 command->yearH = y / 100; in ips_ffdc_settime()
439 command->yearL = y % 100; in ips_ffdc_settime()
443 command->month = month + 1; in ips_ffdc_settime()
444 command->day = days + 1; in ips_ffdc_settime()
447 static int ips_send_ffdc_reset_cmd(ips_command_t *command) in ips_send_ffdc_reset_cmd() argument
449 ips_softc_t *sc = command->sc; in ips_send_ffdc_reset_cmd()
452 PRINTF(10,"ips test: got a command, building ffdc reset command\n"); in ips_send_ffdc_reset_cmd()
453 command->callback = ips_wakeup_callback; in ips_send_ffdc_reset_cmd()
454 command_struct = (ips_adapter_ffdc_cmd *)command->command_buffer; in ips_send_ffdc_reset_cmd()
455 command_struct->command = IPS_FFDC_CMD; in ips_send_ffdc_reset_cmd()
456 command_struct->id = command->id; in ips_send_ffdc_reset_cmd()
461 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_send_ffdc_reset_cmd()
463 sc->ips_issue_cmd(command); in ips_send_ffdc_reset_cmd()
464 if (COMMAND_ERROR(command) == 0) in ips_send_ffdc_reset_cmd()
466 ips_insert_free_cmd(sc, command); in ips_send_ffdc_reset_cmd()
472 ips_command_t *command; in ips_ffdc_reset() local
474 if (ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG)){ in ips_ffdc_reset()
475 device_printf(sc->dev, "ERROR: unable to get a command! can't send ffdc reset!\n"); in ips_ffdc_reset()
477 ips_send_ffdc_reset_cmd(command); in ips_ffdc_reset()
478 if(COMMAND_ERROR(command)){ in ips_ffdc_reset()
479 device_printf(sc->dev, "ERROR: ffdc reset command failed!\n"); in ips_ffdc_reset()
484 static void ips_write_nvram(ips_command_t *command){ in ips_write_nvram() argument
485 ips_softc_t *sc = command->sc; in ips_write_nvram()
490 command->callback = ips_wakeup_callback; in ips_write_nvram()
491 command_struct = (ips_rw_nvram_cmd *)command->command_buffer; in ips_write_nvram()
492 command_struct->command = IPS_RW_NVRAM_CMD; in ips_write_nvram()
493 command_struct->id = command->id; in ips_write_nvram()
496 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_write_nvram()
498 nvram = command->data_buffer; in ips_write_nvram()
505 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_write_nvram()
507 sc->ips_issue_cmd(command); in ips_write_nvram()
513 ips_command_t *command = cmdptr; in ips_read_nvram_callback() local
515 sc = command->sc; in ips_read_nvram_callback()
517 ips_set_error(command, error); in ips_read_nvram_callback()
521 command_struct = (ips_rw_nvram_cmd *)command->command_buffer; in ips_read_nvram_callback()
522 command_struct->command = IPS_RW_NVRAM_CMD; in ips_read_nvram_callback()
523 command_struct->id = command->id; in ips_read_nvram_callback()
528 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_read_nvram_callback()
530 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_read_nvram_callback()
532 sc->ips_issue_cmd(command); in ips_read_nvram_callback()
534 ips_set_error(command, ETIMEDOUT); in ips_read_nvram_callback()
537 bus_dmamap_sync(command->data_dmatag, command->data_dmamap, in ips_read_nvram_callback()
541 static int ips_read_nvram(ips_command_t *command) in ips_read_nvram() argument
544 ips_softc_t *sc = command->sc; in ips_read_nvram()
559 &command->data_dmatag) != 0) { in ips_read_nvram()
564 if(bus_dmamem_alloc(command->data_dmatag, &command->data_buffer, in ips_read_nvram()
565 BUS_DMA_NOWAIT, &command->data_dmamap)){ in ips_read_nvram()
569 command->callback = ips_write_nvram; in ips_read_nvram()
570 error = bus_dmamap_load(command->data_dmatag, command->data_dmamap, in ips_read_nvram()
571 command->data_buffer,IPS_NVRAM_PAGE_SIZE, in ips_read_nvram()
572 ips_read_nvram_callback, command, in ips_read_nvram()
575 bus_dmamap_unload(command->data_dmatag, command->data_dmamap); in ips_read_nvram()
578 bus_dmamem_free(command->data_dmatag, command->data_buffer, in ips_read_nvram()
579 command->data_dmamap); in ips_read_nvram()
580 bus_dma_tag_destroy(command->data_dmatag); in ips_read_nvram()
581 ips_insert_free_cmd(sc, command); in ips_read_nvram()
587 ips_command_t *command; in ips_update_nvram() local
589 if (ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG)){ in ips_update_nvram()
590 device_printf(sc->dev, "ERROR: unable to get a command! can't update nvram\n"); in ips_update_nvram()
593 ips_read_nvram(command); in ips_update_nvram()
594 if(COMMAND_ERROR(command)){ in ips_update_nvram()
595 device_printf(sc->dev, "ERROR: nvram update command failed!\n"); in ips_update_nvram()
603 static int ips_send_config_sync_cmd(ips_command_t *command) in ips_send_config_sync_cmd() argument
605 ips_softc_t *sc = command->sc; in ips_send_config_sync_cmd()
608 PRINTF(10,"ips test: got a command, building flush command\n"); in ips_send_config_sync_cmd()
609 command->callback = ips_wakeup_callback; in ips_send_config_sync_cmd()
610 command_struct = (ips_generic_cmd *)command->command_buffer; in ips_send_config_sync_cmd()
611 command_struct->command = IPS_CONFIG_SYNC_CMD; in ips_send_config_sync_cmd()
612 command_struct->id = command->id; in ips_send_config_sync_cmd()
614 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_send_config_sync_cmd()
616 sc->ips_issue_cmd(command); in ips_send_config_sync_cmd()
617 if (COMMAND_ERROR(command) == 0) in ips_send_config_sync_cmd()
619 ips_insert_free_cmd(sc, command); in ips_send_config_sync_cmd()
623 static int ips_send_error_table_cmd(ips_command_t *command) in ips_send_error_table_cmd() argument
625 ips_softc_t *sc = command->sc; in ips_send_error_table_cmd()
628 PRINTF(10,"ips test: got a command, building errortable command\n"); in ips_send_error_table_cmd()
629 command->callback = ips_wakeup_callback; in ips_send_error_table_cmd()
630 command_struct = (ips_generic_cmd *)command->command_buffer; in ips_send_error_table_cmd()
631 command_struct->command = IPS_ERROR_TABLE_CMD; in ips_send_error_table_cmd()
632 command_struct->id = command->id; in ips_send_error_table_cmd()
634 bus_dmamap_sync(sc->command_dmatag, command->command_dmamap, in ips_send_error_table_cmd()
636 sc->ips_issue_cmd(command); in ips_send_error_table_cmd()
637 if (COMMAND_ERROR(command) == 0) in ips_send_error_table_cmd()
639 ips_insert_free_cmd(sc, command); in ips_send_error_table_cmd()
646 ips_command_t *command; in ips_clear_adapter() local
649 if (ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG)){ in ips_clear_adapter()
650 device_printf(sc->dev, "ERROR: unable to get a command! can't sync cache!\n"); in ips_clear_adapter()
653 ips_send_config_sync_cmd(command); in ips_clear_adapter()
654 if(COMMAND_ERROR(command)){ in ips_clear_adapter()
655 device_printf(sc->dev, "ERROR: cache sync command failed!\n"); in ips_clear_adapter()
660 if(ips_get_free_cmd(sc, &command, IPS_STATIC_FLAG)){ in ips_clear_adapter()
661 device_printf(sc->dev, "ERROR: unable to get a command! can't sync cache!\n"); in ips_clear_adapter()
664 ips_send_error_table_cmd(command); in ips_clear_adapter()
665 if(COMMAND_ERROR(command)){ in ips_clear_adapter()
666 device_printf(sc->dev, "ERROR: etable command failed!\n"); in ips_clear_adapter()