// 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 } }
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; }