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 #ifdef __cplusplus 34 extern "C" { 35 #endif 36 37 #define CB_BCNF_BCNTRL_ISA_INT_ENAB 0x0080 38 #define CB_BCNF_BCNTRL_MEM0_PREF 0x0100 39 #define CB_BCNF_BCNTRL_MEM1_PREF 0x0200 40 #define CB_BCNF_BCNTRL_WRITE_POST 0x0400 41 42 typedef struct cb_nexus_cb { 43 void (*enable_intr)(dev_info_t *); 44 void (*disable_intr)(dev_info_t *); 45 } cb_nexus_cb_t; 46 47 typedef enum { PCIHP_SOFT_STATE_CLOSED, PCIHP_SOFT_STATE_OPEN, 48 PCIHP_SOFT_STATE_OPEN_EXCL } cbhp_soft_state_t; 49 50 /* 51 * Main softstate per cardbus device 52 */ 53 typedef struct cardbus_dev { 54 int cb_instance; 55 boolean_t fatal_problem; 56 dev_info_t *cb_dip; 57 kmutex_t cb_mutex; 58 cb_nexus_cb_t *cb_nex_ops; 59 struct dev_ops cb_dops; 60 struct dev_ops *orig_dopsp; 61 struct bus_ops *orig_bopsp; 62 struct cb_deviceset_props *cb_dsp; 63 ndi_event_hdl_t cb_ndi_event_hdl; 64 ndi_event_set_t cb_ndi_events; 65 #ifdef HOTPLUG 66 /* Nexus specific variables */ 67 ap_rstate_t rstate; /* state of Receptacle */ 68 ap_ostate_t ostate; /* state of the Occupant */ 69 ap_condition_t condition; /* condition of the occupant */ 70 cbhp_soft_state_t soft_state; 71 uint32_t event_mask; /* last event mask registerd */ 72 boolean_t auto_config; 73 boolean_t disabled; 74 char *name; 75 76 /* Slot specific variables */ 77 char ap_id[32]; /* Attachment point name */ 78 char *nexus_path; /* Pathname of Nexus */ 79 hpc_slot_ops_t *slot_ops; /* Ptr HPC entry points */ 80 hpc_slot_info_t slot_info; /* Bus Specific SlotInfo */ 81 hpc_slot_t slot_handle; /* HPS slot handle */ 82 boolean_t card_present; 83 hpc_led_state_t leds[4]; 84 #endif 85 } cbus_t; 86 87 typedef struct cardbus_bus_range { 88 uint32_t lo; 89 uint32_t hi; 90 } cardbus_bus_range_t; 91 92 typedef struct cardbus_range { 93 uint32_t child_hi; 94 uint32_t child_mid; 95 uint32_t child_lo; 96 uint32_t parent_hi; 97 uint32_t parent_mid; 98 uint32_t parent_lo; 99 uint32_t size_hi; 100 uint32_t size_lo; 101 102 } cardbus_range_t; 103 104 #if defined(DEBUG) 105 #define CARDBUS_DEBUG 106 #endif 107 108 #ifdef CARDBUS_DEBUG 109 extern void prom_printf(const char *, ...); 110 #endif 111 112 extern int cardbus_debug; 113 114 #ifdef _KERNEL 115 extern int cardbus_attach(dev_info_t *, cb_nexus_cb_t *); 116 extern boolean_t cardbus_load_cardbus(dev_info_t *, uint_t, uint32_t); 117 extern void cardbus_unload_cardbus(dev_info_t *); 118 extern void cardbus_err(dev_info_t *dip, int level, const char *fmt, ...); 119 120 /* The following only exists for hotplug support */ 121 extern int cardbus_open(dev_t *, int, int, cred_t *); 122 extern int cardbus_close(dev_t, int, int, cred_t *); 123 extern int cardbus_ioctl(dev_t, int, intptr_t, int, cred_t *, 124 int *); 125 extern boolean_t cardbus_is_cb_minor(dev_t); 126 void cardbus_save_children(dev_info_t *dip); 127 void cardbus_restore_children(dev_info_t *dip); 128 #endif 129 130 #ifdef __cplusplus 131 } 132 #endif 133 134 #endif /* _SYS_CARDBUS_H */ 135