1 /* 2 * CDDL HEADER START 3 * 4 * The contents of this file are subject to the terms of the 5 * Common Development and Distribution License (the "License"). 6 * You may not use this file except in compliance with the License. 7 * 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9 * or http://www.opensolaris.org/os/licensing. 10 * See the License for the specific language governing permissions 11 * and limitations under the License. 12 * 13 * When distributing Covered Code, include this CDDL HEADER in each 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15 * If applicable, add the following below this CDDL HEADER, with the 16 * fields enclosed by brackets "[]" replaced with your own identifying 17 * information: Portions Copyright [yyyy] [name of copyright owner] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 /* 26 * Copyright (c) * Copyright (c) 2001 Tadpole Technology plc 27 * All rights reserved. 28 */ 29 30 #ifndef _SYS_CARDBUS_H 31 #define _SYS_CARDBUS_H 32 33 #pragma ident "%Z%%M% %I% %E% SMI" 34 35 #ifdef __cplusplus 36 extern "C" { 37 #endif 38 39 #define CB_BCNF_BCNTRL_ISA_INT_ENAB 0x0080 40 #define CB_BCNF_BCNTRL_MEM0_PREF 0x0100 41 #define CB_BCNF_BCNTRL_MEM1_PREF 0x0200 42 #define CB_BCNF_BCNTRL_WRITE_POST 0x0400 43 44 typedef struct cb_nexus_cb { 45 void (*enable_intr)(dev_info_t *); 46 void (*disable_intr)(dev_info_t *); 47 } cb_nexus_cb_t; 48 49 typedef enum { PCIHP_SOFT_STATE_CLOSED, PCIHP_SOFT_STATE_OPEN, 50 PCIHP_SOFT_STATE_OPEN_EXCL } cbhp_soft_state_t; 51 52 /* 53 * Main softstate per cardbus device 54 */ 55 typedef struct cardbus_dev { 56 int cb_instance; 57 boolean_t fatal_problem; 58 dev_info_t *cb_dip; 59 kmutex_t cb_mutex; 60 cb_nexus_cb_t *cb_nex_ops; 61 struct dev_ops cb_dops; 62 struct dev_ops *orig_dopsp; 63 struct bus_ops *orig_bopsp; 64 struct cb_deviceset_props *cb_dsp; 65 ndi_event_hdl_t cb_ndi_event_hdl; 66 ndi_event_set_t cb_ndi_events; 67 #ifdef HOTPLUG 68 /* Nexus specific variables */ 69 ap_rstate_t rstate; /* state of Receptacle */ 70 ap_ostate_t ostate; /* state of the Occupant */ 71 ap_condition_t condition; /* condition of the occupant */ 72 cbhp_soft_state_t soft_state; 73 uint32_t event_mask; /* last event mask registerd */ 74 boolean_t auto_config; 75 boolean_t disabled; 76 char *name; 77 78 /* Slot specific variables */ 79 char ap_id[32]; /* Attachment point name */ 80 char *nexus_path; /* Pathname of Nexus */ 81 hpc_slot_ops_t *slot_ops; /* Ptr HPC entry points */ 82 hpc_slot_info_t slot_info; /* Bus Specific SlotInfo */ 83 hpc_slot_t slot_handle; /* HPS slot handle */ 84 boolean_t card_present; 85 hpc_led_state_t leds[4]; 86 #endif 87 } cbus_t; 88 89 typedef struct cardbus_bus_range { 90 uint32_t lo; 91 uint32_t hi; 92 } cardbus_bus_range_t; 93 94 typedef struct cardbus_range { 95 uint32_t child_hi; 96 uint32_t child_mid; 97 uint32_t child_lo; 98 uint32_t parent_hi; 99 uint32_t parent_mid; 100 uint32_t parent_lo; 101 uint32_t size_hi; 102 uint32_t size_lo; 103 104 } cardbus_range_t; 105 106 #if defined(DEBUG) 107 #define CARDBUS_DEBUG 108 #endif 109 110 #ifdef CARDBUS_DEBUG 111 extern void prom_printf(const char *, ...); 112 #endif 113 114 extern int cardbus_debug; 115 116 #ifdef _KERNEL 117 extern int cardbus_attach(dev_info_t *, cb_nexus_cb_t *); 118 extern boolean_t cardbus_load_cardbus(dev_info_t *, uint_t, uint32_t); 119 extern void cardbus_unload_cardbus(dev_info_t *); 120 extern void cardbus_err(dev_info_t *dip, int level, const char *fmt, ...); 121 122 /* The following only exists for hotplug support */ 123 extern int cardbus_open(dev_t *, int, int, cred_t *); 124 extern int cardbus_close(dev_t, int, int, cred_t *); 125 extern int cardbus_ioctl(dev_t, int, intptr_t, int, cred_t *, 126 int *); 127 extern boolean_t cardbus_is_cb_minor(dev_t); 128 void cardbus_save_children(dev_info_t *dip); 129 void cardbus_restore_children(dev_info_t *dip); 130 #endif 131 132 #ifdef __cplusplus 133 } 134 #endif 135 136 #endif /* _SYS_CARDBUS_H */