25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER START
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * The contents of this file are subject to the terms of the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Common Development and Distribution License (the "License").
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You may not use this file except in compliance with the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * See the License for the specific language governing permissions
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * and limitations under the License.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * When distributing Covered Code, include this CDDL HEADER in each
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * If applicable, add the following below this CDDL HEADER, with the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * fields enclosed by brackets "[]" replaced with your own identifying
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * information: Portions Copyright [yyyy] [name of copyright owner]
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * CDDL HEADER END
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Use is subject to license terms.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl#pragma ident "%Z%%M% %I% %E% SMI"
25cf1a301a396c38e8adf52c15f537b80d2483f7jlstatic kstat_t *pcmu_create_picN_kstat(char *, int, int, int,
25cf1a301a396c38e8adf52c15f537b80d2483f7jlpcmu_create_name_kstat(char *name, pcmu_ksinfo_t *pp, pcmu_kev_mask_t *ev)
25cf1a301a396c38e8adf52c15f537b80d2483f7jl for (i = 0; i < NUM_OF_PICS; i++) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl for (i = 0; i < NUM_OF_PICS; i++) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Create the picN kstat. Returns a pointer to the
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * kstat which the driver must store to allow it
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * to be deleted when necessary.
25cf1a301a396c38e8adf52c15f537b80d2483f7jlpcmu_create_picN_kstat(char *mod_name, int pic, int pic_shift,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * It is up to the calling function to delete any kstats
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * that may have been created already. We just
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * return NULL to indicate an error has occured.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pic_named_data = (struct kstat_named *)picN_ksp->ks_data;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Write event names and their associated pcr masks. The
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * last entry in the array (clear_pic) is added seperately
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * below as the pic value must be inverted.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * add the clear_pic entry.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Create the "counters" kstat.
25cf1a301a396c38e8adf52c15f537b80d2483f7jlkstat_t *pcmu_create_cntr_kstat(pcmu_t *pcmu_p, char *name,
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Size of kstat is num_pics + 1 as it
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * also contains the %pcr
25cf1a301a396c38e8adf52c15f537b80d2483f7jl counters_named_data = (struct kstat_named *)(counters_ksp->ks_data);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* initialize the named kstats */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl kstat_named_init(&counters_named_data[0], "pcr", KSTAT_DATA_UINT64);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl for (i = 0; i < num_pics; i++) {
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Store the register offset's in the kstat's
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * private field so that they are available
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * to the update function.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * kstat update function. Handles reads/writes
25cf1a301a396c38e8adf52c15f537b80d2483f7jl return (0);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* pic0 : lo 32 bits */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* pic1 : hi 32 bits */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl return (0);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * kstat update function using physical addresses.
25cf1a301a396c38e8adf52c15f537b80d2483f7jl pcmu_cntr_pa_t *cntr_pa_p = (pcmu_cntr_pa_t *)ksp->ks_private;
25cf1a301a396c38e8adf52c15f537b80d2483f7jl return (0);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* pic0 : lo 32 bits */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl /* pic1 : hi 32 bits */
25cf1a301a396c38e8adf52c15f537b80d2483f7jl return (0);
25cf1a301a396c38e8adf52c15f537b80d2483f7jl * Matched with pcmu_add_upstream_kstat()