/* * Compaq Hot Plug Controller Driver * Copyright 1995,2001 Compaq Computer Corporation * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or * NON INFRINGEMENT. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * * Send feedback to */ #ifndef _CPQPHPD_IOCTL #define MAXLEN 128 typedef struct BUS_INFO_STRUCT { int bus_number; int current_speed; int supported_speed; } public_bus_info; typedef struct SLOT_INFO_STRUCT { int slot_number; int is_hotpluggable; int power; int attention_status; int latch_status; int adapter_presence; int bit_mode; // 0 = 32-bit, 1 = 64-bit public_bus_info* bus; } public_slot_info; typedef struct FUNCTION_INFO_STRUCT { int is_bridge; int is_driverloaded; int supported_speed_mode; int vendor_id; int subvendor_id; int device_id; int subdevice_id; int bus_number; int device_number; int function_number; char device_name[MAXLEN]; char driver_name[MAXLEN]; } public_function_info; typedef struct ADAPTER_INFO_STRUCT{ char adapter_name[MAXLEN]; public_slot_info* slot; public_function_info* function; } public_adapter_info; typedef struct CPQUSNTILTN_STRUCT { u8 offset; u8 value; u8 bus; u8 device; u8 function; u8 type_of_request; u8 return_status; u8 physical_slot; public_function_info* adapter_info; } ioctl_data; typedef struct _message { int eb_serial_number; int message_id; } message; #define HPCD_DATA_LENGTH sizeof(struct _message) #define HPCD_BUFFER_LENGTH 32 //this number needs adjusting to the maximum amount of pending messages possible //If there is no upper bound on this, the implementation here is rather dangerous to use, as messages are not prevented to "step over" each other. #define GET_CTRL_STRUCTURE 1 #define GET_IRQ_ROUTE 2 #define ADD_BOARD 10 #define POWER_DOWN_BOARD 3 #define WRITE_REGISTER_VALUE 4 #define SET_SOGO 5 #define HARDWARE_TEST 8 #define SET_ATTENTION_STATUS 11 #define GET_STATUS 12 #endif