xref: /illumos-gate/usr/src/uts/sun4v/os/kldc.c (revision 5699897c)
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 Aftandilian kldc_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 Aftandilian kldc_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