1044
1045
1046 /*ARGSUSED*/
1047 extern void
1048 emlxs_mb_heartbeat(emlxs_hba_t *hba, MAILBOXQ *mbq)
1049 {
1050 MAILBOX *mb = (MAILBOX *)mbq;
1051
1052 bzero((void *) mb, MAILBOX_CMD_BSIZE);
1053
1054 mb->mbxCommand = MBX_HEARTBEAT;
1055 mb->mbxOwner = OWN_HOST;
1056 mbq->mbox_cmpl = NULL; /* no cmpl needed for hbeat */
1057 mbq->port = (void *)&PPORT;
1058
1059 return;
1060
1061 } /* emlxs_mb_heartbeat() */
1062
1063
1064 #ifdef MSI_SUPPORT
1065
1066 /*ARGSUSED*/
1067 extern void
1068 emlxs_mb_config_msi(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t *intr_map,
1069 uint32_t intr_count)
1070 {
1071 MAILBOX *mb = (MAILBOX *)mbq;
1072 uint16_t i;
1073 uint32_t mask;
1074
1075 bzero((void *)mb, MAILBOX_CMD_BSIZE);
1076
1077 mb->mbxCommand = MBX_CONFIG_MSI;
1078
1079 /* Set the default message id to zero */
1080 mb->un.varCfgMSI.defaultPresent = 1;
1081 mb->un.varCfgMSI.defaultMessageNumber = 0;
1082
1083 for (i = 1; i < intr_count; i++) {
|
1044
1045
1046 /*ARGSUSED*/
1047 extern void
1048 emlxs_mb_heartbeat(emlxs_hba_t *hba, MAILBOXQ *mbq)
1049 {
1050 MAILBOX *mb = (MAILBOX *)mbq;
1051
1052 bzero((void *) mb, MAILBOX_CMD_BSIZE);
1053
1054 mb->mbxCommand = MBX_HEARTBEAT;
1055 mb->mbxOwner = OWN_HOST;
1056 mbq->mbox_cmpl = NULL; /* no cmpl needed for hbeat */
1057 mbq->port = (void *)&PPORT;
1058
1059 return;
1060
1061 } /* emlxs_mb_heartbeat() */
1062
1063
1064 /*ARGSUSED*/
1065 extern void
1066 emlxs_mb_gpio_write(emlxs_hba_t *hba, MAILBOXQ *mbq, uint8_t pin, uint8_t val)
1067 {
1068 emlxs_port_t *port = &PPORT;
1069 MAILBOX4 *mb4;
1070 be_req_hdr_t *be_req;
1071 mbox_req_hdr_t *hdr_req;
1072 IOCTL_LOWLEVEL_GPIO_RDWR *gpio;
1073
1074 bzero((void *) mbq, sizeof (MAILBOXQ));
1075
1076 mbq->port = port;
1077
1078 mb4 = (MAILBOX4 *)mbq->mbox;
1079 mb4->mbxCommand = MBX_SLI_CONFIG;
1080 mb4->mbxOwner = OWN_HOST;
1081
1082 be_req = (be_req_hdr_t *)&mb4->un.varSLIConfig.be;
1083 be_req->embedded = 1;
1084 be_req->payload_length = sizeof (mbox_req_hdr_t) +
1085 sizeof (IOCTL_LOWLEVEL_GPIO_RDWR);
1086
1087 hdr_req = &be_req->un_hdr.hdr_req;
1088 hdr_req->subsystem = IOCTL_SUBSYSTEM_LOWLEVEL;
1089 hdr_req->opcode = LOWLEVEL_OPCODE_GPIO_RDWR;
1090 hdr_req->timeout = 0;
1091 hdr_req->req_length = sizeof (IOCTL_LOWLEVEL_GPIO_RDWR);
1092
1093 gpio = (IOCTL_LOWLEVEL_GPIO_RDWR *)&mb4->un.varSLIConfig.payload;
1094 gpio->params.request.GpioAction = LOWLEVEL_GPIO_ACT_WRITE;
1095 gpio->params.request.LogicalPin = pin;
1096 gpio->params.request.PinValue = val;
1097 } /* emlxs_mb_gpio_write */
1098
1099 #ifdef MSI_SUPPORT
1100
1101 /*ARGSUSED*/
1102 extern void
1103 emlxs_mb_config_msi(emlxs_hba_t *hba, MAILBOXQ *mbq, uint32_t *intr_map,
1104 uint32_t intr_count)
1105 {
1106 MAILBOX *mb = (MAILBOX *)mbq;
1107 uint16_t i;
1108 uint32_t mask;
1109
1110 bzero((void *)mb, MAILBOX_CMD_BSIZE);
1111
1112 mb->mbxCommand = MBX_CONFIG_MSI;
1113
1114 /* Set the default message id to zero */
1115 mb->un.varCfgMSI.defaultPresent = 1;
1116 mb->un.varCfgMSI.defaultMessageNumber = 0;
1117
1118 for (i = 1; i < intr_count; i++) {
|