1*5699897cSHaik Aftandilian /* 2*5699897cSHaik Aftandilian * CDDL HEADER START 3*5699897cSHaik Aftandilian * 4*5699897cSHaik Aftandilian * The contents of this file are subject to the terms of the 5*5699897cSHaik Aftandilian * Common Development and Distribution License (the "License"). 6*5699897cSHaik Aftandilian * You may not use this file except in compliance with the License. 7*5699897cSHaik Aftandilian * 8*5699897cSHaik Aftandilian * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*5699897cSHaik Aftandilian * or http://www.opensolaris.org/os/licensing. 10*5699897cSHaik Aftandilian * See the License for the specific language governing permissions 11*5699897cSHaik Aftandilian * and limitations under the License. 12*5699897cSHaik Aftandilian * 13*5699897cSHaik Aftandilian * When distributing Covered Code, include this CDDL HEADER in each 14*5699897cSHaik Aftandilian * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*5699897cSHaik Aftandilian * If applicable, add the following below this CDDL HEADER, with the 16*5699897cSHaik Aftandilian * fields enclosed by brackets "[]" replaced with your own identifying 17*5699897cSHaik Aftandilian * information: Portions Copyright [yyyy] [name of copyright owner] 18*5699897cSHaik Aftandilian * 19*5699897cSHaik Aftandilian * CDDL HEADER END 20*5699897cSHaik Aftandilian */ 21*5699897cSHaik Aftandilian /* 22*5699897cSHaik Aftandilian * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23*5699897cSHaik Aftandilian * Use is subject to license terms. 24*5699897cSHaik Aftandilian */ 25*5699897cSHaik Aftandilian 26*5699897cSHaik Aftandilian #include <sys/param.h> 27*5699897cSHaik Aftandilian 28*5699897cSHaik Aftandilian /* 29*5699897cSHaik Aftandilian * In-Kernel Logical Domain Channel (LDC) Functionality 30*5699897cSHaik Aftandilian * 31*5699897cSHaik Aftandilian * Provides a mechanism for LDC channels to be reset when entering 32*5699897cSHaik Aftandilian * the prom or kmdb by invoking a callback before entry. 33*5699897cSHaik Aftandilian */ 34*5699897cSHaik Aftandilian 35*5699897cSHaik Aftandilian /* 36*5699897cSHaik Aftandilian * Setting this to zero disables debug_enter/debug_exit callbacks 37*5699897cSHaik Aftandilian * which may be useful when debugging LDC related issues. 38*5699897cSHaik Aftandilian */ 39*5699897cSHaik Aftandilian static int kldc_callback_enabled = 1; 40*5699897cSHaik Aftandilian 41*5699897cSHaik Aftandilian /* 42*5699897cSHaik Aftandilian * Callback function pointer. 43*5699897cSHaik Aftandilian */ 44*5699897cSHaik Aftandilian static void (*kldc_debug_enter_cb)(void); 45*5699897cSHaik Aftandilian 46*5699897cSHaik Aftandilian void kldc_set_debug_cb(void (* debug_enter_cb)(void))47*5699897cSHaik Aftandiliankldc_set_debug_cb(void (*debug_enter_cb)(void)) 48*5699897cSHaik Aftandilian { 49*5699897cSHaik Aftandilian kldc_debug_enter_cb = debug_enter_cb; 50*5699897cSHaik Aftandilian } 51*5699897cSHaik Aftandilian 52*5699897cSHaik Aftandilian /* 53*5699897cSHaik Aftandilian * Called just before entering the prom or kmdb but after all other CPUs 54*5699897cSHaik Aftandilian * have entered the idle loop. 55*5699897cSHaik Aftandilian */ 56*5699897cSHaik Aftandilian void kldc_debug_enter(void)57*5699897cSHaik Aftandiliankldc_debug_enter(void) 58*5699897cSHaik Aftandilian { 59*5699897cSHaik Aftandilian if (kldc_callback_enabled != 0 && kldc_debug_enter_cb != NULL) { 60*5699897cSHaik Aftandilian (*kldc_debug_enter_cb)(); 61*5699897cSHaik Aftandilian } 62*5699897cSHaik Aftandilian } 63