1*0Sstevel@tonic-gate /* 2*0Sstevel@tonic-gate * CDDL HEADER START 3*0Sstevel@tonic-gate * 4*0Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*0Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*0Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*0Sstevel@tonic-gate * with the License. 8*0Sstevel@tonic-gate * 9*0Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*0Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*0Sstevel@tonic-gate * See the License for the specific language governing permissions 12*0Sstevel@tonic-gate * and limitations under the License. 13*0Sstevel@tonic-gate * 14*0Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*0Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*0Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*0Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*0Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*0Sstevel@tonic-gate * 20*0Sstevel@tonic-gate * CDDL HEADER END 21*0Sstevel@tonic-gate */ 22*0Sstevel@tonic-gate /* 23*0Sstevel@tonic-gate * Copyright 2004 Sun Microsystems, Inc. All rights reserved. 24*0Sstevel@tonic-gate * Use is subject to license terms. 25*0Sstevel@tonic-gate */ 26*0Sstevel@tonic-gate 27*0Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 28*0Sstevel@tonic-gate 29*0Sstevel@tonic-gate /* 30*0Sstevel@tonic-gate * Dummy module to load usba module on behalf of legacy drivers. 31*0Sstevel@tonic-gate * 32*0Sstevel@tonic-gate * Please see the on81-patch gate usr/src/uts/common/sys/usba10/usba10_usbai.h 33*0Sstevel@tonic-gate * header file for descriptions and comments for these functions. 34*0Sstevel@tonic-gate */ 35*0Sstevel@tonic-gate 36*0Sstevel@tonic-gate #include <sys/usb/usba.h> 37*0Sstevel@tonic-gate #include <sys/usb/usba/usbai_private.h> 38*0Sstevel@tonic-gate #include <sys/usb/usba/usba10.h> 39*0Sstevel@tonic-gate 40*0Sstevel@tonic-gate /* 41*0Sstevel@tonic-gate * modload support 42*0Sstevel@tonic-gate */ 43*0Sstevel@tonic-gate extern struct mod_ops mod_miscops; 44*0Sstevel@tonic-gate 45*0Sstevel@tonic-gate struct modlmisc modlmisc = { 46*0Sstevel@tonic-gate &mod_miscops, /* Type of module */ 47*0Sstevel@tonic-gate "USBA10: USB V0.8 Drvr Supp %I%" 48*0Sstevel@tonic-gate }; 49*0Sstevel@tonic-gate 50*0Sstevel@tonic-gate struct modlinkage modlinkage = { 51*0Sstevel@tonic-gate MODREV_1, (void *)&modlmisc, NULL 52*0Sstevel@tonic-gate }; 53*0Sstevel@tonic-gate 54*0Sstevel@tonic-gate 55*0Sstevel@tonic-gate int 56*0Sstevel@tonic-gate _init(void) 57*0Sstevel@tonic-gate { 58*0Sstevel@tonic-gate return (mod_install(&modlinkage)); 59*0Sstevel@tonic-gate } 60*0Sstevel@tonic-gate 61*0Sstevel@tonic-gate int 62*0Sstevel@tonic-gate _fini() 63*0Sstevel@tonic-gate { 64*0Sstevel@tonic-gate return (mod_remove(&modlinkage)); 65*0Sstevel@tonic-gate } 66*0Sstevel@tonic-gate 67*0Sstevel@tonic-gate int 68*0Sstevel@tonic-gate _info(struct modinfo *modinfop) 69*0Sstevel@tonic-gate { 70*0Sstevel@tonic-gate return (mod_info(&modlinkage, modinfop)); 71*0Sstevel@tonic-gate } 72*0Sstevel@tonic-gate 73*0Sstevel@tonic-gate /* 74*0Sstevel@tonic-gate * Turn off lint checking of this module because it will find duplicate names 75*0Sstevel@tonic-gate * defined here and in the usbai.c source for the usba module. 76*0Sstevel@tonic-gate */ 77*0Sstevel@tonic-gate #ifndef __lint 78*0Sstevel@tonic-gate 79*0Sstevel@tonic-gate int 80*0Sstevel@tonic-gate usb_register_client( 81*0Sstevel@tonic-gate dev_info_t *dip, 82*0Sstevel@tonic-gate uint_t version, 83*0Sstevel@tonic-gate usb_client_dev_data_t **dev_data, 84*0Sstevel@tonic-gate usb_reg_parse_lvl_t parse_level, 85*0Sstevel@tonic-gate usb_flags_t flags) 86*0Sstevel@tonic-gate { 87*0Sstevel@tonic-gate return (usba10_usb_register_client( 88*0Sstevel@tonic-gate dip, version, dev_data, parse_level, flags)); 89*0Sstevel@tonic-gate } 90*0Sstevel@tonic-gate 91*0Sstevel@tonic-gate 92*0Sstevel@tonic-gate void 93*0Sstevel@tonic-gate usb_unregister_client( 94*0Sstevel@tonic-gate dev_info_t *dip, 95*0Sstevel@tonic-gate usb_client_dev_data_t *dev_data) 96*0Sstevel@tonic-gate { 97*0Sstevel@tonic-gate usba10_usb_unregister_client(dip, dev_data); 98*0Sstevel@tonic-gate } 99*0Sstevel@tonic-gate 100*0Sstevel@tonic-gate 101*0Sstevel@tonic-gate void 102*0Sstevel@tonic-gate usb_free_descr_tree( 103*0Sstevel@tonic-gate dev_info_t *dip, 104*0Sstevel@tonic-gate usb_client_dev_data_t *dev_data) 105*0Sstevel@tonic-gate { 106*0Sstevel@tonic-gate usba10_usb_free_descr_tree(dip, dev_data); 107*0Sstevel@tonic-gate } 108*0Sstevel@tonic-gate 109*0Sstevel@tonic-gate 110*0Sstevel@tonic-gate size_t 111*0Sstevel@tonic-gate usb_parse_data( 112*0Sstevel@tonic-gate char *format, 113*0Sstevel@tonic-gate uchar_t *data, 114*0Sstevel@tonic-gate size_t datalen, 115*0Sstevel@tonic-gate void *structure, 116*0Sstevel@tonic-gate size_t structlen) 117*0Sstevel@tonic-gate { 118*0Sstevel@tonic-gate return (usba10_usb_parse_data( 119*0Sstevel@tonic-gate format, data, datalen, structure, structlen)); 120*0Sstevel@tonic-gate } 121*0Sstevel@tonic-gate 122*0Sstevel@tonic-gate 123*0Sstevel@tonic-gate usb_ep_data_t * 124*0Sstevel@tonic-gate usb_get_ep_data( 125*0Sstevel@tonic-gate dev_info_t *dip, 126*0Sstevel@tonic-gate usb_client_dev_data_t *dev_datap, 127*0Sstevel@tonic-gate uint_t interface, 128*0Sstevel@tonic-gate uint_t alternate, 129*0Sstevel@tonic-gate uint_t type, 130*0Sstevel@tonic-gate uint_t direction) 131*0Sstevel@tonic-gate { 132*0Sstevel@tonic-gate return (usba10_usb_get_ep_data( 133*0Sstevel@tonic-gate dip, dev_datap, interface, alternate, type, direction)); 134*0Sstevel@tonic-gate } 135*0Sstevel@tonic-gate 136*0Sstevel@tonic-gate 137*0Sstevel@tonic-gate int 138*0Sstevel@tonic-gate usb_get_string_descr( 139*0Sstevel@tonic-gate dev_info_t *dip, 140*0Sstevel@tonic-gate uint16_t langid, 141*0Sstevel@tonic-gate uint8_t index, 142*0Sstevel@tonic-gate char *buf, 143*0Sstevel@tonic-gate size_t buflen) 144*0Sstevel@tonic-gate { 145*0Sstevel@tonic-gate return (usba10_usb_get_string_descr(dip, langid, index, buf, buflen)); 146*0Sstevel@tonic-gate } 147*0Sstevel@tonic-gate 148*0Sstevel@tonic-gate 149*0Sstevel@tonic-gate int 150*0Sstevel@tonic-gate usb_get_addr(dev_info_t *dip) 151*0Sstevel@tonic-gate { 152*0Sstevel@tonic-gate return (usba10_usb_get_addr(dip)); 153*0Sstevel@tonic-gate } 154*0Sstevel@tonic-gate 155*0Sstevel@tonic-gate 156*0Sstevel@tonic-gate int 157*0Sstevel@tonic-gate usb_get_if_number(dev_info_t *dip) 158*0Sstevel@tonic-gate { 159*0Sstevel@tonic-gate return (usba10_usb_get_if_number(dip)); 160*0Sstevel@tonic-gate } 161*0Sstevel@tonic-gate 162*0Sstevel@tonic-gate 163*0Sstevel@tonic-gate boolean_t 164*0Sstevel@tonic-gate usb_owns_device(dev_info_t *dip) 165*0Sstevel@tonic-gate { 166*0Sstevel@tonic-gate return (usba10_usb_owns_device(dip)); 167*0Sstevel@tonic-gate } 168*0Sstevel@tonic-gate 169*0Sstevel@tonic-gate 170*0Sstevel@tonic-gate int 171*0Sstevel@tonic-gate usb_pipe_get_state( 172*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 173*0Sstevel@tonic-gate usb_pipe_state_t *pipe_state, 174*0Sstevel@tonic-gate usb_flags_t flags) 175*0Sstevel@tonic-gate { 176*0Sstevel@tonic-gate return (usba10_usb_pipe_get_state(pipe_handle, pipe_state, flags)); 177*0Sstevel@tonic-gate } 178*0Sstevel@tonic-gate 179*0Sstevel@tonic-gate 180*0Sstevel@tonic-gate int 181*0Sstevel@tonic-gate usb_ep_num(usb_pipe_handle_t ph) 182*0Sstevel@tonic-gate { 183*0Sstevel@tonic-gate return (usba10_usb_ep_num(ph)); 184*0Sstevel@tonic-gate } 185*0Sstevel@tonic-gate 186*0Sstevel@tonic-gate 187*0Sstevel@tonic-gate int 188*0Sstevel@tonic-gate usb_pipe_open( 189*0Sstevel@tonic-gate dev_info_t *dip, 190*0Sstevel@tonic-gate usb_ep_descr_t *ep, 191*0Sstevel@tonic-gate usb_pipe_policy_t *pipe_policy, 192*0Sstevel@tonic-gate usb_flags_t flags, 193*0Sstevel@tonic-gate usb_pipe_handle_t *pipe_handle) 194*0Sstevel@tonic-gate { 195*0Sstevel@tonic-gate return (usba10_usb_pipe_open(dip, ep, pipe_policy, flags, pipe_handle)); 196*0Sstevel@tonic-gate } 197*0Sstevel@tonic-gate 198*0Sstevel@tonic-gate 199*0Sstevel@tonic-gate void 200*0Sstevel@tonic-gate usb_pipe_close( 201*0Sstevel@tonic-gate dev_info_t *dip, 202*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 203*0Sstevel@tonic-gate usb_flags_t flags, 204*0Sstevel@tonic-gate void (*cb)( 205*0Sstevel@tonic-gate usb_pipe_handle_t ph, 206*0Sstevel@tonic-gate usb_opaque_t arg, /* cb arg */ 207*0Sstevel@tonic-gate int rval, 208*0Sstevel@tonic-gate usb_cb_flags_t flags), 209*0Sstevel@tonic-gate usb_opaque_t cb_arg) 210*0Sstevel@tonic-gate { 211*0Sstevel@tonic-gate usba10_usb_pipe_close(dip, pipe_handle, flags, cb, cb_arg); 212*0Sstevel@tonic-gate } 213*0Sstevel@tonic-gate 214*0Sstevel@tonic-gate 215*0Sstevel@tonic-gate int 216*0Sstevel@tonic-gate usb_pipe_drain_reqs( 217*0Sstevel@tonic-gate dev_info_t *dip, 218*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 219*0Sstevel@tonic-gate uint_t time, 220*0Sstevel@tonic-gate usb_flags_t flags, 221*0Sstevel@tonic-gate void (*cb)( 222*0Sstevel@tonic-gate usb_pipe_handle_t ph, 223*0Sstevel@tonic-gate usb_opaque_t arg, /* cb arg */ 224*0Sstevel@tonic-gate int rval, 225*0Sstevel@tonic-gate usb_cb_flags_t flags), 226*0Sstevel@tonic-gate usb_opaque_t cb_arg) 227*0Sstevel@tonic-gate { 228*0Sstevel@tonic-gate return (usba10_usb_pipe_drain_reqs( 229*0Sstevel@tonic-gate dip, pipe_handle, time, flags, cb, cb_arg)); 230*0Sstevel@tonic-gate } 231*0Sstevel@tonic-gate 232*0Sstevel@tonic-gate 233*0Sstevel@tonic-gate int 234*0Sstevel@tonic-gate usb_pipe_set_private( 235*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 236*0Sstevel@tonic-gate usb_opaque_t data) 237*0Sstevel@tonic-gate { 238*0Sstevel@tonic-gate return (usba10_usb_pipe_set_private(pipe_handle, data)); 239*0Sstevel@tonic-gate } 240*0Sstevel@tonic-gate 241*0Sstevel@tonic-gate 242*0Sstevel@tonic-gate usb_opaque_t 243*0Sstevel@tonic-gate usb_pipe_get_private(usb_pipe_handle_t pipe_handle) 244*0Sstevel@tonic-gate { 245*0Sstevel@tonic-gate return (usba10_usb_pipe_get_private(pipe_handle)); 246*0Sstevel@tonic-gate } 247*0Sstevel@tonic-gate 248*0Sstevel@tonic-gate 249*0Sstevel@tonic-gate void 250*0Sstevel@tonic-gate usb_pipe_reset( 251*0Sstevel@tonic-gate dev_info_t *dip, 252*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 253*0Sstevel@tonic-gate usb_flags_t usb_flags, 254*0Sstevel@tonic-gate void (*cb)( 255*0Sstevel@tonic-gate usb_pipe_handle_t ph, 256*0Sstevel@tonic-gate usb_opaque_t arg, 257*0Sstevel@tonic-gate int rval, 258*0Sstevel@tonic-gate usb_cb_flags_t flags), 259*0Sstevel@tonic-gate usb_opaque_t cb_arg) 260*0Sstevel@tonic-gate { 261*0Sstevel@tonic-gate usba10_usb_pipe_reset(dip, pipe_handle, usb_flags, cb, cb_arg); 262*0Sstevel@tonic-gate } 263*0Sstevel@tonic-gate 264*0Sstevel@tonic-gate 265*0Sstevel@tonic-gate usb_ctrl_req_t * 266*0Sstevel@tonic-gate usb_alloc_ctrl_req( 267*0Sstevel@tonic-gate dev_info_t *dip, 268*0Sstevel@tonic-gate size_t len, 269*0Sstevel@tonic-gate usb_flags_t flags) 270*0Sstevel@tonic-gate { 271*0Sstevel@tonic-gate return (usba10_usb_alloc_ctrl_req(dip, len, flags)); 272*0Sstevel@tonic-gate } 273*0Sstevel@tonic-gate 274*0Sstevel@tonic-gate 275*0Sstevel@tonic-gate void 276*0Sstevel@tonic-gate usb_free_ctrl_req(usb_ctrl_req_t *reqp) 277*0Sstevel@tonic-gate { 278*0Sstevel@tonic-gate usba10_usb_free_ctrl_req(reqp); 279*0Sstevel@tonic-gate } 280*0Sstevel@tonic-gate 281*0Sstevel@tonic-gate 282*0Sstevel@tonic-gate int 283*0Sstevel@tonic-gate usb_pipe_ctrl_xfer( 284*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 285*0Sstevel@tonic-gate usb_ctrl_req_t *reqp, 286*0Sstevel@tonic-gate usb_flags_t flags) 287*0Sstevel@tonic-gate { 288*0Sstevel@tonic-gate return (usba10_usb_pipe_ctrl_xfer(pipe_handle, reqp, flags)); 289*0Sstevel@tonic-gate } 290*0Sstevel@tonic-gate 291*0Sstevel@tonic-gate 292*0Sstevel@tonic-gate int 293*0Sstevel@tonic-gate usb_get_status( 294*0Sstevel@tonic-gate dev_info_t *dip, 295*0Sstevel@tonic-gate usb_pipe_handle_t ph, 296*0Sstevel@tonic-gate uint_t type, /* bmRequestType */ 297*0Sstevel@tonic-gate uint_t what, /* 0, interface, endpoint number */ 298*0Sstevel@tonic-gate uint16_t *status, 299*0Sstevel@tonic-gate usb_flags_t flags) 300*0Sstevel@tonic-gate { 301*0Sstevel@tonic-gate return (usba10_usb_get_status(dip, ph, type, what, status, flags)); 302*0Sstevel@tonic-gate } 303*0Sstevel@tonic-gate 304*0Sstevel@tonic-gate 305*0Sstevel@tonic-gate int 306*0Sstevel@tonic-gate usb_clear_feature( 307*0Sstevel@tonic-gate dev_info_t *dip, 308*0Sstevel@tonic-gate usb_pipe_handle_t ph, 309*0Sstevel@tonic-gate uint_t type, /* bmRequestType */ 310*0Sstevel@tonic-gate uint_t feature, 311*0Sstevel@tonic-gate uint_t what, /* 0, interface, endpoint number */ 312*0Sstevel@tonic-gate usb_flags_t flags) 313*0Sstevel@tonic-gate { 314*0Sstevel@tonic-gate return (usba10_usb_clear_feature(dip, ph, type, feature, what, flags)); 315*0Sstevel@tonic-gate } 316*0Sstevel@tonic-gate 317*0Sstevel@tonic-gate 318*0Sstevel@tonic-gate int 319*0Sstevel@tonic-gate usb_pipe_ctrl_xfer_wait( 320*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 321*0Sstevel@tonic-gate usb_ctrl_setup_t *setup, 322*0Sstevel@tonic-gate mblk_t **data, 323*0Sstevel@tonic-gate usb_cr_t *completion_reason, 324*0Sstevel@tonic-gate usb_cb_flags_t *cb_flags, 325*0Sstevel@tonic-gate usb_flags_t flags) 326*0Sstevel@tonic-gate { 327*0Sstevel@tonic-gate return (usba10_usb_pipe_ctrl_xfer_wait( 328*0Sstevel@tonic-gate pipe_handle, setup, data, completion_reason, cb_flags, flags)); 329*0Sstevel@tonic-gate } 330*0Sstevel@tonic-gate 331*0Sstevel@tonic-gate 332*0Sstevel@tonic-gate int 333*0Sstevel@tonic-gate usb_set_cfg( 334*0Sstevel@tonic-gate dev_info_t *dip, 335*0Sstevel@tonic-gate uint_t cfg_index, 336*0Sstevel@tonic-gate usb_flags_t usb_flags, 337*0Sstevel@tonic-gate void (*cb)( 338*0Sstevel@tonic-gate usb_pipe_handle_t ph, 339*0Sstevel@tonic-gate usb_opaque_t arg, 340*0Sstevel@tonic-gate int rval, 341*0Sstevel@tonic-gate usb_cb_flags_t flags), 342*0Sstevel@tonic-gate usb_opaque_t cb_arg) 343*0Sstevel@tonic-gate { 344*0Sstevel@tonic-gate return (usba10_usb_set_cfg(dip, cfg_index, usb_flags, cb, cb_arg)); 345*0Sstevel@tonic-gate } 346*0Sstevel@tonic-gate 347*0Sstevel@tonic-gate 348*0Sstevel@tonic-gate int 349*0Sstevel@tonic-gate usb_get_cfg( 350*0Sstevel@tonic-gate dev_info_t *dip, 351*0Sstevel@tonic-gate uint_t *cfgval, 352*0Sstevel@tonic-gate usb_flags_t usb_flags) 353*0Sstevel@tonic-gate { 354*0Sstevel@tonic-gate return (usba10_usb_get_cfg(dip, cfgval, usb_flags)); 355*0Sstevel@tonic-gate } 356*0Sstevel@tonic-gate 357*0Sstevel@tonic-gate 358*0Sstevel@tonic-gate int 359*0Sstevel@tonic-gate usb_set_alt_if( 360*0Sstevel@tonic-gate dev_info_t *dip, 361*0Sstevel@tonic-gate uint_t interface, 362*0Sstevel@tonic-gate uint_t alt_number, 363*0Sstevel@tonic-gate usb_flags_t usb_flags, 364*0Sstevel@tonic-gate void (*cb)( 365*0Sstevel@tonic-gate usb_pipe_handle_t ph, 366*0Sstevel@tonic-gate usb_opaque_t arg, 367*0Sstevel@tonic-gate int rval, 368*0Sstevel@tonic-gate usb_cb_flags_t flags), 369*0Sstevel@tonic-gate usb_opaque_t cb_arg) 370*0Sstevel@tonic-gate { 371*0Sstevel@tonic-gate return (usba10_usb_set_alt_if( 372*0Sstevel@tonic-gate dip, interface, alt_number, usb_flags, cb, cb_arg)); 373*0Sstevel@tonic-gate } 374*0Sstevel@tonic-gate 375*0Sstevel@tonic-gate 376*0Sstevel@tonic-gate int 377*0Sstevel@tonic-gate usb_get_alt_if( 378*0Sstevel@tonic-gate dev_info_t *dip, 379*0Sstevel@tonic-gate uint_t if_number, 380*0Sstevel@tonic-gate uint_t *alt_number, 381*0Sstevel@tonic-gate usb_flags_t flags) 382*0Sstevel@tonic-gate { 383*0Sstevel@tonic-gate return (usba10_usb_get_alt_if(dip, if_number, alt_number, flags)); 384*0Sstevel@tonic-gate } 385*0Sstevel@tonic-gate 386*0Sstevel@tonic-gate 387*0Sstevel@tonic-gate usb_bulk_req_t * 388*0Sstevel@tonic-gate usb_alloc_bulk_req( 389*0Sstevel@tonic-gate dev_info_t *dip, 390*0Sstevel@tonic-gate size_t len, 391*0Sstevel@tonic-gate usb_flags_t flags) 392*0Sstevel@tonic-gate { 393*0Sstevel@tonic-gate return (usba10_usb_alloc_bulk_req(dip, len, flags)); 394*0Sstevel@tonic-gate } 395*0Sstevel@tonic-gate 396*0Sstevel@tonic-gate 397*0Sstevel@tonic-gate void 398*0Sstevel@tonic-gate usb_free_bulk_req(usb_bulk_req_t *reqp) 399*0Sstevel@tonic-gate { 400*0Sstevel@tonic-gate usba10_usb_free_bulk_req(reqp); 401*0Sstevel@tonic-gate } 402*0Sstevel@tonic-gate 403*0Sstevel@tonic-gate 404*0Sstevel@tonic-gate int 405*0Sstevel@tonic-gate usb_pipe_bulk_xfer( 406*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 407*0Sstevel@tonic-gate usb_bulk_req_t *reqp, 408*0Sstevel@tonic-gate usb_flags_t flags) 409*0Sstevel@tonic-gate { 410*0Sstevel@tonic-gate return (usba10_usb_pipe_bulk_xfer(pipe_handle, reqp, flags)); 411*0Sstevel@tonic-gate } 412*0Sstevel@tonic-gate 413*0Sstevel@tonic-gate 414*0Sstevel@tonic-gate int 415*0Sstevel@tonic-gate usb_pipe_bulk_transfer_size( 416*0Sstevel@tonic-gate dev_info_t *dip, 417*0Sstevel@tonic-gate size_t *size) 418*0Sstevel@tonic-gate { 419*0Sstevel@tonic-gate return (usba10_usb_pipe_bulk_transfer_size(dip, size)); 420*0Sstevel@tonic-gate } 421*0Sstevel@tonic-gate 422*0Sstevel@tonic-gate 423*0Sstevel@tonic-gate usb_intr_req_t * 424*0Sstevel@tonic-gate usb_alloc_intr_req( 425*0Sstevel@tonic-gate dev_info_t *dip, 426*0Sstevel@tonic-gate size_t len, 427*0Sstevel@tonic-gate usb_flags_t flags) 428*0Sstevel@tonic-gate { 429*0Sstevel@tonic-gate return (usba10_usb_alloc_intr_req(dip, len, flags)); 430*0Sstevel@tonic-gate } 431*0Sstevel@tonic-gate 432*0Sstevel@tonic-gate 433*0Sstevel@tonic-gate void 434*0Sstevel@tonic-gate usb_free_intr_req(usb_intr_req_t *reqp) 435*0Sstevel@tonic-gate { 436*0Sstevel@tonic-gate usba10_usb_free_intr_req(reqp); 437*0Sstevel@tonic-gate } 438*0Sstevel@tonic-gate 439*0Sstevel@tonic-gate 440*0Sstevel@tonic-gate int 441*0Sstevel@tonic-gate usb_pipe_intr_xfer( 442*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 443*0Sstevel@tonic-gate usb_intr_req_t *req, 444*0Sstevel@tonic-gate usb_flags_t flags) 445*0Sstevel@tonic-gate { 446*0Sstevel@tonic-gate return (usba10_usb_pipe_intr_xfer(pipe_handle, req, flags)); 447*0Sstevel@tonic-gate } 448*0Sstevel@tonic-gate 449*0Sstevel@tonic-gate 450*0Sstevel@tonic-gate void 451*0Sstevel@tonic-gate usb_pipe_stop_intr_polling( 452*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 453*0Sstevel@tonic-gate usb_flags_t flags) 454*0Sstevel@tonic-gate { 455*0Sstevel@tonic-gate usba10_usb_pipe_stop_intr_polling(pipe_handle, flags); 456*0Sstevel@tonic-gate } 457*0Sstevel@tonic-gate 458*0Sstevel@tonic-gate 459*0Sstevel@tonic-gate usb_isoc_req_t * 460*0Sstevel@tonic-gate usb_alloc_isoc_req( 461*0Sstevel@tonic-gate dev_info_t *dip, 462*0Sstevel@tonic-gate uint_t isoc_pkts_count, 463*0Sstevel@tonic-gate size_t len, 464*0Sstevel@tonic-gate usb_flags_t flags) 465*0Sstevel@tonic-gate { 466*0Sstevel@tonic-gate return (usba10_usb_alloc_isoc_req(dip, isoc_pkts_count, len, flags)); 467*0Sstevel@tonic-gate } 468*0Sstevel@tonic-gate 469*0Sstevel@tonic-gate 470*0Sstevel@tonic-gate void 471*0Sstevel@tonic-gate usb_free_isoc_req(usb_isoc_req_t *usb_isoc_req) 472*0Sstevel@tonic-gate { 473*0Sstevel@tonic-gate usba10_usb_free_isoc_req(usb_isoc_req); 474*0Sstevel@tonic-gate } 475*0Sstevel@tonic-gate 476*0Sstevel@tonic-gate 477*0Sstevel@tonic-gate usb_frame_number_t 478*0Sstevel@tonic-gate usb_get_current_frame_number(dev_info_t *dip) 479*0Sstevel@tonic-gate { 480*0Sstevel@tonic-gate return (usba10_usb_get_current_frame_number(dip)); 481*0Sstevel@tonic-gate } 482*0Sstevel@tonic-gate 483*0Sstevel@tonic-gate 484*0Sstevel@tonic-gate uint_t 485*0Sstevel@tonic-gate usb_get_max_isoc_pkts(dev_info_t *dip) 486*0Sstevel@tonic-gate { 487*0Sstevel@tonic-gate return (usba10_usb_get_max_isoc_pkts(dip)); 488*0Sstevel@tonic-gate } 489*0Sstevel@tonic-gate 490*0Sstevel@tonic-gate 491*0Sstevel@tonic-gate int 492*0Sstevel@tonic-gate usb_pipe_isoc_xfer( 493*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 494*0Sstevel@tonic-gate usb_isoc_req_t *reqp, 495*0Sstevel@tonic-gate usb_flags_t flags) 496*0Sstevel@tonic-gate { 497*0Sstevel@tonic-gate return (usba10_usb_pipe_isoc_xfer(pipe_handle, reqp, flags)); 498*0Sstevel@tonic-gate } 499*0Sstevel@tonic-gate 500*0Sstevel@tonic-gate 501*0Sstevel@tonic-gate void 502*0Sstevel@tonic-gate usb_pipe_stop_isoc_polling( 503*0Sstevel@tonic-gate usb_pipe_handle_t pipe_handle, 504*0Sstevel@tonic-gate usb_flags_t flags) 505*0Sstevel@tonic-gate { 506*0Sstevel@tonic-gate usba10_usb_pipe_stop_isoc_polling(pipe_handle, flags); 507*0Sstevel@tonic-gate } 508*0Sstevel@tonic-gate 509*0Sstevel@tonic-gate 510*0Sstevel@tonic-gate int 511*0Sstevel@tonic-gate usb_req_raise_power( 512*0Sstevel@tonic-gate dev_info_t *dip, 513*0Sstevel@tonic-gate int comp, 514*0Sstevel@tonic-gate int level, 515*0Sstevel@tonic-gate void (*cb)(void *arg, int rval), 516*0Sstevel@tonic-gate void *arg, 517*0Sstevel@tonic-gate usb_flags_t flags) 518*0Sstevel@tonic-gate { 519*0Sstevel@tonic-gate return (usba10_usb_req_raise_power(dip, comp, level, cb, arg, flags)); 520*0Sstevel@tonic-gate } 521*0Sstevel@tonic-gate 522*0Sstevel@tonic-gate 523*0Sstevel@tonic-gate int 524*0Sstevel@tonic-gate usb_req_lower_power( 525*0Sstevel@tonic-gate dev_info_t *dip, 526*0Sstevel@tonic-gate int comp, 527*0Sstevel@tonic-gate int level, 528*0Sstevel@tonic-gate void (*cb)(void *arg, int rval), 529*0Sstevel@tonic-gate void *arg, 530*0Sstevel@tonic-gate usb_flags_t flags) 531*0Sstevel@tonic-gate { 532*0Sstevel@tonic-gate return (usba10_usb_req_raise_power(dip, comp, level, cb, arg, flags)); 533*0Sstevel@tonic-gate } 534*0Sstevel@tonic-gate 535*0Sstevel@tonic-gate 536*0Sstevel@tonic-gate int 537*0Sstevel@tonic-gate usb_is_pm_enabled(dev_info_t *dip) 538*0Sstevel@tonic-gate { 539*0Sstevel@tonic-gate return (usba10_usb_is_pm_enabled(dip)); 540*0Sstevel@tonic-gate } 541*0Sstevel@tonic-gate 542*0Sstevel@tonic-gate int 543*0Sstevel@tonic-gate usb_handle_remote_wakeup( 544*0Sstevel@tonic-gate dev_info_t *dip, 545*0Sstevel@tonic-gate int cmd) 546*0Sstevel@tonic-gate { 547*0Sstevel@tonic-gate return (usba10_usb_handle_remote_wakeup(dip, cmd)); 548*0Sstevel@tonic-gate } 549*0Sstevel@tonic-gate 550*0Sstevel@tonic-gate 551*0Sstevel@tonic-gate int 552*0Sstevel@tonic-gate usb_create_pm_components( 553*0Sstevel@tonic-gate dev_info_t *dip, 554*0Sstevel@tonic-gate uint_t *pwrstates) 555*0Sstevel@tonic-gate { 556*0Sstevel@tonic-gate return (usba10_usb_create_pm_components(dip, pwrstates)); 557*0Sstevel@tonic-gate } 558*0Sstevel@tonic-gate 559*0Sstevel@tonic-gate 560*0Sstevel@tonic-gate int 561*0Sstevel@tonic-gate usb_set_device_pwrlvl0(dev_info_t *dip) 562*0Sstevel@tonic-gate { 563*0Sstevel@tonic-gate return (usba10_usb_set_device_pwrlvl0(dip)); 564*0Sstevel@tonic-gate } 565*0Sstevel@tonic-gate 566*0Sstevel@tonic-gate 567*0Sstevel@tonic-gate int 568*0Sstevel@tonic-gate usb_set_device_pwrlvl1(dev_info_t *dip) 569*0Sstevel@tonic-gate { 570*0Sstevel@tonic-gate return (usba10_usb_set_device_pwrlvl1(dip)); 571*0Sstevel@tonic-gate } 572*0Sstevel@tonic-gate 573*0Sstevel@tonic-gate 574*0Sstevel@tonic-gate int 575*0Sstevel@tonic-gate usb_set_device_pwrlvl2(dev_info_t *dip) 576*0Sstevel@tonic-gate { 577*0Sstevel@tonic-gate return (usba10_usb_set_device_pwrlvl2(dip)); 578*0Sstevel@tonic-gate } 579*0Sstevel@tonic-gate 580*0Sstevel@tonic-gate 581*0Sstevel@tonic-gate int 582*0Sstevel@tonic-gate usb_set_device_pwrlvl3(dev_info_t *dip) 583*0Sstevel@tonic-gate { 584*0Sstevel@tonic-gate return (usba10_usb_set_device_pwrlvl3(dip)); 585*0Sstevel@tonic-gate } 586*0Sstevel@tonic-gate 587*0Sstevel@tonic-gate 588*0Sstevel@tonic-gate int 589*0Sstevel@tonic-gate usb_async_req( 590*0Sstevel@tonic-gate dev_info_t *dip, 591*0Sstevel@tonic-gate void (*func)(void *), 592*0Sstevel@tonic-gate void *arg, 593*0Sstevel@tonic-gate usb_flags_t flag) 594*0Sstevel@tonic-gate { 595*0Sstevel@tonic-gate return (usba10_usb_async_req(dip, func, arg, flag)); 596*0Sstevel@tonic-gate } 597*0Sstevel@tonic-gate 598*0Sstevel@tonic-gate 599*0Sstevel@tonic-gate int 600*0Sstevel@tonic-gate usb_register_event_cbs( 601*0Sstevel@tonic-gate dev_info_t *dip, 602*0Sstevel@tonic-gate usb_event_t *usb_evt_data, 603*0Sstevel@tonic-gate usb_flags_t flags) 604*0Sstevel@tonic-gate { 605*0Sstevel@tonic-gate return (usba10_usb_register_event_cbs(dip, usb_evt_data, flags)); 606*0Sstevel@tonic-gate } 607*0Sstevel@tonic-gate 608*0Sstevel@tonic-gate 609*0Sstevel@tonic-gate void 610*0Sstevel@tonic-gate usb_unregister_event_cbs( 611*0Sstevel@tonic-gate dev_info_t *dip, 612*0Sstevel@tonic-gate usb_event_t *usb_evt_data) 613*0Sstevel@tonic-gate { 614*0Sstevel@tonic-gate usba10_usb_unregister_event_cbs(dip, usb_evt_data); 615*0Sstevel@tonic-gate } 616*0Sstevel@tonic-gate 617*0Sstevel@tonic-gate 618*0Sstevel@tonic-gate void 619*0Sstevel@tonic-gate usb_fail_checkpoint( 620*0Sstevel@tonic-gate dev_info_t *dip, 621*0Sstevel@tonic-gate usb_flags_t flags) 622*0Sstevel@tonic-gate { 623*0Sstevel@tonic-gate usba10_usb_fail_checkpoint(dip, flags); 624*0Sstevel@tonic-gate } 625*0Sstevel@tonic-gate 626*0Sstevel@tonic-gate #ifdef DEBUG 627*0Sstevel@tonic-gate 628*0Sstevel@tonic-gate void usb_dprintf4( 629*0Sstevel@tonic-gate uint_t mask, 630*0Sstevel@tonic-gate usb_log_handle_t handle, 631*0Sstevel@tonic-gate char *fmt, ...) 632*0Sstevel@tonic-gate { 633*0Sstevel@tonic-gate va_list ap; 634*0Sstevel@tonic-gate 635*0Sstevel@tonic-gate va_start(ap, fmt); 636*0Sstevel@tonic-gate (void) usba10_usba_vlog(handle, USB_LOG_L4, mask, fmt, ap); 637*0Sstevel@tonic-gate va_end(ap); 638*0Sstevel@tonic-gate } 639*0Sstevel@tonic-gate 640*0Sstevel@tonic-gate 641*0Sstevel@tonic-gate void usb_dprintf3( 642*0Sstevel@tonic-gate uint_t mask, 643*0Sstevel@tonic-gate usb_log_handle_t handle, 644*0Sstevel@tonic-gate char *fmt, ...) 645*0Sstevel@tonic-gate { 646*0Sstevel@tonic-gate va_list ap; 647*0Sstevel@tonic-gate 648*0Sstevel@tonic-gate va_start(ap, fmt); 649*0Sstevel@tonic-gate (void) usba10_usba_vlog(handle, USB_LOG_L3, mask, fmt, ap); 650*0Sstevel@tonic-gate va_end(ap); 651*0Sstevel@tonic-gate } 652*0Sstevel@tonic-gate 653*0Sstevel@tonic-gate 654*0Sstevel@tonic-gate void usb_dprintf2( 655*0Sstevel@tonic-gate uint_t mask, 656*0Sstevel@tonic-gate usb_log_handle_t handle, 657*0Sstevel@tonic-gate char *fmt, ...) 658*0Sstevel@tonic-gate { 659*0Sstevel@tonic-gate va_list ap; 660*0Sstevel@tonic-gate 661*0Sstevel@tonic-gate va_start(ap, fmt); 662*0Sstevel@tonic-gate (void) usba10_usba_vlog(handle, USB_LOG_L2, mask, fmt, ap); 663*0Sstevel@tonic-gate va_end(ap); 664*0Sstevel@tonic-gate } 665*0Sstevel@tonic-gate 666*0Sstevel@tonic-gate #endif 667*0Sstevel@tonic-gate 668*0Sstevel@tonic-gate void usb_dprintf1( 669*0Sstevel@tonic-gate uint_t mask, 670*0Sstevel@tonic-gate usb_log_handle_t handle, 671*0Sstevel@tonic-gate char *fmt, ...) 672*0Sstevel@tonic-gate { 673*0Sstevel@tonic-gate va_list ap; 674*0Sstevel@tonic-gate 675*0Sstevel@tonic-gate va_start(ap, fmt); 676*0Sstevel@tonic-gate (void) usba10_usba_vlog(handle, USB_LOG_L1, mask, fmt, ap); 677*0Sstevel@tonic-gate va_end(ap); 678*0Sstevel@tonic-gate } 679*0Sstevel@tonic-gate 680*0Sstevel@tonic-gate 681*0Sstevel@tonic-gate 682*0Sstevel@tonic-gate void usb_dprintf0( 683*0Sstevel@tonic-gate uint_t mask, 684*0Sstevel@tonic-gate usb_log_handle_t handle, 685*0Sstevel@tonic-gate char *fmt, ...) 686*0Sstevel@tonic-gate { 687*0Sstevel@tonic-gate va_list ap; 688*0Sstevel@tonic-gate 689*0Sstevel@tonic-gate va_start(ap, fmt); 690*0Sstevel@tonic-gate (void) usba10_usba_vlog(handle, USB_LOG_L4, mask, fmt, ap); 691*0Sstevel@tonic-gate va_end(ap); 692*0Sstevel@tonic-gate } 693*0Sstevel@tonic-gate 694*0Sstevel@tonic-gate usb_log_handle_t 695*0Sstevel@tonic-gate usb_alloc_log_handle( 696*0Sstevel@tonic-gate dev_info_t *dip, 697*0Sstevel@tonic-gate char *name, 698*0Sstevel@tonic-gate uint_t *errlevel, 699*0Sstevel@tonic-gate uint_t *mask, 700*0Sstevel@tonic-gate uint_t *instance_filter, 701*0Sstevel@tonic-gate uint_t show_label, 702*0Sstevel@tonic-gate usb_flags_t flags) 703*0Sstevel@tonic-gate { 704*0Sstevel@tonic-gate return (usba10_usb_alloc_log_handle( 705*0Sstevel@tonic-gate dip, name, errlevel, mask, instance_filter, show_label, flags)); 706*0Sstevel@tonic-gate } 707*0Sstevel@tonic-gate 708*0Sstevel@tonic-gate 709*0Sstevel@tonic-gate void 710*0Sstevel@tonic-gate usb_free_log_handle(usb_log_handle_t handle) 711*0Sstevel@tonic-gate { 712*0Sstevel@tonic-gate usba10_usb_free_log_handle(handle); 713*0Sstevel@tonic-gate } 714*0Sstevel@tonic-gate 715*0Sstevel@tonic-gate 716*0Sstevel@tonic-gate int 717*0Sstevel@tonic-gate usb_log( 718*0Sstevel@tonic-gate usb_log_handle_t handle, 719*0Sstevel@tonic-gate uint_t level, 720*0Sstevel@tonic-gate uint_t mask, 721*0Sstevel@tonic-gate char *fmt, ...) 722*0Sstevel@tonic-gate { 723*0Sstevel@tonic-gate va_list ap; 724*0Sstevel@tonic-gate int rval; 725*0Sstevel@tonic-gate 726*0Sstevel@tonic-gate va_start(ap, fmt); 727*0Sstevel@tonic-gate rval = usba10_usba_vlog(handle, level, mask, fmt, ap); 728*0Sstevel@tonic-gate va_end(ap); 729*0Sstevel@tonic-gate 730*0Sstevel@tonic-gate return (rval); 731*0Sstevel@tonic-gate } 732*0Sstevel@tonic-gate 733*0Sstevel@tonic-gate 734*0Sstevel@tonic-gate 735*0Sstevel@tonic-gate int 736*0Sstevel@tonic-gate usb_log_descr_tree( 737*0Sstevel@tonic-gate usb_client_dev_data_t *dev_data, 738*0Sstevel@tonic-gate usb_log_handle_t log_handle, 739*0Sstevel@tonic-gate uint_t level, 740*0Sstevel@tonic-gate uint_t mask) 741*0Sstevel@tonic-gate { 742*0Sstevel@tonic-gate return (usba10_usb_log_descr_tree(dev_data, log_handle, level, mask)); 743*0Sstevel@tonic-gate } 744*0Sstevel@tonic-gate 745*0Sstevel@tonic-gate 746*0Sstevel@tonic-gate int 747*0Sstevel@tonic-gate usb_print_descr_tree( 748*0Sstevel@tonic-gate dev_info_t *dip, 749*0Sstevel@tonic-gate usb_client_dev_data_t *dev_data) 750*0Sstevel@tonic-gate { 751*0Sstevel@tonic-gate return (usba10_usb_print_descr_tree(dip, dev_data)); 752*0Sstevel@tonic-gate } 753*0Sstevel@tonic-gate 754*0Sstevel@tonic-gate 755*0Sstevel@tonic-gate int 756*0Sstevel@tonic-gate usb_check_same_device( 757*0Sstevel@tonic-gate dev_info_t *dip, 758*0Sstevel@tonic-gate usb_log_handle_t log_handle, 759*0Sstevel@tonic-gate int log_level, 760*0Sstevel@tonic-gate int log_mask, 761*0Sstevel@tonic-gate uint_t check_mask, 762*0Sstevel@tonic-gate char *device_string) 763*0Sstevel@tonic-gate { 764*0Sstevel@tonic-gate return (usba10_usb_check_same_device( 765*0Sstevel@tonic-gate dip, log_handle, log_level, log_mask, check_mask, device_string)); 766*0Sstevel@tonic-gate } 767*0Sstevel@tonic-gate 768*0Sstevel@tonic-gate 769*0Sstevel@tonic-gate const char * 770*0Sstevel@tonic-gate usb_str_cr(usb_cr_t cr) 771*0Sstevel@tonic-gate { 772*0Sstevel@tonic-gate return (usba10_usb_str_cr(cr)); 773*0Sstevel@tonic-gate } 774*0Sstevel@tonic-gate 775*0Sstevel@tonic-gate 776*0Sstevel@tonic-gate char * 777*0Sstevel@tonic-gate usb_str_cb_flags( 778*0Sstevel@tonic-gate usb_cb_flags_t cb_flags, 779*0Sstevel@tonic-gate char *buffer, 780*0Sstevel@tonic-gate size_t length) 781*0Sstevel@tonic-gate { 782*0Sstevel@tonic-gate return (usba10_usb_str_cb_flags(cb_flags, buffer, length)); 783*0Sstevel@tonic-gate } 784*0Sstevel@tonic-gate 785*0Sstevel@tonic-gate 786*0Sstevel@tonic-gate const char * 787*0Sstevel@tonic-gate usb_str_pipe_state(usb_pipe_state_t state) 788*0Sstevel@tonic-gate { 789*0Sstevel@tonic-gate return (usba10_usb_str_pipe_state(state)); 790*0Sstevel@tonic-gate } 791*0Sstevel@tonic-gate 792*0Sstevel@tonic-gate 793*0Sstevel@tonic-gate const char * 794*0Sstevel@tonic-gate usb_str_dev_state(int state) 795*0Sstevel@tonic-gate { 796*0Sstevel@tonic-gate return (usba10_usb_str_dev_state(state)); 797*0Sstevel@tonic-gate } 798*0Sstevel@tonic-gate 799*0Sstevel@tonic-gate 800*0Sstevel@tonic-gate const char * 801*0Sstevel@tonic-gate usb_str_rval(int rval) 802*0Sstevel@tonic-gate { 803*0Sstevel@tonic-gate return (usba10_usb_str_rval(rval)); 804*0Sstevel@tonic-gate } 805*0Sstevel@tonic-gate 806*0Sstevel@tonic-gate 807*0Sstevel@tonic-gate int 808*0Sstevel@tonic-gate usb_rval2errno(int rval) 809*0Sstevel@tonic-gate { 810*0Sstevel@tonic-gate return (usba10_usb_rval2errno(rval)); 811*0Sstevel@tonic-gate } 812*0Sstevel@tonic-gate 813*0Sstevel@tonic-gate 814*0Sstevel@tonic-gate usb_serialization_t 815*0Sstevel@tonic-gate usb_init_serialization( 816*0Sstevel@tonic-gate dev_info_t *s_dip, 817*0Sstevel@tonic-gate uint_t flag) 818*0Sstevel@tonic-gate { 819*0Sstevel@tonic-gate return (usba10_usb_init_serialization(s_dip, flag)); 820*0Sstevel@tonic-gate } 821*0Sstevel@tonic-gate 822*0Sstevel@tonic-gate 823*0Sstevel@tonic-gate void 824*0Sstevel@tonic-gate usb_fini_serialization(usb_serialization_t usb_serp) 825*0Sstevel@tonic-gate { 826*0Sstevel@tonic-gate usba10_usb_fini_serialization(usb_serp); 827*0Sstevel@tonic-gate } 828*0Sstevel@tonic-gate 829*0Sstevel@tonic-gate 830*0Sstevel@tonic-gate int 831*0Sstevel@tonic-gate usb_serialize_access( 832*0Sstevel@tonic-gate usb_serialization_t usb_serp, 833*0Sstevel@tonic-gate uint_t how_to_wait, 834*0Sstevel@tonic-gate uint_t delta_timeout) 835*0Sstevel@tonic-gate { 836*0Sstevel@tonic-gate return (usba10_usb_serialize_access( 837*0Sstevel@tonic-gate usb_serp, how_to_wait, delta_timeout)); 838*0Sstevel@tonic-gate } 839*0Sstevel@tonic-gate 840*0Sstevel@tonic-gate 841*0Sstevel@tonic-gate int 842*0Sstevel@tonic-gate usb_try_serialize_access( 843*0Sstevel@tonic-gate usb_serialization_t usb_serp, 844*0Sstevel@tonic-gate uint_t flag) 845*0Sstevel@tonic-gate { 846*0Sstevel@tonic-gate return (usba10_usb_try_serialize_access(usb_serp, flag)); 847*0Sstevel@tonic-gate } 848*0Sstevel@tonic-gate 849*0Sstevel@tonic-gate 850*0Sstevel@tonic-gate void 851*0Sstevel@tonic-gate usb_release_access(usb_serialization_t usb_serp) 852*0Sstevel@tonic-gate { 853*0Sstevel@tonic-gate usba10_usb_release_access(usb_serp); 854*0Sstevel@tonic-gate } 855*0Sstevel@tonic-gate 856*0Sstevel@tonic-gate #endif 857