aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/isci/isci_controller.c
diff options
context:
space:
mode:
authorJim Harris <jimharris@FreeBSD.org>2012-09-26 16:46:44 +0000
committerJim Harris <jimharris@FreeBSD.org>2012-09-26 16:46:44 +0000
commit37274fc04c7597c2b05e2296c5d403da48a368bd (patch)
treec9480f7a6a6bbb0b5ece741b842edbb984d0b4ae /sys/dev/isci/isci_controller.c
parentb04e4c122bad756dc4fa92b36eb8e6366e3d9141 (diff)
Notes
Diffstat (limited to 'sys/dev/isci/isci_controller.c')
-rw-r--r--sys/dev/isci/isci_controller.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/dev/isci/isci_controller.c b/sys/dev/isci/isci_controller.c
index 1255201fe835..2b112b22bd17 100644
--- a/sys/dev/isci/isci_controller.c
+++ b/sys/dev/isci/isci_controller.c
@@ -49,6 +49,9 @@ __FBSDID("$FreeBSD$");
#include <dev/isci/scil/scif_remote_device.h>
#include <dev/isci/scil/scif_domain.h>
#include <dev/isci/scil/scif_user_callback.h>
+#include <dev/isci/scil/scic_sgpio.h>
+
+#include <dev/led/led.h>
void isci_action(struct cam_sim *sim, union ccb *ccb);
void isci_poll(struct cam_sim *sim);
@@ -271,10 +274,19 @@ void isci_controller_construct(struct ISCI_CONTROLLER *controller,
sci_pool_initialize(controller->unmap_buffer_pool);
}
+static void isci_led_func(void *priv, int onoff)
+{
+ struct ISCI_LED *led = priv;
+
+ /* map onoff to the locate LED */
+ scic_sgpio_update_led_state(led->handle, 1 << led->index, 0, onoff, 0);
+}
+
SCI_STATUS isci_controller_initialize(struct ISCI_CONTROLLER *controller)
{
SCIC_USER_PARAMETERS_T scic_user_parameters;
SCI_CONTROLLER_HANDLE_T scic_controller_handle;
+ char led_name[64];
unsigned long tunable;
int i;
@@ -355,6 +367,15 @@ SCI_STATUS isci_controller_initialize(struct ISCI_CONTROLLER *controller)
xpt_freeze_simq(controller->sim, 1);
mtx_unlock(&controller->lock);
+ for (i = 0; i < SCI_MAX_PHYS; i++) {
+ controller->led[i].handle = scic_controller_handle;
+ controller->led[i].index = i;
+ sprintf(led_name, "isci.bus%d.port%d.locate",
+ controller->index, i);
+ controller->led[i].cdev = led_create(isci_led_func,
+ &controller->led[i], led_name);
+ }
+
return (scif_controller_initialize(controller->scif_controller_handle));
}