Exemplo n.º 1
0
// Debug message callback for OpenGL
// Thanks to Sam Serrels for this one
void __stdcall opengl_debug_callback(GLenum source, GLenum type, GLuint id, GLenum severity, GLsizei length,
                                     const GLchar *message, const void *user_param) {
  switch (type) {
  case GL_DEBUG_TYPE_ERROR:
    std::cerr << "An OpenGL debug error has been detected: " << message << std::endl;
    std::cerr << get_severity(severity) << std::endl;
    std::cerr << get_source(source) << std::endl;
    break;

  case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR:
    std::cerr << "OpenGL deprecated behaviour detected: " << message << std::endl;
    std::cerr << get_severity(severity) << std::endl;
    std::cerr << get_source(source) << std::endl;
    break;

  case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR:
    std::cerr << "OpenGL undefined behaviour detected: " << message << std::endl;
    std::cerr << get_severity(severity) << std::endl;
    std::cerr << get_source(source) << std::endl;
    break;

  case GL_DEBUG_TYPE_PORTABILITY:
    std::cerr << "OpenGL portability problem detected: " << message << std::endl;
    std::cerr << get_severity(severity) << std::endl;
    std::cerr << get_source(source) << std::endl;
    break;

  case GL_DEBUG_TYPE_PERFORMANCE:
    std::cerr << "OpenGL performance problem detected: " << message << std::endl;
    std::cerr << get_severity(severity) << std::endl;
    std::cerr << get_source(source) << std::endl;
    break;

#ifdef OGL_DEBUG_OTHER
  case GL_DEBUG_TYPE_OTHER:
    std::cerr << "Other OpenGL error detected: " << message << std::endl;
    std::cerr << get_severity(severity) << std::endl;
    std::cerr << get_source(source) << std::endl;
    break;
#endif
  }
}
Exemplo n.º 2
0
int ohoi_hot_swap_cb(ipmi_entity_t  *ent,
		     enum ipmi_hot_swap_states last_state,
                     enum ipmi_hot_swap_states curr_state,
		     void                      *cb_data,
		     ipmi_event_t              *event)
{
	struct oh_handler_state *handler =  (struct oh_handler_state*)cb_data;
	struct ohoi_handler *ipmi_handler =
					(struct ohoi_handler *)handler->data;
	ipmi_entity_id_t entity_id;
	SaHpiRptEntryT  *rpt_entry;
        struct ohoi_resource_info   *res_info;
	struct oh_event  *e;

#if 0
if (event) {
unsigned char	data[IPMI_EVENT_DATA_MAX_LEN];
unsigned int	dt_len, i;
printf("event body : ");
dt_len = ipmi_event_get_data(event, data, 0, IPMI_EVENT_DATA_MAX_LEN);
for (i =0; i < dt_len; i++) printf(" 0x%02x", data[i]);
printf("\n");
}
#endif



	if (getenv("OHOI_TRACE_HOTSWAP") || IHOI_TRACE_ALL) {
		printf(" *** Hotswap HANDLER for entity %d,%d,%d,%d "
			"(%s). states 0x%x -> 0x%x.    entity = %p\n",
			ipmi_entity_get_entity_id(ent),
			ipmi_entity_get_entity_instance(ent),
			ipmi_entity_get_device_channel(ent),
			ipmi_entity_get_device_address(ent),
			ipmi_entity_get_entity_id_string(ent),
			last_state, curr_state, ent);
	}
	trace_ipmi("HotSwap Handler called");

	entity_id = ipmi_entity_convert_to_id(ent);

	rpt_entry = ohoi_get_resource_by_entityid(handler->rptcache, &entity_id);

	if (!rpt_entry) {
		err(" No rpt\n");
		return IPMI_EVENT_HANDLED;
	}
        res_info = oh_get_resource_data(handler->rptcache, rpt_entry->ResourceId);
	if ((last_state == IPMI_HOT_SWAP_ACTIVATION_IN_PROGRESS) &&
			(curr_state == IPMI_HOT_SWAP_DEACTIVATION_IN_PROGRESS)) {
		if (res_info) {
			res_info->hs_mark = 1;
		}
		return IPMI_EVENT_HANDLED;
	}
	e = malloc(sizeof(*e));
	if (!e) {
		err("Out of space");
		return IPMI_EVENT_HANDLED;
	}

	memset(e, 0, sizeof(*e));
	e->event.Source = rpt_entry->ResourceId;
	if ((curr_state == IPMI_HOT_SWAP_OUT_OF_CON) &&
			(last_state != IPMI_HOT_SWAP_NOT_PRESENT)) {
		// special case. connection to entity lost
		rpt_entry->ResourceFailed = SAHPI_TRUE;
		e->event.EventType = SAHPI_ET_RESOURCE;
		e->event.Severity = rpt_entry->ResourceSeverity;
		oh_gettimeofday(&e->event.Timestamp);
		e->event.Source = rpt_entry->ResourceId;
		e->event.EventDataUnion.ResourceEvent.
			ResourceEventType = SAHPI_RESE_RESOURCE_FAILURE;
		e->resource = *rpt_entry;
                e->hid = handler->hid;
                oh_evt_queue_push(handler->eventq, e);
		if (!IS_ATCA(ipmi_handler->d_type)) {
			return IPMI_EVENT_HANDLED;
		}
		if (ipmi_entity_get_entity_id(ent) == 0xf0) {
			// Shelf Manager. Handle ShM Redundancy Sensor
			if (ipmi_handler->fully_up) {
				ipmi_handler->shmc_present_num--;
				ohoi_send_vshmgr_redundancy_sensor_event(
						handler, 0);
			}
		}
		return IPMI_EVENT_HANDLED;
	}

	if ((curr_state != IPMI_HOT_SWAP_OUT_OF_CON) &&
			rpt_entry->ResourceFailed) {
		// special case
		rpt_entry->ResourceFailed = SAHPI_FALSE;
		if (curr_state != IPMI_HOT_SWAP_NOT_PRESENT) {
			// connection to entity restored
			e->event.EventType = SAHPI_ET_RESOURCE;
			e->event.Severity = rpt_entry->ResourceSeverity;
			oh_gettimeofday(&e->event.Timestamp);
			e->event.Source = rpt_entry->ResourceId;
			e->event.EventDataUnion.ResourceEvent.
				ResourceEventType = SAHPI_RESE_RESOURCE_RESTORED;
			e->resource = *rpt_entry;
			e->hid = handler->hid;
                        oh_evt_queue_push(handler->eventq, e);
			if (!IS_ATCA(ipmi_handler->d_type)) {
				return IPMI_EVENT_HANDLED;
			}
			if (ipmi_entity_get_entity_id(ent) == 0xf0) {
				// Shelf Manager. Handle ShM Redundancy Sensor
				if (ipmi_handler->fully_up) {
					ipmi_handler->shmc_present_num++;
					ohoi_send_vshmgr_redundancy_sensor_event(
						handler, 1);
				}
			}
			return IPMI_EVENT_HANDLED;
		}
		// XXX here must be handled M7->M0 transition
	}

	e->event.Source = rpt_entry->ResourceId;
	e->event.EventType = SAHPI_ET_HOTSWAP;
	e->event.Severity = get_severity(last_state, curr_state,
					rpt_entry, res_info);


	if (event != NULL) {
	      	e->event.Timestamp =
		    (SaHpiTimeT)ipmi_event_get_timestamp(event);
	} else {
	      	e->event.Timestamp = SAHPI_TIME_UNSPECIFIED;
	}
	if (e->event.Timestamp == SAHPI_TIME_UNSPECIFIED) {
		oh_gettimeofday(&e->event.Timestamp);
	}


	e->event.EventDataUnion.HotSwapEvent.HotSwapState
			= _ipmi_to_hpi_state_conv(curr_state);
	e->event.EventDataUnion.HotSwapEvent.PreviousHotSwapState
			= _ipmi_to_hpi_state_conv(last_state);

	e->resource = *rpt_entry;

	if (e->event.EventDataUnion.HotSwapEvent.PreviousHotSwapState ==
		e->event.EventDataUnion.HotSwapEvent.HotSwapState) {
		free(e);
		return IPMI_EVENT_HANDLED;
	}
	if (e->event.EventDataUnion.HotSwapEvent.HotSwapState ==
					SAHPI_HS_STATE_INSERTION_PENDING) {
		res_info->hs_inspen_time = e->event.Timestamp;
	} else {
		res_info->hs_inspen_time = SAHPI_TIME_UNSPECIFIED;
	}
	if (e->event.EventDataUnion.HotSwapEvent.HotSwapState ==
	    					SAHPI_HS_STATE_NOT_PRESENT) {
		trace_ipmi("HS_STATE NOT PRESENT, removing RPT");
	  	e->hid = handler->hid;
                oh_evt_queue_push(handler->eventq, e);
	}else if (e->event.EventDataUnion.HotSwapEvent.HotSwapState ==
			SAHPI_HS_STATE_ACTIVE) {
		trace_ipmi("HS_STATE ACTIVE");
		e->hid = handler->hid;
                oh_evt_queue_push(handler->eventq, e);
	}else {
	  	e->hid = handler->hid;
                oh_evt_queue_push(handler->eventq, e);
	}
//	oh_wake_event_thread(0);
	if (!IS_ATCA(ipmi_handler->d_type) || !event) {
		return IPMI_EVENT_HANDLED;
	}

	unsigned char	data[IPMI_EVENT_DATA_MAX_LEN];
	unsigned int	dt_len;

	dt_len = ipmi_event_get_data(event, data, 0, IPMI_EVENT_DATA_MAX_LEN);
	if (dt_len < 12) {
		err("event data len (%d) too short", dt_len);
		return IPMI_EVENT_HANDLED;
	}

	e = malloc(sizeof(*e));
	if (!e) {
		err("Out of space");
		return IPMI_EVENT_HANDLED;
	}
	memset(e, 0, sizeof(*e));

	e->resource = *rpt_entry;
	e->event.Source = rpt_entry->ResourceId;
	e->event.Timestamp =
		    (SaHpiTimeT)ipmi_event_get_timestamp(event);
	e->event.Severity = SAHPI_INFORMATIONAL;
	e->event.EventType = SAHPI_ET_OEM;
	e->event.EventDataUnion.OemEvent.MId = ATCAHPI_PICMG_MID;
	e->event.EventDataUnion.OemEvent.OemEventData.DataType =
					SAHPI_TL_TYPE_TEXT;
	e->event.EventDataUnion.OemEvent.OemEventData.Language =
					SAHPI_LANG_UNDEF;
	e->event.EventDataUnion.OemEvent.OemEventData.DataLength =
					 3;
	e->event.EventDataUnion.OemEvent.OemEventData.Data[0] =
					_ipmi_to_hpi_state_conv(curr_state);
	e->event.EventDataUnion.OemEvent.OemEventData.Data[1] =
					_ipmi_to_hpi_state_conv(last_state);
	e->event.EventDataUnion.OemEvent.OemEventData.Data[2] =
			_ipmi_to_hpi_cause_of_change_conv(data[11] >> 4);

	e->hid = handler->hid;
        oh_evt_queue_push(handler->eventq, e);

	return IPMI_EVENT_HANDLED;

}