19455SKrishna.Elango@Sun.COM /*
29455SKrishna.Elango@Sun.COM * CDDL HEADER START
39455SKrishna.Elango@Sun.COM *
49455SKrishna.Elango@Sun.COM * The contents of this file are subject to the terms of the
59455SKrishna.Elango@Sun.COM * Common Development and Distribution License (the "License").
69455SKrishna.Elango@Sun.COM * You may not use this file except in compliance with the License.
79455SKrishna.Elango@Sun.COM *
89455SKrishna.Elango@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
99455SKrishna.Elango@Sun.COM * or http://www.opensolaris.org/os/licensing.
109455SKrishna.Elango@Sun.COM * See the License for the specific language governing permissions
119455SKrishna.Elango@Sun.COM * and limitations under the License.
129455SKrishna.Elango@Sun.COM *
139455SKrishna.Elango@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each
149455SKrishna.Elango@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
159455SKrishna.Elango@Sun.COM * If applicable, add the following below this CDDL HEADER, with the
169455SKrishna.Elango@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying
179455SKrishna.Elango@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner]
189455SKrishna.Elango@Sun.COM *
199455SKrishna.Elango@Sun.COM * CDDL HEADER END
209455SKrishna.Elango@Sun.COM */
219455SKrishna.Elango@Sun.COM /*
229455SKrishna.Elango@Sun.COM * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
239455SKrishna.Elango@Sun.COM * Use is subject to license terms.
249455SKrishna.Elango@Sun.COM */
259455SKrishna.Elango@Sun.COM #include <sys/sysmacros.h>
269455SKrishna.Elango@Sun.COM #include <sys/types.h>
279455SKrishna.Elango@Sun.COM #include <sys/kmem.h>
289455SKrishna.Elango@Sun.COM #include <sys/ddi.h>
299455SKrishna.Elango@Sun.COM #include <sys/sunddi.h>
309455SKrishna.Elango@Sun.COM #include <sys/sunndi.h>
319455SKrishna.Elango@Sun.COM #include <sys/promif.h>
329455SKrishna.Elango@Sun.COM #include <sys/pcie.h>
339455SKrishna.Elango@Sun.COM #include <sys/pci_cap.h>
349455SKrishna.Elango@Sun.COM #include <sys/pcie_impl.h>
359455SKrishna.Elango@Sun.COM #include <sys/pcie_acpi.h>
369455SKrishna.Elango@Sun.COM #include <sys/acpi/acpi.h>
379455SKrishna.Elango@Sun.COM #include <sys/acpica.h>
389455SKrishna.Elango@Sun.COM
399455SKrishna.Elango@Sun.COM ACPI_STATUS pcie_acpi_eval_osc(dev_info_t *dip, ACPI_HANDLE osc_hdl,
409455SKrishna.Elango@Sun.COM uint32_t *osc_flags);
419455SKrishna.Elango@Sun.COM static ACPI_STATUS pcie_acpi_find_osc(ACPI_HANDLE busobj,
429455SKrishna.Elango@Sun.COM ACPI_HANDLE *osc_hdlp);
439455SKrishna.Elango@Sun.COM
449455SKrishna.Elango@Sun.COM #ifdef DEBUG
459455SKrishna.Elango@Sun.COM static void pcie_dump_acpi_obj(ACPI_HANDLE pcibus_obj);
469455SKrishna.Elango@Sun.COM static ACPI_STATUS pcie_walk_obj_namespace(ACPI_HANDLE hdl, uint32_t nl,
479455SKrishna.Elango@Sun.COM void *context, void **ret);
489455SKrishna.Elango@Sun.COM static ACPI_STATUS pcie_print_acpi_name(ACPI_HANDLE hdl, uint32_t nl,
499455SKrishna.Elango@Sun.COM void *context, void **ret);
509455SKrishna.Elango@Sun.COM #endif /* DEBUG */
519455SKrishna.Elango@Sun.COM
529455SKrishna.Elango@Sun.COM int
pcie_acpi_osc(dev_info_t * dip,uint32_t * osc_flags)539455SKrishna.Elango@Sun.COM pcie_acpi_osc(dev_info_t *dip, uint32_t *osc_flags)
549455SKrishna.Elango@Sun.COM {
559455SKrishna.Elango@Sun.COM ACPI_HANDLE pcibus_obj;
569455SKrishna.Elango@Sun.COM int status = AE_ERROR;
579455SKrishna.Elango@Sun.COM ACPI_HANDLE osc_hdl;
589455SKrishna.Elango@Sun.COM pcie_bus_t *bus_p = PCIE_DIP2BUS(dip);
599455SKrishna.Elango@Sun.COM pcie_x86_priv_t *osc_p = (pcie_x86_priv_t *)bus_p->bus_plat_private;
609455SKrishna.Elango@Sun.COM
619455SKrishna.Elango@Sun.COM /* Mark this so we know _OSC has been called for this device */
629455SKrishna.Elango@Sun.COM osc_p->bus_osc = B_TRUE;
639455SKrishna.Elango@Sun.COM
649455SKrishna.Elango@Sun.COM /*
659455SKrishna.Elango@Sun.COM * (1) Find the ACPI device node for this bus node.
669455SKrishna.Elango@Sun.COM */
679455SKrishna.Elango@Sun.COM status = acpica_get_handle(dip, &pcibus_obj);
689455SKrishna.Elango@Sun.COM if (status != AE_OK) {
699455SKrishna.Elango@Sun.COM PCIE_DBG("No ACPI device found (dip %p)\n", (void *)dip);
709455SKrishna.Elango@Sun.COM return (DDI_FAILURE);
719455SKrishna.Elango@Sun.COM }
729455SKrishna.Elango@Sun.COM
739455SKrishna.Elango@Sun.COM /*
749455SKrishna.Elango@Sun.COM * (2) Check if _OSC method is present.
759455SKrishna.Elango@Sun.COM */
769455SKrishna.Elango@Sun.COM if (pcie_acpi_find_osc(pcibus_obj, &osc_hdl) != AE_OK) {
779455SKrishna.Elango@Sun.COM /* no _OSC method present */
789455SKrishna.Elango@Sun.COM PCIE_DBG("no _OSC method present for dip %p\n",
799455SKrishna.Elango@Sun.COM (void *)dip);
809455SKrishna.Elango@Sun.COM return (DDI_FAILURE);
819455SKrishna.Elango@Sun.COM }
829455SKrishna.Elango@Sun.COM
839455SKrishna.Elango@Sun.COM /*
849455SKrishna.Elango@Sun.COM * (3) _OSC method exists; evaluate _OSC.
859455SKrishna.Elango@Sun.COM */
869455SKrishna.Elango@Sun.COM if (pcie_acpi_eval_osc(dip, osc_hdl, osc_flags) != AE_OK) {
879455SKrishna.Elango@Sun.COM PCIE_DBG("Failed to evaluate _OSC method for dip 0x%p\n",
889455SKrishna.Elango@Sun.COM (void *)dip);
899455SKrishna.Elango@Sun.COM return (DDI_FAILURE);
909455SKrishna.Elango@Sun.COM }
919455SKrishna.Elango@Sun.COM
929455SKrishna.Elango@Sun.COM osc_p->bus_osc_hp = (*osc_flags & OSC_CONTROL_PCIE_NAT_HP) ?
939455SKrishna.Elango@Sun.COM B_TRUE : B_FALSE;
949455SKrishna.Elango@Sun.COM osc_p->bus_osc_aer = (*osc_flags & OSC_CONTROL_PCIE_ADV_ERR) ?
959455SKrishna.Elango@Sun.COM B_TRUE : B_FALSE;
969455SKrishna.Elango@Sun.COM
979455SKrishna.Elango@Sun.COM #ifdef DEBUG
989455SKrishna.Elango@Sun.COM if (pcie_debug_flags > 1)
999455SKrishna.Elango@Sun.COM pcie_dump_acpi_obj(pcibus_obj);
1009455SKrishna.Elango@Sun.COM #endif /* DEBUG */
1019455SKrishna.Elango@Sun.COM
1029455SKrishna.Elango@Sun.COM return (DDI_SUCCESS);
1039455SKrishna.Elango@Sun.COM }
1049455SKrishna.Elango@Sun.COM
1059455SKrishna.Elango@Sun.COM static ACPI_STATUS
pcie_acpi_find_osc(ACPI_HANDLE busobj,ACPI_HANDLE * osc_hdlp)1069455SKrishna.Elango@Sun.COM pcie_acpi_find_osc(ACPI_HANDLE busobj, ACPI_HANDLE *osc_hdlp)
1079455SKrishna.Elango@Sun.COM {
1089455SKrishna.Elango@Sun.COM ACPI_HANDLE parentobj = busobj;
1099455SKrishna.Elango@Sun.COM ACPI_STATUS status = AE_NOT_FOUND;
1109455SKrishna.Elango@Sun.COM
1119455SKrishna.Elango@Sun.COM *osc_hdlp = NULL;
1129455SKrishna.Elango@Sun.COM
1139455SKrishna.Elango@Sun.COM /*
1149455SKrishna.Elango@Sun.COM * Walk up the ACPI device tree looking for _OSC method.
1159455SKrishna.Elango@Sun.COM */
1169455SKrishna.Elango@Sun.COM do {
1179455SKrishna.Elango@Sun.COM busobj = parentobj;
1189455SKrishna.Elango@Sun.COM if ((status = AcpiGetHandle(busobj, "_OSC", osc_hdlp)) == AE_OK)
1199455SKrishna.Elango@Sun.COM break;
1209455SKrishna.Elango@Sun.COM } while (AcpiGetParent(busobj, &parentobj) == AE_OK);
1219455SKrishna.Elango@Sun.COM
1229455SKrishna.Elango@Sun.COM if (*osc_hdlp == NULL)
1239455SKrishna.Elango@Sun.COM status = AE_NOT_FOUND;
1249455SKrishna.Elango@Sun.COM
1259455SKrishna.Elango@Sun.COM return (status);
1269455SKrishna.Elango@Sun.COM }
1279455SKrishna.Elango@Sun.COM
1289455SKrishna.Elango@Sun.COM /* UUID for for PCI/PCI-X/PCI-Exp hierarchy as defined in PCI fw ver 3.0 */
1299455SKrishna.Elango@Sun.COM static uint8_t pcie_uuid[16] =
1309455SKrishna.Elango@Sun.COM {0x5b, 0x4d, 0xdb, 0x33, 0xf7, 0x1f, 0x1c, 0x40,
1319455SKrishna.Elango@Sun.COM 0x96, 0x57, 0x74, 0x41, 0xc0, 0x3d, 0xd7, 0x66};
1329455SKrishna.Elango@Sun.COM
1339455SKrishna.Elango@Sun.COM /*
1349455SKrishna.Elango@Sun.COM * Evaluate _OSC method.
1359455SKrishna.Elango@Sun.COM */
1369455SKrishna.Elango@Sun.COM ACPI_STATUS
pcie_acpi_eval_osc(dev_info_t * dip,ACPI_HANDLE osc_hdl,uint32_t * osc_flags)1379455SKrishna.Elango@Sun.COM pcie_acpi_eval_osc(dev_info_t *dip, ACPI_HANDLE osc_hdl, uint32_t *osc_flags)
1389455SKrishna.Elango@Sun.COM {
1399455SKrishna.Elango@Sun.COM ACPI_STATUS status;
1409455SKrishna.Elango@Sun.COM ACPI_OBJECT_LIST arglist;
1419455SKrishna.Elango@Sun.COM ACPI_OBJECT args[4];
1429455SKrishna.Elango@Sun.COM UINT32 caps_buffer[3];
1439455SKrishna.Elango@Sun.COM ACPI_BUFFER rb;
1449455SKrishna.Elango@Sun.COM UINT32 *rbuf;
1459455SKrishna.Elango@Sun.COM UINT32 tmp_ctrl;
1469455SKrishna.Elango@Sun.COM
1479455SKrishna.Elango@Sun.COM /* construct argument list */
1489455SKrishna.Elango@Sun.COM arglist.Count = 4;
1499455SKrishna.Elango@Sun.COM arglist.Pointer = args;
1509455SKrishna.Elango@Sun.COM
1519455SKrishna.Elango@Sun.COM /* arg0 - UUID */
1529455SKrishna.Elango@Sun.COM args[0].Type = ACPI_TYPE_BUFFER;
1539455SKrishna.Elango@Sun.COM args[0].Buffer.Length = 16; /* size of UUID string */
1549455SKrishna.Elango@Sun.COM args[0].Buffer.Pointer = pcie_uuid;
1559455SKrishna.Elango@Sun.COM
1569455SKrishna.Elango@Sun.COM /* arg1 - Revision ID */
1579455SKrishna.Elango@Sun.COM args[1].Type = ACPI_TYPE_INTEGER;
1589455SKrishna.Elango@Sun.COM args[1].Integer.Value = PCIE_OSC_REVISION_ID;
1599455SKrishna.Elango@Sun.COM
1609455SKrishna.Elango@Sun.COM /* arg2 - Count */
1619455SKrishna.Elango@Sun.COM args[2].Type = ACPI_TYPE_INTEGER;
1629455SKrishna.Elango@Sun.COM args[2].Integer.Value = 3; /* no. of DWORDS in caps_buffer */
1639455SKrishna.Elango@Sun.COM
1649455SKrishna.Elango@Sun.COM /* arg3 - Capabilities Buffer */
1659455SKrishna.Elango@Sun.COM args[3].Type = ACPI_TYPE_BUFFER;
1669455SKrishna.Elango@Sun.COM args[3].Buffer.Length = 12;
1679455SKrishna.Elango@Sun.COM args[3].Buffer.Pointer = (void *)caps_buffer;
1689455SKrishna.Elango@Sun.COM
1699455SKrishna.Elango@Sun.COM /* Initialize Capabilities Buffer */
1709455SKrishna.Elango@Sun.COM
1719455SKrishna.Elango@Sun.COM /* DWORD1: no query flag set */
1729455SKrishna.Elango@Sun.COM caps_buffer[0] = 0;
1739455SKrishna.Elango@Sun.COM /* DWORD2: Support Field */
1749455SKrishna.Elango@Sun.COM caps_buffer[1] = OSC_SUPPORT_FIELD_INIT;
1759455SKrishna.Elango@Sun.COM /* DWORD3: Control Field */
1769455SKrishna.Elango@Sun.COM caps_buffer[2] = OSC_CONTROL_FIELD_INIT;
1779455SKrishna.Elango@Sun.COM
1789455SKrishna.Elango@Sun.COM /* If hotplug is supported add the corresponding control fields */
1799455SKrishna.Elango@Sun.COM if (*osc_flags & OSC_CONTROL_PCIE_NAT_HP)
1809455SKrishna.Elango@Sun.COM caps_buffer[2] |= (OSC_CONTROL_PCIE_NAT_HP |
1819455SKrishna.Elango@Sun.COM OSC_CONTROL_PCIE_NAT_PM);
1829455SKrishna.Elango@Sun.COM
1839455SKrishna.Elango@Sun.COM tmp_ctrl = caps_buffer[2];
1849455SKrishna.Elango@Sun.COM rb.Length = ACPI_ALLOCATE_BUFFER;
1859455SKrishna.Elango@Sun.COM rb.Pointer = NULL;
1869455SKrishna.Elango@Sun.COM
1879455SKrishna.Elango@Sun.COM status = AcpiEvaluateObjectTyped(osc_hdl, NULL, &arglist, &rb,
1889455SKrishna.Elango@Sun.COM ACPI_TYPE_BUFFER);
1899455SKrishna.Elango@Sun.COM if (status != AE_OK) {
1909455SKrishna.Elango@Sun.COM PCIE_DBG("Failed to execute _OSC method (status %d)\n",
1919455SKrishna.Elango@Sun.COM status);
1929455SKrishna.Elango@Sun.COM return (status);
1939455SKrishna.Elango@Sun.COM }
1949455SKrishna.Elango@Sun.COM
1959455SKrishna.Elango@Sun.COM /* LINTED pointer alignment */
1969455SKrishna.Elango@Sun.COM rbuf = (UINT32 *)((ACPI_OBJECT *)rb.Pointer)->Buffer.Pointer;
1979455SKrishna.Elango@Sun.COM
1989455SKrishna.Elango@Sun.COM /* check the STATUS word in the capability buffer */
1999455SKrishna.Elango@Sun.COM if (rbuf[0] & OSC_STATUS_ERRORS) {
2009455SKrishna.Elango@Sun.COM PCIE_DBG("_OSC method failed (STATUS %d)\n", rbuf[0]);
2019455SKrishna.Elango@Sun.COM AcpiOsFree(rb.Pointer);
2029455SKrishna.Elango@Sun.COM return (AE_ERROR);
2039455SKrishna.Elango@Sun.COM }
2049455SKrishna.Elango@Sun.COM
2059455SKrishna.Elango@Sun.COM *osc_flags = rbuf[2];
2069455SKrishna.Elango@Sun.COM
2079455SKrishna.Elango@Sun.COM PCIE_DBG("_OSC method evaluation completed for 0x%p: "
2089455SKrishna.Elango@Sun.COM "STATUS 0x%x SUPPORT 0x%x CONTROL req 0x%x, CONTROL ret 0x%x\n",
2099455SKrishna.Elango@Sun.COM (void *)dip, rbuf[0], rbuf[1], tmp_ctrl, rbuf[2]);
2109455SKrishna.Elango@Sun.COM
2119455SKrishna.Elango@Sun.COM AcpiOsFree(rb.Pointer);
2129455SKrishna.Elango@Sun.COM
2139455SKrishna.Elango@Sun.COM return (AE_OK);
2149455SKrishna.Elango@Sun.COM }
2159455SKrishna.Elango@Sun.COM
2169455SKrishna.Elango@Sun.COM /*
2179455SKrishna.Elango@Sun.COM * Checks if _OSC method has been called for this device.
2189455SKrishna.Elango@Sun.COM */
2199455SKrishna.Elango@Sun.COM boolean_t
pcie_is_osc(dev_info_t * dip)2209455SKrishna.Elango@Sun.COM pcie_is_osc(dev_info_t *dip)
2219455SKrishna.Elango@Sun.COM {
2229455SKrishna.Elango@Sun.COM pcie_bus_t *bus_p = PCIE_DIP2BUS(dip);
2239455SKrishna.Elango@Sun.COM pcie_x86_priv_t *osc_p = (pcie_x86_priv_t *)bus_p->bus_plat_private;
2249455SKrishna.Elango@Sun.COM return (osc_p->bus_osc);
2259455SKrishna.Elango@Sun.COM }
2269455SKrishna.Elango@Sun.COM
2279455SKrishna.Elango@Sun.COM #ifdef DEBUG
2289455SKrishna.Elango@Sun.COM static void
pcie_dump_acpi_obj(ACPI_HANDLE pcibus_obj)2299455SKrishna.Elango@Sun.COM pcie_dump_acpi_obj(ACPI_HANDLE pcibus_obj)
2309455SKrishna.Elango@Sun.COM {
2319455SKrishna.Elango@Sun.COM int status;
2329455SKrishna.Elango@Sun.COM ACPI_BUFFER retbuf;
2339455SKrishna.Elango@Sun.COM
2349455SKrishna.Elango@Sun.COM if (pcibus_obj == NULL)
2359455SKrishna.Elango@Sun.COM return;
2369455SKrishna.Elango@Sun.COM
2379455SKrishna.Elango@Sun.COM /* print the full path name */
2389455SKrishna.Elango@Sun.COM retbuf.Pointer = NULL;
2399455SKrishna.Elango@Sun.COM retbuf.Length = ACPI_ALLOCATE_BUFFER;
2409455SKrishna.Elango@Sun.COM status = AcpiGetName(pcibus_obj, ACPI_FULL_PATHNAME, &retbuf);
2419455SKrishna.Elango@Sun.COM if (status != AE_OK)
2429455SKrishna.Elango@Sun.COM return;
2439455SKrishna.Elango@Sun.COM PCIE_DBG("PCIE BUS PATHNAME: %s\n", (char *)retbuf.Pointer);
2449455SKrishna.Elango@Sun.COM AcpiOsFree(retbuf.Pointer);
2459455SKrishna.Elango@Sun.COM
2469455SKrishna.Elango@Sun.COM /* dump all the methods for this bus node */
2479455SKrishna.Elango@Sun.COM PCIE_DBG(" METHODS: \n");
2489455SKrishna.Elango@Sun.COM status = AcpiWalkNamespace(ACPI_TYPE_METHOD, pcibus_obj, 1,
249*11225SDana.Myers@Sun.COM pcie_print_acpi_name, NULL, " ", NULL);
2509455SKrishna.Elango@Sun.COM /* dump all the child devices */
2519455SKrishna.Elango@Sun.COM status = AcpiWalkNamespace(ACPI_TYPE_DEVICE, pcibus_obj, 1,
252*11225SDana.Myers@Sun.COM pcie_walk_obj_namespace, NULL, NULL, NULL);
2539455SKrishna.Elango@Sun.COM }
2549455SKrishna.Elango@Sun.COM
2559455SKrishna.Elango@Sun.COM /*ARGSUSED*/
2569455SKrishna.Elango@Sun.COM static ACPI_STATUS
pcie_walk_obj_namespace(ACPI_HANDLE hdl,uint32_t nl,void * context,void ** ret)2579455SKrishna.Elango@Sun.COM pcie_walk_obj_namespace(ACPI_HANDLE hdl, uint32_t nl, void *context,
2589455SKrishna.Elango@Sun.COM void **ret)
2599455SKrishna.Elango@Sun.COM {
2609455SKrishna.Elango@Sun.COM int status;
2619455SKrishna.Elango@Sun.COM ACPI_BUFFER retbuf;
2629455SKrishna.Elango@Sun.COM char buf[32];
2639455SKrishna.Elango@Sun.COM
2649455SKrishna.Elango@Sun.COM /* print the full path name */
2659455SKrishna.Elango@Sun.COM retbuf.Pointer = NULL;
2669455SKrishna.Elango@Sun.COM retbuf.Length = ACPI_ALLOCATE_BUFFER;
2679455SKrishna.Elango@Sun.COM status = AcpiGetName(hdl, ACPI_FULL_PATHNAME, &retbuf);
2689455SKrishna.Elango@Sun.COM if (status != AE_OK)
2699455SKrishna.Elango@Sun.COM return (status);
2709455SKrishna.Elango@Sun.COM buf[0] = 0;
2719455SKrishna.Elango@Sun.COM while (nl--)
2729455SKrishna.Elango@Sun.COM (void) strcat(buf, " ");
2739455SKrishna.Elango@Sun.COM PCIE_DBG("%sDEVICE: %s\n", buf, (char *)retbuf.Pointer);
2749455SKrishna.Elango@Sun.COM AcpiOsFree(retbuf.Pointer);
2759455SKrishna.Elango@Sun.COM
2769455SKrishna.Elango@Sun.COM /* dump all the methods for this device */
2779455SKrishna.Elango@Sun.COM PCIE_DBG("%s METHODS: \n", buf);
2789455SKrishna.Elango@Sun.COM status = AcpiWalkNamespace(ACPI_TYPE_METHOD, hdl, 1,
279*11225SDana.Myers@Sun.COM pcie_print_acpi_name, NULL, (void *)buf, NULL);
2809455SKrishna.Elango@Sun.COM return (status);
2819455SKrishna.Elango@Sun.COM }
2829455SKrishna.Elango@Sun.COM
2839455SKrishna.Elango@Sun.COM /*ARGSUSED*/
2849455SKrishna.Elango@Sun.COM static ACPI_STATUS
pcie_print_acpi_name(ACPI_HANDLE hdl,uint32_t nl,void * context,void ** ret)2859455SKrishna.Elango@Sun.COM pcie_print_acpi_name(ACPI_HANDLE hdl, uint32_t nl, void *context, void **ret)
2869455SKrishna.Elango@Sun.COM {
2879455SKrishna.Elango@Sun.COM int status;
2889455SKrishna.Elango@Sun.COM ACPI_BUFFER retbuf;
2899455SKrishna.Elango@Sun.COM char name[16];
2909455SKrishna.Elango@Sun.COM
2919455SKrishna.Elango@Sun.COM retbuf.Pointer = name;
2929455SKrishna.Elango@Sun.COM retbuf.Length = 16;
2939455SKrishna.Elango@Sun.COM status = AcpiGetName(hdl, ACPI_SINGLE_NAME, &retbuf);
2949455SKrishna.Elango@Sun.COM if (status == AE_OK)
2959455SKrishna.Elango@Sun.COM PCIE_DBG("%s %s \n", (char *)context, name);
2969455SKrishna.Elango@Sun.COM return (AE_OK);
2979455SKrishna.Elango@Sun.COM }
2989455SKrishna.Elango@Sun.COM #endif /* DEBUG */
299