/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
#ifndef _SYS_SBDPRIV_H
#define _SYS_SBDPRIV_H
#pragma ident "%Z%%M% %I% %E% SMI"
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/processor.h>
#include <sys/sbd_ioctl.h>
#include <sys/mem_config.h>
#ifdef DEBUG
#endif
/*
* This structure passes the information when the caller requests to
* reserve a portion of unconfigured memory. It is also used to release
* previously reserved memory
*/
struct sbd_mres {
};
/* This error type is used inside sbd only */
typedef struct {
int e_errno;
int e_code;
} sbderror_t;
#include <sys/sbd_error.h>
typedef enum {
SBD_STATE_EMPTY = 0,
} sbd_istate_t;
typedef struct {
/*
* generic flags (sbd_handle.h_flags)
*/
/* mirror of SBD_FLAG_FORCE from sbd_ioctl.h */
/*
* Translation macros for sbd->sbdp flags
*/
typedef struct sbd_handle {
void *h_sbd;
} sbd_handle_t;
{ \
}
{ \
}
/*
* dev_t is shared by PIM and PSM layers.
*
* Format = 31......16,15.......0
* | PIM | PSM |
*/
#define SBD_MAKE_MINOR(i, m) \
((((i) & _SBD_DEVPIM_MASK) << _SBD_DEVPIM_SHIFT) | \
((m) & _SBD_DEVPSM_MASK))
#define GETSTRUCT(t, n) \
#define FREESTRUCT(p, t, n) \
/*
* Per instance soft-state structure.
*/
typedef struct sbd_softstate {
void *sbd_boardlist;
int max_boards;
int wnode;
/*
* dr Global data elements
*/
typedef struct {
} sbd_global;
typedef struct {
extern int plat_max_io_units_per_board();
extern int plat_max_cmp_units_per_board();
extern int plat_max_cpu_units_per_board();
extern int plat_max_mem_units_per_board();
/* If any of the max units exceeds 5, this must be adjusted */
#ifdef DEBUG
{ \
PR_STATE("BOARD %d (%s.%d) STATE: %s(%d) -> %s(%d)\n", \
(void) drv_getparm(TIME, \
send_event = 1; \
}
{ \
PR_STATE("BOARD %d STATE: %s(%d) -> %s(%d)\n", \
send_event = 1; \
}
#else /* DEBUG */
{ \
(void) drv_getparm(TIME, \
send_event = 1; \
}
send_event = 1)
#endif /* DEBUG */
/*
* sbd_priv_handle_t MUST appear first.
*/
typedef struct sbd_priv_handle {
((t) == SBD_COMP_MEM) ? 1 : \
((t) == SBD_COMP_IO) ? 2 : \
((t) == SBD_COMP_CMP) ? 0 : SBD_MAXNUM_NT)
typedef struct sbd_common_unit {
int sbdev_busy;
void *sbdev_sbp;
int sbdev_unum;
typedef struct sbd_mem_unit {
/*
* The following fields are used during
* the memory detach process only. sbm_mlist
* will be used to store the board memlist
* following a detach. The memlist will be
* used to re-attach the board when configuring
* the unit directly after an unconfigure.
*/
/*
* The following field is used to support the
* representation of all memory controllers on
* a board with one sbd_mem_unit_t.
*/
/*
* The following field determines if the memory on this board
* is part of an interleave across boards
*/
int sbm_interleave;
/*
* Currently only maintain state information for individual
* components.
*/
typedef struct sbd_cpu_unit {
int sbc_cpu_impl;
int sbc_speed;
int sbc_ecache;
typedef struct sbd_io_unit {
typedef union {
typedef struct {
/*
* 0=CPU, 1=MEM, 2=IO, 3=NULL
*/
int sb_assigned;
int sb_flags;
int sb_wnode;
int sb_memaccess_ok;
} sbd_board_t;
/* definitions for sb_flags */
/*
* Format of sbd_devset_t bit masks:
*
* 32 16 8 4 0
* |....|....|...I|IIII|....|...M|CCCC|CCCC|
* I = I/O, M = Memory, C = CPU.
*/
#define DEVSET(t, u) \
(((u) == DEVSET_ANYUNIT) ? \
(((t) == SBD_COMP_CMP) ? \
/*
* Ops for sbd_board_t.sb_dev_present
*/
/*
* Ops for sbd_board_t.sb_dev_attached
*/
/*
* Ops for sbd_board_t.sb_dev_released
*/
/*
* Ops for sbd_board_t.sb_dev_unreferenced
*/
((bp)->sb_dev_present)
((bp)->sb_dev_attached)
((bp)->sb_dev_released)
((bp)->sb_dev_unreferenced)
/*
* return values from sbd_cancel_cpu
*/
#define SBD_CPUERR_NONE 0
/*
* sbd_board_t.sbmem[].sbm_flags
*/
typedef struct {
int sfio_cmd;
void *sfio_arg;
} sbd_ioctl_t;
/*
* 32bit support for sbd_ioctl_t.
*/
typedef struct {
/*
* PSM-DR layers are only allowed to use lower 16 bits of dev_t.
* B - bottom 4 bits are for the slot number.
* D - device type chosen (0 = indicates all devices in slot).
* U - unit number if specific device type chosen.
* X - not used.
*
* Upper Lower
* XXXXUUUUDDDDBBBB
*
* Note that this format only allows attachment points to
* either represent all the units on a board or one particular
* unit. A more general specification would permit any combination
* of specific units and types to be represented by individual
* attachment points.
*/
/*
* These device level definitions are primarily for unit testing.
*/
/*
* Slot, Instance, and Minor number Macro definitions
*/
/*
* The following is primarily for unit testing.
*/
#define DEV2UNIT(d) \
#define DEV2NT(d) \
(DEV_IS_MEM(d) ? SBD_COMP_MEM : \
DEV_IS_CPU(d) ? SBD_COMP_CPU : \
/*
* Macros to cast between PIM and PSM layers of the following
* structures:
* board_t <-> sbd_board_t
* sbd_handle_t <-> sbd_priv_handle_t
* sbderror_t <-> sbderror_t
* slot -> board_t
* slot -> sbd_board_t
* sbd_board_t -> sbd_handle_t
* sbd_handle -> sbderror_t
*/
/*
* CMP Specific Helpers
*/
/*
* Some stuff to assist in debug.
*/
#ifdef DEBUG
#else /* DEBUG */
#endif /* DEBUG */
extern char *sbd_state_str[];
extern char *sbd_ct_str[];
/*
* event flag
*/
extern char send_event;
/*
* IMPORTANT:
* The following two defines are also coded into OBP, so if they
* need to change here, don't forget to change OBP also.
*/
#define SBD_OBP_PROBE_GOOD 0
extern int sbd_setup_instance(int, dev_info_t *, int, int,
caddr_t);
extern int sbd_teardown_instance(int, caddr_t);
char *event);
extern int sbd_post_attach_mem(sbd_handle_t *,
sbd_devlist_t *, int);
extern int sbd_post_detach_mem(sbd_handle_t *,
sbd_devlist_t *, int);
sbderror_t *ep);
int unit);
memhandle_t *mhp);
sbd_handle_t *hp);
typedef const char *const fn_t;
#ifdef __cplusplus
}
#endif
#endif /* _SYS_SBDPRIV_H */